iptables 讀書筆記

liiinuuux發表於2012-11-23
原創文章,轉載請標明出處
http://space.itpub.net/26239116/viewspace-749818

iptables有多個表(table),每個表裡有一系列規則鏈。
預設的表叫filter,用來根據包來做過濾。filter表中有三個預設的鏈:
FORWARD鏈:過濾轉發包的規則
INPUT鏈:過濾輸入包規則
OUTPUT鏈:過濾輸出包規則

iptables還有nat和mangle兩個表,nat用在地址轉換中,mangle可以過濾和修改filter和net之外的包,如修改IP包的TTL等。

每條鏈有一個target,filter表中的規則可以使用的target有ACCEPT、DROP、REJECT、LOG、MIRROR、QUEUE、REDIRECT、RETURN、ULOG。
當一條規則落在ACCEPT上的時候,匹配這個規則的包就可以透過。
DROP和REJECT會把包丟棄,DROP是默默丟棄,REJECT會返回一個ICMP錯誤資訊。
REJECT把包分流到一個代理,而不是直接讓它透過,比如引導web流量。

iptables命令形式:
iptables -F chainName
iptables -P chainName target
iptables -A chainName -i interface -j target

-F:清除鏈條中的所有規則。
-p:設定預設策略。
-A:給鏈條附加規則,可以用-t指定表名,否則預設新增到filter表中。-j指定目標。
其它引數:
-p:協議,如tcp udp icmp
-s:源IP
-d:目標IP
--sport:源埠
--dport:目標埠
--icmp-type:ICMP型別
!:否定條件
-t:指定表名,如果不指定,則預設是filter表

舉例
假設一臺linux伺服器充當閘道器角色,有兩個網路介面:
     ppp0
          通往internet
          IP地址128.138.101.4
     eth0
          通往內網
          IP地址10.1.1.1
需要iptables保護內網中10.1.1.2伺服器

首先需要確保載入了iptables模組,並啟用ip forwarding。
vi /etc/sysctl.conf
新增 net.ipv4.ip_forward=1
然後執行sysctl -p
(如果怕引數名寫錯,可以看有個檔案叫/proc/sys/net/ipv4/ip_forward
把/proc/sys/去掉,然後把斜槓換成點就是net.ipv4.ip_forward。)

首先初始化filter表:
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP

給FORWARD鏈定義透過規則:
iptables -A FORWARD -i eth0 -p ANY -j ACCEPT (信任內網的一切包)
iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 22 -j ACCEPT (允許外網訪問10.1.1.2的SSH)
iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 80 -j ACCEPT  (允許外網訪問10.1.1.2的80埠)
iptables -A FORWARD -d 10.1.1.2 -p tcp --dport 443 -j ACCEPT(允許外網訪問10.1.1.2的https埠)

給閘道器自己設定規則:
iptables -A INPUT -i eth0 -d 10.1.1.1 -p tcp --dport 22 -j ACCEPT (允許來自內網的SSH連線)
iptables -A INPUT -i lo -d 10.1.1.1 -p ANY -j ACCEPT (閘道器透過loopback地址自己連自己)
iptables -A INPUT -i eth0 -d 10.1.1.1 -p icmp --icmp-type 8 -j ACCEPT (允許來自內網的ping)

開放各種icmp包
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 5 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 0 -j ACCEPT
iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 3 -j ACCEPT
iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 5 -j ACCEPT
iptables -A FORWARD -d 10.1.1.2 -p icmp --icmp-type 11 -j ACCEPT

為net表的PREROUTING設定策略,可以應用於所有其他鏈條。
iptables -t nat -A PREROUTING -i ppp0 -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 192.168.0.0/16 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 127.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i ppp0 -s 224.0.0.0/4 -j DROP

為外來的包記錄日誌
iptables -A INPUT -i ppp0 -j LOG
iptables -A FORWARD -i ppp0 -j LOG

檢視當前規則
iptables -nL --line-numbers (還會顯示行號,刪除時用行號)

刪除規則
iptables -D INPUT 1 (刪除INPUT鏈條的1號規則)









來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26239116/viewspace-749818/,如需轉載,請註明出處,否則將追究法律責任。