GNU/Linux >> Tutoriels Linux >  >> Linux

16 trucs et astuces iptables pour les administrateurs système

Les noyaux Linux modernes sont livrés avec un framework de filtrage de paquets nommé Netfilter. Netfilter vous permet d'autoriser, de rejeter et de modifier le trafic entrant et sortant d'un système. Les iptables L'outil de ligne de commande de l'espace utilisateur s'appuie sur cette fonctionnalité pour fournir un pare-feu puissant, que vous pouvez configurer en ajoutant des règles pour former une politique de pare-feu. iptables peut être très intimidant avec son riche ensemble de fonctionnalités et sa syntaxe de commande baroque. Explorons-en quelques-uns et développons un ensemble de trucs et astuces iptables pour de nombreuses situations qu'un administrateur système pourrait rencontrer.

Évitez de vous enfermer

Scénario :vous allez apporter des modifications aux règles de stratégie iptables sur le serveur principal de votre entreprise. Vous voulez éviter de vous enfermer - et potentiellement tout le monde - dehors. (Cela coûte du temps et de l'argent et fait sonner votre téléphone.)

Conseil n° 1 :Effectuez une sauvegarde de votre configuration iptables avant de commencer à travailler dessus.

Sauvegardez votre configuration avec la commande :

/sbin/iptables-save > /root/iptables-works 

Astuce 2 :encore mieux, incluez un horodatage dans le nom du fichier.

Ajoutez l'horodatage avec la commande :

/sbin/iptables-save > /root/iptables-works-`date +%F` 

Vous obtenez un fichier avec un nom comme :

/root/iptables-works-2018-09-11 

Si vous faites quelque chose qui empêche votre système de fonctionner, vous pouvez le restaurer rapidement :

/sbin/iptables-restore < /root/iptables-works-2018-09-11 
ln –s /root/iptables-works-`date +%F` /root/iptables-works-latest 

Conseil n° 4 :placez des règles spécifiques en en haut de la politique et des règles génériques en bas.

Évitez les règles génériques comme celle-ci en haut des règles :

iptables -A INPUT -p tcp --dport 22 -j DROP 

Plus vous spécifiez de critères dans la règle, moins vous aurez de chances de vous enfermer. Au lieu de la règle très générique ci-dessus, utilisez quelque chose comme ceci :

iptables -A INPUT -p tcp --dport 22 –s 10.0.0.0/8 –d 192.168.100.101 -j DROP 

Cette règle ajoute (-A ) à l'INPUT chaîner une règle qui DROP tous les paquets provenant du bloc CIDR 10.0.0.0/8 sur TCP (-p tcp ) port 22 (--dport 22 ) destiné à l'adresse IP 192.168.100.101 (-d 192.168.100.101 ).

Il existe de nombreuses façons d'être plus précis. Par exemple, en utilisant -i eth0 limitera le traitement à une seule carte réseau sur votre serveur. De cette façon, les actions de filtrage n'appliqueront pas la règle à eth1 .

Conseil n° 5 :ajoutez votre adresse IP à la liste blanche en haut de vos règles de politique.

C'est une méthode très efficace pour ne pas vous enfermer. Tous les autres, pas tellement.

iptables -I INPUT -s <your IP> -j ACCEPT 

Vous devez mettre ceci en premier règle pour qu'il fonctionne correctement. Rappelez-vous, -je l'insère comme première règle ; -A l'ajoute à la fin de la liste.

Conseil n° 6 :Connaître et comprendre toutes les règles de votre politique actuelle.

Ne pas faire d'erreur en premier lieu est la moitié de la bataille. Si vous comprenez le fonctionnement interne de votre politique iptables, cela vous facilitera la vie. Dessinez un organigramme si vous le devez. N'oubliez pas non plus :ce que la politique fait et ce qu'elle est censée faire peut être deux choses différentes.

Configurer une politique de pare-feu de poste de travail

Scénario :Vous souhaitez configurer un poste de travail avec une politique de pare-feu restrictive.

Conseil n° 1 :définissez la stratégie par défaut sur DROP.

# Définir une politique par défaut de DROP
*filter
 :INPUT DROP [0:0]
 :FORWARD DROP [0:0]
:OUTPUT DROP [0 :0]

Conseil n° 2 :accordez aux utilisateurs le minimum de services nécessaires pour faire leur travail.

Les règles iptables doivent permettre au poste de travail d'obtenir une adresse IP, un masque de réseau et d'autres informations importantes via DHCP (-p udp --dport 67:68 --sport 67:68 ). Pour la gestion à distance, les règles doivent autoriser le SSH entrant (--dport 22 ), courrier sortant (--dport 25 ), DNS (--dport 53 ), ping sortant (-p icmp ), protocole de temps réseau (--dport 123 --sport 123 ) et HTTP sortant (--dport 80 ) et HTTPS (--dport 443 ).

# Définir une politique par défaut de DROP
*filter
 :INPUT DROP [0:0]
 :FORWARD DROP [0:0]
:OUTPUT DROP [0 :0]

# Accepter toutes les connexions associées ou établies
-I INPUT  1 -m state --state RELATED, ESTABLISHED -j ACCEPT
-I OUTPUT 1 -m state -- état RELATED, ESTABLISHED -j ACCEPT

# Autoriser tout le trafic sur l'interface de bouclage
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

# Autoriser les requêtes DHCP sortantes
-A OUTPUT –o eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT

# Autoriser SSH entrant
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW  -j ACCEPT

# Autoriser les e-mails sortants
-A OUTPUT -i eth0 -p tcp -m tcp --dport 25 -m state --state NEW  -j ACCEPT

# Recherches DNS sortantes
-A OUTPUT -o eth0 -p udp - m udp --dport 53 -j ACCEPT

# Requêtes PING sortantes
-A OUTPUT –o eth0 -p icmp -j ACCEPT

# Protocole de temps réseau sortant (NTP) requêtes
-A OUTPU T –o eth0 -p udp --dport 123 --sport 123 -j ACCEPT

# HTTP sortant
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 - m state --state NEW -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT

COMMIT

Restreindre une plage d'adresses IP

Scénario :Le PDG de votre entreprise pense que les employés passent trop de temps sur Facebook et ne font rien. Le PDG dit au CIO de faire quelque chose pour que les employés perdent du temps sur Facebook. Le CIO dit au CISO de faire quelque chose pour que les employés ne perdent pas de temps sur Facebook. Finalement, vous On vous dit que les employés perdent trop de temps sur Facebook et que vous devez faire quelque chose. Vous décidez de bloquer tout accès à Facebook. Tout d'abord, découvrez l'adresse IP de Facebook en utilisant l'hôte et whois commandes.

host -t a www.facebook.com
www.facebook.com est un alias pour star.c10r.facebook.com.
star.c10r.facebook.com a l'adresse 31.13.65.17
whois 31.13.65.17 | grep inetnum
inetnum :       31.13.64.0 - 31.13.127.255

Convertissez ensuite cette plage en notation CIDR à l'aide de la page Conversion CIDR en IPv4. Vous obtenez 31.13.64.0/18 . Pour empêcher l'accès sortant à www.facebook.com, saisissez :

iptables -A OUTPUT -p tcp -i eth0 –o eth1 –d 31.13.64.0/18 -j DROP 

Réglementer par temps

Scénario :La réaction des employés de l'entreprise concernant le refus d'accès à Facebook amène le PDG à céder un peu (cela et son assistante administrative lui rappelant qu'elle tient SA page Facebook à jour). Le PDG décide de n'autoriser l'accès à Facebook.com qu'à l'heure du déjeuner (12h à 13h). En supposant que la politique par défaut est DROP, utilisez les fonctionnalités de temps d'iptables pour ouvrir l'accès.

iptables –A SORTIE -p tcp -m multiport --dport http,https -i eth0 -o eth1 -m heure --timestart 12:00 --timestart 12:00 –timestop 13:00 –d 
31.13.64.0/18  -j ACCEPTER

Cette commande définit la stratégie pour autoriser (-j ACCEPT ) http et https (-m multiport --dport http,https ) entre midi (--timestart 12:00 ) et 13h (--timestop 13:00 ) sur Facebook.com (–d 31.13.64.0/18 ).

Réglementer par temps—Take 2

Scénario :pendant les temps d'arrêt planifiés pour la maintenance du système, vous devez refuser tout le trafic TCP et UDP entre 2 h et 3 h du matin afin que les tâches de maintenance ne soient pas interrompues par le trafic entrant. Cela prendra deux règles iptables :

iptables -A INPUT -p tcp -m time --timestart 02:00 --timestop 03:00 -j DROP 
iptables -A INPUT -p udp -m time --timestart 02:00 -- timestop 03:00 -j DROP

Avec ces règles, le trafic TCP et UDP (-p tcp et -p udp ) sont refusés (-j DROP ) entre 2h du matin (--timestart 02:00 ) et 3h du matin (--timestop 03:00 ) en entrée (-A INPUT ).

Limiter les connexions avec iptables

Scénario :Vos serveurs Web connectés à Internet sont attaqués par de mauvais acteurs du monde entier qui tentent de les DoS (Denial of Service). Pour atténuer ces attaques, vous limitez le nombre de connexions qu'une seule adresse IP peut avoir à votre serveur Web :

iptables –A INPUT –p tcp –syn -m multiport -–dport http,https –m connlimit -–connlimit-above 20 –j REJECT -–reject-with-tcp-reset 

Voyons ce que fait cette règle. Si un hôte fait plus de 20 (-–connlimit-above 20 ) nouvelles connexions (–p tcp –syn ) en une minute vers les serveurs Web (-–dport http,https ), rejeter la nouvelle connexion (–j REJECT ) et indiquez à l'hôte qui se connecte que vous refusez la connexion (-–reject-with-tcp-reset ).

Surveiller les règles iptables

Scénario :étant donné qu'iptables fonctionne sur la base de la "première correspondance gagnante" lorsque les paquets traversent les règles d'une chaîne, les règles fréquemment mises en correspondance doivent être proches du haut de la politique et les règles moins fréquemment mises en correspondance doivent être proches du bas. Comment savez-vous quelles règles sont le plus ou le moins traversées afin qu'elles puissent être classées plus près du haut ou du bas ?

Astuce n°1 :voyez combien de fois chaque règle a été atteinte.

Utilisez cette commande :

iptables -L -v -n –line-numbers 

La commande listera toutes les règles de la chaîne (-L ). Comme aucune chaîne n'a été spécifiée, toutes les chaînes seront listées avec une sortie détaillée (-v ) affichant les compteurs de paquets et d'octets au format numérique (-n ) avec des numéros de ligne au début de chaque règle correspondant à la position de cette règle dans la chaîne.

En utilisant le nombre de paquets et d'octets, vous pouvez ordonner les règles les plus fréquemment traversées vers le haut et les règles les moins fréquemment traversées vers le bas.

Astuce n° 2 :supprimez les règles inutiles.

Quelles règles n'obtiennent aucune correspondance ? Ceux-ci seraient de bons candidats pour être retirés de la politique. Vous pouvez le découvrir avec cette commande :

iptables -nvL | grep -v "0     0" 

Remarque :ce n'est pas une tabulation entre les zéros ; il y a cinq espaces entre les zéros.

Astuce n° 3 :Surveillez ce qui se passe.

Vous souhaitez surveiller ce qui se passe avec iptables en temps réel, comme avec top . Utilisez cette commande pour surveiller dynamiquement l'activité d'iptables et afficher uniquement les règles qui sont activement traversées :

watch --interval=5 'iptables -nvL | grep -v "0     0"' 

regarder exécute 'iptables -nvL | grep -v "0     0"' toutes les cinq secondes et affiche le premier écran de sa sortie. Cela vous permet de suivre l'évolution du nombre de paquets et d'octets au fil du temps.

Rapport sur iptables

Scénario :votre responsable pense que ce pare-feu iptables est tout simplement génial, mais un rapport d'activité quotidien serait encore mieux. Parfois, il est plus important de rédiger un rapport que de faire le travail.

Utilisez le filtre de paquets/pare-feu/analyseur de journaux IDS FWLogwatch pour créer des rapports basés sur les journaux de pare-feu iptables. FWLogwatch prend en charge de nombreux formats de journaux et offre de nombreuses options d'analyse. Il génère des résumés quotidiens et mensuels des fichiers journaux, ce qui permet à l'administrateur de la sécurité de gagner un temps considérable, de mieux contrôler la sécurité du réseau et de réduire les attaques inaperçues.

Voici un exemple de sortie de FWLogwatch :

Plus que juste ACCEPTER et ABANDONNER

Nous avons couvert de nombreuses facettes d'iptables, allant de la vérification que vous ne vous verrouillez pas lorsque vous travaillez avec iptables à la surveillance d'iptables en passant par la visualisation de l'activité d'un pare-feu iptables. Ceux-ci vous permettront de découvrir encore plus de trucs et astuces iptables.


Linux
  1. Top 5 des podcasts pour les actualités et astuces Linux

  2. Trucs et astuces pour utiliser CUPS pour imprimer avec Linux

  3. Trucs et astuces pour curl et wget

  4. 5 astuces rsync avancées pour les administrateurs système Linux

  5. Écrire des applications Python, créer des laboratoires Linux et plus de conseils pour les administrateurs système

Conseils/astuces Meld utiles pour les utilisateurs intermédiaires

Trucs et astuces pour sécuriser votre serveur Web Nginx

Trucs et astuces pour les administrateurs système et les opérations

19 trucs et astuces utiles pour la ligne de commande Linux

Trucs et astuces pour la ligne de commande Netstat

Trucs et astuces préférés de rsync