Entendendo / otimizando a saída do iptables

2

Abaixo está o resultado de iptables-save de um servidor Ubuntu Linux. Minha pergunta é, há algo errado ou sub-ótimo sobre isso?

Por exemplo, acredito que as regras são processadas em ordem, então as regras para as portas 80 e 3306 (www / mysql) devem ser movidas para o topo?

Além disso, o que fazem as regras após o DROP? Eles parecem semelhantes às regras acima.

# Generated by iptables-save v1.4.1.1 on Sun Feb 13 16:11:59 2011
*filter
:INPUT DROP [1:52]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [496336:22258327]
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT 
-A INPUT -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT 
-A INPUT -p udp -m udp --dport 69 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 69 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 25 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 110 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 143 -m state --state NEW -j ACCEPT 
-A INPUT -p udp -m udp --dport 123 -m state --state NEW -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 20 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT 
-A INPUT -p udp -m udp --dport 3306 -m state --state NEW -j ACCEPT 
-A INPUT -j DROP 
-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
COMMIT
# Completed on Sun Feb 13 16:11:59 2011
    
por DisgruntledGoat 13.02.2011 / 17:28

5 respostas

4

Eu provavelmente moveria a regra RELATED,ESTABLISHED ... ACCEPT na cadeia INPUT para o topo dessa cadeia. A menos que a maioria de suas conexões sejam extremamente de curta duração, eu aposto que a grande maioria dos pacotes de entrada fará parte de uma conexão e deverá ser ACEITADA por essa regra.

Para ter uma ideia melhor de onde os pacotes estão chegando no seu conjunto de regras, você pode executar isso:

iptables -t filter -L -n -v

e prestar especial atenção às contagens de pacotes e bytes. Você provavelmente notará que a regra que mencionei acima reivindicou o maior número de pacotes por uma margem bastante grande. Se quaisquer outras regras corresponderem a um número significativo de pacotes, você poderá otimizar seu conjunto de regras movendo-as para frente de regras menos "populares".

Por fim, noto que sua cadeia de saída tem a política ACCEPT. Isso torna as regras ACCEPT na cadeia OUTPUT redundantes e devem ser removidas. Da mesma forma, como sua política de cadeia INPUT é DROP, a regra final DROP na cadeia INPUT é desnecessária.

    
por 13.02.2011 / 19:59
0

Em geral, organizar as regras para que você saia rapidamente do firewall é uma coisa boa. Se a maior parte do tráfego for para as portas 80 e 3306, elas devem, como você sugere, ser maiores na lista da tabela INPUT.

Iptables funciona em tabelas. Você tem 3, INPUT, FORWARD e OUTPUT. O comando DROP está na tabela INPUT. As regras após o DROP são para a cadeia OUTPUT, portanto, elas serão processadas somente para pacotes de saída. Eles podem ser removidos, pois a política da tabela OUTPUT é ACCEPT e eles são regras ACCEPT.

    
por 13.02.2011 / 17:43
0
  1. Por que -A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT não foi dividido em NEW / REL, EST como outros?
  2. Muitos --state NEW são redundantes, por que a CPU decide se foi NEW de cada vez (?). É melhor você criar uma cadeia adicional 'INPUT.NEW' e usar o único -A INPUT -m state --state NEW -j INPUT.NEW para enviar pacotes para ela.
  3. INPUT.NEW, em seguida, pode ser preenchido com comparações de porta. O número de linhas pode ser reduzido se você usar -m multiport .
  4. Aceitar todos os ICMPs é inseguro, pois significa não apenas solicitações de eco. Selecione apenas os ICMPs que você pode ter permitido (isso pode ser apenas alguns como apenas solicitações de eco). E lembre-se que outros ICMPs legítimos legítimos protos (TCP para e. G.) Seriam tratados com RELATED de qualquer maneira.
  5. Há pouco sentido (se houver), permitindo que o OUTPUT seja apenas NEW,RELATED,ESTABLISHED . Permita-o sem subdividir.
por 13.02.2011 / 17:58
0

Parece bom. Gostaria de soltar o aceitar na porta 20, pois deve ser tratado como um pacote relacionado a uma conexão FTP. Eu normalmente coloco a porta 123 como a primeira verificação para minimizar a latência do NTP.

Para a cadeia OUTPUT, apenas as regras DROP ou REJECT farão sentido. As regras de saída existentes não fazem nada além de duplicar a política.

Você pode querer olhar para seus contadores e ajustar a ordem das regras de acordo.

Considere o uso de cadeias diferentes para novas conexões em cada interface.

Considere o registro de pacotes não aceitos.

O uso de uma ferramenta como Shorewall para criar o firewall pode facilitar a colocação de tudo no lugar.

    
por 13.02.2011 / 18:18
0

Em vez de usar uma combinação de regra explícita por protocolo / porta, sugiro usar ipset .

Faça 2 conjuntos, um para TCP e UDP:

ipset -N Allowed_TCP_Ports portmap --from 0 --to 65535
ipset -N Allowed_UDP_Ports portmap --from 0 --to 65535

Preencha cada conjunto:

for p in $TCP_PORTS; do ipset -A Allowed_TCP_Ports; done
for p in $UDP_PORTS; do ipset -A Allowed_UDP_Ports; done

Você pode simplificar suas regras relacionadas a portas em apenas duas regras:

-A INPUT -p tcp -m set --match-set Allowed_TCP_Ports dst -j ACCEPT 
-A INPUT -p udp -m set --match-set Allowed_UDP_Ports dst -j ACCEPT 

Observação: estou removendo -m state --state NEW correspondências. Quero dizer, para quê? Após a regra -m state --state RELATED,ESTABLISHED , os pacotes all são NEW ou INVALID.

Nota 2: O pacote ipset do Ubuntu é bollixado; você deve baixar e instalar a partir da fonte. Eu expliquei como no meu blog. Você pode lê-lo aqui: link .

    
por 08.03.2011 / 10:28