Diferença entre a política padrão do iptables para `DROP` e a inserção de uma política separada na cadeia de entrada para DROP todas as conexões

2

Estou tentando remover todas as conexões de entrada do meu servidor, exceto de redes específicas. Ao mesmo tempo, quero manter todas as conexões de saída do meu servidor para a rede externa (qualquer rede por qualquer protocolo) aberta. Ele está funcionando, fazendo abaixo duas alterações na cadeia INPUT:

Nota: o teste foi realizado com 3 servidores (VMs) com IPs na rede 192.168.0.0/24 e todas as regras definidas no server3 (IP: 192.168.0.3)

a. iptables -P INPUT DROP
b. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
[root@server3 ~]# iptables -nvL

Chain INPUT (policy DROP 124 packets, 22308 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  265 34603 ACCEPT     all  --  *      *       192.168.0.0/24       0.0.0.0/0           

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 433 packets, 34693 bytes)
 pkts bytes target     prot opt in     out     source               destination         

No entanto, minha primeira pergunta:

  1. Quando defini a primeira regra acima (alterando a política padrão da cadeia INPUT), ela interrompeu todas as conexões de saída (ssh, ping) do meu servidor (IP: 192.168.0.3). Por que isso está acontecendo, se minha política de cadeia OUTPUT padrão ainda é aceita e eu não tenho nenhuma regra definida na cadeia OUTPUT?

Eu queria conseguir a mesma coisa, não alterando a política padrão para a cadeia INPUT, assim:

c. iptables -I INPUT -j DROP
d. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

Mas ainda bloqueia todas as conexões de entrada / saída de / para meu servidor3. Isso me leva à minha segunda pergunta:

  1. Como estão as regras c.e a.funcionando de maneira diferente? Por favor, ajude na compreensão, como eu sou novo em firewalls linux.
dig_123
fonte

Respostas:

7

Se você tiver uma política DROP INPUT padrão, até os pacotes de resposta de suas conexões de saída serão descartados.

Para aceitá-los, adicione esta regra de entrada:

iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Quanto à sua última pergunta, no seu c and dexemplo (assumindo regras vazias antes desses comandos), você está definindo uma primeira regra drop everythinge uma segunda regra que aceitariam tráfego de uma determinada rede. IPTABLES pega uma correspondência o mais rápido possível, para que a primeira regra sempre corresponda (sem condição definida), para que todas as regras posteriores não sejam executadas. Exceções a uma regra devem ser definidas antes da regra.

No primeiro exemplo -P INPUT DROP, você está definindo uma última regra que irá capturar o que não foi correspondido antes, portanto, qualquer exceção adicionada será executada antes dessa regra padrão ( -P).

-I insere em uma determinada posição (por exemplo, no meu comando anterior, estou definindo a regra ESTABLISHED, RELATED como a primeira, para que corresponda, independentemente do que você definir depois disso.

-A anexa à lista de regras, portanto, se corresponderá imediatamente antes do padrão.

Se você deseja obter o mesmo que o primeiro exemplo com regras explícitas (como c and d), você deve trocar as posses.

NuTTyX
fonte
muito obrigado pela explicação elaborada. Agora, a importância das orderregras em cada CADEIA é mais clara. Mais uma consulta relacionada à ruleque você sugeriu. Comportará o mesmo que iptables -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT:?
dig_123
11
É o mesmo. Stateé "mais antigo" e parece que conntrackserá o padrão nos kernels mais recentes. Consulte serverfault.com/questions/358996/… para obter explicações mais detalhadas.
NuTTyX