마지막 규칙을 추가한 후 iptables는 다른 규칙을 무시합니다.

마지막 규칙을 추가한 후 iptables는 다른 규칙을 무시합니다.

나는 다음과 같은 규칙을 적어 두었습니다 iptables.

-A FORWARD -i eth1 -o eth0 -p icmp -m limit --limit 1/hour --limit-burst 5000 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -p udp -m limit --limit 1/hour --limit-burst 200 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -p tcp -m limit --limit 1/hour --limit-burst 200 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -m limit --limit 1/hour --limit-burst 100 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 443 -j limitlog
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 80 -j limitlog
-A FORWARD -i eth1 -o eth0 -p udp -m udp --dport 53 -j limitlog
-A FORWARD -i eth1 -o eth0 -p udp -m udp --dport 123 -j limitlog
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 21 -j limitlog
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 20 -j limitlog
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 22 -j limitlog
-A FORWARD -i eth1 -o eth0 -p tcp -m tcp --dport 5123 -j limitlog
-A FORWARD -i eth1 -o eth0 -p udp -m udp --dport 5123 -j limitlog
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 443 -j LOG --log-prefix "HTTPS z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 443 -m limit --limit 1/hour --limit-burst 900 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 80 -j LOG --log-prefix "HTTP z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 80 -m limit --limit 1/hour --limit-burst 960 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 53 -j LOG --log-prefix "DNS z HP: "
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 53 -m limit --limit 1/hour --limit-burst 360 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 123 -j LOG --log-prefix "NTP z HP: "
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 123 -m limit --limit 1/hour --limit-burst 300 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 21 -j LOG --log-prefix "FTP z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 21 -m limit --limit 1/hour --limit-burst 900 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 20 -j LOG --log-prefix "FTP DATA z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 20 -m limit --limit 1/hour --limit-burst 900 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 22 -j LOG --log-prefix "SSH/SCP z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 22 -m limit --limit 1/hour --limit-burst 900 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 5123 -j LOG --log-prefix "5123TCP z HP: "
-A limitlog -i eth1 -o eth0 -p tcp -m tcp --dport 5123 -m limit --limit 1/hour --limit-burst 300 -j ACCEPT
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 5123 -j LOG --log-prefix "5123UDP z HP: "
-A limitlog -i eth1 -o eth0 -p udp -m udp --dport 5123 -m limit --limit 1/hour --limit-burst 300 -j ACCEPT

eth0외부 네트워크이고 eth1내부 네트워크입니다. 잘 작동하지만 이 규칙을 추가하면 다음과 같습니다.

iptables -A FORWARD -i eth1 -o eth0 -j DROP

이전 규칙은 모두 무시되고 마지막 규칙에서 트래픽이 종료됩니다. 왜인지 이해가 안 돼요? 이 규칙을 제거하고 체인의 규칙을 수정하는 경우 에도 작동합니다 limitlog(예: from ACCEPTto) .DROP

답변1

귀하의 제한은 약간 공격적입니다. 시간당 하나의 패킷만 허용하도록 규칙을 만드는 것은 의미가 없습니다. 높은 버스트를 설정했을 수 있지만 버킷은 시간당 한 번만 요금을 청구하며, 실제로 시간당 패킷 1개 미만을 수신하는 경우에만 청구됩니다.

최악의 부분은 이러한 제한이 모든 패킷에 적용된다는 것입니다. 왜냐하면 이러한 제한이 설정/연결된 conntrack 상태의 일부인 경우 이를 허용하지 않기 때문입니다.

덤프의 통계 -L에 따르면 이는 문제가 아니지만 테스트하기 전에 덤프를 가져갔을 수도 있습니다. ( -S를 추가하여 통계를 포함 할 수 있습니다 -v).

관련 없음: 규칙 세트를 단순화하는 방법에는 여러 가지가 있습니다. limitlog체인이 호출되기만 하면 그 안의 -i eth1 -o eth0모든 -i합을 생략할 수 있습니다 -o.

답변2

state RELATED,ESTABLISHED외부에서 내부로의 트래픽에 대한 규칙이 필요하고 , 내부에서 외부로의 트래픽을 허용하는 하나 이상의 규칙이 필요합니다. 모든 서비스를 허용하거나 특정 서비스만 허용할 수 있습니다.

ACCEPT나는 * 혼란스럽다는 이름의 체인에서 s를 발견했습니다 log.

TCPMSS또한 내부에서 외부로의 트래픽에 대한 규칙을 만드는 것이 유용할 수 있습니다.

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

무엇을 기록하고 싶은지, 왜 기록하고 싶은지 생각해야 합니다.

관련 정보