1. 程式人生 > >Iptables服務全攻略之實戰

Iptables服務全攻略之實戰

Iptables原理 現在防火牆主要分以下三種類型:包過濾、應用代理、狀態檢測 包過濾防火牆:現在靜態包過濾防火牆市面上已經看不到了,取而代之的是動態包過濾技術的防火牆哈~ 代理防火牆:因一些特殊的報文攻擊可以輕鬆突破包過濾防火牆的保護,比如大家知道的SYN攻擊、ICMP洪水攻擊,所以以代理伺服器作為專門為使用者保密或者突破訪問限制的資料轉發通道的應用代理防火牆出現了哈~其使用了一種應用協議分析的新技術。 狀態檢測防火牆:其基於動態包過濾技術發展而來,加入了一種狀態檢測的模組,進一點發展了會話過濾功能,會話狀態的保留是有時間限制的,此防火牆還可以對包的內容進行分析,從而避免開放過多的埠。 netfilter/iptables IP資料包過濾系統實際上由netfilter和iptables兩個元件構成。netfilter是整合在核心中的一部分,其作用是定義、儲存相應的規則,而iptables是一種工具,用來修改資訊的過濾規則及其他配置,我們可以通過iptables來設定一些適合我們企業需求環境的規則哈~,而這些規則會儲存在核心空間之中。 netfilter是Linux核心中的一個通用架構,其提供了一系列的表(tables),每個表由若干個鏈(chains)組成,而每條鏈可以由一條或若干條規則(rules)組成。實際上netfilter是表的容器,表是鏈的容器,而鏈又是規則的容器。 filter表

nat表
mangle表
iptables內建鏈 PREROUTING:資料包進入路由表之前 INPUT:通過路由表後目的地為本機 FORWARDING:通過路由表後,目的地不為本機 OUTPUT:由本機產生,向外轉發 POSTROUTIONG:傳送到網絡卡介面之前 netfilter五條鏈相互關係,即iptables資料包轉發流程圖
Iptables工作流程圖 iptables擁有三個表和五條鏈組成
NAT工作原理
Iptables詳細引數表
Iptables基本語法 iptables [-t 表名] -命令 -匹配 -j 動作/目標 iptables內建了filter、nat和mangle三張表,我們可以使用-t引數來設定對哪張表生效哈~也可以省略-t引數,則預設對filter表進行操作。 具體命令引數可以通過man iptables
查詢哈~
配置SNAT命令基本語法 iptables -t nat -A POSTROUTING -o 網路介面 -j SNAT --to-source IP地址 配置DNAT命令基本語法 iptables -t nat -A PREROUTING -i 網路介面 -p 協議 --dport 埠 -j DNAT --to-destination IP地址 企業環境及需求 1、企業環境 230臺客戶機,IP地址範圍為192.168.0.1~192.168.0.254,子網掩碼為255.255.255.0 Mail伺服器:IP地址為192.168.0.1 子網掩碼為255.255.255.0 FTP伺服器:IP地址為192.168.0.2 子網掩碼為255.255.255.0 WEB伺服器:IP地址為192.168.0.3 子網掩碼為255.255.255.0 公司網路拓撲圖如下:

2、配置預設策略 所有內網計算機需要經常訪問網際網路,並且員工會使用即時通訊工具與客戶進行溝通,企業網路DMZ隔離區搭建有Mail、FTP和Web伺服器,其中Mail和FTP伺服器對內部員工開放,僅需要對外發布Web站點,並且管理員會通過外網進行遠端管理,為了保證整個網路的安全性,需要新增iptables防火牆並配置相應的策略 需求分析 企業的內部網路為了保證安全性,需要首先刪除所有規則設定,並將預設規則設定為DROP,然後開啟防火牆對於客戶端的訪問限制,開啟WEB、MSN、QQ及MAIL的相應埠,並允許外部客戶端登入WEB伺服器的80、22埠。 解決方案 1、配置預設策略 預設iptables已經被安裝好了
(1)刪除策略 iptables -F:清空所選鏈中的規則,如果沒有指定鏈則清空指定表中所有鏈的規則 iptables -X:清除預設表filter中使用者自定鏈中的規則 iptables -Z:清除預設表filter中使用者自定鏈中的規則
(2)設定預設策略 設定預設策略為關閉filter表的INPPUT及FORWARD鏈開啟OUTPUT鏈,nat表的三個鏈PREROUTING、OUTPUT、POSTROUTING全部開啟哈~預設全部鏈都是開啟的,所以有些命令可以不操作,另外mangle表本文沒用到,所以不做處理,mangle主要用在資料包的特殊變更處理上,比如修改TOS等特性。

2、設定迴環地址 有些服務的測試需要使用迴環地址,為了保證各個服務的正常工作,需要允許迴環地址的通訊,RHCE課程-RH253Linux伺服器架設筆記二-NFS伺服器配置己有涉及,如果不設定迴環地址,有些服務不能啟動哈~。 iptables -A INPUT -i lo -j ACCEPT   3、連線狀態設定 為了簡化防火牆的配置操作,並提高檢查的效率,需要新增連線狀態設定 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 連線跟蹤存在四種資料包狀態 NEW:想要新建連線的資料包 INVALID:無效的資料包,例如損壞或者不完整的資料包 ESTABLISHED:已經建立連線的資料包 RELATED:與已經發送的資料包有關的資料包
4、設定80埠轉發 公司網站需要對外開放,所以我們需要開放80埠 iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
5、DNS相關設定 為了客戶端能夠正常使用域名訪問網際網路,我們還需要允許內網計算機與外部DNS伺服器的資料轉發。 開啟DNS使用UDP、TCP的53埠 iptables -A FORWARD -p tcp --dport 53 -j ACCEPT iptables -A FORWARD -p udp --dport 53 -j ACCEPT
6、允許訪問伺服器的SSH 管理員會通過外網進行遠端管理,所以我們要開啟SSH使用的TCP協議22埠 iptables -A INPUT -p tcp --dport 22 -j ACCEPT
7、允許內網主機登入MSN和QQ相關設定 QQ能夠使用TCP80、8000、443及UDP8000、4000登入,而MSN通過TCP1863、443驗證。因此只需要允許這些埠的FORWARD轉發即可以正常登入。 iptables -A FORWARD -p tcp --dport 1863 -j ACCEPT iptables -A FORWARD -p tcp --dport 443 -j ACCEPT iptables -A FORWARD -p tcp --dport 8000 -j ACCEPT iptables -A FORWARD -p udp --dport 8000 -j ACCEPT iptables -A FORWARD -p udp --dport 4000 -j ACCEPT 注意:當然,如果公司要限制這樣即時通訊工具的使用,只要禁止這些埠的轉發就可以了哈~特別注意,馬化騰這傢伙忒壞~嘿嘿~,埠不固定,QQVIP會員專用通道什麼的,代理登入等等哈~,所以我們如果需要封殺就要收集全登入埠及QQ伺服器地址,根據本人總結,最好在企業實際配置中技術與行政管理相結合,這樣達到的效果最好~0(^_^)0
8、允許內網主機收發郵件 客戶端傳送郵件時訪問郵件伺服器的TCP25埠。接收郵件時訪問,可能使用的埠則較多,UDP協議以及TCP協議的埠:110、143、993及995 smtp:
[[email protected] ~]# iptables -A FORWARD -p tcp --dport 25 -j ACCEPT pop3:
[[email protected] ~]# iptables -A FORWARD -p tcp --dport 110 -j ACCEPT
[[email protected] ~]# iptables -A FORWARD -p udp --dport 110 -j ACCEPT imap:
[[email protected] ~]# iptables -A FORWARD -p tcp --dport 143 -j ACCEPT
[[email protected] ~]# iptables -A FORWARD -p udp --dport 143 -j ACCEPT imaps:
[[email protected] ~]# iptables -A FORWARD -p tcp --dport 993 -j ACCEPT
[[email protected] ~]# iptables -A FORWARD -p udp --dport 993 -j ACCEPT pop3s:
[[email protected] ~]# iptables -A FORWARD -p tcp --dport 995 -j ACCEPT
[[email protected] ~]# iptables -A FORWARD -p udp --dport 995 -j ACCEPT
9、NAT埠對映設定 由於區域網的地址為私網地址,在公網上不合法哈~所以必須將私網地址轉為伺服器的外部地址進行地址對映哈~連線外網介面為ppp0 iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE MASQUERADE和SNAT作用一樣哈~相樣是提供源地址轉換的操作,但是MASQUERADE是針對外部介面為動態IP地址來設定滴,不需要使用--to-source指定轉換的IP地址。如果網路採用的是撥號方式接入網際網路,而沒有對外的靜態IP地址(主要用在動態獲取IP地址的連線,比如ADSL撥號、DHCP連線等等),那麼建議使用MASQUERADE哈~ 注意:MASQUERADE是特殊的過濾規則,其只可以對映從一個介面到另一個介面的資料哈~
10、內網機器對外發布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
11、儲存與恢復iptables配置 儲存:iptables-save iptables-save [-c] [-t 表名] -c:儲存包和位元組計數器的值。可以使在重啟防火牆後不丟失對包和位元組的統計 -t:用來儲存哪張表的規則,如果不跟-t引數則儲存所有的表 可以使用重定向命令來儲存這些規則集 iptables-save > /etc/iptables-save 恢復:iptables-restore iptables-restore [-c] [-n] -c:如果加上-c引數則表示要求裝入包和位元組計數器 -n:表示不覆蓋己有的表或表內的規則,預設情況下是清除所有己存在的規則 使用重定向來恢復由iptables-save儲存的規則集 iptables-restore > /etc/iptables-save 如果要在服務或系統重啟後依然生效 service iptables save
12、最終iptables配置如下
[[email protected] ~]# iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere           
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh Chain FORWARD (policy DROP)
target     prot opt source               destination        
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:msnp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:irdmi
ACCEPT     udp  --  anywhere             anywhere            udp dpt:irdmi
ACCEPT     udp  --  anywhere             anywhere            udp dpt:terabase
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3
ACCEPT     udp  --  anywhere             anywhere            udp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:imap
ACCEPT     udp  --  anywhere             anywhere            udp dpt:imap
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:imaps
ACCEPT     udp  --  anywhere             anywhere            udp dpt:imaps
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3s
ACCEPT     udp  --  anywhere             anywhere            udp dpt:pop3s Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
[[email protected] ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination        
DNAT       tcp  --  anywhere             anywhere            tcp dpt:http to:192.168.0.3:80 Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination        
MASQUERADE  all  --  192.168.0.0/24       anywhere            Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
[[email protected] ~]#
注意: SNAT將源網路地址進行轉換,只能用在nat表的POSTROUTING鏈中,只要連線的第一個符合條件的包被SNAT了哈~,那麼這個連線的其他所有的資料包都會自動地被SNAT。與SNAT對應,DNAT將目的地址進行轉換,只能用在nat表的PREROUTIONG和OUTPUT鏈中,或者是被這兩條鏈呼叫的鏈裡面。包含DNAT的鏈不能被除此之外的其他鏈呼叫,比如POSTROUTING鏈。 附: 我們可以通過設定禁止訪問具體域名和IP地址哈~ 禁止訪問QQ主頁: [[email protected] ~]# iptables -A FORWARD -d [url]www.qq.com[/url] -j DROP 禁止訪問指定IP地址: [[email protected] ~]# iptables -A FORWARD -d 119.147.15.17 -j DROP
我們可以通過查詢QQ的安裝目錄來獲取QQ伺服器的地址和埠號哈~   雖然有亂碼,但是還是可以看出來滴~利用域名過濾就可以了哈~ 一:前言 防火牆,其實說白了講,就是用於實現Linux下訪問控制的功能的,它分為硬體的或者軟體的防火牆兩種。無論是在哪個網路中,防火牆工作的地方一定是在網路的邊緣。而我們的任務就是需要去定義到底防火牆如何工作,這就是防火牆的策略,規則,以達到讓它對出入網路的IP、資料進行檢測。 目前市面上比較常見的有3、4層的防火牆,叫網路層的防火牆,還有7層的防火牆,其實是代理層的閘道器 對於TCP/IP的七層模型來講,我們知道第三層是網路層,三層的防火牆會在這層對源地址和目標地址進行檢測。但是對於七層的防火牆,不管你源埠或者目標埠,源地址或者目標地址是什麼,都將對你所有的東西進行檢查。所以,對於設計原理來講,七層防火牆更加安全,但是這卻帶來了效率更低。所以市面上通常的防火牆方案,都是兩者結合的。而又由於我們都需要從防火牆所控制的這個口來訪問,所以防火牆的工作效率就成了使用者能夠訪問資料多少的一個最重要的控制,配置的不好甚至有可能成為流量的瓶頸。 二:iptables 的歷史以及工作原理 1.iptables的發展: iptables的前身叫ipfirewall (核心1.x時代),這是一個作者從freeBSD上移植過來的,能夠工作在核心當中的,對資料包進行檢測的一款簡易訪問控制工具。但是ipfirewall工作功能極其有限(它需要將所有的規則都放進核心當中,這樣規則才能夠執行起來,而放進核心,這個做法一般是極其困難的)。當核心發展到2.x系列的時候,軟體更名為ipchains,它可以定義多條規則,將他們串起來,共同發揮作用,而現在,它叫做iptables,可以將規則組成一個列表,實現絕對詳細的訪問控制功能 他們都是工作在使用者空間中,定義規則的工具,本身並不算是防火牆。它們定義的規則,可以讓在核心空間當中的netfilter來讀取,並且實現讓防火牆工作。而放入核心的地方必須要是特定的位置,必須是tcp/ip的協議棧經過的地方。而這個tcp/ip協議棧必須經過的地方,可以實現讀取規則的地方就叫做 netfilter.(網路過濾器)     作者一共在核心空間中選擇了5個位置,     1.核心空間中:從一個網路介面進來,到另一個網路介面去的     2.資料包從核心流入使用者空間的     3.資料包從使用者空間流出的     4.進入/離開本機的外網介面     5.進入/離開本機的內網介面 2.iptables的工作機制 從上面的發展我們知道了作者選擇了5個位置,來作為控制的地方,但是你有沒有發現,其實前三個位置已經基本上能將路徑徹底封鎖了,但是為什麼已經在進出的口設定了關卡之後還要在內部卡呢? 由於資料包尚未進行路由決策,還不知道資料要走向哪裡,所以在進出口是沒辦法實現資料過濾的。所以要在核心空間裡設定轉發的關卡,進入使用者空間的關卡,從使用者空間出去的關卡。那麼,既然他們沒什麼用,那我們為什麼還要放置他們呢?因為我們在做NAT和DNAT的時候,目標地址轉換必須在路由之前轉換。所以我們必須在外網而後內網的介面處進行設定關卡。          這五個位置也被稱為五個鉤子函式(hook functions),也叫五個規則鏈。 1.PREROUTING (路由前) 2.INPUT (資料包流入口) 3.FORWARD (轉發管卡) 4.OUTPUT(資料包出口) 5.POSTROUTING(路由後)         這是NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。        3.防火牆的策略 防火牆策略一般分為兩種,一種叫“通”策略,一種叫“堵”策略,通策略,預設門是關著的,必須要定義誰能進堵策略則是,大門是洞開的,但是你必須有身份認證,否則不能進。所以我們要定義,讓進來的進來,讓出去的出去,所以通,是要全通,而堵,則是要選擇。當我們定義的策略的時候,要分別定義多條功能,其中:定義資料包中允許或者不允許的策略,filter過濾的功能,而定義地址轉換的功能的則是nat選項。為了讓這些功能交替工作,我們制定出了“表”這個定義,來定義、區分各種不同的工作功能和處理方式。 我們現在用的比較多個功能有3個: 1.filter 定義允許或者不允許的 2.nat 定義地址轉換的                  3.mangle功能:修改報文原資料 我們修改報文原資料就是來修改TTL的。能夠實現將資料包的元資料拆開,在裡面做標記/修改內容的。而防火牆標記,其實就是靠mangle來實現的。 小擴充套件: 對於filter來講一般只能做在3個鏈上:INPUT ,FORWARD ,OUTPUT 對於nat來講一般也只能做在3個鏈上:PREROUTING ,OUTPUT ,POSTROUTING 而mangle則是5個鏈都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING iptables/netfilter(這款軟體)是工作在使用者空間的,它可以讓規則進行生效的,本身不是一種服務,而且規則是立即生效的。而我們iptables現在被做成了一個服務,可以進行啟動,停止的。啟動,則將規則直接生效,停止,則將規則撤銷。  iptables還支援自己定義鏈。但是自己定義的鏈,必須是跟某種特定的鏈關聯起來的。在一個關卡設定,指定當有資料的時候專門去找某個特定的鏈來處理,當那個鏈處理完之後,再返回。接著在特定的鏈中繼續檢查。 注意:規則的次序非常關鍵,誰的規則越嚴格,應該放的越靠前,而檢查規則的時候,是按照從上往下的方式進行檢查的。 三.規則的寫法:  iptables定義規則的方式比較複雜:  格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION  -t table :3個filter nat mangle  COMMAND:定義如何對規則進行管理  chain:指定你接下來的規則到底是在哪個鏈上操作的,當定義策略的時候,是可以省略的  CRETIRIA:指定匹配標準  -j ACTION :指定如何進行處理  比如:不允許172.16.0.0/24的進行訪問。  iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP  當然你如果想拒絕的更徹底:  iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT  iptables -L -n -v#檢視定義規則的詳細資訊 四:詳解COMMAND: 1.鏈管理命令(這都是立即生效的) -P :設定預設策略的(設定預設門是關著的還是開著的) 預設策略一般只有兩種 iptables -P INPUT (DROP|ACCEPT)  預設是關的/預設是開的 比如: iptables -P INPUT DROP 這就把預設規則給拒絕了。並且沒有定義哪個動作,所以關於外界連線的所有規則包括Xshell連線之類的,遠端連線都被拒絕了。         -F: FLASH,清空規則鏈的(注意每個鏈的管理許可權)     iptables -t nat -F PREROUTING     iptables -t nat -F 清空nat表的所有鏈         -N:NEW 支援使用者新建一個鏈             iptables -N inbound_tcp_web 表示附在tcp表上用於檢查web的。         -X: 用於刪除使用者自定義的空鏈             使用方法跟-N相同,但是在刪除之前必須要將裡面的鏈給清空昂了         -E:用來Rename chain主要是用來給使用者自定義的鏈重新命名             -E oldname newname          -Z:清空鏈,及鏈中預設規則的計數器的(有兩個計數器,被匹配到多少個數據包,多少個位元組)             iptables -Z :清空 2.規則管理命令          -A:追加,在當前鏈的最後新增一個規則          -I num : 插入,把當前規則插入為第幾條。             -I 3 :插入為第三條          -R num:Replays替換/修改第幾條規則             格式:iptables -R 3 …………          -D num:刪除,明確指定刪除第幾條規則 3.檢視管理命令 “-L”  附加子命令  -n:以數字的方式顯示ip,它會將ip直接顯示出來,如果不加-n,則會將ip反向解析成主機名。  -v:顯示詳細資訊  -vv  -vvv :越多越詳細  -x:在計數器上顯示精確值,不做單位換算  --line-numbers : 顯示規則的行號  -t nat:顯示所有的關卡的資訊 五:詳解匹配標準 1.通用匹配:源地址目標地址的匹配  -s:指定作為源地址匹配,這裡不能指定主機名稱,必須是IP IP | IP/MASK | 0.0.0.0/0.0.0.0 而且地址可以取反,加一個“!”表示除了哪個IP之外  -d:表示匹配目標地址  -p:用於匹配協議的(這裡的協議通常有3種,TCP/UDP/ICMP)  -i eth0:從這塊網絡卡流入的資料 流入一般用在INPUT和PREROUTING上  -o eth0:從這塊網絡卡流出的資料 流出一般在OUTPUT和POSTROUTING上 2.擴充套件匹配 2.1隱含擴充套件:對協議的擴充套件     -p tcp :TCP協議的擴充套件。一般有三種擴充套件 --dport XX-XX:指定目標埠,不能指定多個非連續埠,只能指定單個埠,比如 --dport 21  或者 --dport 21-23 (此時表示21,22,23) --sport:指定源埠 --tcp-fiags:TCP的標誌位(SYN,ACK,FIN,PSH,RST,URG)     對於它,一般要跟兩個引數: 1.檢查的標誌位 2.必須為1的標誌位 --tcpflags syn,ack,fin,rst syn   =    --syn 表示檢查這4個位,這4個位中syn必須為1,其他的必須為0。所以這個意思就是用於檢測三次握手的第一次包的。對於這種專門匹配第一包的SYN為1的包,還有一種簡寫方式,叫做--syn     -p udp:UDP協議的擴充套件         --dport         --sport     -p icmp:icmp資料報文的擴充套件         --icmp-type: echo-request(請求回顯),一般用8 來表示 所以 --icmp-type 8 匹配請求回顯資料包 echo-reply (響應的資料包)一般用0來表示 2.2顯式擴充套件(-m)      擴充套件各種模組       -m multiport:表示啟用多埠擴充套件       之後我們就可以啟用比如 --dports 21,23,80 六:詳解-j ACTION  常用的ACTION:  DROP:悄悄丟棄 一般我們多用DROP來隱藏我們的身份,以及隱藏我們的連結串列  REJECT:明示拒絕  ACCEPT:接受 custom_chain:轉向一個自定義的鏈  DNAT  SNAT  MASQUERADE:源地址偽裝  REDIRECT:重定向:主要用於實現埠重定向  MARK:打防火牆標記的  RETURN:返回 在自定義鏈執行完畢後使用返回,來返回原規則鏈。 練習題1:      只要是來自於172.16.0.0/16網段的都允許訪問我本機的172.16.100.1的SSHD服務      分析:首先肯定是在允許表中定義的。因為不需要做NAT地址轉換之類的,然後檢視我們SSHD服務,在22號埠上,處理機制是接受,對於這個表,需要有一來一回兩個規則,如果我們允許也好,拒絕也好,對於訪問本機服務,我們最好是定義在INPUT鏈上,而OUTPUT再予以定義就好。(會話的初始端先定義),所以加規則就是:      定義進來的: iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT      定義出去的: iptables -t filter -A OUTPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT      將預設策略改成DROP:   iptables -P INPUT DROP   iptables -P OUTPUT DROP   iptables -P FORWARD DROP 七:狀態檢測: 是一種顯式擴充套件,用於檢測會話之間的連線關係的,有了檢測我們可以實現會話間功能的擴充套件         什麼是狀態檢測?對於整個TCP協議來講,它是一個有連線的協議,三次握手中,第一次握手,我們就叫NEW連線,而從第二次握手以後的,ack都為1,這是正常的資料傳輸,和tcp的第二次第三次握手,叫做已建立的連線(ESTABLISHED),還有一種狀態,比較詭異的,比如:SYN=1 ACK=1 RST=1,對於這種我們無法識別的,我們都稱之為INVALID無法識別的。還有第四種,FTP這種古老的擁有的特徵,每個埠都是獨立的,21號和20號埠都是一去一回,他們之間是有關係的,這種關係我們稱之為RELATED。 所以我們的狀態一共有四種:         NEW         ESTABLISHED         RELATED         INVALID 所以我們對於剛才的練習題,可以增加狀態檢測。比如進來的只允許狀態為NEW和ESTABLISHED的進來,出去只允許ESTABLISHED的狀態出去,這就可以將比較常見的反彈式木馬有很好的控制機制。 對於練習題的擴充套件: 進來的拒絕出去的允許,進來的只允許ESTABLISHED進來,出去只允許ESTABLISHED出去。預設規則都使用拒絕 iptables -L -n --line-number  :檢視之前的規則位於第幾行     改寫INPUT         iptables -R INPUT 2 -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT         iptables -R OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT     此時如果想再放行一個80埠如何放行呢?         iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT         iptables -R INPUT 1 -d 172.16.100.1 -p udp --dport 53 -j ACCEPT 練習題2: 假如我們允許自己ping別人,但是別人ping自己ping不通如何實現呢? 分析:對於ping這個協議,進來的為8(ping),出去的為0(響應).我們為了達到目的,需要8出去,允許0進來 在出去的埠上:iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT 在進來的埠上:iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT 小擴充套件:對於127.0.0.1比較特殊,我們需要明確定義它 iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT 八:SNAT和DNAT的實現 由於我們現在IP地址十分緊俏,已經分配完了,這就導致我們必須要進行地址轉換,來節約我們僅剩的一點IP資源。那麼通過iptables如何實現NAT的地址轉換呢? 1.SNAT基於原地址的轉換 基於原地址的轉換一般用在我們的許多內網使用者通過一個外網的口上網的時候,這時我們將我們內網的地址轉換為