IPTables – Permitir apenas tráfego de intervalos específicos

IPTables – Permitir apenas tráfego de intervalos específicos

Estou tentando bloquear todo o tráfego para um servidor web, exceto algumas sub-redes definidas. Verifiquei várias postagens e acreditei que o iptables estava configurado corretamente, mas por algum motivo o site ainda está acessível fora das sub-redes que defini no conjunto de regras. Alguém é capaz de lançar alguma luz sobre o que posso ter feito de errado? Estabeleci que a remoção da regra 3 impede que o site seja acessível. O próprio site fica em 10.10.0.0/16.

Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    any     10.10.0.0/16         anywhere            
2        0     0 ACCEPT     all  --  any    any     172.30.0.0/16        anywhere            
3        0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            

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

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  any    lo      anywhere             anywhere    

O objetivo será adicionar vários IPs públicos à lista de permissões e bloquear o site para que seja acessível apenas a alguns.

As regras foram adicionadas da seguinte forma:

iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT
iptables -I INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -I INPUT -s 172.30.0.0/16 -j ACCEPT
iptables -P INPUT DROP

Responder1

Oordem de regraé importante no iptables. Ao usar iptables -Avocê está anexando regrasno finaldo conjunto de regras. Mas iptables -Iinsere uma regra no topo do conjunto de regras, a menos que você especifique um número de linha (você não especificou). Como resultado, as regras não são avaliadas na ordem pretendida.

Aqui está um exemplo de configuração que deve funcionar, com base emesta postagem. Limpe suas regras antes para evitar duplicação.

iptables -P FORWARD DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -A INPUT -s 172.30.0.0/16 -j ACCEPT
# add some more whitelisting rules here
iptables -P INPUT DROP # Drop everything we don't accept

A terceira regra é importante:

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

caso contrário, o seu servidor não obterá respostas às conexões que iniciou, por exemplo, solicitações de DNS.

Por outro lado, o iptables funciona para IPv4, mas não para IPv6, portanto, se o seu servidor estiver habilitado para IPv6, você poderá ter clientes se conectando usandoIPv6. Isso é possível se eles estiverem se conectando por nome de host em vez de endereço IP e se o nome de host for resolvido para um endereço IPv6 válido em seu servidor. Você provavelmente deve estar ciente, mas muitas pessoas ainda não sabem que o iptables filtra o tráfego (e ataques) IPv6. Eu também adicionaria ip6tablesregras semelhantes, se apropriado para sua configuração.

informação relacionada