iptables설정 건드렸는데 웹에 접속이 안되요...

dvvbstation의 이미지

localhost하면 아파치 서버 페이지는 열리는데
방화벽을 잘못 건드려서 그런지 방화벽을 켜놓으면 웹으로 접속할 수가 없습니다.
localhost페이지가 열린다는 것은 80번 포트가 열려 있다는 것이 아닌가요?
kt dns서버로의 핑은 나갑니다.
원래 방화벽에 80번포트는 명시되어 있지는 않았는데 웹 접속이 안되어 80번 포트를 여는 라인을 한 줄 추가하고
재시작하였습니다.

# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
COMMIT
~

재시작해도 마찬가지이네요.
iptables을 죽이면 인터넷이 되고... DNS서버를 못찾을리는 없겠지만 혹시나해서 resolv.conf파일을 확인하니
DNS서버 찾는 라인은 제대로 구성 되어 있네요.
위의 iptables에서 틀린 구문이 있는지, 혹시 빠진 구문이 있을지요?
아래는 secure로그인데 iptables가 꺼져 있을때 로그입니다.
로그를 잘 볼 줄 모르겠는데 혹시나 설명해주실 분 계시면 부탁드립니다. 누군가가 루트 권한을 획득한 건지 궁금합니다...

[root@localhost lock]# cat /var/log/secure
Aug 26 16:17:32 localhost usermod[24887]: change user `mysql' shell from `/bin/b
ash' to `/bin/nologin'
Aug 26 18:46:16 localhost useradd[16206]: new group: name=admin, GID=507
Aug 26 18:46:16 localhost useradd[16206]: new user: name=admin, UID=507, GID=507
, home=/home/admin, shell=/bin/false
Aug 26 19:45:07 localhost login: pam_unix(login:session): session closed for use
r root
Aug 26 19:45:15 localhost sshd[8237]: Received signal 15; terminating.
Aug 27 10:32:54 localhost sshd[8175]: Server listening on :: port 22.
Aug 27 10:32:54 localhost sshd[8175]: error: Bind to port 22 on 0.0.0.0 failed:
Address already in use.
Aug 27 10:41:20 localhost login: pam_unix(login:session): session opened for use
r root by LOGIN(uid=0)
Aug 27 10:41:20 localhost login: ROOT LOGIN ON tty1
Aug 27 13:35:12 localhost userhelper[25868]: pam_timestamp(system-config-httpd:s
ession): updated timestamp file `/var/run/sudo/root/tty1'
Aug 27 13:35:13 localhost userhelper[25871]: running '/usr/share/system-config-h
ttpd/system-config-httpd' with system_u:system_r:unconfined_t context
Aug 27 13:35:13 localhost userhelper[25871]: running '/usr/share/system-config-h
ttpd/system-config-httpd' with root privileges on behalf of 'root'
Aug 27 17:51:15 localhost userhelper[4268]: pam_timestamp(system-config-httpd:se
ssion): updated timestamp file `/var/run/sudo/root/tty1'
Aug 27 17:51:15 localhost userhelper[4271]: running '/usr/share/system-config-ht
tpd/system-config-httpd' with system_u:system_r:unconfined_t context
Aug 27 17:51:15 localhost userhelper[4271]: running '/usr/share/system-config-ht
tpd/system-config-httpd' with root privileges on behalf of 'root'
Aug 27 17:56:27 localhost userhelper[17806]: pam_timestamp(system-config-nfs:ses
sion): updated timestamp file `/var/run/sudo/root/tty1'
Aug 27 17:56:27 localhost userhelper[17862]: running '/usr/share/system-config-n
fs/system-config-nfs.py' with system_u:system_r:unconfined_t context
Aug 27 17:56:27 localhost userhelper[17862]: running '/usr/share/system-config-n
fs/system-config-nfs.py' with root privileges on behalf of 'root'
Aug 27 17:56:43 localhost userhelper[19385]: pam_timestamp(system-config-authent
ication:session): updated timestamp file `/var/run/sudo/root/tty1'
Aug 27 17:56:43 localhost userhelper[19396]: running '/usr/share/authconfig/auth
config-gtk.py' with system_u:system_r:unconfined_t context
Aug 27 17:56:43 localhost userhelper[19396]: running '/usr/share/authconfig/auth
config-gtk.py' with root privileges on behalf of 'root'
[root@localhost lock]# ps ax |grep iptables
17661 pts/1 R+ 0:00 grep iptables
[root@localhost lock]# cat /var/log/secure
Aug 26 16:17:32 localhost usermod[24887]: change user `mysql' shell from `/bin/bash' to `/bin/nologin '
Aug 26 18:46:16 localhost useradd[16206]: new group: name=admin, GID=507
Aug 26 18:46:16 localhost useradd[16206]: new user: name=admin, UID=507, GID=507, home=/home/admin, s hell=/bin/false
Aug 26 19:45:07 localhost login: pam_unix(login:session): session closed for user root
Aug 26 19:45:15 localhost sshd[8237]: Received signal 15; terminating.
Aug 27 10:32:54 localhost sshd[8175]: Server listening on :: port 22.
Aug 27 10:32:54 localhost sshd[8175]: error: Bind to port 22 on 0.0.0.0 failed: Address already in us e.
Aug 27 10:41:20 localhost login: pam_unix(login:session): session opened for user root by LOGIN(uid=0 )
Aug 27 10:41:20 localhost login: ROOT LOGIN ON tty1
Aug 27 13:35:12 localhost userhelper[25868]: pam_timestamp(system-config-httpd:session): updated time stamp file `/var/run/sudo/root/tty1'
Aug 27 13:35:13 localhost userhelper[25871]: running '/usr/share/system-config-httpd/system-config-ht tpd' with system_u:system_r:unconfined_t context
Aug 27 13:35:13 localhost userhelper[25871]: running '/usr/share/system-config-httpd/system-config-ht tpd' with root privileges on behalf of 'root'
Aug 27 17:51:15 localhost userhelper[4268]: pam_timestamp(system-config-httpd:session): updated times tamp file `/var/run/sudo/root/tty1'
Aug 27 17:51:15 localhost userhelper[4271]: running '/usr/share/system-config-httpd/system-config-htt pd' with system_u:system_r:unconfined_t context
Aug 27 17:51:15 localhost userhelper[4271]: running '/usr/share/system-config-httpd/system-config-htt pd' with root privileges on behalf of 'root'
Aug 27 17:56:27 localhost userhelper[17806]: pam_timestamp(system-config-nfs:session): updated timest amp file `/var/run/sudo/root/tty1'
Aug 27 17:56:27 localhost userhelper[17862]: running '/usr/share/system-config-nfs/system-config-nfs. py' with system_u:system_r:unconfined_t context
Aug 27 17:56:27 localhost userhelper[17862]: running '/usr/share/system-config-nfs/system-config-nfs. py' with root privileges on behalf of 'root'
Aug 27 17:56:43 localhost userhelper[19385]: pam_timestamp(system-config-authentication:session): upd ated timestamp file `/var/run/sudo/root/tty1'
Aug 27 17:56:43 localhost userhelper[19396]: running '/usr/share/authconfig/authconfig-gtk.py' with s ystem_u:system_r:unconfined_t context
Aug 27 17:56:43 localhost userhelper[19396]: running '/usr/share/authconfig/authconfig-gtk.py' with r oot privileges on behalf of 'root'
[root@localhost lock]#

시노의 이미지

제가보기에는

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
부분 이 잘못인거 같은데요

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
순서가 문제인거같습니다 ...

이래도 안되면 함 -i 옵션을 붙여서 인터페이스를 정해보세요

-A RH-Firewall-1-INPUT -i {인터페이스 이름} -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

------------------------------------------------
시노삐의 얼렁뚱땅 블로그

------------------------------------------------
Wanting someone more than looking at yourself is called addiction

dvvbstation의 이미지

답변주셔서 감사합니다.
말씀하신대로 인터페이스 옵션을 주어서도 수정해 보았으나 안되네요.^^
말씀해주신 iptables옵션에 대해 설명 부탁드려도 될까요..?

dvvbstation의 이미지

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
새롭게 알게 됬는데
iptables관련 문서를 읽다보니 iptables에 설정된 순서도 관계가 있다고 합니다.
icmp가 ping요청에 사용되는 프로토콜인데 이것을 거부하는 옵션인 것 같은데
핑이 잘된다는게 좀 신기했지만...
저 라인을 지우니 잘 되네요.
혹시 설명해 주실 분 계신가요..?

woonuk의 이미지

REJECT 거부하면서 상대쪽에 connection denied 라고 알려주겠다는 설정입니다.
--reject-with icmp-host-prohibited 없으면 상대쪽에는 connection timeout 이라고 나오게 될겁니다.
테스트 해보지 않아서 추측성이긴 합니다 ^^;;

지우기 보다는 ACCEPT 룰들 하위로 옮겨서, 허용되지 않은 요청은 룰 마지막에 거부하도록 하는쪽에 한표~

academic의 이미지

위에서부터 차례 차례 적용이 됩니다. 그러므로

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

이 부분 이후에 나온 것은 필요없이 추가한 꼴이 됩니다.

이 부분에서 모든 패킷이 reject되어버리고 그 뒷부분은 적용이 안되거든요.

따라서... 이 부분은 맨 마지막 commit 바로 윗 줄에 있어야 합니다.

그리고.....

왜 --state NEW 옵션을 줘서 아래처럼 복잡하게 하셨는지 궁금하네요.

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

간단하게 그냥 80 포트만 열어주던지, 아니면 443 포트랑 같이 열어주실거면 다음과 같이 해보시죠.

-A RH-Firewall-1-INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

dvvbstation의 이미지

답변 주셔서 감사합니다.
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
일단 위 구문은 로컬로 들어오는 핑을 거부한다는 것 같구요.
iptables는 순서대로 실행되므로 거부정책은 제일 마지막에 코딩해 줘야한다는 말씀으로 이해를 하였습니다.
방화벽에 대한 기초지식이 없어 이렇게 여쭤보게 되었음을 양해 드립니다.

academic님꼐서 말씀하신
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
구문은 솔직히 의미도 모르고 책에서 뒤져보고 적었습니다.

-m state가 어떤 의미인지, ESTABLISHED, RELATED가 어떤 의미인지도 모르면서요.

적어주신 아래의 구문은 웹과 아파치 서버 포트를 연다는 말씀이시지요.-m옵션으로 포트를 다중으로
지정할 수 있다니 놀랐습니다.
-A RH-Firewall-1-INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -dport 443 -j ACCEPT
와 같은 구문이겠지요.

iptables메뉴얼을 이제서야 처음부터 조금씩 읽고 있는데 영어실력도 시원치 않아 해석도 제대로 안되네요..
iptables을 쉽게 접할 수 있는 방법이 있을까요,,?

academic의 이미지

iptables 는 너무 복잡해서 저도 잘못 알고 있을 수 있습니다만, 용기를 내서 말씀드리면

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited 

위 부분에 어떤 패킷에 대해서 reject 하라는 말이 없잖아요?

따라서 ping이건 뭐건 들어오는 모든 패킷을 거부해버립니다.

그래서 그 이후에 적은 룰은 다 무시되는 거지요.

--reject-with icmp-host-prohibited

이 부분을 ping을 거부하라는 뜻으로 해석하신 것 같은데, 그 뜻이 아니라 위에 woonuk 님이 말씀해주신 뜻이 맞습니다. 모든 패킷을 reject하되 뭐라고 메시지를 보여주면서 reject를 할 것인가에 대한 지정입니다.

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

이렇게 state에 따라 설정을 세분하는 것은 ftp 방화벽 설정할 때는 유용할 수 있다고 보는데,

제 주관적인 견해로는 ftp를 제외한 일반적인 방화벽 설정할 때는 괜히 복잡하기만 해서 말씀드린 겁니다.

--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

monovision의 이미지

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

위 코드는 모든 패킷을 거부해버립니다.
의도하신 바와 같이 ping 패킷에 대해서만 적용을 하기 위해서는 아래와 같이 수정하여야 합니다.

-A RH-Firewall-1-INPUT -p icmp -j REJECT --reject-with icmp-host-prohibited

state 모듈은 conntrack 모듈을 사용을 할 때 같이 사용을 하며, NEW 는 처음 3-way handshake 가 이루어질때이며
ESTABLISHED, RELATED 는 이미 3-way handshake 가 이루어진 패킷들 즉, conntrack 에 등록된 정보들에 대해 사용합니다.
적어주실 룰들을 보았을때 DROP 을 하는 부분도 없거니와 별다르게 패킷을 QUEUE 로 보내어 제어를 하는 부분이 없으므로 state 모듈을 굳이 사용할 필요는 없어보입니다.

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

에서 정확하게 의도하신 바와 같이 하기 위해서는 두 룰의 순서를 바꾸어야 합니다. 다음과 같이 ^^

-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.