Reduza pela metade as regras de firewall - uma regra de iptables para tcp e udp

12

Eu tenho várias regras de iptables no meu firewall que se parecem com isso:

iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT

Existe um atalho para ter duas regras - uma para tcp e outra para udp - para cada endereço? Quero dizer, posso fazer algo assim:

iptables -A zone_lan_forward -p tcp,udp -d 1.2.3.0/24 -j ACCEPT
Big McLargeHuge
fonte

Respostas:

22

Crie uma nova cadeia que aceite todos os pacotes TCP e UDP e salte para essa cadeia a partir das regras permissivas de IP / porta individuais:

iptables -N ACCEPT_TCP_UDP
iptables -A ACCEPT_TCP_UDP -p tcp -j ACCEPT
iptables -A ACCEPT_TCP_UDP -p udp -j ACCEPT

iptables -A zone_lan_forward -d 1.2.3.0/24 -j ACCEPT_TCP_UDP

Isso adiciona a sobrecarga de algumas linhas extras, mas reduz pela metade o número de regras TCP / UDP.

Eu não omitiria o -pargumento, porque você não está apenas abrindo o firewall para o ICMP, mas também qualquer outro protocolo. Na página de manual do iptables em -p:

O protocolo especificado pode ser tcp, udp, icmp ou all, ou pode ser um valor numérico, representando um desses protocolos ou um diferente. Um nome de protocolo de / etc / protocols também é permitido.

Você pode não estar escutando em todos os protocolos, exceto para TCP, UDP, ICMP e agora , mas quem sabe o que o futuro nos reserva. Seria uma prática ruim deixar o firewall aberto desnecessariamente.

Exoneração de responsabilidade: Os comandos iptables estão em cima da minha cabeça; Não tenho acesso a uma caixa para testá-los em caixas eletrônicos.

s.co.tt
fonte
Essa é uma solução muito elegante que não deixa o firewall aberto desnecessariamente.
Big McLargeHuge 17/05
4
Mas esse método de criação de nova cadeia falhará se a filtragem for feita através do número da porta de destino. Alguém pode sugerir como superar o problema acima mencionado?
Amor
@Amor Neste exemplo, se você usou -p alltodas as --dportregras da zone_lan_forwardcadeia, isso pode alcançar o que você está procurando. É claro que estou assumindo que não há outra maneira de entrar nessa cadeia com um protocolo não TCP / UDP devido à ACCEPT_TCP_UDPcadeia. Obviamente, essa é uma estratégia arriscada se várias pessoas tiverem acesso para modificar regras e alguém aparecer e editar suas regras sem entender essa sutileza.
Samuel Harmer
Opa. Não percebeu a ordem das correntes. Você precisaria mudar a ordem das cadeias neste exemplo também para o que eu acabei de dizer para funcionar corretamente. Então ACCEPT_TCP_UDPpula para o zone_lan_forwardqual pula para ACCEPT.
Samuel Harmer 24/11
2

Se você realmente não se importa com o tráfego ICMP (que você pode bloquear globalmente com uma regra de qualquer maneira), basta omitir o sinalizador -p e ele cobre todos os protocolos.

Nathan C
fonte
Devo me preocupar com o tráfego ICMP? Estou mais preocupado com o acesso HTTP.
Big McLargeHuge 17/05
Na verdade não. Você pode bloquear o ICMP (ping), se quiser, mas como ele está servindo tráfego HTTP de qualquer maneira, não faz muito sentido.
C # de Nathan C
@ NathanC, acho que o conselho para abrir TODAS as portas quando o OP está perguntando como reduzir suas regras pela metade pode levar a problemas, agora ou no futuro.
Jed Daniels #
@JedDaniels a opção -p especifica os protocolos e não as portas. A resposta abaixo tem uma alternativa se eles quiserem bloquear algo diferente de tcp & udp.
C # de Nathan C
@NathanC Sim, e remover o -p significa "abrir todos os protocolos, não apenas tcp ou udp", o que é imprudente, se não perigoso.
Jed Daniels