iptables를 사용하여 방화벽 생성/구성

iptables를 사용하여 방화벽 생성/구성

iptables를 사용하여 방화벽을 설정하고 싶습니다.

서버는 httpd 서비스(httpd)를 운영하고 있습니다. OS는 Centos7이며, 아래 정보는 iptables-services를 설치하고, 아무것도 수정하지 않고 iptables를 시작한 후의 정보입니다.

[root@iptables ~]# iptables -nL --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

보시다시피 INPUT 체인 Line num3에서 서버가 열려 있는 것 같습니다.

하지만 브라우저를 통한 웹 페이지 접근이 작동하지 않습니다.

설정해야 할 것이 있나요?

iptables-save(주석에서 가져온) 출력으로 :

# Generated by iptables-save v1.4.21 on Thu Sep 16 13:41:53 2021
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [527:50260]
-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 FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Thu Sep 16 13:41:53 2021

답변1

짐작했던 대로 iptables -L추가 일치를 숨기면서도 iptables-save적나라한 진실을 보여줬다. 규칙 #3은 lo루프백 인터페이스에만 일치합니다. 이 방화벽은 외부로부터의 tcp/22(SSH) 연결만 허용합니다.

가장 간단한 해결 방법은 다음과 같습니다.

iptables -I INPUT 4 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 5 -p tcp --dport 443 -j ACCEPT

추가로 conntrack을 사용하여 필터링하고 두 규칙을 다중 포트가 있는 단일 규칙으로 결합할 수 있습니다.

iptables -I INPUT 4 -m conntrack --ctstate NEW -p tcp -m multiport --dports 80,443 -j ACCEPT -m comment --comment "HTTP/HTTPS service"

내가 추가한 설명도 확인하세요. 다음 용도로 댓글을 사용하세요.규칙을 적용하고 언젠가 방화벽이 50개 이상의 규칙을 말할 정도로 성장하면 이 조언에 대해 나에게 감사하게 될 것입니다.

을 사용하지 마십시오 -m state. 이것은 더 이상 사용되지 않습니다. 실제로 -m conntrack는 내부적으로 사용되며 이렇게 명시적으로 철자를 지정하는 것이 더 투명합니다.

을 사용하지 마십시오 iptables -L. 보시다시피 출력이 "더 예뻐" 보이고 여기서 장점은 끝나지만 필요한 세부 정보를 모두 제공하지도 못합니다. 의 출력은 iptables-save덜 예뻐 보이지만 모든 세부 사항을 보여주므로 항상 후자를 사용하십시오.

관련 정보