IPTables - 특정 범위의 트래픽만 허용

IPTables - 특정 범위의 트래픽만 허용

정의된 특정 서브넷을 제외하고 웹 서버에 대한 모든 트래픽을 차단하려고 합니다. 많은 게시물을 확인했고 내 iptables가 올바르게 설정되었다고 생각했지만 어떤 이유로 규칙 세트에 정의한 서브넷 외부에서 사이트에 계속 액세스할 수 있습니다. 내가 뭘 잘못하고 있는지 알려줄 수 있는 사람이 있나요? 규칙 3을 제거하면 사이트에 완전히 액세스할 수 없게 된다고 판단했습니다. 웹사이트 자체는 10.10.0.0/16에 있습니다.

Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    any     10.10.0.0/16         anywhere            
2        0     0 ACCEPT     all  --  any    any     172.30.0.0/16        anywhere            
3        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    lo      anywhere             anywhere    

목표는 화이트리스트에 등록된 다양한 공용 IP를 추가하고 특정 사람만 액세스할 수 있도록 웹사이트를 잠그는 것입니다.

다음 규칙을 추가합니다.

iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT
iptables -I INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -I INPUT -s 172.30.0.0/16 -j ACCEPT
iptables -P INPUT DROP

답변1

이것규칙 순서iptables에 문제가 있습니다. 다음을 사용하여 iptables -A규칙을 연결하고 있습니다.마지막에규칙 세트. 그러나 iptables -I줄 번호를 지정하지 않으면 규칙 세트 위에 규칙이 삽입됩니다. 따라서 규칙은 예상 순서대로 평가되지 않습니다.

다음은 다음을 기반으로 작동해야 하는 구성의 예입니다.이 게시물. 중복을 피하기 전에 규칙을 새로 고치세요.

iptables -P FORWARD DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -A INPUT -s 172.30.0.0/16 -j ACCEPT
# add some more whitelisting rules here
iptables -P INPUT DROP # Drop everything we don't accept

세 번째 규칙이 중요합니다.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

그렇지 않으면 서버는 DNS 요청과 같이 시작한 연결에 대한 응답을 받지 못합니다.

그런데 iptables는 IPv4에서는 작동하지만 IPv6에서는 작동하지 않으므로 서버가 IPv6을 지원하는 경우 클라이언트가 다음을 사용하여 연결될 수 있습니다.IPv6. 이는 IP 주소가 아닌 호스트 이름을 통해 연결하고 호스트 이름이 서버의 유효한 IPv6 주소로 확인되는 경우 가능합니다. 여러분도 알고 계시겠지만, 많은 사람들은 iptables가 실제로 IPv6 트래픽(및 공격)을 필터링할 수 있다는 사실을 여전히 모릅니다. ip6tables귀하의 설정에 적합하다면 비슷한 규칙도 추가하겠습니다.

관련 정보