Configurando e configurando um firewall

1

Novato aqui. Eu encontrei as seguintes regras para definir um firewall, (do livro como funciona o Linux)

iptables -P INPUT DROP   # the default policy
iptables -A INPUT -s 127.0.0.1 -j ACCEPT     
iptables -A INPUT -p tcp '!' --syn -j ACCEPT   # accepting incoming 
connections from everywhere except those initiating a connection hence syn

Até aí tudo bem (ou parece ser). O problema surge quando tento adicionar uma regra para o DNS, eis o que tentei e não consegui acertar (um de cada vez):

INPUT -p udp --dport 53 --sport 1024:65535 -j ACCEPT
iptables -A INPUT -p udp --source-port 53 -s 127.0.1.1 -j ACCEPT
iptables -A INPUT -p udp --source-port 53 -j ACCEPT

Resultado desejado: Impedindo qualquer inicialização de conexões de fora (ssh, icmtp, ...), habilitando a pesquisa de DNS e navegação na web (curl, wget, telnet ...), eu não acho que seja relevante que eu possa executar localmente um servidor web ou um servidor de banco de dados ...

Qualquer ajuda seria apreciada.

    
por user10089632 22.02.2018 / 09:23

2 respostas

1

Permitir sessões estabelecidas Podemos permitir que sessões estabelecidas recebam tráfego:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Se a linha acima não funcionar, você pode estar em um VPS castrado cujo provedor não disponibilizou a extensão, caso em que uma versão inferior pode ser usada como último recurso:

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Permitindo tráfego de entrada em portas específicas

sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT

Tráfego de bloqueio

sudo iptables -A INPUT -j DROP

Ativando o loopback editando o iptables:

sudo iptables -I INPUT 1 -i lo -j ACCEPT

Registro de tráfego indesejado:

sudo iptables -I INPUT 4 -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

Para confirmar que as alterações foram feitas com sucesso:

iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROP       all  --  anywhere             anywhere

Use iptables -L -v para obter mais detalhes:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:ssh
    0     0 LOG        all  --  any    any     anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
    0     0 DROP       all  --  any    any     anywhere             anywhere

Esvaziar iptables:

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

Salvando iptables

Se você fosse reinicializar sua máquina agora, sua configuração do iptables desapareceria. Em vez de digitar isso toda vez que você reinicializar, você pode salvar a configuração e fazer com que ela seja inicializada automaticamente.

Salve suas regras de firewall em um arquivo

sudo sh -c "iptables-save > /etc/iptables.rules"

O script /etc/network/if-pre-up.d/iptablesload conterá:

#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0

e /etc/network/if-post-down.d/iptablessave conterão:

#!/bin/sh
iptables-save -c > /etc/iptables.rules
if [ -f /etc/iptables.downrules ]; then
   iptables-restore < /etc/iptables.downrules
fi
exit 0

Depois, certifique-se de conceder a ambos os scripts permissões de execução:

sudo chmod +x /etc/network/if-post-down.d/iptablessave
sudo chmod +x /etc/network/if-pre-up.d/iptablesload

Fonte

    
por user10089632 26.02.2018 / 10:48
1

Sugiro que você crie uma regra de entrada que permita todo o tráfego estabelecido e relacionado, como:

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Além disso, você deve sempre permitir seu dispositivo de loopback:

# Allow loopback interface to do anything.
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

Se sua política de saída padrão for aceita, a maioria dos problemas deve desaparecer. Caso contrário, você também deve adicionar:

$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

e abra as portas para HTTP (s), DNS, ICMP ou o que você precisar.

link

link

    
por AlexOnLinux 22.02.2018 / 13:10