iptables ist eine kostenlose Paketfilter-Firewall-Software unter Linux, die Paketfilterung, Paketumleitung, Netzwerkadressenübersetzung und andere Funktionen realisieren kann. Es handelt sich um eine effiziente und flexible Lösung, die teure kommerzielle Firewalls ersetzt. iptables verfügt über leistungsstarke Konfigurationsoptionen und Regeleinstellungen, die es Benutzern ermöglichen, den Netzwerkverkehr genau nach ihren eigenen Bedürfnissen zu steuern und die Netzwerksicherheit und -leistung zu verbessern.
Die Regeln von iptables beziehen sich tatsächlich auf die vom Netzwerkadministrator vordefinierten Bedingungen. Die Regeln sind im Allgemeinen wie folgt definiert: „Wenn der Datenpaket-Header diese Bedingungen erfüllt, verarbeiten Sie das Datenpaket auf diese Weise.“ Regeln werden in der Paketfiltertabelle im Kernelbereich gespeichert. Diese Regeln geben die Quelladresse, die Zieladresse, das Übertragungsprotokoll (z. B. TCP, UDP, ICMP) und den Diensttyp (z. B. HTTP, FTP und SMTP) an. Wenn die Datenpakete den Regeln entsprechen, verarbeitet iptables diese Datenpakete gemäß den durch die Regeln definierten Methoden, wie z. B. Akzeptieren, Ablehnen, Verwerfen usw. Die Hauptaufgabe bei der Konfiguration der Firewall besteht darin, diese Regeln hinzuzufügen, zu ändern und zu löschen.
iptables verfügt über 4 integrierte Tabellen, nämlich Filtertabelle, NAT-Tabelle, Mangle-Tabelle und Rohtabelle, die zur Implementierung von Paketfilterung, Netzwerkadressenübersetzung, Paketrekonstruktion (Änderung) bzw. Datenverfolgungsverarbeitung verwendet werden. Jede Kette ist eigentlich nur eine Checkliste unter vielen Regeln. Jede Kette kann eine oder mehrere Regeln haben. Wenn ein Paket in einer Kette ankommt, prüft iptables ausgehend von der ersten Regel in der Kette, ob das Paket die durch die Regel definierten Bedingungen erfüllt. Wenn dies erfüllt ist, verarbeitet das System das Paket gemäß der durch die Regel definierten Methode. Andernfalls prüft iptables weiterhin die nächste Regel. Wenn das Paket keiner Regel in der Kette entspricht, verarbeitet iptables das Paket gemäß der vordefinierten Standardrichtlinie der Kette.
Ersetzen Sie die System-Firewall: Das Standard-Firewall-Verwaltungstool im Centos7-System ist nicht iptables. Wenn Sie es verwenden müssen, müssen Sie es selbst installieren und ersetzen.
[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
Fragen Sie die vollständigen Firewall-Regeln ab: Verwenden Sie den Parameter -L -n –line-numbers, um die Standardkonfigurationsregeln der Firewall anzuzeigen.
[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
Stellen Sie die Firewall standardmäßig auf „Verweigern“ ein: Legen Sie die Standard-Verweigerungsregel fest und stellen Sie die INPUT-Kette standardmäßig auf „Verweigern“ ein, was bedeutet, dass alle Verbindungsanfragen abgelehnt werden.
[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
Firewall-ICMP-Echo aktivieren: Wenn die Standardregel dies verweigert, stellen Sie es so ein, dass der ICMP-Test aktiviert wird und dem Host das Ping erlaubt wird
[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
Kunden-SSH-Remoteverbindung zulassen: Im Falle einer Ablehnung standardmäßig Port 22 so einstellen, dass er geöffnet wird, um eine Remote-SSH-Verbindung zur Maschine zu ermöglichen.
[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
Löschen Sie die angegebene Regel: Im Falle einer standardmäßigen Ablehnung löschen Sie die INPUT-Kette, die zweiten Daten und die ICMP-Regel.
[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
Geben Sie den zulässigen Zugriff auf das Netzwerksegment an: Im Falle einer standardmäßigen Verweigerung richten Sie die Einstellung so ein, dass nur Hosts im Netzwerksegment 192.168.1.0/24 Zugriff auf Port 22 der Maschine erhalten.
[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
Zugriff auf den angegebenen Port verweigern: Fügen Sie in der INPUT-Regelkette den Port 8888 hinzu, der jedem den Zugriff auf die Maschine verweigert.
[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
Zugriff auf den Port des angegebenen Host-Netzwerksegments verweigern: Fügen Sie in der INPUT-Regelkette den Host 192.168.1.20 hinzu, um den Zugriff auf den lokalen Port 80 zu verweigern.
[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
Zugriff auf den angegebenen Portbereich verweigern: Fügen Sie in der INPUT-Regelkette hinzu, um allen Hosts den Zugriff auf den lokalen Port 1000-2000 zu verweigern
[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
SNAT – Quelladressübersetzung
#例:将本地 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 #外网口的地址
DNAT-Destination Address Translation
#例:将请求 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
Begrenzen Sie die Anzahl der physischen Anforderungsverbindungen: iptables kann das Connlimit-Modul verwenden, um die Anzahl der Verbindungen derselben IP für einen bestimmten Port zu begrenzen. Es ermöglicht die Begrenzung der Anzahl gleichzeitiger Verbindungen für jede Client-IP, d. h. der gleichzeitigen Verbindungen zu einem Server für jede IP. Sie können auch die Netzwerknutzung von Intranetbenutzern begrenzen, und für den Server können Sie die Anzahl der von jeder IP initiierten Verbindungen begrenzen.
# 限制同一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
Grundlegende Firewall-Regeln konfigurieren: Wir können die folgenden Codes im neu installierten System ausführen, um eine grundlegende Firewall-Regel zu konfigurieren.
# 删除已有规则 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
Häufig verwendete Konfigurationsregeln für die Produktion: Im Folgenden sind die Konfigurationen einiger häufig verwendeter Regeln in der Produktionsumgebung aufgeführt. Unter normalen Umständen reicht es aus, diese Regeln zu konfigurieren.
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
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung zu Linux Firewall-iptables. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!