Linux学习整理-网络防火墙iptables-实践篇2
目錄
1 實驗環境
2 匹配條件(match)
2.1 按協議匹配
2.2 按源IP匹配
2.3?按目的IP匹配
2.4 按進入網卡設備匹配
2.5 按輸出網卡地址匹配
2.6 按源端口匹配
2.7 按目標端口匹配
2.8 其它匹配(match)
3 動作跳轉(target)
3.1 LOG
3.2 ACCEPT
3.3 DROP
3.4 REJECT
3.5?REDIRECT
3.6 DNAT
3.6.1 從本機訪問服務器
3.6.2?把當前機器作為路由,來進行網絡地址轉發?
3.7 其它target
4 其它用法?
這篇文章說一下iptables的match和target。
1 實驗環境
先說明一下實驗環境。
192.168.0.0/24 訪問用機器(Centos) --------------------- iptables設定機器(node2)192.168.0.211 192.168.0.2032 匹配條件(match)
本節主要是為了實驗匹配條件,所以匹配后的動作target,都用LOG,以后在工作中,寫匹配條件,然后驗證是否正確的時候也可以用先用LOG來進行測試,測試OK以后,再用-R來替換成想要的target
2.1 按協議匹配
-p|--protocol [ALL|TCP|UDP|ICMP]
-p 是--protocol的縮寫。
ALL:代表所有協議
# 添加規則 - 記錄所有的icmp協議 root@node2:~# iptables -A INPUT -p icmp -j LOG# 查看規則 root@node2:~# iptables -nvL INPUT Chain INPUT (policy ACCEPT 15 packets, 2158 bytes)pkts bytes target prot opt in out source destination 0 0 LOG icmp -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4# 從Centos ping node2 [root@centos ~]# ping 192.168.0.203 PING 192.168.0.203 (192.168.0.203) 56(84) bytes of data. 64 bytes from 192.168.0.203: icmp_seq=1 ttl=64 time=1.47 ms 64 bytes from 192.168.0.203: icmp_seq=2 ttl=64 time=1.10 ms# 查看log內容可以看到來自192.168.0.211的訪問 root@node2:~# journalctl -f -- Logs begin at Wed 2021-12-08 09:47:03 UTC. -- Feb 01 11:42:51 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=55662 DF PROTO=ICMP TYPE=8 CODE=0 ID=1337 SEQ=2 Feb 01 11:42:52 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=56575 DF PROTO=ICMP TYPE=8 CODE=0 ID=1337 SEQ=3自己ping自己的情況下,沒有被記錄到log中?
root@node2:~# ping node2 PING node2(node2 (240f:73:1e6d:1:20c:29ff:fe42:c352)) 56 data bytes 64 bytes from node2 (240f:73:1e6d:1:20c:29ff:fe42:c352): icmp_seq=1 ttl=64 time=0.060 ms 64 bytes from node2 (240f:73:1e6d:1:20c:29ff:fe42:c352): icmp_seq=2 ttl=64 time=0.046 ms ^C --- node2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1003ms rtt min/avg/max/mdev = 0.046/0.053/0.060/0.007 ms root@node2:~# journalctl -f2.2 按源IP匹配
-s|--src|--source [ipaddress]
ipaddress: 可以用具體的IP地址,也可以用CIDR/VLSM格式。
# 只記錄來自192.168.0.211的訪問(跟協議沒有關系) root@node2:~# iptables -A INPUT -s 192.168.0.211 -j LOGroot@node2:~# iptables -nvL INPUT Chain INPUT (policy ACCEPT 9 packets, 1794 bytes)pkts bytes target prot opt in out source destination 0 0 LOG all -- * * 192.168.0.211 0.0.0.0/0 LOG flags 0 level 4# ICMP [root@centos ~]# ping 192.168.0.203 PING 192.168.0.203 (192.168.0.203) 56(84) bytes of data. 64 bytes from 192.168.0.203: icmp_seq=1 ttl=64 time=0.587 msroot@node2:~# journalctl -f -- Logs begin at Wed 2021-12-08 09:47:03 UTC. -- Feb 01 11:56:39 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=12713 DF PROTO=ICMP TYPE=8 CODE=0 ID=1340 SEQ=1 # TCP [root@centos ~]# nc -v -w 2 192.168.0.203 -z 22 Connection to 192.168.0.203 22 port [tcp/ssh] succeeded!root@node2:~# journalctl -f -- Logs begin at Wed 2021-12-08 09:47:03 UTC. -- Feb 01 11:59:45 node2 multipathd[753]: sda: failed to get sgio uid: No such file or directory Feb 01 11:59:45 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=20099 DF PROTO=TCP SPT=57334 DPT=22 WINDOW=29200 RES=0x00 SYN URGP=02.3?按目的IP匹配
-d|--dst|--destination?[ipaddress]
ipaddress: 可以用具體的IP地址,也可以用CIDR/VLSM格式。
# 在filter鏈的OUTPUT里追加一個規則 # 當出口是192.168.0.211的時候 記錄日志 root@node2:~# iptables -A OUTPUT -d 192.168.0.211 -j LOGroot@node2:~# iptables -nvL Chain INPUT (policy ACCEPT 11 packets, 1910 bytes)pkts bytes target prot opt in out source destination 6 348 LOG all -- * * 192.168.0.211 0.0.0.0/0 LOG flags 0 level 4Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 7 packets, 748 bytes)pkts bytes target prot opt in out source destination 0 0 LOG all -- * * 0.0.0.0/0 192.168.0.211 LOG flags 0 level 4[root@centos ~]# ping 192.168.0.203 PING 192.168.0.203 (192.168.0.203) 56(84) bytes of data. 64 bytes from 192.168.0.203: icmp_seq=1 ttl=64 time=0.262 ms# 可以看到有兩條記錄,一條是INPUT的,一條是OUTPUT的。 # 正好對應上面的兩條規則 root@node2:~# journalctl -f -- Logs begin at Wed 2021-12-08 09:47:03 UTC. -- Feb 01 12:03:55 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=62477 DF PROTO=ICMP TYPE=8 CODE=0 ID=1363 SEQ=1 Feb 01 12:03:55 node2 kernel: IN= OUT=ens33 SRC=192.168.0.203 DST=192.168.0.211 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=50252 PROTO=ICMP TYPE=0 CODE=0 ID=1363 SEQ=1有些東西,不必特別說明,像按源地址匹配,肯定是進入本機前去過濾,按目的地址匹配,肯定是從本機出去之后過濾。下面的網卡設備也同理
2.4 按進入網卡設備匹配
-i|--in-interface [devicename]
可以用ifconfig查看網卡設備名稱
# 入口是本機回環地址的網卡的時候,記錄日志 root@node2:~# iptables -A INPUT -i lo-j LOGroot@node2:~# iptables -nvL INPUT Chain INPUT (policy ACCEPT 13 packets, 812 bytes)pkts bytes target prot opt in out source destination 0 0 LOG all -- lo * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4# 自己ping 本機回環地址 root@node2:~# ping localhost c 1 PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.112 msroot@node2:~# journalctl -f -- Logs begin at Wed 2021-12-08 09:47:03 UTC. -- Feb 01 12:45:05 node2 kernel: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=13506 DF PROTO=ICMP TYPE=8 CODE=0 ID=3 SEQ=1 Feb 01 12:45:05 node2 kernel: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=13507 PROTO=ICMP TYPE=0 CODE=0 ID=3 SEQ=12.5 按輸出網卡地址匹配
-o|--out-interface [devicename]
可以用ifconfig查看網卡設備名稱
# 出口是本機回環地址網卡的時候記錄日志 root@node2:~# iptables -A OUTPUT -o lo -j LOGroot@node2:~# iptables -nvL OUTPUT Chain OUTPUT (policy ACCEPT 20 packets, 1592 bytes)pkts bytes target prot opt in out source destination 0 0 LOG all -- * lo 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4# 自己ping 本機回環地址 root@node2:~# ping localhost -c 1 PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.142 msroot@node2:~# journalctl -f Feb 02 11:13:33 node2 kernel: IN= OUT=lo SRC=127.0.0.1 DST=127.0.0.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=47683 DF PROTO=ICMP TYPE=8 CODE=0 ID=4 SEQ=1 Feb 02 11:13:33 node2 kernel: IN= OUT=lo SRC=127.0.0.1 DST=127.0.0.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=47684 PROTO=ICMP TYPE=0 CODE=0 ID=4 SEQ=12.6 按源端口匹配
因為是按端口匹配,所以只能是對OSI傳輸層的協議,例如TCP,UDP
-p|--protocol [TCP|UDP] --sport [portNo]
# 來自TCP協議的80端口的訪問 記錄日志 #(因為80端口是在node2機器上開放的,所以在OUTPUT鏈里追加規則) root@node2:~# iptables -A OUTPUT -p TCP --sport 80 -j LOGroot@node2:~# iptables -nvL OUTPUT Chain OUTPUT (policy ACCEPT 42 packets, 5475 bytes)pkts bytes target prot opt in out source destination 0 1075 LOG tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp spt:80 LOG flags 0 level 4 [root@centos ~]# curl 192.168.0.203# 可以看到4條記錄。 root@node2:~# journalctl -f Feb 02 11:28:06 node2 kernel: IN= OUT=ens33 SRC=192.168.0.203 DST=192.168.0.211 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=80 DPT=60720 WINDOW=65160 RES=0x00 ACK SYN URGP=0 Feb 02 11:28:06 node2 kernel: IN= OUT=ens33 SRC=192.168.0.203 DST=192.168.0.211 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=25659 DF PROTO=TCP SPT=80 DPT=60720 WINDOW=509 RES=0x00 ACK URGP=0 Feb 02 11:28:06 node2 kernel: IN= OUT=ens33 SRC=192.168.0.203 DST=192.168.0.211 LEN=911 TOS=0x00 PREC=0x00 TTL=64 ID=25660 DF PROTO=TCP SPT=80 DPT=60720 WINDOW=509 RES=0x00 ACK PSH URGP=0 Feb 02 11:28:06 node2 kernel: IN= OUT=ens33 SRC=192.168.0.203 DST=192.168.0.211 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=25661 DF PROTO=TCP SPT=80 DPT=60720 WINDOW=509 RES=0x00 ACK FIN URGP=02.7 按目標端口匹配
-p|--protocol [TCP|UDP] --dport [portNo]
# TCP協議,目標端口是80 的 記錄日志 root@node2:~# iptables -A INPUT -p TCP --dport 80 -j LOGroot@node2:~# iptables -nvL INPUT Chain INPUT (policy ACCEPT 34 packets, 8905 bytes)pkts bytes target prot opt in out source destination 0 0 LOG tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 LOG flags 0 level 4[root@centos ~]# curl 192.168.0.203root@node2:~# journalctl -f -- Logs begin at Wed 2021-12-08 09:47:03 UTC. -- Feb 02 11:40:25 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=48899 DF PROTO=TCP SPT=60722 DPT=80 WINDOW=29200 RES=0x00 SYN URGP=0 Feb 02 11:40:25 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=48900 DF PROTO=TCP SPT=60722 DPT=80 WINDOW=229 RES=0x00 ACK URGP=0 Feb 02 11:40:25 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=129 TOS=0x00 PREC=0x00 TTL=64 ID=48901 DF PROTO=TCP SPT=60722 DPT=80 WINDOW=229 RES=0x00 ACK PSH URGP=0 Feb 02 11:40:25 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=48902 DF PROTO=TCP SPT=60722 DPT=80 WINDOW=242 RES=0x00 ACK URGP=0 Feb 02 11:40:25 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=48903 DF PROTO=TCP SPT=60722 DPT=80 WINDOW=242 RES=0x00 ACK FIN URGP=0 Feb 02 11:40:25 node2 kernel: IN=ens33 OUT= MAC=00:0c:29:42:c3:52:00:0c:29:07:cf:68:08:00 SRC=192.168.0.211 DST=192.168.0.203 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=48904 DF PROTO=TCP SPT=60722 DPT=80 WINDOW=242 RES=0x00 ACK URGP=02.8 其它匹配(match)
還有很多其它的匹配方式,可以參照match
3 動作跳轉(target)
target就是,規則匹配后進行的動作。
3.1 LOG
上面的匹配方式用的都是LOG,這里不再贅述。
3.2 ACCEPT
匹配條件后,如果target是ACCEPT,就代表接受規則,然后當前鏈的后面的規則和當前鏈所在表的其它鏈的規則都會被無視。
文字表達有點不清除,看下面的例子
# 1號規則是接受,2號規則是記錄日志(來自192.168.0.211的訪問) root@node2:~# iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 57 packets, 4586 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- * * 192.168.0.211 0.0.0.0/0 2 0 0 LOG all -- * * 192.168.0.211 0.0.0.0/0 LOG flags 0 level 4[root@centos ~]# ping 192.168.0.203 -c 1 PING 192.168.0.203 (192.168.0.203) 56(84) bytes of data. 64 bytes from 192.168.0.203: icmp_seq=1 ttl=64 time=1.28 ms# 查看LOG記錄看不到訪問日志 root@node2:~# journalctl -f# 可能有點不太清晰,這里把2號規則改成DROP root@node2:~# iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 16 packets, 968 bytes) num pkts bytes target prot opt in out source destination 1 7 481 ACCEPT all -- * * 192.168.0.211 0.0.0.0/0 2 0 0 DROP all -- * * 192.168.0.211 0.0.0.0/0 # 發現還是可以訪問 [root@centos ~]# ping 192.168.0.203 -c 1 PING 192.168.0.203 (192.168.0.203) 56(84) bytes of data. 64 bytes from 192.168.0.203: icmp_seq=1 ttl=64 time=0.769 ms3.3 DROP
匹配條件后,如果動作是DROP,就會丟棄數據包,不做任何處理。(因為不會返回信息,發送方一直是等待狀態,最好不用,可以用下面的REJECT)
# 來自192.168.0.211的訪問,全部丟棄(拒絕)。 root@node2:~# iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 6 packets, 364 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DROP all -- * * 192.168.0.211 0.0.0.0/0 # 可以看到提示的是timeout,如果timeout時間設置的比較長就會產生死套接字,占用端口 # 所以不推薦用DROP,推薦用REJECT [root@centos ~]# nc -v -w 2 192.168.0.203 -z 80 nc: connect to 192.168.0.203 port 80 (tcp) failed: Connection timed out3.4 REJECT
REJECT跟DROP大致相同,匹配規則后拒絕訪問,但是會給訪問機器返回一條錯誤消息。
REJECT 目標僅在 INPUT、FORWARD 和 OUTPUT 鏈或其子鏈中有效。
root@node2:~# iptables -nvL INPUT --line-numbers Chain INPUT (policy ACCEPT 8 packets, 1710 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 192.168.0.211 0.0.0.0/0 reject-with icmp-port-unreachable# 可以看到立刻返回被拒絕的錯誤消息 [root@centos ~]# nc -v -w 2 192.168.0.203 -z 80 nc: connect to 192.168.0.203 port 80 (tcp) failed: Connection refused上面其實大家比較熟知的普通防火墻的功能了,可以拒絕某個IP的訪問,也可以只接受某個IP的訪問,可以用協議+IP+端口做出各種組合來設計規則。
3.5?REDIRECT
匹配條件后,如果動作是REDIRECT ,就會根據重定向的規則轉發數據包。
僅在 nat 表的 PREROUTING 和 OUTPUT 鏈中有效。
端口號
-j?REDIRECT?--to-ports 8080
端口號范圍
-j?REDIRECT?--to-ports 8080-8090
其實這個target就是本機設置代理用的。
root@node2:~# iptables -t nat -A PREROUTING -p tcp --dport 8090 -j REDIRECT --to-ports 80root@node2:~# iptables -t nat -nvL PREROUTING --line-numbers Chain PREROUTING (policy ACCEPT 1 packets, 1314 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REDIRECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8090 redir ports 80# 可以看到8090端口沒有被啟用 root@node2:~# ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 127.0.0.1:6010 0.0.0.0:* LISTEN 0 511 0.0.0.0:80 0.0.0.0:* LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 [::1]:6010 [::]:* LISTEN 0 511 [::]:80 [::]:* LISTEN 0 128 [::]:22 [::]:* # 依然可以訪問成功 [root@centos ~]# curl 192.168.0.203:8090 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html> [root@centos ~]# # 用鏈接追蹤的命令可以看到端口轉發的過程 root@node2:~# conntrack -E[NEW] tcp 6 120 SYN_SENT src=192.168.0.211 dst=192.168.0.203 sport=34372 dport=8090 [UNREPLIED] src=192.168.0.203 dst=192.168.0.211 sport=80 dport=34372[UPDATE] tcp 6 60 SYN_RECV src=192.168.0.211 dst=192.168.0.203 sport=34372 dport=8090 src=192.168.0.203 dst=192.168.0.211 sport=80 dport=34372[UPDATE] tcp 6 432000 ESTABLISHED src=192.168.0.211 dst=192.168.0.203 sport=34372 dport=8090 src=192.168.0.203 dst=192.168.0.211 sport=80 dport=34372 [ASSURED][UPDATE] tcp 6 120 FIN_WAIT src=192.168.0.211 dst=192.168.0.203 sport=34372 dport=8090 src=192.168.0.203 dst=192.168.0.211 sport=80 dport=34372 [ASSURED][UPDATE] tcp 6 30 LAST_ACK src=192.168.0.211 dst=192.168.0.203 sport=34372 dport=8090 src=192.168.0.203 dst=192.168.0.211 sport=80 dport=34372 [ASSURED][UPDATE] tcp 6 120 TIME_WAIT src=192.168.0.211 dst=192.168.0.203 sport=34372 dport=8090 src=192.168.0.203 dst=192.168.0.211 sport=80 dport=34372 [ASSURED]3.6 DNAT
目標網絡地址轉換,僅在 nat 表中的 PREROUTING 和 OUTPUT 鏈中有效。
-j DNAT --to-destination 192.168.0.202[:port]
這個其實就是Docker,k8s里 常用的東西。
3.6.1 從本機訪問服務器
從本機做網絡地址轉換,只需要在OUTPUT鏈做地址轉換就可以
iptables -t nat -A OUTPUT \-p tcp -d $WAN_IP --dport $PORT -j DNAT --to-destination $SV_IP # 從本機訪問本機端口8090的數據會被轉發到192.168.0.202的80端口 root@node2:~# iptables -t nat -A OUTPUT-p tcp --dport 8090 -j DNAT --to-destination 192.168.0.202:80root@node2:~# iptables -t nat -nvL OUTPUT Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination 0 0 DNAT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8090 to:192.168.0.202:80Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destination # 實際上8090端口并未開放 root@node2:~# ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 127.0.0.1:6010 0.0.0.0:* LISTEN 0 128 127.0.0.1:6011 0.0.0.0:* LISTEN 0 511 0.0.0.0:80 0.0.0.0:* LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 [::1]:6010 [::]:* LISTEN 0 128 [::1]:6011 [::]:* LISTEN 0 511 [::]:80 [::]:* LISTEN 0 128 [::]:22 [::]:* root@node2:~# curl 192.168.0.203:8090 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;} </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p><p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p> </body> </html>下面是地址轉換的過程?
root@node2:~# conntrack -E[NEW] tcp 6 120 SYN_SENT src=192.168.0.203 dst=192.168.0.203 sport=48776 dport=8090 [UNREPLIED] src=192.168.0.202 dst=192.168.0.203 sport=80 dport=48776[UPDATE] tcp 6 60 SYN_RECV src=192.168.0.203 dst=192.168.0.203 sport=48776 dport=8090 src=192.168.0.202 dst=192.168.0.203 sport=80 dport=48776[UPDATE] tcp 6 432000 ESTABLISHED src=192.168.0.203 dst=192.168.0.203 sport=48776 dport=8090 src=192.168.0.202 dst=192.168.0.203 sport=80 dport=48776 [ASSURED][UPDATE] tcp 6 120 FIN_WAIT src=192.168.0.203 dst=192.168.0.203 sport=48776 dport=8090 src=192.168.0.202 dst=192.168.0.203 sport=80 dport=48776 [ASSURED][UPDATE] tcp 6 30 LAST_ACK src=192.168.0.203 dst=192.168.0.203 sport=48776 dport=8090 src=192.168.0.202 dst=192.168.0.203 sport=80 dport=48776 [ASSURED][UPDATE] tcp 6 120 TIME_WAIT src=192.168.0.203 dst=192.168.0.203 sport=48776 dport=8090 src=192.168.0.202 dst=192.168.0.203 sport=80 dport=48776 [ASSURED]3.6.2?把當前機器作為路由,來進行網絡地址轉發?
- 環境
- 實驗內容?
在192.168.0.211機器上訪問192.168.0.203的8091端口,然后轉發到192.168.0.202的80端口。
這種情況下不只是需要DNAT,還需要SNAT,從192.168.0.202的80端口返回的數據包要做源地址轉換。
- ?前提條件
- 鏈規則追加
- 在centos上訪問192.168.0.203:8091
因為實驗環境是靜態IP,如果是動態IP的話,可以不用SNAT來做源地址轉換,可以跟Docker一樣用MASQUERADE 來做源地址轉換。使用起來更加方便。
3.7 其它target
iptables還有很多target,像RETURN經常用,還有很多不常用的可以參照target
4 其它用法?
iptables還可以用limit match來做限流(rate limit),有興趣可以自己實驗一下。
還有很多不常用的用法。有機會用到繼續分享。
總結
以上是生活随笔為你收集整理的Linux学习整理-网络防火墙iptables-实践篇2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Node.js(爱前端) 一
- 下一篇: Linux 随机数