iptables ignora outras regras depois de adicionar a última regra

1

Eu escrevi essas regras em 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 é a rede externa e eth1 é a rede interna. Funciona corretamente, mas se eu adicionar esta regra:

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

todas as regras anteriores são ignoradas e o tráfego termina nesta última regra. Eu não entendo o porquê? Se eu remover essa regra e modificar regras na minha cadeia limitlog , por exemplo, de ACCEPT para DROP , ela também funcionará.

    
por Mato 29.03.2014 / 20:43

2 respostas

2

Seus limites são um pouco agressivos. Eu não vejo o ponto de ter regras que aceitam apenas um pacote por hora. Você pode ter definido alta velocidade, mas o balde só é recarregado em um a cada hora, e somente se você realmente recebeu menos de um pacote por hora.

A pior parte é que esses limites são aplicados a todos os pacotes, desde que você não os aceite se eles fizerem parte de um estado conntrack estabelecido / relacionado.

As estatísticas no -L dump sugerem que não é o problema, mas talvez você tenha feito o despejo antes dos testes. (você pode incluir estatísticas sobre -S adicionando -v ).

Não relacionado: há muitas maneiras de simplificar o seu conjunto de regras. Se a cadeia limitlog for chamada apenas por -i eth1 -o eth0 , você poderá omitir todos os -i e -o .

    
por 29.03.2014 / 22:13
0

Você precisa da regra state RELATED,ESTABLISHED para o tráfego de externo para interno e precisa de uma ou mais regras para permitir o tráfego interno para externo. Você pode permitir tudo ou permitir apenas determinados serviços.

Acho confuso para ACCEPT s em uma cadeia chamada * log .

Além disso, pode ser útil ter uma regra para TCPMSS para o tráfego interno para o exterior:

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

E você deve pensar sobre o que você deseja registrar e por quê.

    
por 30.03.2014 / 17:47