Linux下iptables的用法

轉載自鳥哥的私房菜網站

[root@www ~]# iptables [-t tables] [-L] [-nv]選項與參數:
-t :後面接 table ,例如 nat 或 filter ,若省略此項目,則使用默認的 filter
-L :列出目前的 table 的規則
-n :不進行 IP 與 HOSTNAME 的檢查,顯示信息的速度會快很多!
-v :列出更多的信息,包括通過該規則的封包總位數、相關的網絡接口等
[root@www ~]#iptables [-AI 名稱] [-io 網絡接口] [-p 協議] [-s 來源IP/網段] [-d 目標IP/網段] -j [ACCEPT|DROP|REJECT|LOG]

選項與參數:
-AI 鏈名:針對某的鏈進行規則的 "插入" 或 "累加"
   -A :新增加一條規則,該規則增加在原本規則的最後面。例如原本已經有四條規則,
        使用 -A 就可以加上第五條規則!
   -I :插入一條規則。如果沒有指定此規則的順序,默認是插入變成第一條規則。
        例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 號
   鏈 :有 INPUT, OUTPUT, FORWARD 等,此鏈名稱又與 -io 有關,請看底下。
-io 網絡接口:設定封包進出的接口規範
   -i :封包所進入的那個網絡接口,例如 eth0, lo 等接口。需與 INPUT 鏈配合;
   -o :封包所傳出的那個網絡接口,需與 OUTPUT 鏈配合;
-p 協定:設定此規則適用於哪種封包格式
  主要的封包格式有: tcp, udp, icmp 及 all 。
-s 來源 IP/網域:設定此規則之封包的來源項目,可指定單純的 IP 或包括網域,例如:
  IP  :192.168.0.100
  網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
  若規範爲『不許』時,則加上 ! 即可,例如:
  -s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;
-d 目標 IP/網域:同 -s ,只不過這裏指的是目標的 IP 或網域。
-j :後面接動作,主要的動作有接受(ACCEPT)、丟棄(DROP)、拒絕(REJECT)及記錄(LOG)

範例:只要是來自 192.168.100.10 就接受,但 192.168.100.230 這個惡意來源就丟棄
[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.10 -j ACCEPT
[root@www ~]# iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP
範例:想要聯機進入本機 port 21 的封包都抵擋掉:
[root@www ~]# iptables -A INPUT -i eth0 -p tcp --dport 21 -j DROP


[root@www ~]# iptables -A INPUT [-m state] [--state 狀態]

選項與參數:

-m :一些 iptables 的外掛模塊,主要常見的有:    
state :狀態模塊    
mac   :網卡硬件地址 (hardware address)
--state :一些封包的狀態,主要有:
INVALID :無效的封包,例如數據破損的封包狀態
ESTABLISHED:已經聯機成功的聯機狀態;
NEW        :想要新建立聯機的封包狀態;    
RELATED    :這個最常用!表示這個封包是與我們主機發送出去的封包有關

範例:針對局域網絡內的 aa:bb:cc:dd:ee:ff 主機開放其聯機
[root@www ~]# iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT
選項與參數:
--mac-source :就是來源主機的 MAC


Linux下iptables(NAT)的用法
1、來源NAT:SNAT
內部LAN通過SNAT轉爲接口IP方可訪問互聯網的相關應用,相當於網絡裏的源地址轉換(思科的PAT/動態NAT,華三的EASYIP)
2、目的NAT:DNAT

將外網的一個IP、端口做映射到內部的服務器的IP、端口,所有外網區域的主機都可以通過這個外網IP訪問內部服務器,相當於思科的靜態IP映射、華爲的內部服務器映射。


SNAT舉例:

 外部接口使用 eth0 ,這個接口具有 public IP 喔;

 內部接口使用 eth1 ,假設這個 IP 爲 192.168.100.254 ;

iptables -A INPUT -i $INIF -j ACCEPT
# 這一行爲非必要的,主要的目的是讓內網 LAN 能夠完全的使用 NAT 服務器資源。
# 其中 $INIF 在本例中爲 eth1 接口
echo "1" > /proc/sys/net/ipv4/ip_forward
# 上頭這一行則是在讓你的 Linux 具有 router 的能力
iptables -t nat -A POSTROUTING -s $innet -o $EXTIF -j MASQUERADE
# 這一行最關鍵!就是加入 nat table 封包僞裝!本例中 $innet 是 192.168.100.0/24# 而 $EXTIF 則是對外界面,本例中爲 eth0

例題:

所有來自192.168.0.0/24的數據包源地址轉換爲1.1.1.1:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to 1.1.1.1

這裏需要注意的是,系統在路由及過慮等處理直到數據包要被送出時才進行SNAT。

有一種SNAT的特殊情況是ip欺騙,也就是所謂的Masquerading,通常建議在使用撥號上網的時候使用,或者說在合法ip地址不固定的情況下使用。(直接映射到接口上,轉換後的IP隨着接口IP的變化而變化)

# iptables -t nat -A POSTROUTING -o ppp0-j MASQUERADE

可以看出,這時候我們沒有必要顯式的指定源ip地址等信息

例題:
假設對外的 IP 固定爲 192.168.1.100 ,若不想使用僞裝,該如何處理?
答:

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.100

例題:
假設你的 NAT 服務器對外 IP 有好幾個,那你想要輪流使用不同的 IP 時,又該如何設定?舉例來說,你的 IP 範圍爲 192.168.1.210~192.168.1.220
答:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.210-192.168.1.220
DNAT 設定
例題:
假設內網有部主機 IP 爲 192.168.100.10 ,該主機是可對 Internet 開放的 WWW 服務器。你該如何透過 NAT 機制,將 WWW 封包傳到該主機上?
答:

假設 public IP 所在的接口爲 eth0 ,IP爲52.185.25.16,那麼你的規則就是:
iptables -t nat -A PREROUTING -i eth0 -d 52.185.25.16 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.10:80
-j REDIRECT --to-ports
# 這個也挺常見的,基本上,就是進行本機上面 port 的轉換就是了!
# 不過,特別留意的是,這個動作僅能夠在 nat table 的 PREROUTING 以及
# OUTPUT 鏈上面實行而已喔!

範例:將要求與 80 聯機的封包轉遞到 8080 這個 port
[root@www ~]# iptables -t nat -A PREROUTING -p tcp  --dport 80 -j REDIRECT --to-ports 8080
# 這玩意最容易在你使用了非正規的 port 來進行某些 well known 的協議,
# 例如使用 8080 這個 port 來啓動 WWW ,但是別人都以 port 80 來聯機,
# 所以,你就可以使用上面的方式來將對方對你主機的聯機傳遞到 8080 囉!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章