Linux防火牆實際指的是Linux下的Netfilter/Iptables。Netfilter/Iptables是2.4.x/2.6.x版本Linux內核集成的IP信息包過濾系統。linux
查看Linux內核版本web
Netfilter/Iptables 信息包過濾系統能夠當成一個總體,netfilter是內核的模塊實現,iptables是對上層操做工具。瀏覽器
Netfilter是Linux核心中的一個通用架構,工做於內核空間。安全
Netfilter支持一下方式對數據包進行分類:服務器
其提供了一系列的表(tables),每一個表由若干個鏈(chains)組成,每條鏈能夠由一條或若干條規則(rules)組成,其規則由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。網絡
chain的本質是Netfilter定義的不一樣過濾點。總共定義了5個過濾點。INPUT,FORWARDING,OUTPUT,PREROUTING,POSTROUTIONG。架構
Table的本質是Netfilter定義的不一樣功能的劃分。app
filter用於執行基本過濾。ssh
nat是對數據IP進行修改。socket
mangle是對數據包進行高級修改。
不一樣的Table只能用於特定的Chain。
Iptables 是一個管理內核包過濾的工具,能夠用來配置核心包過濾表格中的規則。運行於用戶空間。
Linux防火牆在企業應用中很是有用,舉例以下:
綜述,Iptables有兩種應用模式:主機防火牆,NAT路由器。
規則(rules)是管理員預約義的條件,規則通常的定義爲「若是數據包頭符合這樣的條件,就這樣處理這個數據包」。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工做就是添加、修改和刪除這些規則。
鏈(chains)是數據包傳播的路徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈中能夠有一條或數條規則。當一個數據包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該數據包是否知足規則所定義的條件。若是知足,系統就會根據該條規則所定義的方法處理該數據包;不然iptables將繼續檢查下一條規則,若是該數據包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的默認策略來處理數據包。
每一個鏈上都有默認的規則。
表(tables)提供特定的功能,iptables有4個表,即raw表、filter表、nat表和mangle表,分別用於實現包過濾,網絡地址轉換和包重構的功能。表中的規則寫在鏈上。
filter表
主要用於數據報文過濾。該表根據系統管理員預約義的一組規則過濾符合條件的數據包。對於防火牆而言,主要利用在filter表中指定的規則來實現對數據包的過濾。filter表是默認的表,若是沒有指定哪一個表,iptables 就默認使用filter表來執行全部命令,filter表包含了INPUT鏈,RORWARD鏈,OUTPUT鏈。在filter表中只能容許對數據包進行接受,丟棄的操做,而沒法對數據包進行更改。
nat表
主要用於網絡地址轉換NAT,該表能夠實現一對一,一對多,多對多等NAT工做(SNAT,DNAT,PNAT),iptables就是使用該表實現共享上網的,NAT表包含了PREROUTING鏈,POSTROUTING鏈,OUTPUT鏈。
nat規則表擁有 prerouting 和 postrouting 兩個規則鏈,主要功能爲進行一對1、一對多、多對多等網址轉換工做(SNAT,DNAT),因爲轉換的特性,需進行目的地網址轉換的數據包,就不須要進行來源網址轉換,反之亦然,所以爲了提高改寫封包的效率,在防火牆運做時,每一個封包只會通過這個規則表一次。若是咱們把數據包過濾的規則定義在這個數據表裏,將會形成沒法對同一包進行屢次比對,所以這個規則表除了做網址轉換外,請不要作其它用途。
mangle表
主要用做功能修改數據報文的屬性。好比TCP報文的6個標誌位。在內核版本2.4.18 後的linux版本中該表包含的鏈爲:INPUT鏈(處理進入的數據包),RORWARD鏈(處理轉發的數據包),OUTPUT鏈(處理本地生成的數據包)POSTROUTING鏈(修改即將出去的數據包),PREROUTING鏈(修改即將到來的數據包)
mangle表主要用於對指定數據包進行更改,在內核版本2.4.18 後的linux版本中該表包含的鏈爲:INPUT鏈(處理進入的數據包),RORWARD鏈(處理轉發的數據包),OUTPUT鏈(處理本地生成的數據包)POSTROUTING鏈(修改即將出去的數據包),PREROUTING鏈(修改即將到來的數據包)。
raw表
只使用在PREROUTING鏈和OUTPUT鏈上,優先級最高,能夠對收到的數據包在鏈接跟蹤前進行處理。一但用戶使用了RAW表,在某個鏈上RAW表處理完後,將跳過NAT表和 ip_conntrack處理,即再也不作地址轉換和數據包的連接跟蹤處理了。
規則表之間的優先順序:
raw > mangle > nat > filter
Linux防火牆的原理主要是對數據包的控制,看下圖(如下圖片均來自互聯網):netfilter五條鏈相互關係,即iptables數據包轉發流程圖。
(1)數據包進入網卡時,先進入PREROUTING(路由前)鏈,以後作路由判斷數據包應發往何處,本機或其餘機器。
(2)若數據包原目標地址是本機的,數據包會前往INPUT鏈。到達INPUT鏈後,任何進程都會收到它。
(3)本機程序發送出數據包,數據包會通過OUTPUT鏈,而後到達POSTROUTING鏈輸出。
(4)若數據包原目標地址非本機,則須要轉發出去的,且內核容許轉發,數據包前往 FORWARD鏈,而後到達POSTROUTING(路由後)鏈輸出。
Netfilter在五個鏈上,使用HOOK技術作規則檢查。
iptables執行規則時,是從規則表中從上至下順序執行的。
若沒遇到匹配的規則,就一條一條往下匹配;
若徹底沒有匹配的規則,則執行該鏈上的默認規則;
若遇到匹配的規則,則執行規則,執行後根據本規則的動做(accept,reject,log,drop等),決定下一步執行的狀況,後續執行通常有三種狀況:
透過這種機制所帶來的好處是,能夠進行復雜、多重的封包過濾,簡單的說,iptables能夠進行縱橫交錯式的過濾(tables)而非鏈狀過濾(chains)。
包的狀態依據IP所包含的協議不一樣而不一樣,但在內核外部,也就是用戶空間裏,只有4種 狀態:NEW,ESTABLISHED,RELATED 和INVALID。它們主要是和狀態匹配一塊兒使用。
數據包在用戶空間的狀態:
這些狀態能夠一塊兒使用,以便匹配數據包。這可使防火牆很是強壯和有效。
iptables的實驗請儘可能在虛擬機或非遠程的系統中操做,避免不當心的誤操做可能致使ssh沒法使用。
通常來說,iptables防火牆已經內置於CentOS 6及其餘Linux版本中,並且iptables服務默認都是啓動的。 iptables應用於IPv4, 若是要用IPv6,須要使用ip6tables。
iptables和ip6_tables、arp_tables一同都是建構在Xtables的架構下,這個方案讓系統管理員定義「表(tables)」、「鏈(chain)」、「規則(rules)」三個數據來處理數據包的運送。每個「表」都和不一樣的數據包處理有關、決定數據包是否能夠穿越的是「鏈」、而一條「規則」在鍵裏面則能夠決定是否送往下一條鏈(或其它的動做),這個處理能夠在嵌套的結構裏面重複使用。每個網絡數據包從抵達到離開該計算機至少會通過一個鏈(亦即轉送或本機路由)。
查看有沒有安裝iptables:rpm -qa | grep iptables
若機器上安裝了man命令。則使用man iptables查看iptables的幫助文檔。
service iptables start #或 /etc/init.d/iptables start
service iptables stop #或 /etc/init.d/iptables stop
#啓動時開啓 chkconfig iptables on #啓動時關閉 chkconfig iptables off
在終端運行 setup,選擇 firewall 回車。
按Tab鍵切換到Enablede項,而後按空格鍵選擇。而後再按Tab鍵切換到OK,按空格鍵或回車鍵選擇。按Tab鍵切換到quit,退出setup。
iptables [-t table] command [match] [target/jump]
-t table
用來指明使用的表,有三種選項: filter,nat,mangle。若未指定,則默認使用filter表。
command
指定iptables 對咱們提交的規則要作什麼樣的操做。命令都都須要以chain做爲參數。
command 選項
-v, --verbose(詳細的)
可用此選項的命令:--list, --append, --insert, --delete, --replace
說明:該選項使輸出更詳細,常與--list 連用。與--list連用時,輸出中包括網絡接口的地址、規則的選項、TOS掩碼、 字節和包計數器,其中計數器是以K、M、G(這裏用的是10的冪而不是2的冪)爲單位的。若-v 和--append、--insert、--delete 或--replace連用,iptables會輸出詳細的信息告訴你規則是如何被解釋的、是否正確地插入等等。
-x, --exact(精確的)
可用此選項的命令:--list
說明:使--list輸出中的計數器顯示準確的數值,而不用K、M、G等估值。
-n, --numeric(數值)
可用此選項的命令:--list
說明:使輸出中的IP地址和端口以數值的形式顯示,而不是默認的名字,好比主機名、網絡名、程序名等。
--line-numbers
可用此選項的命令:--list
說明:該選項的做用是顯示出每條規則在相應鏈中的序號。對插入新規則頗有用。
-c, --set-counters
可用此選項的命令:--insert, --append, --replace
說明:在建立或更改規則時設置計數器,語法以下:--set-counters 20 4000,意思是讓內核把包計數器設爲20,把字節計數器設爲4000。
--modprobe
可用此選項的命令:All
說明:此選項告訴iptables探測並裝載要使用的模塊。這是很是有用的一個選項,若modprobe命令不在搜索路徑中,就要用到了。有了這個選項, 在裝載模塊時,即便有一個須要用到的模塊沒裝載上,iptables也知道要去搜索。
matches 匹配
匹配選項指定數據包與規則匹配所具備的特徵,包括源地址,目的地址,傳輸協議和端口號,以下所示:
[-i|o 網卡名稱]
說明:
-i --in-interface 網絡接口名 指定數據包從哪一個網絡接口進入。
-o --out-interface 網絡接口名 指定數據包從哪一個網絡接口輸出。
[-p 協議類型]
-p ---proto 協議類型 指定數據包匹配的協議,如TCP、UDP和ICMP等
[-s 源IP地址|源子網]
-s --source 源地址或子網 指定數據包匹配的源地址
[--sport 源端口號]
--sport 源端口號 指定數據包匹配的源端口號
[-d 目標IP地址|目標子網]
-s --source 目標地址或子網 指定數據包匹配的目標地址
[--dport 目標端口號]
--dport 目的端口號 指定數據包匹配的目的端口號
[-m 模塊]
-m --match 匹配的模塊 指定數據包規則所使用的過濾模塊
Targets/Jumps
target/jump決定符合條件的包到何處去,語法是--jump target或-j target。
target能夠被細分爲兩類,Target和Jump。
target指定要對包作的操做,好比DROP和ACCEPT。不一樣的target有不一樣的結果。一些target會使包中止前進,也就是再也不繼續比較當前鏈中的其餘規則或父鏈中的其餘規則。而另一些target在對包作完操做以後,包還會繼續和其餘的規則比較,如LOG,ULOG和TOS。它們會對包進行記錄,而後讓包經過,以便匹配這條鏈中的其餘規則。有了這樣的target,就能夠對同一個包既改變它的TTL又改變它的TOS。有些target必需要有準確的參數(如TOS須要肯定的數值),有些就不是必須的,但若是咱們想指定也能夠(如日誌的前綴,假裝使用的端口,等等)。
經常使用Target簡述
ACCEPT
當包知足了指定的匹配條件,就會被ACCEPT,容許包前往下一個目的地。不會再去匹配當前鏈中的其餘規則或同一個表內的其餘規則,但包還要經過其餘表中的鏈,可能會被DROP。
DROP
當信息包與具備DROP目標的規則徹底匹配時,會阻塞該信息包,而且不對它作進一步處理。該目標被指定爲-j DROP。
若包符合條件,該target就會將target丟掉,也就是說包的生命到此結束,效果就是包被阻塞了。
在某些狀況下,這個target會引發意外的結果,由於它不會向發送者返回任何信 息,也不會向路由器返回信息,這就可能會使鏈接的另外一方的sockets因苦等迴音而亡:) 解決這個問題的較 好的辦法是使用REJECT target,(譯者注:由於它在丟棄包的同時還會向發送者返 回一個錯誤信息,這樣另外一方就能正常結束),尤爲是在阻止端口掃描工具得到更多的信息時,能夠隱蔽被 過濾掉的端口等等(譯者注:由於掃描工具掃描一個端口時,若是沒有返回信息,通常會認爲端口未打開或 被防火牆等設備過濾掉了)。還要注意若是包在子鏈中被DROP了,那麼它在主鏈裏也不會再繼續前進,無論 是在當前的表仍是在其餘表裏。總之,包死翹翹了。
REJECT
REJECT和DROP基本同樣,區別在於它除了阻塞包以外, 還向發送者返回錯誤信息。target還只能用在INPUT、FORWARD、OUTPUT和它們的子鏈裏,並且包含 REJECT的鏈也只能被它們調用,不然不能發揮做用。它只有一個選項,是用來控制 返回的錯誤信息的種類的。雖然有不少種類,但若是你有TCP/IP方面的基礎知識,就很容易理解它們。
攔阻該數據包,並返回數據包通知對方,能夠返回的數據包有幾個選擇:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(這個數據包包會要求對方關閉聯機),進行完此處理動做後,將再也不比對其它規則,直接中斷過濾程序。 範例以下:
iptables -A INPUT -p TCP --dport 22 -j REJECT --reject-with ICMP echo-reply
RETURN
在規則中設置的RETURN目標讓與該規則匹配的信息包中止遍歷包含該規則的鏈。若是鏈是如INPUT之類的主鏈,則使用該鏈的默認策略處理信息包。它被指定爲-jump RETURN。
結束在目前規則鏈中的過濾程序,返回主規則鏈繼續過濾,若是把自訂規則煉當作是一個子程序,那麼這個動做,就至關於提前結束子程序並返回到主程序中。
REDIRECT
將封包從新導向到另外一個端口(PNAT),進行完此處理動做後,將會繼續比對其它規則。這個功能能夠用來實做透明代理或用來保護web服務器。
例如:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT--to-ports 8081
LOG
將數據包相關信息紀錄在 /var/log 中,詳細位置請查閱 /etc/syslog.conf 配置文件,進行完此處理動做後,將會繼續比對其它規則。
例如:
iptables -A INPUT -p tcp -j LOG --log-prefix "input packet"
MASQUERADE
改寫封包來源IP爲防火牆的IP,能夠指定port 對應的範圍,進行完此處理動做後,直接跳往下一個規則鏈(mangle:postrouting)。這個功能與 SNAT 略有不一樣,當進行IP 假裝時,不需指定要假裝成哪一個 IP,IP 會從網卡直接讀取,當使用撥接連線時,IP 一般是由 ISP 公司的 DHCP服務器指派的,這個時候 MASQUERADE 特別有用。
例如:iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 21000-31000
SNAT
改寫封包來源 IP 爲某特定 IP 或 IP 範圍,能夠指定 port 對應的範圍,進行完此處理動做後,將直接跳往下一個規則煉(mangle:postrouting)。
例如:iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 192.168.10.15-192.168.10.160:2100-3200
DNAT
改寫數據包包目的地 IP 爲某特定 IP 或 IP 範圍,能夠指定 port 對應的範圍,進行完此處理動做後,將會直接跳往下一個規則鏈(filter:input 或 filter:forward)。
例如:iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.10.1-192.168.10.10:80-100
MIRROR
鏡像數據包,也就是未來源 IP與目的地IP對調後,將數據包返回,進行完此處理動做後,將會中斷過濾程序。
QUEUE
中斷過濾程序,將封包放入隊列,交給其它程序處理。透過自行開發的處理程序,能夠進行其它應用,例如:計算聯機費用.......等。
MARK
將封包標上某個代號,以便提供做爲後續過濾的條件判斷依據,進行完此處理動做後,將會繼續比對其它規則。
例如:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 22
iptables做爲Linux的基礎服務,默認啓動。
查看iptables服務的狀態
命令:service iptables status
重啓iptables狀態
命令:service iptables restart
使用iptables命令只能使規則臨時生效。
若是須要永久生效,則要保存.寫入到/etc/sysconfig/iptables文件裏.
/etc/rc.d/init.d/iptables save
iptables規則文件保存在/etc/sysconfig/iptables中。
寫入後記得把防火牆重起一下,才能起做用。
無論你在安裝linux時是否啓動了防火牆,若是你想配置屬於本身的防火牆,那就清除如今filter的全部規則.
iptables -F #清除預設表filter中的全部規則鏈的規則。 iptables -X #清除預設表filter中使用者自定鏈中的規則。 iptables –Z #數據包計數器歸零。
例:查看本機關於IPTABLES的設置狀況:iptables -L -n
默認顯示filter表的狀況,因此顯示了INPUT,FORWARD,OUTPUT鏈上的規則情形。
例:查看nat表上的規則:iptables -t nat -L
設置默認策略:關閉filter表的INPUT鏈、FORWARD鏈,開啓OUTPUT鏈。
iptables -P INPUT DROP iptables –P OUTPUT ACCEPT iptables –P FORWARD DROP
遠程SSH登錄。容許tcp協議,開啓22端口。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
若把OUTPUT設置成DROP,則須要使用以下規則:
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
WEB服務器,開啓80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
若OUTPUT設置成DROP的話,則須要使用以下規則,其餘同理。
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
郵件服務器端口配置
smtp: iptables -A FORWARD -p tcp --dport 25 -j ACCEPT #pop3: iptables -A FORWARD -p tcp --dport 110 -j ACCEPT iptables -A FORWARD -p udp --dport 110 -j ACCEPT #imap: iptables -A FORWARD -p tcp --dport 143 -j ACCEPT iptables -A FORWARD -p udp --dport 143 -j ACCEPT imaps: iptables -A FORWARD -p tcp --dport 993 -j ACCEPT iptables -A FORWARD -p udp --dport 993 -j ACCEPT pop3s: iptables -A FORWARD -p tcp --dport 995 -j ACCEPT iptables -A FORWARD -p udp --dport 995 -j ACCEPT
FTP服務器,開啓21端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT
DNS服務器,開啓53端口
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
容許ping,即容許icmp包經過
iptables -A INPUT -p icmp -j ACCEPT #若INPUT設置成DROP iptables -A OUTPUT -p icmp -j ACCEPT #若OUTPUT設置成DROP
容許loopback,通常系統都須要容許迴環。不然可能致使一些問題。如DNS沒法正常關閉。
IPTABLES -A INPUT -i lo -p all -j ACCEPT
若把OUTPUT設置成DROP,則須要使用以下規則:
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT
減小不安全的端口鏈接
iptables -A OUTPUT -p tcp --sport 31337 -j DROP iptables -A OUTPUT -p tcp --dport 31337 -j DROP
有些木馬會掃描端口31337到31340(即黑客語言中的 elite 端口)上的服務。既然合法服務都不使用這些非標準端口來通訊,阻塞這些端口可以有效地減小網絡上可能被感染的機器和它們的遠程主服務器進行獨立通訊的機會。
sshd的端口爲22,若系統直接開放22端口,那麼Internet上全部主機均可以鏈接Linux,這樣不安全。更好的方法是,僅容許某個範圍的IP或某個指定ip,且某範圍的端口的主機能夠鏈接主機,其餘IP所有拒絕:
iptables –A INPUT –i ppp0 –p tcp –s 222.91.99.0/28 –-sport 1024:65536 –dport 22 –j ACCEPT iptables –A INPUT –i ppp0 –p tcp –dport 22 –j DROP
說明:1024:65535 表示端口範圍是1024至65535,包括兩端的端口在內。
以上作法保證了必定的安全性。但因爲非法的數據包會被阻塞,所以某些端口掃描工具會提示「該計算機處於防火牆保護狀態「,這也是不安全的。要欺騙這些工具,可使用以下規則:
iptables –A INPUT –i ppp0 –p tcp –s 222.91.99.0/28 –-sport 1024:65536 –dport 22 –j ACCEPT iptables –A INPUT –i ppp0 –p tcp –dport 22 –j REJECT –reject-with tcp-reset
這樣的規則,當非法鏈接服務器時,會發出tcp-reset的請求,這個封包會要求對方關閉鏈接。這樣,服務器會更加安全。
只容許192.168.0.3的機器進行SSH鏈接
iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT
若要容許,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的全部IP。
要記得把 /etc/sysconfig/iptables 裏的這一行刪了.
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
這一行表示全部地址均可以登錄。
或採用命令方式:
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
說明: 192.168.0.1/24 24的意思就是說子網掩碼中表示網絡的二進制位數是24位。 即: 11111111.11111111.11111111.00000000 也就是24個1。變成十進制就是:255.255.255.0 子網掩碼的意義 把IP(192.168.0.1)轉換爲二進制數,即:11000000.10101000.00000000.00000001 將IP和子網掩碼作與運算得:11000000.10101000.00000000.00000000 再變成十進制數得:192.168.0.0 這個就是192.168.0.1這個IP所屬的網絡地址,也能夠說192.168.0.1在192.168.0.0這個網段內。
技巧:!表示not。 例:!192.168.0.3 表示除了192.168.0.3的ip地址 其餘的規則鏈接也同樣這麼設置.
例:某Linux系統,做爲ADSL上網的代理服務器,同時運行WWW服務,有兩個網絡接口,eth0鏈接局域網,ppp0是ADSL上網的Internet網絡接口,添加以下規則。
容許局域網內192.168.60.24/24的全部主機訪問代理服務器,除了192.168.60.3這臺主機:
iptables –A INPUT –i eth0 –s 192.168.60.3 –j DROP iptables –A INPUT –i eth0 –s 192.168.0/24 –j ACCEPT
注意:兩個規則的順序不能反。
例:讓Linux代理服務器接受全部的來源不是網絡接口ppp0的數據,即僅容許了局域網的訪問,局域網的全部主機不能訪問Internet
iptables –A input –i !ppp0 –j ACCEPT
容許全部已經創建的和相關的鏈接
iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
DROP非法鏈接
iptables -A INPUT -m state --state INVALID -j DROP iptables -A OUTPUT -m state --state INVALID -j DROP iptables-A FORWARD -m state --state INVALID -j DROP
丟棄壞的TCP包
iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
處理IP碎片數量,防止攻擊,容許每秒100個
iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
設置ICMP包過濾,容許每秒1個包,限制觸發條件是10個包.
iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
如圖顯示外網映射原理:
清除nat表中的規則
iptables -F -t nat iptables -X -t nat iptables -Z -t nat
例:將代理服務器80端口重定向到8009端口,設置規則以下:
iptable –t nat –A PREROUTING –p tcp –dport 80 –j REDIRECT –to-ports 8009
例:內網機器對外發布WEB網站
內網WEB服務器IP地址爲192.168.0.3,當公網客戶端訪問服務器時,防火牆將請求映射到內網的192.168.0.3的80端口
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.3:80
例:禁止與211.101.46.253的全部鏈接
iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP
例:禁用FTP端口
iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP
只禁用211.101.46.253地址的FTP鏈接,其餘鏈接還能夠.如web(80端口)鏈接。
iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP