1、filter(過濾規則表)
$ iptables -nL --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain FORWARD (policy DROP)
num target prot opt source destination
1 DOCKER-USER all -- 0.0.0.0/0 0.0.0.0/0
2 DOCKER-ISOLATION all -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
4 DOCKER all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
6 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
8 DOCKER all -- 0.0.0.0/0 0.0.0.0/0
9 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
10 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain DOCKER (2 references)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 172.17.0.3 tcp dpt:6800
2 ACCEPT tcp -- 0.0.0.0/0 172.17.0.3 tcp dpt:80
3 ACCEPT tcp -- 0.0.0.0/0 172.17.0.4 tcp dpt:8080
4 ACCEPT tcp -- 0.0.0.0/0 172.17.0.5 tcp dpt:8080
5 ACCEPT tcp -- 0.0.0.0/0 172.17.0.9 tcp dpt:1804
6 ACCEPT tcp -- 0.0.0.0/0 172.17.0.10 tcp dpt:22000
7 ACCEPT tcp -- 0.0.0.0/0 172.17.0.10 tcp dpt:8384
8 ACCEPT tcp -- 0.0.0.0/0 172.17.0.11 tcp dpt:5000
9 ACCEPT tcp -- 0.0.0.0/0 172.17.0.12 tcp dpt:1604
10 ACCEPT tcp -- 0.0.0.0/0 172.17.0.13 tcp dpt:53
11 ACCEPT udp -- 0.0.0.0/0 172.17.0.13 udp dpt:53
12 ACCEPT tcp -- 0.0.0.0/0 172.17.0.14 tcp dpt:1404
13 ACCEPT tcp -- 0.0.0.0/0 172.17.0.15 tcp dpt:8080
14 ACCEPT tcp -- 0.0.0.0/0 172.18.0.6 tcp dpt:8080
Chain DOCKER-ISOLATION (1 references)
num target prot opt source destination
1 DROP all -- 0.0.0.0/0 0.0.0.0/0
2 DROP all -- 0.0.0.0/0 0.0.0.0/0
3 RETURN all -- 0.0.0.0/0 0.0.0.0/0
Chain DOCKER-USER (1 references)
num target prot opt source destination
1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
$ iptables -S
-P INPUT ACCEPT //定義INPUT鏈的接受策略
-P FORWARD DROP //定義FORWARD鏈的丟棄策略
-P OUTPUT ACCEPT
-N DOCKER //新建一條DOCKER鏈
-N DOCKER-ISOLATION
-N DOCKER-USER
//追加FORWARD鏈,並跳至DOCKER-USER鏈
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION
//追加FORWARD鏈,並指定數據包從docker0網卡流出,以鏈接跟蹤的模式,鏈接跟蹤狀態爲參數(有關聯的、成功創建的),做爲接受對象
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
//追加FORWARD鏈,並指定數據包從docker0網卡流出,最終跳至DOCKER鏈
-A FORWARD -o docker0 -j DOCKER
//追加FORWARD鏈,並指定數據包從docker0網卡流入,從除了docker0外的網卡流出,做爲接受對象
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o br-87e1f9a392f2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o br-87e1f9a392f2 -j DOCKER
-A FORWARD -i br-87e1f9a392f2 ! -o br-87e1f9a392f2 -j ACCEPT
-A FORWARD -i br-87e1f9a392f2 -o br-87e1f9a392f2 -j ACCEPT
//追加DOCKER鏈,並指定匹配數據包的目標地址爲172.17.0.3/32,指定數據包從除docker0的網卡流入,從docker0網卡流出,協議類型爲TCP,目標端口號爲6800,做爲接受對象
-A DOCKER -d 172.17.0.3/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 6800 -j ACCEPT
-A DOCKER -d 172.17.0.3/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT
-A DOCKER -d 172.17.0.4/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 8080 -j ACCEPT
-A DOCKER -d 172.17.0.5/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 8080 -j ACCEPT
-A DOCKER -d 172.17.0.9/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 1804 -j ACCEPT
-A DOCKER -d 172.17.0.10/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 22000 -j ACCEPT
-A DOCKER -d 172.17.0.10/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 8384 -j ACCEPT
-A DOCKER -d 172.17.0.11/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 5000 -j ACCEPT
-A DOCKER -d 172.17.0.12/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 1604 -j ACCEPT
-A DOCKER -d 172.17.0.13/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 53 -j ACCEPT
-A DOCKER -d 172.17.0.13/32 ! -i docker0 -o docker0 -p udp -m udp --dport 53 -j ACCEPT
-A DOCKER -d 172.17.0.14/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 1404 -j ACCEPT
-A DOCKER -d 172.17.0.15/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 8080 -j ACCEPT
-A DOCKER -d 172.18.0.6/32 ! -i br-87e1f9a392f2 -o br-87e1f9a392f2 -p tcp -m tcp --dport 8080 -j ACCEPT
//追加DOCKER-ISOLATION鏈,並指定數據包從br-87e1f9a392f2網卡流入,從docker0網卡流出,做爲丟棄對象
-A DOCKER-ISOLATION -i br-87e1f9a392f2 -o docker0 -j DROP
-A DOCKER-ISOLATION -i docker0 -o br-87e1f9a392f2 -j DROP
//追加DOCKER-ISOLATION鏈,做爲返回調用鏈
-A DOCKER-ISOLATION -j RETURN
-A DOCKER-USER -j RETURN
2、nat(地址轉換規則表)
$ iptables -nL --line-number -t nat
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
1 MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
2 MASQUERADE all -- 172.18.0.0/16 0.0.0.0/0
3 MASQUERADE tcp -- 172.17.0.3 172.17.0.3 tcp dpt:6800
4 MASQUERADE tcp -- 172.17.0.3 172.17.0.3 tcp dpt:80
5 MASQUERADE tcp -- 172.17.0.4 172.17.0.4 tcp dpt:8080
6 MASQUERADE tcp -- 172.17.0.5 172.17.0.5 tcp dpt:8080
7 MASQUERADE tcp -- 172.17.0.9 172.17.0.9 tcp dpt:1804
8 MASQUERADE tcp -- 172.17.0.10 172.17.0.10 tcp dpt:22000
9 MASQUERADE tcp -- 172.17.0.10 172.17.0.10 tcp dpt:8384
10 MASQUERADE tcp -- 172.17.0.11 172.17.0.11 tcp dpt:5000
11 MASQUERADE tcp -- 172.17.0.12 172.17.0.12 tcp dpt:1604
12 MASQUERADE tcp -- 172.17.0.13 172.17.0.13 tcp dpt:53
13 MASQUERADE udp -- 172.17.0.13 172.17.0.13 udp dpt:53
14 MASQUERADE tcp -- 172.17.0.14 172.17.0.14 tcp dpt:1404
15 MASQUERADE tcp -- 172.17.0.15 172.17.0.15 tcp dpt:8080
16 MASQUERADE tcp -- 172.18.0.6 172.18.0.6 tcp dpt:8080
Chain DOCKER (2 references)
num target prot opt source destination
1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
2 RETURN all -- 0.0.0.0/0 0.0.0.0/0
3 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:6800 to:172.17.0.3:6800
4 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:6789 to:172.17.0.3:80
5 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:4096 to:172.17.0.4:8080
6 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9001 to:172.17.0.5:8080
7 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1804 to:172.17.0.9:1804
8 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22000 to:172.17.0.10:22000
9 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8384 to:172.17.0.10:8384
10 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5000 to:172.17.0.11:5000
11 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1604 to:172.17.0.12:1604
12 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 to:172.17.0.13:53
13 DNAT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53 to:172.17.0.13:53
14 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:1404 to:172.17.0.14:1404
15 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5001 to:172.17.0.15:8080
16 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:5555 to:172.18.0.6:8080
$ iptable -S -n nat
-P PREROUTING ACCEPT //定義PREROUTING鏈的接受策略
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N DOCKER //新建一條DOCKER鏈
//追加PREROUTING鏈,並以地址類型的模式,目標地址類型是本地爲參數,最終跳至DOCKER鏈
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
//追加OUTPUT鏈,而且不能以127.0.0.0/8做爲目標IP地址,而以地址類型的模式,目標地址類型是本地爲參數,最終跳至DOCKER鏈
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
//追加POSTROUTING鏈,並以172.17.0.0/16爲源IP地址,但指定數據包不從docker0網卡流出,做爲地址假裝對象
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
//追加POSTROUTING鏈,並以172.18.0.0/16爲源IP地址,但指定數據包不從br-87e1f9a392f2網卡流出,做爲地址假裝對象
-A POSTROUTING -s 172.18.0.0/16 ! -o br-87e1f9a392f2 -j MASQUERADE
//追加POSTROUTING鏈,並以172.17.0.3/32爲源IP地址,以172.17.0.3/32爲目標IP地址,協議類型爲TCP,以TCP爲模式,目標端口爲6800,做爲地址假裝對象
-A POSTROUTING -s 172.17.0.3/32 -d 172.17.0.3/32 -p tcp -m tcp --dport 6800 -j MASQUERADE
-A POSTROUTING -s 172.17.0.3/32 -d 172.17.0.3/32 -p tcp -m tcp --dport 80 -j MASQUERADE
-A POSTROUTING -s 172.17.0.4/32 -d 172.17.0.4/32 -p tcp -m tcp --dport 8080 -j MASQUERADE
-A POSTROUTING -s 172.17.0.5/32 -d 172.17.0.5/32 -p tcp -m tcp --dport 8080 -j MASQUERADE
-A POSTROUTING -s 172.17.0.9/32 -d 172.17.0.9/32 -p tcp -m tcp --dport 1804 -j MASQUERADE
-A POSTROUTING -s 172.17.0.10/32 -d 172.17.0.10/32 -p tcp -m tcp --dport 22000 -j MASQUERADE
-A POSTROUTING -s 172.17.0.10/32 -d 172.17.0.10/32 -p tcp -m tcp --dport 8384 -j MASQUERADE
-A POSTROUTING -s 172.17.0.11/32 -d 172.17.0.11/32 -p tcp -m tcp --dport 5000 -j MASQUERADE
-A POSTROUTING -s 172.17.0.12/32 -d 172.17.0.12/32 -p tcp -m tcp --dport 1604 -j MASQUERADE
-A POSTROUTING -s 172.17.0.13/32 -d 172.17.0.13/32 -p tcp -m tcp --dport 53 -j MASQUERADE
//追加POSTROUTING鏈,並以172.17.0.13/32爲源IP地址,以172.17.0.13/32爲目標IP地址,協議類型爲UDP,以UDP爲模式,目標端口爲53,做爲地址假裝對象
-A POSTROUTING -s 172.17.0.13/32 -d 172.17.0.13/32 -p udp -m udp --dport 53 -j MASQUERADE
-A POSTROUTING -s 172.17.0.14/32 -d 172.17.0.14/32 -p tcp -m tcp --dport 1404 -j MASQUERADE
-A POSTROUTING -s 172.17.0.15/32 -d 172.17.0.15/32 -p tcp -m tcp --dport 8080 -j MASQUERADE
-A POSTROUTING -s 172.18.0.6/32 -d 172.18.0.6/32 -p tcp -m tcp --dport 8080 -j MASQUERADE
//追加DOCKER鏈,並指定數據包從docker0網卡流入,做爲返回調用鏈
-A DOCKER -i docker0 -j RETURN
-A DOCKER -i br-87e1f9a392f2 -j RETURN
//追加DOCKER鏈,並指定數據包從除docker0的網卡流入,協議類型爲TCP,以TCP爲模式,目標端口爲6800,做爲目標地址轉換,目標地址爲172.17.0.3:6800
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 6800 -j DNAT --to-destination 172.17.0.3:6800
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 6789 -j DNAT --to-destination 172.17.0.3:80
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 4096 -j DNAT --to-destination 172.17.0.4:8080
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 9001 -j DNAT --to-destination 172.17.0.5:8080
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 1804 -j DNAT --to-destination 172.17.0.9:1804
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 22000 -j DNAT --to-destination 172.17.0.10:22000
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 8384 -j DNAT --to-destination 172.17.0.10:8384
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 5000 -j DNAT --to-destination 172.17.0.11:5000
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 1604 -j DNAT --to-destination 172.17.0.12:1604
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 172.17.0.13:53
-A DOCKER ! -i docker0 -p udp -m udp --dport 53 -j DNAT --to-destination 172.17.0.13:53
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 1404 -j DNAT --to-destination 172.17.0.14:1404
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 5001 -j DNAT --to-destination 172.17.0.15:8080
-A DOCKER ! -i br-87e1f9a392f2 -p tcp -m tcp --dport 5555 -j DNAT --to-destination 172.18.0.6:8080