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


  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 規則序號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM