嵌入式Linux可用的防火牆——iptables:實現ip白名單、mac地址白名單

買菜不買掛發表於2021-08-21

  iptables是linux系統下的一個功能強大的模組,不僅可以用作防火牆,還可以實現NAT等眾多路由功能。iptables的容器有很清晰的層次關係:

  1. iptables是表的容器,iptables包含表(4張表)

  2. 表是鏈的容器,每個表都包含若干個鏈

  3. 鏈是規則的容器,真正的過濾規則是屬於鏈裡面的

  iptables是採用資料包過濾機制工作的,它會對請求的資料包的包頭資料進行分析,並根據預先設定的規則來進行匹配,決定是否可以進入主機,流程如下:

 

   從上圖不難看出,防火牆是一層層過濾的,按照配置規則的順序從上到下,從前到後進行過濾。如果匹配上規則,即明確了是阻止還是通過,此時資料包就不再往下匹配新規則了。否則一直向下匹配,直到匹配到預設規則,得到明確的阻止或通過;防火牆的預設規則是對應鏈的所有規則執行完後才會執行的。

  iptables根據功能和表的定義劃分包含三個表,filter,nat,mangle,其每個表又包含不同的操作鏈(Chains)。要使用iptables實現ip白名單、mac地址白名單,只需使用filter表。filter表包含的操作鏈有三個:INPUT、FORWARD、OUTPUT:

  1.INPUT負責過濾所有目標地址是本機地址的資料包,即進入主機的資料包

  2.FORWARD負責轉發流經主機的資料包

  3.OUTPUT負責處理所有源地址是本機地址的資料包,即主機發出的資料包

  防火牆功能主要設定INPUT鏈的規則。首先載入如下模組到Linux核心:

modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack 連線跟蹤
modprobe ip_conntrack_ftp 連線跟蹤
modprobe ip_nat_ftp
modprobe ipt_state

  iptables的語法如下:

iptables -P INPUT DROP
iptables [-A/-I num] INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT

-A: 新增規則到指定鏈的結尾,最後一條
-I num: 新增規則到指定鏈的指定行,num預設為1,即新增到第一條
-t: 指定表,不指定預設為filter
-p: 指定協議(all,tcp,udp,icmp),預設為all
--dport: 指定埠
-j: 處理的行為, ACCEPT, DROP, REJECT(最好使用drop而非reject,因為'拒絕'會返回給使用者資訊)
-P: 設定預設策略
-s: 匹配來源地址IP/MASK
-i: 接網路卡名稱,匹配從這塊網路卡流入的資料
-o: 接網路卡名稱,匹配從這塊網路卡流出的資料
    #setting for loopback interface
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT

-m mac --mac-source XX:XX:XX:XX:XX:XX
-m state --state NEW/ESTABLISHED/RELATED/INVALID    //可以用,連線多個

  可以看到,例項的第二句即是將某個MAC地址加入白名單中。第一句則是將INPUT的預設規則設為DROP,以遮蔽來自其它MAC訊息。若要刪除規則,可使用以下方法:

iptables -F    //清除所有規則
iptables -D INPUT -p tcp --dport 8080 -j DROP(刪除指定鏈中匹配的規則)
/etc/init.d/iptables restart (用iptables命令列配置的命令都是臨時生效)
iptables -D INPUT 規則序號

相關文章