iptables: autorise certaines ips et bloque toutes les autres connexions

26

Comment autoriser certains IPS et bloquer toutes les autres connexions dans iptables?

David
la source
Comme Gilles le démontre, le concept se présente comme suit: Ajoutez des règles ACCEPTER pour chaque chose spécifique que vous souhaitez autoriser, que ce soit par IP source ou par d'autres qualifications, puis définissez la stratégie par défaut sur REJETER.
Caleb

Réponses:

27

J'ai écrit un article de blog sur les règles de base d'Iptables pour l'utilisateur de bureau il y a longtemps et vous devriez probablement le lire, ainsi que son article lié sur la conception d'un pare-feu avec état . Mais pré noyau 2.6.39 (qui inclut ipsetet vous voudrez peut-être l'utiliser pour la liste blanche des IP si vous avez plus de 10 à ajouter à la liste blanche (où 10 est arbitraire)).

Commencez par gérer les états que nous savons que nous voulons accepter ou supprimer, et les interfaces.

iptables -P FORWARD DROP # we aren't a router
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 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept

Si vous voulez juste faire une autorisation par IP uniquement, sans état

iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

vous êtes susceptible de rencontrer des problèmes en faisant cela, et je suggère d'utiliser l'état pour vous faciliter la vie. Par exemple, ne pas autoriser -i loet -o loentraînera certainement des problèmes pour certaines applications.

xénoterracide
la source
4
Plutôt que DROP, vous devriez REJETER les paquets indésirables, car cela facilite le diagnostic des problèmes et évite les délais d'attente. Voir Rejeter les paquets IP avec une erreur ICMP, ou simplement les supprimer?
Gilles 'SO- arrête d'être méchant'
J'ai essayé les deux configurations et KeePass2 ne démarre pas, une idée? Aussi, si je fais iptables -Fcela censé effacer toutes les règles, je ne peux même pas faire de ping sur
ubuntu.com
@PawelCioch pourquoi KeePass2 aurait-il quand même besoin d'une connexion Internet?
Alex
@Alex pour stocker le fichier DB dans l'emplacement distant, ce que je veux IP unique. Mais je comprends tout, la configuration est plus compliquée que l'exemple ici
Pawel Cioch
10

Voici un exemple (non testé!) Qui bloque uniquement les connexions entrantes . Les connexions via l'interface de bouclage, provenant de 192.168.3.x, ICMP, ou vers le port SSH sont autorisées. Toutes les autres connexions sont rejetées.

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
Gilles 'SO- arrête d'être méchant'
la source
@Gilles pour utiliser correctement les états RELATED et ESTABLISHED, vous devez faire correspondre le paquet initial comme un état NEW. lodans l'exemple ci-dessus est exclu de la correspondance d'état et toujours autorisé.
penguin359
@ penguin359: Pourriez-vous expliquer pourquoi le NOUVEAU est nécessaire? Je suis loin d'être un expert iptables, j'ai en partie copié ces règles depuis mon routeur domestique, ce qui ne correspond pas à NEW. D'après ce que je comprends, tout ce qui reste après la première règle est de nouveaux paquets (ou NON SUIVI) de toute façon. (Si je suis trop loin de la réalité et que vous ne pouvez pas l'expliquer dans un commentaire, postez vos versions avec des explications en guise de réponse et je supprimerai la mienne.)
Gilles 'SO- arrête d'être méchant'
@Gilles Je laisse toujours tomber l'état INVALIDE avant d'accepter quoi que ce soit ... ce qui fait que tout ce qui n'est pas invalide, LIÉ, ÉTABLI, doit être un état NOUVEAU Mais je ne connais aucune raison pour laquelle tout le reste doit spécifier NOUVEAU. En théorie, cependant, si vous ne gérez pas INVALID et que vous ne spécifiez pas NEW, vous pourriez finir par accepter INVALID. Mais une fois INVALID traité, il me semble que la vérification de l'état NEW sur chaque règle nécessite simplement plus de traitement pour le paquet.
xenoterracide
@Gilles aussi une politique de rejet par défaut est mauvaise, car elle envoie un paquet de rejet pour chaque paquet reçu, ce qui aggrave une attaque DOS.
xenoterracide
@xenoterracide: Bon point. Faut-il jamais utiliser REJECT? J'ai demandé: rejeter les paquets IP avec une erreur ICMP, ou simplement les supprimer?
Gilles 'SO- arrête d'être méchant'
7

La règle ci-dessous autorisera uniquement votre IP et bloquera toutes les autres IP sur le port 22 ou ssh. Testez avec un nouveau terminal avant de vous déconnecter.

iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
Ishtiyaque Noori
la source
3
merci pour la réponse succincte. Comment cela changerait-il si je veux autoriser quelques IP et plages d'adresses IP? Au lieu de puis yourIPaddress-je ajouter quelques adresses IP et plages? Et si j'utilise SSH sur un port non standard comme 2888, alors la commande changerait le 22dans votre exemple en 2288? En outre, cela bloquera-t-il également rsync, sftp, etc. sur ce serveur de toutes les adresses IP, à l'exception de celles autorisées?
PKHunter
1
Notez que cela -p tcpest important ici car --dportne fonctionne pas sans lui. Je suggérerais également d'utiliser -j REJECTau lieu de DROPcar REJECTrend le port identique au port fermé et DROPrend les paquets destinés à ce port troués noirs. En pratique, un attaquant distant peut détecter DROPdes ports configurés à partir de ports réellement fermés.
Mikko Rantalainen