防火牆( FireWall ):隔離功能,工做在網絡或主機邊緣,對進出網絡或主機的 數據包基於必定的規則檢查,並在匹配某規則時由規則定義的行爲進行處理的一組功能的組件,基本上的實現都是默認狀況下關閉全部的經過型訪問,只開放容許訪問的策略vim
主機防火牆:服務範圍爲當前主機
網絡防火牆:服務範圍爲防火牆一側的局域網 centos
硬件防火牆:在專用硬件級別實現部分功能的防火牆;另外一個部分功能基於軟件實現
軟件防火牆:運行於通用硬件平臺之上的防火牆的應用軟件 安全
網絡層防火牆服務器
應用層防火牆/代理服務器網絡
規則rule:根據規則的匹配條件嘗試匹配報文,對匹配成功的報文根據規則定義的處理動 做做出處理 併發
報文進入主機以後,流經的路徑:
由上圖能夠看出報文的流向:tcp
規則要添加在鏈上,才生效;添加在自定義上不會自動生效 ide
防火牆的做用就是對通過的報文匹配規則,而後執行響應的動做,當報文通過這些"關卡"的時候,必須匹配"關卡"上的規則,可是關卡上有不少的規則,當咱們把這些規則串到一條鏈上的時候,就造成了鏈,以下圖所示
鏈chainpost
把具備相同規則的集合叫表
表的分類google
全部的規則都是這四張表中的規則,也就是說,全部的規則都存在這四張表中
鏈到表的對應關係
表到鏈的對應關係
數據通過防火牆的流程
紅色箭頭是表的執行順序,藍色箭頭是數據流向
處理動做:(處理動做被稱爲target)
基本動做:
iptables -I INPUT -p tcp --dport 80 -j LOG --log-prefix "new connection:"
擴展動做:
–reject-with 後面跟參數
#實現本身能夠ping其餘人,其餘人沒法ping本身.icmp-type 8是請求icmp-type 0是迴應 iptables -A INPUT -p icmp -j REJECT iptables -A OUTPUT -p icmp -j REJECT iptables -I OUTPUT 1 -p icmp --icmp-type 8 -j ACCEPT iptables -I INPUT 1 -p icmp --icmp-type 0 -j ACCEPT
#只贊成接受某些端口 iptables -R INPUT 1 -p tcp -m multiport --dport 21:23,80,53 -j ACCEPT
#只容許規定的網段IP訪問 iptables -I INPUT 1 -p tcp --dport 22 -m iprange --src-range 192.168.153.101-192.168.153.103 -j ACCEPT
#若是IP過多,能夠加到一個集合裏,經過控制集合來實現控制大量IP ipset create httplist hash:net maxelem 10000 #限制一個集合裏的最大IP數 ipset add httplist 192.168.153.101 #添加IP到集合裏 ipset --list #查看集合裏的IP iptables -I OUTPUT 1 -p tcp --sport 80 -m set --match-set httplist dst -j ACCEPT iptables -I INPUT 1 -p tcp --dport 80 -m set --match-set httplist src -j ACCEPT
iptables -I INPUT 1 -m string --algo bm --string "google" -j REJECT #限制路徑裏有"google"的請求 iptables -R INPUT 1 -m time --timestart 7:00 --timestop 8:55 --weekdays Mon,Thu -m string --algo bm --string "baidu" -j REJECT #每週的週一,週二的早7點到早8:55訪問路徑中有"baidu"的請求拒絕
#控制訪問併發樹,即每一個IP同時鏈接到一個服務器個數 iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 1 -j REJECT
#控制每分鐘鏈接的個數爲10,即6個只容許一個訪問被迴應 iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 8 -j ACCEPT
# modprobe nf_conntrack_ftp #加載ftp的這個模塊 lsmod |grep nf_conntrack_ftp #查看是否加載模塊 iptables -I INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT #這裏的--state NEW能夠不寫,只是強調是否經過21號端口第一次簡歷端口 iptables -I INPUT 2 -m state --state ESTABLISHED,RELATED -j ACCEPT #讓追蹤服務器開啓的這個Y端口
實驗環境
host ip:192.168.153.7 ip: 10.10.10.7 兩塊網卡
inside ip:192.168.153.101
outside ip:10.10.10.102
[root@firewall ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 [root@firewall ~]# sysctl -p #檢查是否開啓轉發 net.ipv4.ip_forward = 1
[root@inside ~]# route add default gw 192.168.153.7
[root@outside ~]# route add default gw 10.10.10.7
#方法一 #利用icmp 的8 和 0 端口來作轉發實現限制ping [root@firewall ~]# iptables -A FORWARD -j REJECT [root@firewall ~]# iptables -I FORWARD -s 192.168.153.0/24 -d 10.0.0.0/8 -p icmp --icmp-type 8 -j ACCEPT [root@firewall ~]# iptables -I FORWARD -d 192.168.153.0/24 -s 10.0.0.0/8 -p icmp --icmp-type 0 -j ACCEPT #方法二#利用發過去的icmp報文返回的響應作追蹤 [root@firewall ~]# iptables -A FORWARD -j REJECT [root@firewall ~]# iptables -I FORWARD -s 192.168.153.0/24 -d 10.0.0.0/8 -p icmp --icmp-type 8 -j ACCEPT [root@firewall ~]# iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT #方法三#利用狀態追蹤,對第一次發送的icmp報文後返回的icmp響應追蹤 [root@firewall ~]# iptables -A FORWARD -j REJECT [root@firewall ~]# iptables -I FORWARD -s 192.168.153.0/24 -d 10.0.0.0/8 -p icmp -m state --state NEW -j ACCEPT [root@firewall ~]# iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
[root@firewall ~]# iptables -t nat -A POSTROUTING -s 192.168.153.0/24 -j SNAT --to-source 172.18.254.96 [root@firewall ~]# iptables -t nat -A POSTROUTING -s 192.168.153.0/24 -j MASQUERADE
#在inside開啓httpd服務,設置默認端口爲9527端口 [root@firewall ~]# iptables -t nat -A PREROUTING -d 172.18.254.96 -p tcp --dport 80 -j DNAT --to-destination 192.168.153.101:9527