regra do iptables para permitir todo o tráfego originário localmente de saída?

11

Eu queria saber se alguém poderia me ajudar com a seguinte regra do iptables:

Gostaríamos de permitir QUALQUER e TODOS os locais de origem (como no servidor executando o iptables).

DNS, HTTP, etc ... tudo isso. Qualquer conexão iniciada pelo servidor executando iptables deve ser permitida.

Atualmente, estamos usando basicamente a política padrão OUTPUT, ACCEPT. Isso está correto? As entradas estão bloqueadas, portanto, suponho que isso signifique que as conexões (exceto aquelas que permitimos) não possam ser iniciadas porque serão descartadas antes que nosso lado atinja a política de SAÍDA?

Desculpe, minhas habilidades no iptables são fracas;)

Obrigado gentilmente.

anônimo-um
fonte

Respostas:

26

Você precisa de duas regras para fazer isso:

iptables -I OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Algumas notas.

  • Regras pré-existentes que você possa ter já podem fazer isso, mas têm uma aparência diferente.
  • Isso usa -Ipara forçar essas regras a serem as primeiras. iptablesregras são avaliadas de cima para baixo.
  • Os sinalizadores -oe -isignificam "fora" e "entrada", respectivamente. Substitua eth0pelo nome apropriado da interface Ethernet.
bahamat
fonte
nós temos os dois :) não mencionei o segundo porque, como eu disse ... minhas habilidades no iptables são molho fraco. obrigado pelo esclarecimento :)
anonymous-one
2
-d 0.0.0.0/0é redundante e não é necessário.
precisa saber é o seguinte
Ótima resposta. Mas agora sou capaz de executar ping no servidor e não entendo o porquê. Você pode explicar?
Daniel
@ Daniel Porque se você permitir apenas o tráfego de saída, a resposta do ping será descartada pelo filtro de pacotes quando chegar ao seu host. Para evitar isso, você também precisa permitir o tráfego de entrada associado à mesma sessão ou relacionado a qualquer tráfego de saída. Em outras palavras, como a resposta de ping está relacionada à solicitação de ping, isso deve ser permitido. Se houver uma solicitação de ping de entrada e nenhum ping de saída registrado na tabela de sessões, o pacote recebido será descartado. Espero que faça sentido!
bahamat 25/02/19
@ Bahamat: Depois que tentei novamente, descobri que precisava permitir o tráfego icmp explicitamente. E eu estava falando sobre poder executar ping no servidor, onde implementei as regras acima. Não é possível reproduzi-lo, talvez eu tenha cometido um erro em algum lugar. Obrigado mesmo assim.
Daniel
0

Atualmente, estamos usando basicamente a política padrão OUTPUT, ACCEPT.

Isso é suficiente para OUTPUT porque o Netfilter não precisa de regras especiais para iniciar o rastreamento de conexões com estado.

Mas se você deseja filtrar o tráfego de entrada de acordo com a política " negar padrão ", isso pode ser feito com a troca de INPUTcadeia para DROP:iptables -P INPUT DROP

Posteriormente, tudo seria definido com apenas 2 regras :

iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED

Preste atenção à regra que permite o tráfego de entrada na interface de loopback - como apontei na postagem do meu blog " Firewall mínimo para o usuário final ", a menos que seja permitido explicitamente, o tráfego de loopback não será tratado pela verificação de estado "estabelecida", em comparação com o retorno tráfego acabou, digamos eth0.

Para garantir que esse conjunto de regras mínimo seja carregado " como está " sem interferir com as regras que já podem estar lá, é conveniente fazer uso iptables-restorena sessão SHELL:

lptables-restore <<__EOF__
-P INPUT DROP
-A INPUT -j ACCEPT -i lo
-A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
__EOF__

Antes de fazer isso, verifique se você não cortará sua própria conexão de rede 1 , embora as sessões SSH já abertas continuem funcionando normalmente, as tentativas de abrir novas não funcionarão.

__

  1. Claro que você pode adicionar outras regras para permitir essas conexões. Pode ser tão simples quanto justo -A INPUT -j ACCEPT -p tcp --dport 22- não há necessidade de mexer -m stateaqui. Também não se esqueça de lptables-restorevoltar ao iptables-restoreantes de tentar;)
poige
fonte