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귀하의 설정에 적합하다면 유사한 규칙도 추가하겠습니다 .

관련 정보