面對現如今的網絡環境,網絡安全意識是相當重要,而網絡安全也越來越受到人們的重視,而網絡防護中最簡單且便捷的就是防火牆。
今天就來爲大家介紹Linux下的防火牆的應用。
一、簡介
Iptables一般分爲主機防火牆(工作與主機邊緣)和網絡擴防火牆(工作與網絡邊緣)
防火牆主要作用:工作於主機或網絡邊緣,對於進出的報文根據定義的規則作檢查,進而對被規則匹配到的報文作爲相應處理。
而現實環境中會有硬件廠商設計的專門的防火牆硬件設備,其性能要比軟件防火牆好。(但此設備也並非完全依靠硬件,畢竟每個企業的網絡環境不一樣,也需要軟件搭配來完成防火功能)
硬件設備分類:IDS(***檢測系統)、IPS(***防禦系統)大部分還用到了HoneyPot(蜜罐)
在Linux下iptables並不是防火牆,而只是一種規則生成器,真正的防火牆是netfilter,所有的包過濾等功能都是由netfilter提供的。
netfilter有五個鏈來實現控制:INPUT到達本機內部的報文必經之路
PREROUTING:路由前
FORWARD:由本機轉發的報文必經之路
OUTPUT:由本機發出的報文的必經之路
POSTROUTING:路由後
netfilter規則的功能(表):raw用戶請求nat時限制追蹤功能
mangle修改TCP報文首部內容
nat地址轉換
filter包過濾
表和鏈的關係:filter表用到的鏈有INPUT, FORWARD, OUTPUT
mangle表用到全部的鏈
nat表用到的鏈有PREROUTING(SNAT),POSTROUTING(DNAT),OUTPUT
raw表用到的鏈有PREROUTING, OUTPUT
數據報文流程:
跟本機內部進程通信:
進入:PREROUTING, INPUT
出去:OUTPUT, POSTROUTING
由本機轉發:
PREROUTING, FORWARD, POSTROUTING
數據報文的流向:
源IP和目標IP由流向決定;
如圖示,主機A與主機B之間的通信過程
1、主機A的請求到達網卡1,網卡1交給PREROUTING
2、PREROUTING查看該信息是請求的本機還是別的主機,不是本機的話就交給 FORWARD
3、由FORWARD轉發給POSTROUTING
4、由POSTROUTING決定給網卡2,讓網卡2發給主機B
主機A與中間應用通信過程
1、主機A的請求到達網卡1,網卡1交給PREROUTING
2、PREROUTING查看該信後發現是請求的本機,所以交給INPUT處理
3、INPUT把信息交給上層處理
4、處理完信息後需要給主機A回覆,所以交給了OUTPUT處理
5、OUTPUT在交給POSTROUTING,由POSTROUTING決定從哪個網卡發給主機A
二、iptables配置語法
基本語法:iptables [-t 表名] 鏈管理 鏈名 匹配條件 -j 處理動作
注:如果不指明表明默認爲filter表
對鏈中規則的管理:-A 添加規則
-I 插入新規則
-D刪除規則
-R替換規則
對規則的查詢:-L 列出規則表
-L -n 以數字格式顯示主機地址和端口
-L -v 詳細格式
-L --line-numbers 顯示規則編號
對鏈的管理: -F:flush, 清空規則鏈;
-N:new, 自建一條鏈
-X: delete, 刪除一條自定義的空鏈
-Z:zero,計數器歸零
-P:policy,設置默認策略,對filter表來講,默認規則爲ACCEPT或DROP;
-E:重命名自定義鏈
匹配條件:
通用匹配: -s 地址:指定報文源IP地址匹配的範圍;可以是IP,也可以是網絡地址;可使用!取反;
-d 地址:指定報文目標IP地址匹配的範圍;
-p 協議:指定匹配報文的協議類型,一般有三種tcp, udp和icmp;
-i INTERFACE: 數據報文流入的接口;PREROUTING, INPUT, FORWARD
-o INTERFACE: 數據報文流出的接口;OUTPUT, FORWARD, POSTROUITING
擴展匹配
隱式擴展:當使用-p {tcp|udp|icmp}中的一種時,可以直接使用擴展專用選項;
-p tcp:
--sport PORT[-PORT]: 指定源端口
--dport PORT[-PORT]: 指定目標端口
--tcp-flags
-p udp:
--sport
--dport
顯式擴展:必須明確說明使用哪個模塊進行擴展,而後才能使用其擴展專用選項;
-m state --state
注:這些規則定義後是立即生效的,但不會永久有效,若想永久有效則需要修改規則文件
Iptables-save > /etc/sysconfig/iptables
【示例1】我們在本機上做訪問規則,我們把本機的默認規則全部設置爲拒絕
iptables -t filter -P INPUT -j DROP iptables -t filter -P OUTPUT -j DROP iptables -t filter -P FORWORD -j DROP
【示例2】在示例1的基礎上開放自己ping自己
iptables -I INPUT -i lo -j ACCEPT iptables -I OUTPUT -o lo -j ACCEPT
顯式擴展: -m 擴展模塊名稱
multiport: 多端口匹配
專用選項:
--source-ports, --sports port[,port,port:port]
--destination-ports, --dports
--ports
【示例3】:開放本機的web服務和ssh服務
iptables -I INPUT -d 172.16.249.29 -p tcp -m multiport --dports 22,80 -j ACCEPT iptables -I OUTPUT -s 172.16.249.29 -p tcp -m multiport --sports 22,80 -j ACCEPT
iprange: 匹配指定範圍內的地址;
專用選項:
[!] --src-ragne IP[-IP]
[!] --dst-range
【示例4】:允許來自172.16.250.1-100的主機telnet本機
iptables -A INPUT -d 172.16.249.29 -p tcp --dport 23 -m iprange --src-range 172.16.250.1-172.16.250.100 -j ACCEPT iptables -A OUTPUT -s 172.16.249.29 -p tcp --sport 23 -m iprange --dst-range 172.16.250.1-172.16.250.100 -j ACCEPT
string: 字符串匹配,能夠檢測報文應用層中的字符串
字符匹配檢查高效算法kmp, bm
專用選項:
--algo {kmp|bm}
--string "STRING"
--hex-string "HEX_STRING": HEX_STRING爲編碼成16進制格式的字串;
【示例5】:禁止訪問本機含有“sex”的內容
iptables -I OUTPUT -m string --algo kmp --string "sex" -j DROP
time: 基於時間做訪問控制
專用選項:
--datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]
--datestop
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
--weekdays day[,day]
【示例6】:僅週一週二週四週五的8:20-18:40開放本機的web服務
iptables -I INPUT -d 172.16.249.29 -p tcp --dport 80 -m time --timestart 08:20 --timestop 18:40 --weekdays Mon,Tue,Thu,Fri -j REJECT
connlimit: 連接數限制,對每IP所能夠發起併發連接數做限制;
專用選項:
!] --connlimit-above [n]
【示例7】:限制每個IP最多能迸發2個ssh請求
iptables -A INPUT -d 172.16.249.29 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP
limit: 速率限制
專用選項:
--limit n[/second|/minute|/hour|/day]
--limit-burst n
【示例8】:限制每分鐘只能對本機發起20個ICMP請求報文並且空閒5個令牌
iptables -A INPUT -d 172.16.249.29 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT
state: 狀態檢查
專用選項:
--state
連接追蹤中的狀態:
NEW: 新建立一個會話
ESTABLISHED:已建立的連接
RELATED: 有關聯關係的連接
INVALID: 無法識別的連接
調整連接追蹤功能所能容納的連接的最大數目:
/proc/sys/net/nf_conntrack_max
當前追蹤的所有連接
/proc/net/nf_conntrack
不同協議或連接類型追蹤時的屬性:
/proc/sys/net/netfilter目錄:
注:優化規則方法,儘量減少規則條目,彼此不相關的條目,匹配機會較多的放在上邊,屬於同一功能的條目,匹配規則更嚴格的放在上面。