나는 다음과 같은 규칙을 적어 두었습니다 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 ACCEPT
to) .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
무엇을 기록하고 싶은지, 왜 기록하고 싶은지 생각해야 합니다.