實驗架構
此實驗實際上防火牆兩邊都需要是公網IP,並且在此實驗中,防火牆充當一個路由器,只是添加了一些訪問控制規則;外網用戶訪問內網的nginx服務; 1、vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #防火牆開啟路由器轉發功能 2、sysctl -p
防火牆在此實驗中只是起到了轉發作用,所以報文都不是發送到防火牆本機的,規則需要在filter表的FORWARD鏈上添加 1、iptables -A FORWARD -j REJECT
#首先添加拒絕轉發所有的報文,防止外網訪問內網 2、iptables -I FORWARD 1 -m state --state ESTABLISHED,RELATED -j ACCEPT #在forward鏈上插入規則,允許防火牆轉發已經建立連接或與已有連接相關的連接的報文 3、iptables -I FORWARD 2 -d 192.168.39.100 -p tcp --dport 80 -j ACCEPT #允許防火牆轉發訪問192.168.39.100服務器TCP80端口的請求;這樣在外網訪問內網80端口時,第一次建立連接后,客戶端已經與服務端80端口建立一次連接,響應報文就可以匹配第一條規則,允許轉發已經建立連接的報文
把自定義規則添加到自定義鏈中,然后再把自定義鏈,鏈接到系統自帶的5個鏈中; 關聯自定義鏈類似於腳本中的函數引用,先定義好函數,然后再引用函數; 自定義鏈好處是把之前的多條規則整合成一條規則(實際規則數量並沒有變,只是顯示的更清晰一些),並且修改規則只需要修改自定義鏈即可; 1、iptables -E TO_LAN
#創建一個名為TO_LAN的自定義鏈 2、iptables -A TO_LAN -d 192.168.39.100 -p tcp --dport 80 -j ACCEPT #將此規則先從FORWARD鏈中刪除,然后再把該規則添加到TO_LAN自定義鏈中 3、iptables -I FORWARD 2 -j TO_LAN #自定義鏈要想引用,需要把自定義鏈添關聯到指定鏈中;即把自定義鏈插入成FORWARD鏈的第2條規則,這樣就可以引用自定義鏈
iptables -E old_name new_name
1、iptables -D FORWARD 2 #刪除自定義鏈時,先從引用自定義鏈的相關鏈中刪除所引用的自定義鏈 2、iptables -F TO_LAN #然后清空自定義鏈中的所有規則 3、iptables -X TO_LAN #刪除自定義空鏈;如果自定義鏈被引用或者自定義鏈中有規則,則無法刪除自定義鏈