iptables

Iptables pour les débutants

Iptables pour les débutants
Iptables est fondamentalement le principal pare-feu utilisé pour les systèmes Linux, il existe des alternatives comme nftables mais Iptables reste le principal, il est très flexible en acceptant les commandes directes de l'utilisateur, vous pouvez charger et décharger des règles selon vos besoins afin d'augmenter les politiques de votre pare-feu précision.

En fait, vous n'avez même pas besoin de connaître la syntaxe d'Iptable pour l'utiliser, vous disposez d'outils graphiques comme Firewall Builder qui peuvent rendre le processus d'apprentissage inutile, mais si le désir est d'augmenter les connaissances en administration Linux, Iptables est la première étape pour apprendre à pratiquement administrer la sécurité sous Linux et même faciliter la gestion des dispositifs de sécurité CISCO ou Fortigate et similaires.

Iptables vous permet essentiellement de demander à votre système d'accepter, de refuser ou de transférer une connexion en fonction des paramètres choisis, par exemple pour rediriger toutes les connexions vers le port X vers une adresse IP différente, pour bloquer toutes les connexions provenant d'une IP spécifique, d'une plage IP ou vers accepter toutes les connexions provenant d'adresses IP en liste blanche parmi de nombreuses autres fonctions.

Dans ce didacticiel, nous apprendrons comment protéger un serveur Web, comment transférer les connexions vers des adresses IP internes depuis notre réseau local et comment offrir des services spécifiques aux adresses IP en liste blanche uniquement.

Installation d'Iptables

Pour installer iptables sur les systèmes Debian/Ubuntu, exécutez simplement « apt update && apt install iptables » en tant que root ou avec « sudo » comme préfixe comme dans l'image suivante.

Ouverture des ports HTTP et HTTPS

Tout d'abord, ajoutons toutes les politiques ACCEPT en commençant par le serveur Web.

iptables -A INPUT -p tcp --dport 80 -j ACCEPTER
iptables -A ENTRÉE -p tcp --dport 443 -j ACCEPTER

Pour voir nos règles ajoutées, exécutez "iptables -L"

Où:

Iptables = appelle le programme
-UNE = ajoute une règle
CONTRIBUTION = trafic entrant
-p = protocole
-ddport = port de destination
-j = spécifiez la "cible", la cible est le type de politique : ACCEPT, DROP, QUEUE ou RETURN.

Ensuite, sur l'exemple de l'image ci-dessus, nous disons à Iptables d'ajouter une règle pour le trafic entrant via le protocole TCP et les ports 80 et 443 à accepter.

Nous pouvons modifier la commande pour accepter la connexion uniquement à partir d'une IP spécifique en ajoutant le paramètre "-s" :

iptables -A ENTRÉE -s 127.0.0.1 -p tcp --dport 80 -j ACCEPTER

Où:

s = source
Iptables -L = liste toutes les règles chargées par iptables
Iptables -L -v = pareil avec la verbosité.

On peut aussi tester notre firewall avec nmap :

Comme on peut le voir le port 80 est ouvert à la fois selon « iptables -L » et Nmap.

Remarque : pour plus d'informations sur l'utilisation de Nmap, vous pouvez lire notre tutoriel à ce sujet

Protéger votre serveur

#Ouvrir les services HTTP et HTTPS.
iptables -A INPUT -p tcp --dport 80 -j ACCEPTER
iptables -A ENTRÉE -p tcp --dport 443 -j ACCEPTER
#Ouvrir le service de port SSH
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ETABLISHED -j ACCEPT

Où se trouvent les nouveaux paramètres :

-m = signifie "correspondance" et est utilisé pour appeler les extensions d'Iptable comme conntrack qui ne fait pas partie des fonctions de base d'iptable.

conntrack = Permet de suivre les informations sur les connexions comme des adresses spécifiques ou dans ce cas l'état de la connexion. Cela doit être utilisé avec précaution, car de nombreuses règles pour défendre les serveurs contre certaines attaques utilisent conntrack alors que son utilisation est limitée par le matériel et une telle limitation peut être utilisée pour surcharger les ressources du serveur.

-ctstate = détermine l'état de la règle à faire correspondre, les états possibles sont : NEW, ESTABLISHED, RELATED et INVALID.

#Protégez votre service SSH contre les attaques par force brute en n'autorisant qu'une adresse IP spécifique
pour accéder à iptables -A INPUT -p tcp -s X.X.X.X --dport 22 -m conntrack --ctstate NOUVEAU,
ÉTABLI -j ACCEPTER
#Protégez votre service SSH contre les attaques par force brute en limitant les tentatives de connexion
Iptables -A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j 22-test
Iptables -A 22-test -m recent --name CONNECTIONS --set --mask 255.255.255.255 --rsource
Iptables -A 22-test -m recent --name CONNECTIONS --rcheck --mask 255.255.255.255
--rsource --seconds 30 --hitcount 3 -j 22-protection
Iptables -A 22-test -j ACCEPTER
Iptables -A 22-protection -j DROP

Où:
Dans la première ligne, notre règle dit "-m conntrack -ctstate NOUVEAU" ce qui signifie que si la connexion est nouvelle, passez à la règle "22-test".

La deuxième ligne indique le masque de réseau des paquets 255.255.255.255 sont nommés comme CONNEXIONS .

La troisième ligne dit si un CONNEXIONS Cela semble plus de 3 fois en 30 secondes, le pare-feu continue d'appliquer la chaîne 22-protection. La quatrième ligne dit si le CONNEXIONS n'était pas apparu plus de 3 fois en 30 secondes, il peut être accepté.
Cinquième ligne, qui appartient à la 22-protection la chaîne dit de laisser tomber CONNEXIONS si semblent plus de 3 fois dans les 30 secondes.

Pour finir, refusons toutes les connexions non acceptées et autorisons tout le trafic sortant :

iptables -P SORTIE ACCEPTER
iptables -P BAISSE D'ENTRÉE

Où -P signifie la chaîne de la cible, rappelez-vous que la cible est la politique, ACCEPTER, DROP, QUEUE ou RETURN. Dans ce cas, nous disons que la politique par défaut pour le trafic sortant est d'accepter et que la politique par défaut pour le trafic entrant est de refuser, sauf si nous avons spécifié quelque chose de différent dans les règles précédentes. Il s'agit d'un pare-feu très basique qui n'inclut pas de règles pour de nombreuses attaques, à des fins d'apprentissage et non pour la production, à la fin de l'article j'attache un pare-feu que j'ai utilisé pour la production sur un serveur, il a des commentaires expliquant chaque règle.

TRANSFERT D'UNE CONNEXION À UN PORT SPÉCIFIQUE VERS UNE ADRESSE IP SPÉCIFIQUE

Ceci est également très utile pour les utilisateurs de bureau qui souhaitent acheminer une connexion via un périphérique spécifique, cela peut être utile même pour les joueurs, nous le faisons généralement à partir des paramètres du routeur, mais supposons que le périphérique de routage exécute Iptables.

iptables -A PRÉROUTAGE -t nat -p tcp -d X.X.X.X --dport 8080 -j DNAT --to-destination
Oui.Oui.Oui.Y : 80
iptables -A POSTROUTING -t nat -p tcp -j SNAT --to-source X.X.X.X

Les règles ci-dessus appellent NAT (Network Address Translation) pour spécifier les connexions via le protocole TCP, à l'adresse X.X.X.X et le port 8080 seront redirigés vers l'adresse Y.Oui.Oui.O, port 80. La deuxième règle spécifie que les réponses doivent être envoyées à l'adresse source (X.X.X.X). Nous pouvons utiliser ces règles pour autoriser l'accès à une caméra IP, pour permettre des jeux en ligne avec des réseaux externes, etc.

Ce tutoriel était destiné à initier les débutants à Iptables et n'explique qu'un nombre limité de fonctions de base. Ci-dessous, vous pouvez voir un exemple d'un pare-feu bien planifié qui a été utilisé pour un serveur de production, il comprend certaines des règles que nous avons déjà vues à des règles plus complexes pour empêcher les attaques DDoS, entre autres.
Le prochain tutoriel portera sur le reniflage au sein des réseaux locaux, mais dans un prochain tutoriel, j'expliquerai ci-dessous certaines des règles appliquées au pare-feu.  Merci d'avoir suivi LinuxHint.com, continuez à nous suivre pour les futures mises à jour sur Iptables et Linux en général.

Bonus : Exemple de pare-feu de production

iptables -F
#---- Activer la protection contre les messages d'erreur incorrects
activer /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#---- Activer le filtrage de chemin inverse. Plus sûr, mais casse le routage asymétrique et/ou IPSEC
activer /proc/sys/net/ipv4/conf/*/rp_filter
#---- N'accepte pas les paquets acheminés par la source. Le routage source est rarement utilisé pour
fins désactiver /proc/sys/net/ipv4/conf/*/accept_source_route
#---- Désactivez l'acceptation de la redirection ICMP qui peut être utilisée pour modifier vos tables de routage
désactiver /proc/sys/net/ipv4/conf/*/accept_redirects
#---- Comme nous n'acceptons pas les redirections, n'envoyez pas non plus de messages de redirection
désactiver /proc/sys/net/ipv4/conf/*/send_redirects
#---- Ignorer les paquets avec des adresses impossibles
désactiver /proc/sys/net/ipv4/conf/*/log_martians
#---- Protège contre les numéros de séquence d'emballage et facilite la mesure du temps d'aller-retour
activer /proc/sys/net/ipv4/tcp_timestamps
#---- Aide contre les attaques DoS ou DDoS syn-flood en utilisant des choix particuliers de
Les numéros de séquence TCP activent /proc/sys/net/ipv4/tcp_syncookies
#---- Utilisez un ACK sélectif qui peut être utilisé pour signifier que des paquets spécifiques sont manquants
désactiver /proc/sys/net/ipv4/tcp_sack
modprobe nf_conntrack_ipv4
sonde de modulation nf_nat
# modprobe nf_conntrack_ipv6
# modprobe nf_conntrack_amanda
# modprobe nf_nat_amanda
sonde de modulation nf_conntrack_h323
sonde de modulation nf_nat_h323
modprobe nf_conntrack_ftp
sonde de modulation nf_nat_ftp
# modprobe nf_conntrack_netbios_ns
# modprobe nf_conntrack_irc
# modprobe nf_nat_irc
# modprobe nf_conntrack_proto_dccp
# modprobe nf_nat_proto_dccp
modprobe nf_conntrack_netlink
# modprobe nf_conntrack_pptp
# modprobe nf_nat_pptp
# modprobe nf_conntrack_proto_udplite
# modprobe nf_nat_proto_udplite
# modprobe nf_conntrack_proto_gre
# modprobe nf_nat_proto_gre
# modprobe nf_conntrack_proto_sctp
# modprobe nf_nat_proto_sctp
# modprobe nf_conntrack_sane
modprobe nf_conntrack_sip
modprobe nf_nat_sip
# modprobe nf_conntrack_tftp
# modprobe nf_nat_tftp
# modprobe nf_nat_snmp_basic
#Maintenant, nous pouvons commencer à ajouter des services sélectionnés à notre filtre de pare-feu. La première de ces choses
est une interface localhost iptables -A INPUT -i lo -j ACCEPT
#Nous avons dit au pare-feu de prendre tous les paquets entrants avec les indicateurs tcp NONE et de les SUPPRIMER.
iptables -A ENTRÉE -p tcp ! -m conntrack --ctstate NEW -j DROP
#Nous disons à iptables d'ajouter (-A) une règle à l'entrée (INPUT) - SSH fonctionne sur le port 50683
au lieu de 22.
iptables -A INPUT -p tcp -m tcp --dport 50683 -j ACCEPTER
iptables -A INPUT -p tcp -m tcp -s ip spécifique --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -s ip spécifique --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -s ip spécifique --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --set
--nom SSH -j ACCEPTER
iptables -A INPUT -p tcp --dport 50683 -m recent --update --seconds 60 --hitcount 4
--rttl --name SSH -j LOG --log-prefix "SSH_brute_force "
iptables -A INPUT -p tcp --dport 50683 -m recent --update --seconds 60 --hitcount 4
--rttl --name SSH -j DROP
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --set
--nom SSH
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -j SSH_WHITELIST
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --update
--secondes 60 --hitcount 4 --rttl --name SSH -j ULOG --ulog-prefix SSH_bru
iptables -A INPUT -p tcp --dport 50683 -m conntrack --ctstate NEW -m recent --update
--secondes 60 --hitcount 4 --rttl --name SSH -j DROP
#Maintenant, j'autorise imap et smtp.
-A INPUT -p tcp --dport 25 -j ACCEPTER
# Permet les connexions pop et pop
-A INPUT -p tcp --dport 110 -j ACCEPTER
-A INPUT -p tcp --dport 995 -j ACCEPTER
############ IMAP & IMAP ############
-A INPUT -p tcp --dport 143 -j ACCEPTER
-A INPUT -p tcp --dport 993 -j ACCEPTER
########### MYSQL ###################
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPTER
########## Système R1soft CDP ###############
iptables -A INPUT -p tcp -m tcp -s ip spécifique --dport 1167 -j ACCEPT
############### sortant ###################
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
### Autoriser en cours, bloquer entrant non défini ###
iptables -P SORTIE ACCEPTER
iptables -P BAISSE D'ENTRÉE
iptables -L -n
iptables-sauvegarder | tee /etc/iptables.test.des règles
iptables-restauration < /etc/iptables.test.rules
#service iptables redémarre
Meilleures applications de mappage de manette de jeu pour Linux
Si vous aimez jouer à des jeux sur Linux avec une manette de jeu au lieu d'un système de saisie clavier et souris typique, il existe des applications ...
Outils utiles pour les joueurs Linux
Si vous aimez jouer à des jeux sur Linux, il est probable que vous ayez utilisé des applications et des utilitaires comme Wine, Lutris et OBS Studio p...
Jeux HD remasterisés pour Linux qui n'ont jamais eu de version Linux plus tôt
De nombreux développeurs et éditeurs de jeux proposent une remasterisation HD d'anciens jeux pour prolonger la durée de vie de la franchise, veuillez ...