RHCE心得——IPTABLES學習心得

Iptables是管理Netfilter的惟一工具,Netfilter直接嵌入在Linux內核。他能夠爲我的工做站建立一個防火牆,也能夠爲一個子網建立防火牆,以保護其餘的系統平臺(市場上有很大一部分硬件防火牆也是使用iptables系統的)。
Netfilter在內核中過濾,沒有守護進程,在OSI模型的第二、三、4層插入策略。過濾的速度很是快,由於他只讀取數據包頭,不會給信息流量增長負擔,也無需進行驗證。
Netfilter提供了一系列的表(tables),每一個表由若干個鏈(chains)組成,而每條鏈能夠由一條或若干條規則(rules)組成。實際上netfilter 是表的容器,表是鏈的容器,而鏈又是規則的容器。
Netfilter表和Netfilter鏈:

表說明:
Filter:這個表主要執行數據包過濾。
Nat:主要進行網絡地址轉換。
Managle:用於修改一些特殊的規則。
鏈說明:
PREROUTING:路由以前,剛到達的數據包。(nat)
INPUT:經過路由,目的爲地爲本機的數據包。(filter)
FORWARD:須要經過本地系統進行轉發的數據包。(filter)
OUTPUT:由本機產生,向外轉發,處於POSTROUTING以前的數據包。(nat和filter)
POSTROUTIONG:經過路由後,即將離開系統的數據包。(nat)
Netfilter的數據包流程:

Iptables 基本語法:
iptables 內置了filter、nat 和mangle 三張表,咱們可使用-t 參數來設置對哪張表生效,也能夠省略-t 參數,則默認對filter 表進行操做。
圖中:這句的意思就是:來自(源地址)192.168.0.1的INPUT鏈的數據包直接丟棄。
Iptables進程服務命令:
service iptables save 保存iptables設置,對iptables規則編輯後必定要保存。
service iptables restart 保存設置之後不重啓則設置不生效,要設置生生效請重啓。
service iptables status 檢查iptables的設置。相似於iptable –L命令。
Iptables基本的鏈操做命令:
-L 列出某個鏈或者表中的規則: service iptables status 把這個命令和-L比較下
iptables –L:顯示filter表中的規則等同於iptables –t filter -L

iptables –t nat –L :顯示nat表的中的設置:
-F 刪除某個鏈或者表中的規則:
iptables –F (iptables –t filter –F) 刪除filter表中的全部規則;
iptables –t nat –F 刪除nat表中的全部規則;
iptables –t nat –F POSTROUTING 刪除nat表中POSTROUTING鏈的全部規則;
-A添加一條規則(在當前的規則後添加,也就是排在全部規則後):
iptables -A INPUT –s 192.168.0.1 –j DROP
和實例圖中的功能相同,丟棄來自192.168.0.1的數據包,這裏省略了-t filter。
添加該語句後,保存設置並從新啓動iptalbes 服務,並經過-L的命令查看,就會發現剛添加的這條規則排列在全部規則後。
-----------iptables的匹配規則是按順序排列的。
-I在制定位置插入一條規則:
(若是有迴環規則(iptables –A INPUT –I lo –j ACCEPT,則迴環永遠是第一條)
iptables –I <CHAIN> 做爲第一條規則插入。
iptables <CHAIN> X 做爲第X條規則插入,X這裏表明規則順序號。
iptables –A INPUT –p tcp –s 192.168.0.1 --dport 22 –j ACCEPT
容許192.168.0.1 經過22端口訪問該主機,把它做爲第一條規則插入iptables規則列表。
-----------iptables的匹配規則是按順序排列的。
-P <CHAIN TARGET> 分配鏈接策略。
iptables –P INPUT DROP 禁止任何輸入的數據包。這句慎用。
iptables –P OUTPUT ACCEPT 容許全部輸出的數據包。
-D刪除某一條規則:
Iptables –D <CHAIN> X 刪除某個鏈的第幾條規則
iptables –D INPUT 3 刪除INPUT鏈上的第3條規則。
iptables –P INPUT DROP 這個不能使用刪除語句刪除,只能到本機輸入iptables –P INPUT ACCEPT
Iptables中的匹配:
iptables –A INPUT –p tcp –s 192.168.0.1 --dport 22 –j ACCEPT
這個命令咱們在上面已經看過了,咱們來看下其餘的一些匹配參數。
-p protocol 匹配網絡協議,例子中匹配tcp協議。
-s IP地址或者網段 匹配源IP地址或者網段
例子中師匹配一個IP的,若是要匹配一個網段則以下
-s 192.168.0.1/24
若是是除這個網段以外的全部則爲: ! -s 192.168.0.1/24
若是是除這個IP以外的全部則爲 ! -s 192.168.0.1
-d IP地址或者網段 匹配目的IP地址或者網段
--dport X 匹配目的端口號,X表明具體端口號。
--sport X 匹配源端口號,X表明具體端口號。
Iptables中的目的:
咱們已經在前面看到過-j 後面跟的就是目的。
ACCEPT:容許數據包經過。
DROP:直接丟棄數據包。
REJECT:丟棄數據包,同時發送響應報文通知發送方。
設置Iptables預設規則(本地機防火牆):
一、清除iptables設置:iptables –F
二、設置迴環規則,沒有這個規則好多服務不能啓動:
iptables –A INPUT –i lo –j ACCETP
三、鏈接跟蹤設置:做用容許連線出去後對方主機迴應進來的封包。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    NEW:想要新建鏈接的數據包
    INVALID:無效的數據包,例如損壞或者不完整的數據包
    ESTABLISHED:已經創建鏈接的數據包
    RELATED:與已經發送的數據包有關的數據包
四、iptables -p INPUT DROP 容許進入數據包----慎用該句。
五、iptables -p FORWARD DROP 禁止轉發數據包
六、iptables -P OUTPUT ACCEPT 容許外發數據包
七、設置好之後就能夠根據狀況開放相應的端口了
iptables –A INPUT –p tcp --dport 20:21 –j ACCEPT 開放FTP的20、21端口。
iptables –A INPUT –P tcp --dport 80 –j ACCEPT 開放http的80端口。
iptables –I INPUT –p tcp –dport 22 –j ACCEPT 開放SSH服務的22端口。
設置Iptables FORWORD規則:
通常狀況FORWORD鏈式DROP的,可是當用來作NAT的時候咱們就須要設置他了。
首先要開啓轉發功能:編輯 /etc/sysctl.conf文件

Iptables轉發功能(在作NAT時,FORWARD默認規則是DROP時,必須作)
# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
丟棄壞的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
我在前面只因此容許ICMP包經過,就是由於我在這裏有限制。
鏈接跟蹤:提供對數據包「狀態」的檢查
能夠識別的狀態:
NEW:想要新建鏈接的數據包
INVALID:無效的數據包,例如損壞或者不完整的數據包
ESTABLISHED:已經創建鏈接的數據包
RELATED:與已經發送的數據包有關的數據包
鏈接跟蹤的模塊
ip_conntrack_ftp:自動跟蹤FTP鏈接,並自動打開它須要經過防火牆的高端端口。
Ip_conntrack_tftp:和上面功能相似不過是TFTP服務。
Ip_nat_ftp:修改NAT保護的計算機的FTP數據包。
Ip_nat_tftp:和上面相似不是TFTP數據包。
能夠經過修改 /etc/sysconfig/iptables-config 文件
修改 IPTABLES_MODULES="ip_conntrack_tftp ip_nat_ftp"

也能夠經過 mod probe ip_conntrack_tftp 不太重啓之後將失效。
鏈接跟蹤實例:
容許創建鏈接:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
跟蹤規則:
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
阻止全部其餘進入的連接:
iptables -A INPUT -m state --state NEW -j DROP
NAT網絡地址轉換:將一個IP轉換成另外一個 IP(輸入和輸出)
網絡地址轉換類型:
目的地 NAT(DNAT):DNAT修改包的目的地位址的時機,必須在包即將被送到本機行程以前,或是要被轉送其它電腦以前;因此,使用DNAT爲目標的規則,必須設置於nat表格的PREROUTING鏈結。
源 NAT(SNAT,MASQUERADE):SNAT必須在封包即將離開核心的前一刻,即時修改其來源位址(或通信端口),因此SNAT規則的設置地點必須是在nat表格的POSTROUTING鏈結。
NAT實例:
iptables -t nat -A PREROUTING -i ethl -p tcp - -dport 80 -j DNAT - - to -destination 192.168.1.3:8080
把要進入eth1(eth1鏈接外網)80端口的數據包,從新定向到192.168.1.3的8080端口。
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT
--to-dest 192.168.1.3 --to-dest 192.168.1.4 --to-dest 192.168.1.5

上面這句第一個請求被髮到192.168.1.3,第二個發到192.168.1.4如此循環,實現載量平衡。
上面的語句可使外網的訪問內網開通8080端口的WEB 服務器,那麼內網的WEB服務器如何將數據傳出去呢?這個時候要經過SNAT來實現了。
iptables -t nat -A POSTROUTING -j SNAT
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.3-192.168.1.9
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.3:123
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.3:123-234
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 第一種方法是直接使用SNAT爲目標,這種方法適合用在具備固定IP地址的網關器,另外一種方法是使用是使用MASQUERADE爲目標,適合用於只有動態IP地址的網關器(例如,使用PPPoE協定的ADSL連線)。因爲因爲MASQUERADE可以應付網絡界面突然離線,而後以另外一個地址恢復上線的狀況,因此它轉換邏輯比較複雜些,須要耗損比較多的CPU運算能力,所以,若是你有固定的IP地址,就應該儘可能使用SNAT來代替MASQUERADE。
相關文章
相關標籤/搜索