Maison > tutoriels informatiques > connaissances en informatique > Explication détaillée du pare-feu Linux-iptables

Explication détaillée du pare-feu Linux-iptables

PHPz
Libérer: 2024-02-20 11:57:02
avant
916 Les gens l'ont consulté

Présentation du projet

iptables est un logiciel de pare-feu de filtrage de paquets gratuit sous le système Linux, qui peut réaliser le filtrage de paquets, la redirection de paquets et la traduction d'adresses réseau ainsi que d'autres fonctions. Il s'agit d'une solution efficace et flexible qui remplace les pare-feu commerciaux coûteux. iptables dispose de puissantes options de configuration et de paramètres de règles, permettant aux utilisateurs de contrôler finement le trafic réseau en fonction de leurs propres besoins et d'améliorer la sécurité et les performances du réseau.

Les règles d'iptables font en fait référence aux conditions prédéfinies par l'administrateur réseau. Les règles sont généralement définies comme "Si l'en-tête du paquet de données remplit de telles conditions, traitez le paquet de données de cette manière." Les règles sont stockées dans la table de filtrage de paquets dans l'espace du noyau. Ces règles spécifient l'adresse source, l'adresse de destination, le protocole de transmission (tel que TCP, UDP, ICMP) et le type de service (tel que HTTP, FTP et SMTP). Lorsque les paquets de données correspondent aux règles, iptables traite ces paquets de données selon les méthodes définies par les règles, telles que accepter, rejeter, abandonner, etc. La tâche principale de la configuration du pare-feu est d'ajouter, de modifier et de supprimer ces règles.

iptables dispose de 4 tables intégrées, à savoir la table de filtrage, la table nat, la table mangle et la table brute, qui sont utilisées respectivement pour implémenter le filtrage des paquets, la traduction d'adresses réseau, la reconstruction (modification) des paquets et le traitement de suivi des données. Chaque chaîne n'est en réalité qu'une liste de contrôle parmi de nombreuses règles. Chaque chaîne peut avoir une ou plusieurs règles. Lorsqu'un paquet arrive dans une chaîne, iptables vérifie à partir de la première règle de la chaîne si le paquet répond aux conditions définies par la règle. Si cela est satisfait, le système traitera le paquet selon la méthode définie par la règle ; sinon, iptables continuera à vérifier la règle suivante. Si le paquet ne respecte aucune règle de la chaîne, iptables traitera le paquet selon la politique par défaut prédéfinie de la chaîne.

Dans l'ensemble, iptables est un outil puissant pour configurer les fonctions de pare-feu et de traduction d'adresses réseau sur les systèmes Linux.

Explication détaillée du pare-feu Linux-iptables

Remplacez le pare-feu du système : l'outil de gestion du pare-feu par défaut du système Centos7 n'est pas iptables. Lorsque vous devez l'utiliser, vous devez l'installer et le remplacer vous-même.

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

[root@localhost ~]# yum install -y iptables iptables-services

[root@localhost ~]# systemctl restart iptables
[root@localhost ~]# systemctl enable iptables
Copier après la connexion

Interrogez les règles complètes du pare-feu : utilisez le paramètre -L -n –line-numbers pour afficher les règles de configuration par défaut du pare-feu.

[root@localhost ~]# iptables -L -n --line-numbers
[root@localhost ~]# iptables -F # 临时清空规则
Chain INPUT (policy ACCEPT)
numtarget prot opt source destination 
1ACCEPT all--0.0.0.0/00.0.0.0/0state RELATED,ESTABLISHED
2ACCEPT icmp --0.0.0.0/00.0.0.0/0 
3ACCEPT all--0.0.0.0/00.0.0.0/0 
4ACCEPT tcp--0.0.0.0/00.0.0.0/0state NEW tcp dpt:22
5REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
numtarget prot opt source destination 
1REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
numtarget prot opt source destination
Copier après la connexion

Définissez le pare-feu pour refuser par défaut : définissez la règle de refus par défaut et définissez la chaîne INPUT sur refuser par défaut, ce qui signifie rejeter toutes les demandes de connexion.

[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -L -n --line-numbers

Chain INPUT (policy DROP) #这里可以看出INPUT链已变成DROP
numtarget prot opt source destination 

Chain FORWARD (policy ACCEPT)
numtarget prot opt source destination 

Chain OUTPUT (policy ACCEPT)
numtarget prot opt source destination
Copier après la connexion

Activer l'écho ICMP du pare-feu : lorsque la règle par défaut le refuse, configurez-la pour activer le test ICMP et permettre à l'hôte d'effectuer un ping

.
[root@localhost ~]# iptables -I INPUT -p icmp -j ACCEPT
[root@localhost ~]# iptables -L -n --line-numbers

Chain INPUT (policy DROP)
numtarget prot opt source destination 
1ACCEPT icmp --0.0.0.0/00.0.0.0/0 

Chain FORWARD (policy ACCEPT)
numtarget prot opt source destination 

Chain OUTPUT (policy ACCEPT)
numtarget prot opt source destination
Copier après la connexion

Autoriser la connexion à distance SSH du client : en cas de refus par défaut, définissez le port 22 à ouvrir pour autoriser la connexion SSH à distance à la machine.

[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT

[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
numtarget prot opt source destination 
1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22
Chain OUTPUT (policy ACCEPT)
numtarget prot opt source destination 
1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp spt:22
Copier après la connexion

Supprimer la règle spécifiée : En cas de rejet par défaut, supprimez la chaîne INPUT, la deuxième donnée, et supprimez la règle ICMP.

[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
numtarget prot opt source destination 
1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22
2ACCEPT icmp --0.0.0.0/00.0.0.0/0 

[root@localhost ~]# iptables -D INPUT 2
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
numtarget prot opt source destination 
1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22
Copier après la connexion

Spécifiez l'accès autorisé au segment de réseau : en cas de refus par défaut, configurez pour autoriser uniquement les hôtes du segment de réseau 192.168.1.0/24 à accéder au port 22 de la machine.

[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -s 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT
[root@localhost ~]# iptables -L -n --line-numbers

Chain INPUT (policy DROP)
numtarget prot opt source destination 
1ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22

Chain OUTPUT (policy ACCEPT)
numtarget prot opt source destination 
1ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp spt:22
Copier après la connexion

Refuser l'accès au port spécifié : dans la chaîne de règles INPUT, ajoutez le port 8888 qui refuse à tout le monde l'accès à la machine.

[root@localhost ~]# iptables -I INPUT -p tcp --dport 8888 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
numtarget prot opt source destination 
1REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable
2ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
Copier après la connexion

Refuser l'accès au port du segment de réseau hôte spécifié : dans la chaîne de règles INPUT, ajoutez l'hôte 192.168.1.20 pour refuser l'accès au port local 80.

[root@localhost ~]# iptables -I INPUT -p tcp -s 192.168.1.20 --dport 80 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers

Chain INPUT (policy DROP)
numtarget prot opt source destination 
1REJECT tcp--192.168.1.20 0.0.0.0/0tcp dpt:80 reject-with icmp-port-unreachable
2REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable
3ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
Copier après la connexion

Refuser l'accès à la plage de ports spécifiée : dans la chaîne de règles INPUT, ajoutez pour refuser à tous les hôtes l'accès au port local 1000-2000.

[root@localhost ~]# iptables -A INPUT -p tcp --dport 1000:2000 -j REJECT
[root@localhost ~]# iptables -A INPUT -p udp --dport 1000:2000 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers

Chain INPUT (policy DROP)
numtarget prot opt source destination 
1REJECT tcp--192.168.1.20 0.0.0.0/0tcp dpt:80 reject-with icmp-port-unreachable
2REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable
3ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
4REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpts:1000:2000 reject-with icmp-port-unreachable
5REJECT udp--0.0.0.0/00.0.0.0/0udp dpts:1000:2000 reject-with icmp-port-unreachable
Copier après la connexion

SNAT - Traduction de l'adresse source  : les paquets de données envoyés depuis la zone locale seront automatiquement déguisés en IP du réseau public après SNAT, et l'IP du réseau public sera utilisée pour accéder aux services désignés

.

#例:将本地 192.168.1.1 的请求自动伪装成外网地址 59.110.167.234
[root@localhost ~]# iptables -t nat -A POSTROUTING -o ens32 -s 192.168.1.1 -j SNAT --to-source 59.110.167.234

-o#指定外网接口,此处为ens32
-s#指定内网口地址,此处为192.168.1.1
--to-source #外网口的地址
Copier après la connexion

Traduction d'adresse de destination DNAT  : les paquets de données reçus du réseau public seront automatiquement transmis à l'hôte intranet désigné après la DNAT

.

#例:将请求 59.110.167.234 且端口为 80 的数据包,自动映射到内网 192.168.1.10
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens32 -d 59.110.167.234 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10

--to-destination #内网口地址,此处为192.168.1.1
-i #绑定外网接口,此处为ens32
-d #外网地址,此处为8.8.8.8
-dport #内网端口,此处为80
Copier après la connexion

Limiter le nombre de connexions de requêtes physiques : iptables peut utiliser le module connlimit pour limiter le nombre de connexions pour un certain port à partir de la même IP. Il vous permet de limiter le nombre de connexions simultanées pour chaque IP client, c'est-à-dire le nombre. de connexions simultanées à un serveur pour chaque IP. Vous pouvez également limiter l'utilisation du réseau des utilisateurs de l'intranet, et pour le serveur, vous pouvez limiter le nombre de connexions initiées par chaque IP.

# 限制同一IP同时最多100个http连接
[root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
[root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit ! --connlimit-above 100 -j ACCEPT

# 只允许每组C类IP同时100个http连接
[root@localhost ~]# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT

# 只允许每个IP同时5个80端口转发,超过的丢弃
[root@localhost ~]# iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP

# 限制某IP最多同时100个http连接
[root@localhost ~]# iptables -A INPUT -s 192.168.1.100 -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT

# 限制每IP在一定的时间(比如60秒)内允许新建立最多100个http连接数
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 100 -j REJECT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
Copier après la connexion

Configurer les règles de pare-feu de base : nous pouvons exécuter les codes suivants dans le système nouvellement installé pour configurer une règle de pare-feu de base.

# 删除已有规则
iptables --delete-chain
iptables --flush

# 默认禁止进,允许出,允许回环网卡
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的或相关连接的通行
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 限制80端口443端口的单个IP的最大连接数为10
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP
iptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 10 -j DROP

# 允许80(HTTP)/873(RSYNC)/443(HTTPS)/20,21(FTP)/25(SMTP)端口的连接
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT

# 允许SSH端口的连接,放行SSH端口
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT

# 允许ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT 
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

# 放行允许DNS解析端口
iptables -A OUTPUT -p udp -m udp -d 8.8.8.8 --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp -d 114.114.114.114 --dport 53 -j ACCEPT

# 保存规则
iptables-save
Copier après la connexion

Règles de configuration couramment utilisées pour la production : voici les configurations de certaines règles couramment utilisées dans l'environnement de production. Dans des circonstances normales, la configuration de ces règles est suffisante.

 filter -P INPUT DROP #设置默认规则,拒绝所有
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT#放行80口
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT #放行22口
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT#放行22口

iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT#放行80端口
iptables -t filter -I INPUT -p tcp --dport 443-j ACCEPT#插入在顶端一条放行443端口的规则
iptables -t filter -I INPUT 2 -p tcp --dport 443 -j ACCEPT #在第二列插入一条443放行规则
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP#丢弃80端口的请求
iptables -I INPUT 2 -p icmp -j DROP#丢弃ICMP请求
iptables -t filter -D INPUT 3#删除第三条规则

iptables -A FORWARD -s 192.168.1.10 -j REJECT#拒绝IP的转发请求
iptables -I INPUT -s 10.20.30.0/24 -j DROP #丢弃IP网段的入站请求
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP#丢弃从eth1网卡流入,且地址匹配的数据包
iptables -A INPUT -o eth0 -s 192.168.1.0/24 -j DROP#丢弃从eth0网卡流出,且地址匹配的数据包
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT #放行20-21端口的数据包

iptables -I INPUT -p tcp -m multiport --dport 80-90,85 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.10-192.168.1.100 -j ACCEPT
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:mryunwei.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal