netfilter、iptables、firewalld的關係:linux
iptables服務和firewalld服務都不是真正的防火牆,只是用來定義防火牆規則功能的管理工具,將定義好的規則交由內核中的netfilter(網絡過濾器來讀取)從而實現真正的防火牆功能。centos
關係如圖:(iptables/firewalld管理工具都是經過iptables命令來管理防火牆netfilter)bash
在centos7以上的版本中使用firewalld服務替代了iptables服務,可是依然可使用iptables來管理防火牆netfilter,爲了不衝突使用iptables以前須要先關閉firewalld網絡
關閉firewalld:app
[root@linux ~]# systemctl stop firewalld.service
禁止開機啓動firewalld:ssh
[root@linux ~]# systemctl disable firewalld.service
安裝iptables服務管理工具:tcp
[root@linux ~]# yum -y install iptables-services
設置開機啓動iptables:工具
[root@linux ~]# systemctl enable iptables.service
啓動iptables:centos7
[root@linux ~]# systemctl start iptables.service
netfilter 5表5鏈:日誌
filter 表用於過濾數據包,有INPUT丶FORWARD丶OUTPUT三個鏈 nat 表用於網絡地址轉換,有PREROUTING丶OUTPUT丶POSTROUTING三個鏈 mangle 表用於給數據包作標記 raw 表能夠實現不追蹤某些數據包 security 表在centos7中才出現,用於強制訪問控制(MAC)的網絡規則
最經常使用的5鏈:INPUT丶FORWARD丶OUTPUT、PREROUTING丶POSTROUTING
iptables數據包的傳輸過程:
1.當一個數據包進入網卡時,它首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否須要轉送出去。 2.若是數據包就是進入本機的,它就會沿着圖向下移動,到達INPUT鏈。數據包到了INPUT鏈後,任何進程都會收到它。本機上運行的程序能夠發送數據包,這些數據包會通過OUTPUT鏈,而後到達POSTROUTING鏈輸出。 3.若是數據包是要轉發出去的,且內核容許轉發,數據包就會如圖所示向右移動,通過FORWARD鏈,而後到達POSTROUTING鏈輸出。
查看iptables規則:
[root@linux ~]# iptables -nvL
查看iptables規則配置文件:
[root@linux ~]# cat /etc/sysconfig/iptables
清空iptables規則:
[root@linux ~]# iptables -F
*清空後使用 iptables -nvL會看到規則已經被清空,但 /etc/sysconfig/iptables文件中規則配置還在,須要執行 service iptables save 才能使配置文件生效
計數器清零:
[root@linux ~]# iptables -Z
*iptables -nvL的輸出信息中,第一列表明數據包的數量,第二列表明數據大小,在有須要時,可使用 -Z參數清零重新計算
iptables添加防火牆規則:
[root@linux ~]# iptables -A INPUT -p tcp -s 192.168.1.100 --sport 80 -d 192.168.1.200 --dport 80 -j DROP
可根據實際需求自由選擇參數設置規則:
-A :append (在現有規則後面補充/添加一條) -I:insert (在規則最前面插入一條) INPUT:指定鏈 -p:protocol 指定請求的協議(tcp、udp、icmp等) -s:source 源地址 --sport :原地址的端口(如不指定,則默認全部端口) -d:目標地址 --dport:目標地址的端口 -i:指定網卡名 -j:控制類型(ACCEPT:容許經過,LOG:記錄日誌信息,而後傳給下一條規則繼續匹配, REJECT:拒絕經過,必要時會給出提示,DROP:直接丟棄,不給出任何迴應) -P:給指定的鏈設置默認策略:iptables -P INPUT (DROP|ACCEPT)
iptables刪除一條規則:-D參數
1.將添加規則的語句中的-A改成-D便可
2.根據規則錶行號刪除:
[root@linux ~]# iptables -L INPUT --line-numbers #列出INPUT鏈的全部規則和行號 Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED 2 ACCEPT icmp -- anywhere anywhere 3 ACCEPT all -- anywhere anywhere 4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh 5 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited 6 DROP tcp -- 192.168.1.100 192.168.1.200 tcp spt:http dpt:http
刪除指定行便可:
[root@linux ~]# iptables -D INPUT 6
注意: 1.在添加規則後,會當即生效,但添加的內容還未寫進配置文件 /etc/sysconfig/iptables中,重啓iptables服務就會失效,如需永久生效,在作完變動後,執行 service iptables save便可
2.在刪除規則時,需注意規則是否寫入配置文件中,如沒有,直接刪除便可,如寫入了配置文件中,刪除後需執行 service iptables save 才能避免在重啓iptables服務後恢復刪除了的規則
案例補充: 禁止別人ping本機:
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
腳本:
#! /bin/bash ipt="/usr/sbin/iptables" $ipt -F $ipt -P INPUT DROP $ipt -P OUTPUT ACCEPT $ipt -P FORWARD ACCEPT $ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT $ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT $ipt -A INPUT -p tcp --dport 80 -j ACCEPT $ipt -A INPUT -p tcp --dport 21 -j ACCEPT
*禁止全部 INPUT網絡包,只打開80、21端口和192.168.133.0網段的22端口