Linux iptables用法與NAT


1.相關概念

2.iptables相關用法

3.NAT(DNAT與SNAT)

相關概念

防火牆除了軟件及硬件的分類,也可對數據封包的取得方式來分類,可分為代理服務器(Proxy)及封包過濾機制(IP Filter)。

代理服務是一種網絡服務,通常就架設在路由上面,可完整的掌控局域網的對外連接。

IP Filter這種方式可以直接分析最底層的封包表頭數據來進行過濾,所以包括 MAC地址, IP, TCP, UDP, ICMP 等封包的信息都可以進行過濾分析的功能,用途非常廣泛。

其實Iptables服務不是真正的防火牆,只是用來定義防火牆規則功能的"防火牆管理工具",將定義好的規則交由內核中的netfilter即網絡過濾器來讀取,從而真正實現防火牆功能。

 

iptables抵擋封包的方式:

拒絕讓 Internet 的封包進入 Linux 主機的某些 port

拒絕讓某些來源 IP 的封包進入

拒絕讓帶有某些特殊標志( flag )的封包進入

分析硬件地址(MAC)來提供服務

 

iptables命令中設置數據過濾或處理數據包的策略叫做規則,將多個規則合成一個鏈,叫規則鏈
規則鏈
則依據處理數據包的位置不同分類:

PREROUTING: 在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)
INPUT:處理入站的數據包
OUTPUT:處理出站的數據包
FORWARD:處理轉發的數據包
POSTROUTING:
在進行路由判斷之后所要進行的規則(SNAT/MASQUERADE)

 

 

iptables中的規則表是用於容納規則鏈,規則表默認是允許狀態的,那么規則鏈就是設置被禁止的規則,而反之如果規則表是禁止狀態的,那么規則鏈就是設置被允許的規則。

raw表:確定是否對該數據包進行狀態跟蹤

mangle表:為數據包設置標記(較少使用)

nat表:修改數據包中的源、目標IP地址或端口

filter表:確定是否放行該數據包(過濾)

規則表的先后順序:raw→mangle→nat→filter

 

規則鏈的先后順序:

入站順序:PREROUTING→INPUT

出站順序:OUTPUT→POSTROUTING

轉發順序:PREROUTING→FORWARD→POSTROUTING

 

內建表與鏈的關系流程圖(去掉了mangle表):

    

另外注意:

1.沒有指定規則表則默認指filter表。

2.不指定規則鏈則指表內所有的規則鏈。

3.在規則鏈中匹配規則時會依次檢查,匹配即停止(LOG規則例外),若沒匹配項則按鏈的默認狀態處理。

 

 

 

iptables命令中則常見的控制類型有:

ACCEPT:允許通過.
LOG:記錄日志信息,然后傳給下一條規則繼續匹配.
REJECT:拒絕通過,必要時會給出提示.
DROP:直接丟棄,不給出任何回應.

 

iptables命令基本參數和用法

    格式為:"iptables [-t 表名] 選項 [鏈名] [條件] [-j 控制類型]"。

以下格式的寫法或許更為清楚明白:
"iptables –[A|I 鏈] [-i|o 網絡接口] [-p 協議] [-s 來源ip/網域] [-d 目標ip/網域] –j[ACCEPT|DROP]"

下表格為幾乎所有常用的iptables參數,

參數

作用

-P

設置默認策略:iptables -P INPUT (DROP|ACCEPT)

-F

清空規則鏈

-L

查看規則鏈

-A

在規則鏈的末尾加入新規則

-I num

在規則鏈的頭部加入新規則

-D num

刪除某一條規則

-s

匹配來源地址IP/MASK,加嘆號"!"表示除這個IP外。

-d

匹配目標地址

-i 網卡名稱

匹配從這塊網卡流入的數據

-o 網卡名稱

匹配從這塊網卡流出的數據

-p

匹配協議,如tcp,udp,icmp

--dport num

匹配目標端口號

--sport num

匹配來源端口號

 

Iptables規則查看與清除

 

查看:

 

清除:

    規則的清除

 

策略(Policy)的清除

Iptables 開放網口與ip來源

例:所有的來自 lo 這個網口的封包,都予以接受

iptables –A INPUT –i lo –j ACCEPT

例:目標來自 192.168.1.200 這個 IP 的封包都予以接受

iptables –A INPUT –i eth0 –s 192.168.1.200 –j ACCEPT

例:192.168.1.0/24 可接受,但 192.168.1.10 丟棄

iptalbes –A INPUT –i eth0 –s 192.168.1.0/24 –j ACCEPT

iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP

 

Iptables 規則記錄

例:# iptables -A INPUT -s 192.168.1.200 -j LOG

相關信息就會被寫入到/var/log/messages當中,然后該封包會繼續進行

后續的規則比對。LOG 這個動作僅在進行記錄而已,並不會影響到這個封包的其它規則比對的。

 

Iptables 開放tcp、udp端口

例:開放samba端口(udp137,138;tcp139,445)

iptables –A INPUT –i eth0 –p udp –dport 137:138 –j ACCEPT

iptables –A INPUT –i eth0 –p tcp –dport 139–j ACCEPT

iptables –A INPUT –i eth0 –p tcp –dport 445–j ACCEPT

 

iptables匹配ICMP端口和ICMP類型

iptables –A INPUT –p icmp –icmp-type 類型 –j ACCEPT

參數:--icmp-type :后面必須要接 ICMP 的封包類型,也可以使用代號,

例如 8 代表 echo request 的意思。(可自查詢ICMP-type對應表)

 

Iptables –syn的處理方式

指定TCP匹配擴展

使用 –tcp-flags 選項可以根據tcp包的標志位進行過濾。

#iptables -A INPUT -p tcp –tcp-flags SYN,FIN,ACK SYN

#iptables -A FROWARD -p tcp –tcp-flags ALL SYN,ACK

上實例中第一個表示SYN、ACK、FIN的標志都檢查,但是只有SYN匹配。第二個表示ALL(SYN,ACK,FIN,RST,URG,PSH)的標志都檢查,但是只有設置了SYN和ACK的匹配。

#iptables -A FORWARD -p tcp --syn

選項—syn相當於"--tcp-flags SYN,RST,ACK SYN"的簡寫。

 

Iptables 狀態模塊

例:只要已建立或相關封包就予以通過,只要是不合法封包就丟棄

iptables –A INPUT –m state –state RELATED ESTABLISHED –j ACCEPT

iptables –A INPUT –m state –state INVALID –j DORP

例:對局域網內mac地址為00:0C:29:56:A6:A2主機開放其聯機

[root@linux ~]# iptables -A INPUT -m mac --mac-source 00:0C:29:56:A6:A2 -j ACCEPT

 

Iptables保存於恢復

iptables-save > /etc/sysconfig/iptables.20180606

iptables-restore < /etc/sysconfig/iptables.20180606

 

 

 

NAT(Network AddressTranslation網絡地址轉換)

首先說說局域網內封包的傳送,

1. 先經過 NAT table 的 PREROUTING 鏈;

2. 經由路由判斷確定這個封包是要進入本機與否,若不進入本機,則下一步;

3. 再經過 Filter table 的 FORWARD 鏈;

4. 通過 NAT table 的 POSTROUTING 鏈,最后傳送出去。

NAT 主機的重點就在於上面流程的第 1,4 步驟,也就是 NAT table 的兩條重要的鏈:PREROUTING 與POSTROUTING。 那這兩條鏈重要功能在於修改IP,而這兩條鏈修改的IP又是不一樣的,POSTROUTING在修改來源IP,PREROUTING則在修改目標IP 。由於修改的 IP 不一樣,所以就稱為來源NAT (Source NAT, SNAT) 及目標 NAT (Destination NAT, DNAT)。

 

SNAT即源地址轉換,能夠讓多個內網用戶通過一個外網地址上網,解決了IP資源匱乏的問題。一個無線路由器也就使用此技術。

SNAT封包傳送示意圖

由上圖可知,需要將192.168.10.10轉換為111.196.211.212,iptables命令如下:

iptables –t nat –A POSTROUTING –s 192.168.10.10 –o eth1 –j SNAT --to-source 111.196.221.212

外網IP地址不穩定的情況即可使用MASQUERADE(動態偽裝),能夠自動的尋找外網地址並改為當前正確的外網IP地址

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

 

DNAT即目地地址轉換,則能夠讓外網用戶訪問局域網內不同的服務器。(相當於SNAT的反向代理)

DNAT封包傳送示意圖

 

由上圖可知,目標地址192.168.10.6在路由前就轉換成61.240.149.149,需在網關上運行iptables命令如下:

iptables –t nat –A PREROUTING –i eth1 –d 61.240.149.149 –p tcp –dport 80 –j DNAT --to-destination 192.168.10.6:80

eth1網口傳入,且想要使用 port 80 的服務時,將該封包重新傳導到 192.168.1.210:80 的 IP 及 port 上面,可以同時修改 IP 與 port。此為地址映射與端口轉換。

 

還可以使用REDIRECT單獨進行端口轉換

例:將 80 端口的封包轉遞到 8080端口

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

# 使用 8080 這個 port 來啟動 WWW ,但是別人都以80來聯機


免責聲明!

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



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