Ausführliche Erklärung zu Linux Firewall-iptables

PHPz
Freigeben: 2024-02-20 11:57:02
nach vorne
858 Leute haben es durchsucht

Projektvorstellung

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.

Insgesamt ist iptables ein leistungsstarkes Tool zum Konfigurieren von Firewall- und Netzwerkadressenübersetzungsfunktionen auf Linux-Systemen.

Ausführliche Erklärung zu Linux Firewall-iptables

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

SNAT – Quelladressübersetzung : Aus dem lokalen Bereich gesendete Datenpakete werden nach SNAT automatisch als öffentliche Netzwerk-IP getarnt und die öffentliche Netzwerk-IP wird für den Zugriff auf bestimmte Dienste verwendet

#例:将本地 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 #外网口的地址
Nach dem Login kopieren

DNAT-Destination Address Translation : Vom öffentlichen Netzwerk empfangene Datenpakete werden nach DNAT automatisch an den angegebenen Intranet-Host weitergeleitet

#例:将请求 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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:mryunwei.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!