1 votes

Règles IPtables pour bloquer une plage d'adresses IP

J'ai appliqué les règles suivantes d'un fichier texte appelé "iptables.save" à iptables.

Mais à mon grand désarroi, j'ai constaté que l'adresse IP 107.22.26.176 est toujours en mesure d'accéder à mon serveur via TCP.

Qu'ai-je fait de mal ? L'ordre des règles est-il incorrect ?

Merci de vos conseils.

iptables.save
===================

*filter

-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
-A INPUT -s 107.20.0.0/14 -j DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT

Update1 : Voici la sortie de iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             loopback/8          reject-with icmp-port-unreachable 

DROP       all  --  ec2-107-20-0-0.compute-1.amazonaws.com/14  anywhere            

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www 
ACCEPT     icmp --  anywhere             anywhere            icmp echo-request 
LOG        all  --  anywhere             anywhere            limit: avg 5/min burst 5 LOG level debug prefix `iptables denied: ' 
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere 

Update2 : Je pense savoir pourquoi. J'utilise Cloudflare pour résoudre mon nom de domaine, donc iptables ne voit que les adresses IP de Cloudflare au lieu de celles des visiteurs. Ma question est la suivante : existe-t-il un moyen pour qu'iptables puisse voir les vraies adresses IP ? Je vous remercie.

1voto

Linus Swälas Points 131

Pour répondre à la deuxième question, votre proxy inverse (je suppose que c'est ce qu'est cloudflare) devrait vous fournir un en-tête HTTP indiquant l'IP de connexion réelle - x-forwarded-for.

http://en.wikipedia.org/wiki/X-Forwarded-For

Cependant, cela signifie qu'iptables n'est pas le bon outil pour ce travail. Vous devez filtrer ces connexions au niveau de l'application (dans la configuration de votre serveur web, en fonction de la valeur de l'en-tête http). Ou peut-être que cloudflare a son propre moyen de bloquer les IP au niveau du périmètre.

0voto

La première règle d'ENTRÉE ne doit pas être "Accepter tout". Toutes les autres règles perdent alors leur effet. Essayez de mettre la première règle de iptables.save à la fin ou supprimez-la. Ensuite, exécutez à nouveau la commande restore.

Vous pouvez également entrer dans le système :

iptables -D INPUT -i lo -j ACCEPT

dans le terminal

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X