CentOS 6 - 포트 80을 통한 웹 액세스를 방지하는 iptables

CentOS 6 - 포트 80을 통한 웹 액세스를 방지하는 iptables

CentOS 6.2로 새 웹 서버를 설정하고 있는데 웹을 통해 연결할 수 없습니다. 모든 것이 올바르게 설정되어 있고 httpd.confApache가 실행 중이므로 iptables 문제라고 가정합니다.

다음 중 문제를 일으킬 수 있는 것이 있습니까?

편집: iptables를 중지하면 제대로 연결할 수 있으므로 아래에서 조정이 필요한 부분이 있어야 합니다. 이미 iptables -A INPUT -p tcp --dport 80 -j ACCEPTiptables를 실행하고 저장하고 다시 시작했지만 아무런 차이가 없었습니다.

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

아래 답변에 대한 조언을 따르십시오.

[root@staging ~]# iptables -N TCP
[root@staging ~]# iptables -A TCP -p tcp --dport 80 -j ACCEPT
[root@staging ~]# iptables-save > /etc/iptables/iptables.rules
-bash: /etc/iptables/iptables.rules: No such file or directory
[root@staging ~]# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:09:09 2012
*filter
:INPUT ACCEPT [91:7480]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [70:6556]
:TCP - [0:0]
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
COMMIT
# Completed on Thu Nov  8 14:09:09 2012
[root@staging ~]# iptables-restore
^C
[root@staging ~]# service iptables start
iptables: Applying firewall rules:                         [  OK  ]

추가 편집: iptables를 중지한 후 실행했을 때 iptables-save는 아무것도 표시하지 않았습니다! 결과는 다음과 같습니다.

# iptables-save
# Generated by iptables-save v1.4.7 on Thu Nov  8 14:39:10 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [28:3344]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 14:39:10 2012

답변1

출력 iptables-save에는 다음과 같이 표시되지 않은 규칙 3에 대한 추가 정보가 표시됩니다 iptables -L.

출력 에서 iptables -L다음과 같이 생각할 것입니다.모두트래픽이 허용됩니다:

ACCEPT     all  --  anywhere             anywhere

하지만 다음 iptables-save을 보여줍니다.

-A INPUT -i lo -j ACCEPT

이는 iptables실제로 모든 트래픽을 허용하지만 루프백 인터페이스( lo)에서만 허용된다는 의미입니다.

이것이 바로 HTTP 트래픽이 웹 서버에 도달하지 않는 이유입니다. 허용되는 유일한 트래픽은 규칙 1에서 설정된 연결, ping규칙 2: ICMP(예: -A INPUT -p icmp -j ACCEPT규칙 4: SSH) 에서 설정된 연결입니다 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT.

그러면 규칙 5에서 모든 것이 거부됩니다 -A INPUT -j REJECT --reject-with icmp-host-prohibited.

즉, 모든 HTTP 트래픽은 규칙 6에 도달하기도 전에 거부됩니다.-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

수정하려면규칙 6( )을 삭제합니다 -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT.

iptables -D INPUT 6

-I규칙 5에 따라 이를 삽입합니다(옵션 ).

iptables -I INPUT 5 -p tcp -m tcp --dport 80 -j ACCEPT

또는 이것을 가져오세요:

# Generated by iptables-save v1.4.6 on Thu Nov  8 16:46:28 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5423]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Nov  8 16:46:28 2012

파일에 저장하고 실행하면 됩니다 iptables-restore < file.

편집: OP는 다시 시작한 후 새 규칙이 손실되었음을 확인했습니다 iptables.

여기에 설명된 대로:http://wiki.centos.org/HowTos/Network/IPTables, 규칙을 업데이트할 때마다 규칙을 저장해야 하므로 다음을 실행하세요.

# /sbin/service iptables save

변경 사항을 영구적으로 적용합니다. 이제 수정된 규칙이 에 의해 로드됩니다 iptables.

답변2

나는 iptables의 전문가는 아니지만 내 설정 방식에 따라 포트 열기에 별도의 사용자 정의 체인을 사용했습니다.

iptables -N TCP
iptables -A TCP -p tcp --dport 80 -j ACCEPT

꼭 저장하세요

iptables-save > /etc/iptables/iptables.rules

로드하려면

iptables-restore < /etc/iptables/iptables.rules

^^ 데몬이 로드하지 않는 경우. 나는 당신이 위에서 설명한 방법을 이미 실행했다고 말한 것을 보았습니다(제가 중요하지 않다고 생각하는 INPUT 체인에 대해서만). 그래서 당신이 올바르게 저장하고 다시 로드하지 않을 수도 있다고 믿게 됩니다. iptables 데몬이 올바르게 실행되고 있나요? 위 명령을 실행하고 iptables -L을 사용한 후 새로 추가된 체인과 규칙이 표시되는지 확인하세요.


귀하의 추가 문제에 대한 응답입니다. iptables-save > location_of_rules CentOS에서 어디에 있는지 잘 모르겠습니다. 그러나 iptables -L을 사용하여 새 체인이 있는지 확인하십시오.

또한 귀하의 웹사이트에 액세스할 수 없는지 확인하는 것이 좋습니다. 이렇게 하려면 (컴퓨터의) 웹 브라우저로 가서 URL http: //127.0.0.1/을 입력하세요. <-:와 // 사이에 공백이 없으면 웹 사이트에 액세스할 수 있으면 라우터에 문제가 있는 것입니다. 방화벽에서 포트를 열려면 포트 전달이 필요합니다.http://en.wikipedia.org/wiki/Port_forwarding

관련 정보