
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 -A
você está anexando regrasno finaldo conjunto de regras. Mas iptables -I
insere 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 ip6tables
regras semelhantes, se apropriado para sua configuração.