Iptables是管理Netfilter的唯一工具,Netfilter直接嵌入在Linux內核。他可以為個(gè)人工作站創(chuàng )建一個(gè)防火墻,也可以為一個(gè)子網(wǎng)創(chuàng )建防火墻,以保護其他的系統平臺(市場(chǎng)上有很大一部分硬件防火墻也是使用iptables系統的)。
Netfilter在內核中過(guò)濾,沒(méi)有守護進(jìn)程,在OSI模型的第2、3、4層插入策略。過(guò)濾的速度非???,因為他只讀取數據包頭,不會(huì )給信息流量增加負擔,也無(wú)需進(jìn)行驗證。
Netfilter提供了一系列的表(tables),每個(gè)表由若干個(gè)鏈(chains)組成,而每條鏈可以由一條或若干條規則(rules)組成。實(shí)際上netfilter 是表的容器,表是鏈的容器,而鏈又是規則的容器。
Netfilter表和Netfilter鏈: 表說(shuō)明:
Filter:這個(gè)表主要執行數據包過(guò)濾。
Nat:主要進(jìn)行網(wǎng)絡(luò )地址轉換。
Managle:用于修改一些特殊的規則。
鏈說(shuō)明:
PREROUTING:路由之前,剛到達的數據包。(nat)
INPUT:通過(guò)路由,目的為地為本機的數據包。(filter)
FORWARD:需要通過(guò)本地系統進(jìn)行轉發(fā)的數據包。(filter)
OUTPUT:由本機產(chǎn)生,向外轉發(fā),處于POSTROUTING之前的數據包。(nat和filter)
POSTROUTIONG:通過(guò)路由后,即將離開(kāi)系統的數據包。(nat)
Netfilter的數據包流程:
Iptables 基本語(yǔ)法:iptables 內置了filter、nat 和mangle 三張表,我們可以使用-t 參數來(lái)設置對哪張表生效,也可以省略-t 參數,則默認對filter 表進(jìn)行操作。
iptables –t nat –L :顯示nat表的中的設置:
-F 刪除某個(gè)鏈或者表中的規則:
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和實(shí)例圖中的功能相同,丟棄來(lái)自192.168.0.1的數據包,這里省略了-t filter。
添加該語(yǔ)句后,保存設置并重新啟動(dòng)iptalbes 服務(wù),并通過(guò)-L的命令查看,就會(huì )發(fā)現剛添加的這條規則排列在所有規則后。
-----------iptables的匹配規則是按順序排列的。-I在制定位置插入一條規則:
(如果有回環(huán)規則(iptables –A INPUT –I lo –j ACCEPT,則回環(huán)永遠是第一條)
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 通過(guò)22端口訪(fǎng)問(wèn)該主機,把它作為第一條規則插入iptables規則列表。
-----------iptables的匹配規則是按順序排列的。-P <CHAIN TARGET> 分配連接策略。
iptables –P INPUT DROP 禁止任何輸入的數據包。這句慎用。
iptables –P OUTPUT ACCEPT 允許所有輸出的數據包。
-D刪除某一條規則:
Iptables –D <CHAIN> X 刪除某個(gè)鏈的第幾條規則
iptables –D INPUT 3 刪除INPUT鏈上的第3條規則。
iptables –P INPUT DROP 這個(gè)不能使用刪除語(yǔ)句刪除,只能到本機輸入iptables –P INPUT ACCEPT
Iptables中的匹配:iptables –A INPUT –p tcp –s 192.168.0.1 --dport 22 –j ACCEPT
這個(gè)命令我們在上面已經(jīng)看過(guò)了,我們來(lái)看下其他的一些匹配參數。
-p protocol 匹配網(wǎng)絡(luò )協(xié)議,例子中匹配tcp協(xié)議。
-s IP地址或者網(wǎng)段 匹配源IP地址或者網(wǎng)段
例子中師匹配一個(gè)IP的,如果要匹配一個(gè)網(wǎng)段則如下
-s 192.168.0.1/24 如果是除這個(gè)網(wǎng)段之外的所有則為:
! -s 192.168.0.1/24 如果是除這個(gè)IP之外的所有則為
:! -s 192.168.0.1 -d IP地址或者網(wǎng)段 匹配目的IP地址或者網(wǎng)段
--dport X 匹配目的端口號,X代表具體端口號。
--sport X 匹配源端口號,X代表具體端口號。
Iptables中的目的:我們已經(jīng)在前面看到過(guò)-j 后面跟的就是目的。
ACCEPT:允許數據包通過(guò)。
DROP:直接丟棄數據包。
REJECT:丟棄數據包,同時(shí)發(fā)送響應報文通知發(fā)送方。
設置Iptables預設規則(本地機防火墻):1、清除iptables設置:iptables –F
2、設置回環(huán)規則,沒(méi)有這個(gè)規則好多服務(wù)不能啟動(dòng):
iptables –A INPUT –i lo –j ACCETP3、連接跟蹤設置:作用允許連線(xiàn)出去后對方主機回應進(jìn)來(lái)的封包。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT NEW:想要新建連接的數據包
INVALID:無(wú)效的數據包,例如損壞或者不完整的數據包
ESTABLISHED:已經(jīng)建立連接的數據包
RELATED:與已經(jīng)發(fā)送的數據包有關(guān)的數據包
4、iptables -p INPUT DROP 允許進(jìn)入數據包----慎用該句。
5、iptables -p FORWARD DROP 禁止轉發(fā)數據包
6、iptables -P OUTPUT ACCEPT 允許外發(fā)數據包
7、設置好以后就可以根據情況開(kāi)放相應的端口了iptables –A INPUT –p tcp --dport 20:21 –j ACCEPT 開(kāi)放FTP的20、21端口。
iptables –A INPUT –P tcp --dport 80 –j ACCEPT 開(kāi)放http的80端口。
iptables –I INPUT –p tcp –dport 22 –j ACCEPT 開(kāi)放SSH服務(wù)的22端口。
設置Iptables FORWORD規則:一般情況FORWORD鏈式DROP的,但是當用來(lái)做NAT的時(shí)候我們就需要設置他了。
首先要開(kāi)啟轉發(fā)功能:編輯
/etc/sysctl.conf文件
Iptables轉發(fā)功能(在做NAT時(shí),FORWARD默認規則是DROP時(shí),必須做)
#
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個(gè)。
#
iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT設置ICMP包過(guò)濾,允許每秒1個(gè)包,限制觸發(fā)條件是10個(gè)包。
#
iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
我在前面只所以允許ICMP包通過(guò),就是因為我在這里有限制。
連接跟蹤:提供對數據包“狀態(tài)”的檢查
可以識別的狀態(tài):
NEW:想要新建連接的數據包
INVALID:無(wú)效的數據包,例如損壞或者不完整的數據包
ESTABLISHED:已經(jīng)建立連接的數據包
RELATED:與已經(jīng)發(fā)送的數據包有關(guān)的數據包
連接跟蹤的模塊ip_conntrack_ftp:自動(dòng)跟蹤FTP連接,并自動(dòng)打開(kāi)它需要通過(guò)防火墻的高端端口。
Ip_conntrack_tftp:和上面功能類(lèi)似不過(guò)是TFTP服務(wù)。
Ip_nat_ftp:修改NAT保護的計算機的FTP數據包。
Ip_nat_tftp:和上面類(lèi)似不是TFTP數據包。
可以通過(guò)修改
/etc/sysconfig/iptables-config 文件
修改
IPTABLES_MODULES="ip_conntrack_tftp ip_nat_ftp"
也可以通過(guò)
modprobe ip_conntrack_tftp 不過(guò)重啟以后將失效。
連接跟蹤實(shí)例:允許建立連接:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
跟蹤規則:
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
阻止所有其他進(jìn)入的鏈接:
iptables -A INPUT -m state --state NEW -j DROP
NAT網(wǎng)絡(luò )地址轉換:將一個(gè)IP轉換成另一個(gè) IP(輸入和輸出)
網(wǎng)絡(luò )地址轉換類(lèi)型:目的地 NAT(DNAT):DNAT修改包的目的地位址的時(shí)機,必須在包即將被送到本機行程之前,或是要被轉送其它電腦之前;所以,使用DNAT為目標的規則,必須設置于nat表格的PREROUTING鏈結。
源 NAT(SNAT,MASQUERADE):SNAT必須在封包即將離開(kāi)核心的前一刻,即時(shí)修改其來(lái)源位址(或通訊端口),所以SNAT規則的設置地點(diǎn)必須是在nat表格的POSTROUTING鏈結。