iptables sont des pare-feu intégrés au noyau Linux. Il est utilisé pour limiter ou transférer la communication sur cet hôte. Bien qu'IPv4 soit supposé ici, IPv6 a également des ip6tables qui peuvent être utilisés presque de la même manière.
Une explication détaillée sera donnée plus tard avec un exemple du fichier de configuration iptables.
/etc/iptables/iptables.rules
#En règle générale, toute entrée et tout transfert sont interdits
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
#Toutes les connexions à partir du bouclage sont autorisées
-A INPUT -i lo -j ACCEPT
#Permet de recevoir PING, mais limite la fréquence à environ une fois par seconde par client
-A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit-name t_echo --hashlimit-mode srcip --hashlimit-upto 1/s --hashlimit-burst 5 --hashlimit-htable-expire 10000 -j ACCEPT
#La communication déjà établie est autorisée quel que soit le numéro de port
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#Autoriser les connexions SSH mais limiter la fréquence à environ une fois par minute par client
-A INPUT -m state --state NEW -m tcp -p tcp --syn --dport 22 -m hashlimit --hashlimit-name t_sshd --hashlimit-mode srcip --hashlimit-upto 1/m --hashlimit-burst 5 --hashlimit-htable-expire 600000 -j ACCEPT
#Autoriser la réception de la réponse du serveur DNS
-A INPUT -p udp --sport 53 -j ACCEPT
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
En règle générale, toutes les réceptions et retransmissions de paquets sont interdites et la transmission est autorisée. Bien sûr, je ne veux pas du tout recevoir de paquets, je vais donc définir une exception pour cette politique après cela.
#Toutes les connexions à partir du bouclage sont autorisées
-A INPUT -i lo -j ACCEPT
Linux peut utiliser des sockets pour communiquer entre les processus ainsi que pour communiquer avec d'autres hôtes. La communication fermée à un tel hôte est appelée bouclage. Si vous limitez la communication en boucle, il y a de fortes chances que divers programmes ne fonctionnent pas normalement, nous l'autorisons donc pleinement.
Ping
#Permet de recevoir PING, mais limite la fréquence à environ une fois par seconde par client
-A INPUT -p icmp --icmp-type echo-request -m hashlimit --hashlimit-name t_echo --hashlimit-mode srcip --hashlimit-upto 1/s --hashlimit-burst 5 --hashlimit-htable-expire 10000 -j ACCEPT
Permet à l'hôte de répondre à Ping. Cependant, la fréquence est limitée comme contre-mesure contre ICMP Flood (Ping Flood), qui met une charge sur le système en envoyant un grand nombre de Pings. Utilisez le module hashlimit pour limiter la fréquence à laquelle les paquets sont reçus (ou transférés ou envoyés).
--hashlimit-name
est le nom de la table de hachage. Puisqu'il est nécessaire d'enregistrer l'historique de réception des paquets pour utiliser ce module, définissez le nom de fichier de la destination de sauvegarde de sorte qu'il ne chevauche pas d'autres règles.
--hashlimit-mode
spécifie dans quelles unités la fréquence de réception des paquets est limitée. Puisque srcip
est défini ici, la réception des paquets est restreinte pour chaque adresse IP source. Il existe d'autres indicateurs tels que dstip`` srcport`` dstport
. Vous pouvez également combiner plusieurs indicateurs. Si vous omettez cette option, le système dans son ensemble limite la fréquence à laquelle les paquets sont reçus, quelle que soit la source ou la destination.
--hashlimit-upto
et --hashlimit-burst
définissent spécifiquement la fréquence à laquelle les paquets sont autorisés à être reçus. Pour comprendre la signification de ces deux paramètres, il est utile de comparer la fréquence à laquelle les paquets sont autorisés à être reçus à la capacité du compartiment. Imaginez que vous deviez retirer un litre d'eau d'un seau pour recevoir un seul paquet. Le système démarre avec le seau plein, mais lorsqu'il n'y a pas assez d'eau, il ne pourra pas recevoir de paquets. --hashlimit-jusqu'à 1 / s
signifie que vous versez 1 litre d'eau dans le seau par seconde. Cependant, «--hashlimit-burst 5» signifie que le seau n'a que 5 litres de capacité. Cela signifie que peu importe la durée du cycle, vous pouvez recevoir jusqu'à 5 fois sans aucun problème, mais vous devez attendre que le seau soit à nouveau rempli d'eau afin de recevoir plus de paquets consécutifs.
--hashlimit-htable-expire
spécifie la date d'expiration de l'enregistrement de la table de hachage en millisecondes. Si vous ne définissez pas une valeur supérieure à $ \ frac {hashlimit-burst} {hashlimit-upto} $, la fréquence de réception ne sera pas limitée comme prévu. Ici, avec une marge, il est fixé à 10000 millisecondes, soit le double du résultat du calcul (5 secondes).
TCP
#La communication déjà établie est autorisée quel que soit le numéro de port
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
Après avoir établi une connexion avec TCP une fois, autorisez la réception de tout paquet sur ce port. Les paramètres du serveur SSH décrits ci-dessous autorisent uniquement les connexions au serveur, mais ce paramètre permet également à la communication après une connexion réussie de passer à travers le pare-feu.
De plus, je suis autorisé à me connecter au serveur en tant que client avec le : OUTPUT ACCEPT [0: 0]
ci-dessus, mais c'est ce paramètre qui me permet de recevoir des paquets après une connexion réussie.
#Autoriser les connexions SSH mais limiter la fréquence à environ une fois par minute par client
-A INPUT -m state --state NEW -m tcp -p tcp --syn --dport 22 -m hashlimit --hashlimit-name t_sshd --hashlimit-mode srcip --hashlimit-upto 1/m --hashlimit-burst 5 --hashlimit-htable-expire 600000 -j ACCEPT
Permet les connexions au port TCP 22. Comme Ping, il utilise le module hashlimit pour limiter la fréquence des connexions. Vous pouvez l'appliquer à d'autres fins en remplaçant --dport 22
par un autre numéro de port. Par exemple, autorisez la communication sur le port 80 pour HTTP et le port 443 pour HTTPS. Cependant, pour HTTP et HTTPS, la limite de hashlimit doit être définie un peu plus lâche.
#Autoriser la réception de la réponse du serveur DNS
-A INPUT -p udp --sport 53 -j ACCEPT
DNS utilise TCP / UDP ou les deux. Pour TCP, : OUTPUT ACCEPT [0: 0]
-A INPUT -p tcp -m state --state ESTABLISHED, RELATED -j ACCEPT
est déjà autorisé. Il n'y a pas de concept de connexion pour UDP, vous devez donc autoriser explicitement la réception des paquets envoyés depuis le port 53.
Veuillez redémarrer iptables. Si vous utilisez systemd comme Arch Linux:
# systemctl restart iptables
Recommended Posts