[LINUX] Comment utiliser iptables

introduction

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.

Exemple de réglage

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

Commentaire

politique

*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.

Boucle arrière

#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.

Serveur SSH

#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.

Client DNS

#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.

Reflet des paramètres

Veuillez redémarrer iptables. Si vous utilisez systemd comme Arch Linux:

# systemctl restart iptables

Recommended Posts

Comment utiliser iptables
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Comment utiliser Seaboan
Comment utiliser le shogun
Comment utiliser Pandas 2
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment utiliser pytest_report_header
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser IPython
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment utiliser la liste []
Comment utiliser python-kabusapi
Comment utiliser OptParse
Comment utiliser le retour
Comment utiliser pyenv-virtualenv
Comment utiliser imutils
Comment utiliser Qt Designer
Comment utiliser la recherche triée
[gensim] Comment utiliser Doc2Vec
python3: Comment utiliser la bouteille (2)
Comprendre comment utiliser django-filter
Comment utiliser le générateur
[Python] Comment utiliser la liste 1
Comment utiliser FastAPI ③ OpenAPI
Comment utiliser Python Argparse
Comment utiliser IPython Notebook
Comment utiliser Pandas Rolling
Comment utiliser les dictionnaires redis-py
Python: comment utiliser pydub
[Python] Comment utiliser checkio
[Aller] Comment utiliser "... (3 périodes)"
Comment faire fonctionner GeoIp2 de Django
[Python] Comment utiliser input ()
Comment utiliser le décorateur
[Introduction] Comment utiliser open3d
Comment utiliser Python lambda
Comment utiliser Jupyter Notebook
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser Google Colaboratory
Comment utiliser les octets Python
Comment utiliser cron (mémo personnel)
Python: comment utiliser async avec
Comment utiliser le module optparse
Comment utiliser SWIG de WAF