LINUX防火墻iptables

1.安全技術(shù)

(1)入侵檢測與管理系統(tǒng)(Intrusion Detection Systems):

特點(diǎn)是不阻斷任何網(wǎng)絡(luò)訪問,量化、定位來自內(nèi)外網(wǎng)絡(luò)的威脅情況,主要以提供報(bào)告和事后監(jiān)督為主,提供有針對性的指導(dǎo)措施和安全決策依據(jù)。一般采用旁路部署方式(就是放在一邊觀察檢測)

(2)入侵防御系統(tǒng)(Intrusion Prevention System):

以透明模式工作,分析數(shù)據(jù)包的內(nèi)容如:溢出攻擊、拒絕服務(wù)攻擊、木馬、蠕蟲、系統(tǒng)漏洞等進(jìn)行準(zhǔn)確的分析判斷,在判定為攻擊行為后立即予以阻斷,主動而有效的保護(hù)網(wǎng)絡(luò)的安全,一般采用在線部署方式

(3)防火墻( FireWall ):

隔離功能,工作在網(wǎng)絡(luò)或主機(jī)邊緣,對進(jìn)出網(wǎng)絡(luò)或主機(jī)的數(shù)據(jù)包基于一定的規(guī)則檢查,并在匹配某規(guī)則時(shí)由規(guī)則定義的行為進(jìn)行處理的一組功能的組件,基本上的實(shí)現(xiàn)都是默認(rèn)情況下關(guān)閉所有的通過型訪問,只開放允許訪問的策略
防火墻的分類

2.防火墻的分類

? 主機(jī)防火墻:服務(wù)范圍為當(dāng)前主機(jī)
網(wǎng)絡(luò)防火墻:服務(wù)范圍為防火墻一側(cè)的局域網(wǎng)
? 硬件防火墻:在專用硬件級別實(shí)現(xiàn)部分功能的防火墻;另一個(gè)部分功能基于軟件實(shí)現(xiàn),Checkpoint,NetScreen軟件防火墻:運(yùn)行于通用硬件平臺之上的防火墻的應(yīng)用軟件
? 網(wǎng)絡(luò)層防火墻:OSI下面第三層
應(yīng)用層防火墻/代理服務(wù)器:代理網(wǎng)關(guān),OSI七層

(1)網(wǎng)絡(luò)層防火墻

? 包過濾防火墻
? 網(wǎng)絡(luò)層對數(shù)據(jù)包進(jìn)行選擇,選擇的依據(jù)是系統(tǒng)內(nèi)設(shè)置的過濾邏輯,被稱為訪問控制列表(ACL),通過檢查數(shù)據(jù)流中每個(gè)數(shù)據(jù)的源地址,目的地址,所用端口號和協(xié)議狀態(tài)等因素,或他們的組合來確定是否允許該數(shù)據(jù)包通過
? 優(yōu)點(diǎn):對用戶來說透明,處理速度快且易于維護(hù)
? 缺點(diǎn):無法檢查應(yīng)用層數(shù)據(jù),如病毒等


Paste_Image.png
(2)應(yīng)用層防火墻/代理服務(wù)型防火墻(Proxy Service)

? 將所有跨越防火墻的網(wǎng)絡(luò)通信鏈路分為兩段
? 內(nèi)外網(wǎng)用戶的訪問都是通過代理服務(wù)器上的“鏈接”來實(shí)現(xiàn)
? 優(yōu)點(diǎn):在應(yīng)用層對數(shù)據(jù)進(jìn)行檢查,比較安全
? 缺點(diǎn):增加防火墻的負(fù)載


Paste_Image.png

? 現(xiàn)實(shí)生產(chǎn)環(huán)境中所使用的防火墻一般都是二者結(jié)合體
? 即先檢查網(wǎng)絡(luò)數(shù)據(jù),通過之后再送到應(yīng)用層去檢查

(3)應(yīng)用層防火墻

? 應(yīng)用層防火墻/代理服務(wù)型防火墻(Proxy Service)
? 將所有跨越防火墻的網(wǎng)絡(luò)通信鏈路分為兩段
? 內(nèi)外網(wǎng)用戶的訪問都是通過代理服務(wù)器上的“鏈接”來實(shí)現(xiàn)
? 優(yōu)點(diǎn):在應(yīng)用層對數(shù)據(jù)進(jìn)行檢查,比較安全
? 缺點(diǎn):增加防火墻的負(fù)載


Paste_Image.png

? 現(xiàn)實(shí)生產(chǎn)環(huán)境中所使用的防火墻一般都是二者結(jié)合體
? 即先檢查網(wǎng)絡(luò)數(shù)據(jù),通過之后再送到應(yīng)用層去檢查

3.iptables的基本認(rèn)識

(1)Netfilter組件

? 內(nèi)核空間,集成在linux內(nèi)核中
? 擴(kuò)展各種網(wǎng)絡(luò)服務(wù)的結(jié)構(gòu)化底層框架
? 內(nèi)核中選取五個(gè)位置放了五個(gè)hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而這五個(gè)hook function向用戶開放,用戶可以通過一個(gè)命令工具(iptables)向其寫入規(guī)則
? 由信息過濾表(table)組成,包含控制IP包處理的規(guī)則集(rules),規(guī)則被分組放在鏈(chain)上

(2)三種報(bào)文流向:

? 流入本機(jī):PREROUTING --> INPUT-->用戶空間進(jìn)程
? 流出本機(jī):用戶空間進(jìn)程 -->OUTPUT--> POSTROUTING
? 轉(zhuǎn)發(fā):PREROUTING --> FORWARD --> POSTROUTING

(3)防火墻工具

? iptables
? 命令行工具,工作在用戶空間
? 用來編寫規(guī)則,寫好的規(guī)則被送往netfilter,告訴內(nèi)核如何去處
理信息包
? firewalld
CentOS 7引入了新的前端管理工具
管理工具:
firewall-cmd 命令行
firewall-config 圖形
iptables的組成

(4)iptables由四個(gè)表和五個(gè)鏈以及一些規(guī)則組成

? 四個(gè)表table:filter、nat、mangle、raw
filter表:過濾規(guī)則表,根據(jù)預(yù)定義的規(guī)則過濾符合條件的數(shù)據(jù)包
(一般的過濾功能)
nat表:network address translation 地址轉(zhuǎn)換規(guī)則表(端口映射,地址映射等)
mangle:修改數(shù)據(jù)標(biāo)記位規(guī)則表(用于對特定數(shù)據(jù)包的修改,標(biāo)記序號,如下圖所示,可以直接用10或20代表以下的)

Paste_Image.png

Raw:關(guān)閉NAT表上啟用的連接跟蹤機(jī)制,加快封包穿越防火墻速度
(一般是為了不再讓iptables做數(shù)據(jù)包的鏈接跟蹤處理,提高性能)
優(yōu)先級由高到低的順序?yàn)?raw-->mangle-->nat-->filter
? 五個(gè)內(nèi)置鏈chain
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING

(5)Netfilter表和鏈對應(yīng)關(guān)系
Paste_Image.png
(6)數(shù)據(jù)包過濾匹配流程
Paste_Image.png
(7)IPTABLES和路由

? 路由功能發(fā)生的時(shí)間點(diǎn)
? 報(bào)文進(jìn)入本機(jī)后
? 判斷目標(biāo)主機(jī)是否為本機(jī)
是:INPUT
否:FORWARD
? 報(bào)文離開本機(jī)之前
? 判斷由哪個(gè)接口送往下一跳


Paste_Image.png
(8)內(nèi)核中數(shù)據(jù)包的傳輸過程

? 內(nèi)核中數(shù)據(jù)包的傳輸過程
? 當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入網(wǎng)卡時(shí),數(shù)據(jù)包首先進(jìn)入PREROUTING鏈,
內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去
? 如果數(shù)據(jù)包就是進(jìn)入本機(jī)的,數(shù)據(jù)包就會沿著圖向下移動,到達(dá)INPUT鏈。數(shù)據(jù)包到達(dá)INPUT鏈后,任何進(jìn)程都會收到它。本機(jī)上運(yùn)行程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包經(jīng)過OUTPUT鏈,然后到達(dá)POSTROUTING鏈輸出
? 如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會向右
移動,經(jīng)過FORWARD鏈,然后到達(dá)POSTROUTING鏈輸出

4.iptables規(guī)則

? 規(guī)則rule:根據(jù)規(guī)則的匹配條件嘗試匹配報(bào)文,對匹配成功的報(bào)文
根據(jù)規(guī)則定義的處理動作作出處理
? 匹配條件:默認(rèn)為與條件,同時(shí)滿足
基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
擴(kuò)展匹配:通過復(fù)雜高級功能匹配
? 處理動作:稱為target,跳轉(zhuǎn)目標(biāo)
內(nèi)建處理動作:ACCEPT(接受),DROP(丟棄,不做相應(yīng)),REJECT(拒絕,明確的告訴對方),SNAT,DNAT
MASQUERADE,MARK,LOG...
自定義處理動作:自定義chain,利用分類管理復(fù)雜情形
? 規(guī)則要添加在鏈上,才生效;添加在自定義上不會自動生效
? 鏈chain:
內(nèi)置鏈:每個(gè)內(nèi)置鏈對應(yīng)于一個(gè)鉤子函數(shù)
自定義鏈:用于對內(nèi)置鏈進(jìn)行擴(kuò)展或補(bǔ)充,可實(shí)現(xiàn)更靈活的規(guī)
則組織管理機(jī)制;只有Hook鉤子調(diào)用自定義鏈時(shí),才生效

5.iptables添加要點(diǎn)

? iptables規(guī)則添加時(shí)考量點(diǎn)
? 要實(shí)現(xiàn)哪種功能:判斷添加在哪張表上
? 報(bào)文流經(jīng)的路徑:判斷添加在哪個(gè)鏈上
? 報(bào)文的流向:判斷源和目的
? 匹配規(guī)則:業(yè)務(wù)需要

? 鏈上規(guī)則的次序,即為檢查的次序,因此隱含一定的法則

? 同類規(guī)則(訪問同一應(yīng)用),匹配范圍小的放上面
? 不同類規(guī)則(訪問不同應(yīng)用),匹配到報(bào)文頻率較大的放上面
? 將那些可由一條規(guī)則描述的多個(gè)規(guī)則合并為一個(gè)
? 設(shè)置默認(rèn)策略
? 實(shí)驗(yàn)環(huán)境準(zhǔn)備:
? Centos7: systemctl stop firewalld.service

systemctl disable firewalld. service
? Centos6:service iptables stop; chkconfig iptables off

6.iptables命令

? man 8 iptables
? iptables [-t table] {-A|-C|-D} chain rule-specification
? iptables [-t table] -I chain [rulenum] rule-specification
? iptables [-t table] -R chain rulenum rule-specification
? iptables [-t table] -D chain rulenum
? iptables [-t table] -S [chain [rulenum]]
? iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
? iptables [-t table] -N chain
? iptables [-t table] -X [chain]
? iptables [-t table] -P chain target
? iptables [-t table] -E old-chain-name new-chain-name
? rule-specification = [matches...] [target]
? match = -m matchname [per-match-options]
? target = -j targetname [per-target-options]

Fliter表中INPUT規(guī)則
Paste_Image.png
規(guī)則格式:iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-targetoptions]

? -t table:
raw, mangle, nat, [filter]默認(rèn)
? SUBCOMMAND:
1、鏈管理:
-N:new, 自定義一條新的規(guī)則鏈
-X:delete,刪除自定義的空的規(guī)則鏈
-P:Policy,設(shè)置默認(rèn)策略;對filter表中的鏈而言,其默認(rèn)策略有:
ACCEPT:接受
DROP:丟棄
-E:重命名自定義鏈;引用計(jì)數(shù)不為0的自定義鏈不能夠被重命名,也不能被刪除
2、查看:
-L:list, 列出指定鏈上的所有規(guī)則,本選項(xiàng)須置后
-n:numberic,以數(shù)字格式顯示地址和端口號
-v:verbose,詳細(xì)信息
-vv 更詳細(xì)
-x:exactly,顯示計(jì)數(shù)器結(jié)果的精確值,而非單位轉(zhuǎn)換后的易讀值
--line-numbers:顯示規(guī)則的序號
常用組合:
--vnL
--vvnxL --line-numbers
-S selected,以iptables-save 命令格式顯示鏈上規(guī)則
3、規(guī)則管理:
-A:append,追加
-I:insert, 插入,要指明插入至的規(guī)則編號,默認(rèn)為第一條
-D:delete,刪除
(1) 指明規(guī)則序號
(2) 指明規(guī)則本身
-R:replace,替換指定鏈上的指定規(guī)則編號
-F:flush,清空指定的規(guī)則鏈
-Z:zero,置零
iptables的每條規(guī)則都有兩個(gè)計(jì)數(shù)器
(1) 匹配到的報(bào)文的個(gè)數(shù)
(2) 匹配到的所有報(bào)文的大小之和
? chain:PREROUTING,INPUT,F(xiàn)ORWARD,OUTPUT,POSTROUTING
? 匹配條件
基本:通用的,PARAMETERS
擴(kuò)展:需加載模塊,MATCH EXTENTIONS
? 1、基本匹配條件:無需加載模塊,由iptables/netfilter自行提供
[!] -s, --source address[/mask][,...]:源IP地址或范圍
[!] -d, --destination address[/mask][,...]:目標(biāo)IP地址或范圍
[!] -p, --protocol protocol:指定協(xié)議,可使用數(shù)字如0(all)
protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,mh or “all“ 參看:/etc/protocols
[!] -i, --in-interface name:報(bào)文流入的接口;只能應(yīng)用于數(shù)據(jù)
報(bào)文流入環(huán)節(jié),只應(yīng)用于INPUT、FORWARD、PREROUTING鏈
[!] -o, --out-interface name:報(bào)文流出的接口;只能應(yīng)用于數(shù)據(jù)報(bào)文流出的環(huán)節(jié),只應(yīng)用于FORWARD、OUTPUT、POSTROUTING鏈
?2 擴(kuò)展匹配條件:需要加載擴(kuò)展模塊(/usr/lib64/xtables/*.so),方可生效
? 查看幫助 man iptables-extensions
? (1)隱式擴(kuò)展:在使用-p選項(xiàng)指明了特定的協(xié)議時(shí),無需再用-m選項(xiàng)
指明擴(kuò)展模塊的擴(kuò)展機(jī)制,不需要手動加載擴(kuò)展模塊
? tcp協(xié)議的擴(kuò)展選項(xiàng)
[!] --source-port, --sport port[:port]:匹配報(bào)文源端口,
可為端口范圍
[!] --destination-port,--dport port[:port]:匹配報(bào)文目標(biāo)
端口,可為范圍
[!] --tcp-flags mask comp
mask 需檢查的標(biāo)志位列表,用,分隔
例如 SYN,ACK,FIN,RST
comp 在mask列表中必須為1的標(biāo)志位列表,無指定則必須為0,用,分隔
? 示例:
--tcp-flags SYN,ACK,FIN,RST SYN 表示要檢查的標(biāo)志位為SYN,ACK,FIN,RST四個(gè),其中SYN必須為1,余下的必須為0
--tcp-flags SYN,ACK,FIN,RST SYN,ACK
--tcp-flags ALL ALL
--tcp_flags ALL NONE
? [!] --syn:用于匹配第一次握手
相當(dāng)于:--tcp-flags SYN,ACK,FIN,RST SYN
? udp
[!] --source-port, --sport port[:port]:匹配報(bào)文的源端口;可以是端口范圍
[!] --destination-port,--dport port[:port]:匹配報(bào)文的目標(biāo)端口;可以是端口范圍
? icmp
[!] --icmp-type {type[/code]|typename} type/code
0/0 echo-reply icmp應(yīng)答
8/0 echo-request icmp請求
? (2)顯式擴(kuò)展:必須使用-m選項(xiàng)指明要調(diào)用的擴(kuò)展模塊的擴(kuò)展機(jī)制,要手動加載擴(kuò)展模塊
[-m matchname [per-match-options]]
? 處理動作:
? -j targetname [per-target-options]
簡單: ACCEPT,DROP
擴(kuò)展: REJECT:--reject-with:icmp-port-unreachable默認(rèn)
RETURN:返回調(diào)用鏈
REDIRECT:端口重定向
LOG:記錄日志,dmesg
MARK:做防火墻標(biāo)記
DNAT:目標(biāo)地址轉(zhuǎn)換
SNAT:源地址轉(zhuǎn)換
MASQUERADE:地址偽裝
...
自定義鏈:
iptables命令
? 顯式擴(kuò)展:必須顯式地指明使用的擴(kuò)展模塊進(jìn)行的擴(kuò)展
? 使用幫助:
CentOS 6: man iptables
CentOS 7: man iptables-extensions
? 1、multiport擴(kuò)展
以離散方式定義多端口匹配,最多指定15個(gè)端口
[!] --source-ports,--sports port[,port|,port:port]...
指定多個(gè)源端口
[!] --destination-ports,--dports port[,port|,port:port]...
指定多個(gè)目標(biāo)端口
[!] --ports port[,port|,port:port]...多個(gè)源或目標(biāo)端口
示例:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p
tcp -m multiport --dports 20:22,80 -j ACCEPT
? 2、iprange擴(kuò)展
指明連續(xù)的(但一般不是整個(gè)網(wǎng)絡(luò))ip地址范圍
[!] --src-range from[-to] 源IP地址范圍
[!] --dst-range from[-to] 目標(biāo)IP地址范圍
示例:
iptables -A INPUT -d 172.16.100.10 -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.16.100.10 -j DROP
? 3、mac擴(kuò)展
指明源MAC地址
適用于:PREROUTING, FORWARD,INPUT chains
[!] --mac-source XX:XX:XX:XX:XX:XX
示例:
iptables -A INPUT -s 172.16.0.100 -m mac --macsource
00:50:56:12:34:56 -j ACCEPT
iptables -A INPUT -s 172.16.0.100 -j REJECT
? 4、string擴(kuò)展
對報(bào)文中的應(yīng)用層數(shù)據(jù)做字符串模式匹配檢測
--algo {bm|kmp}:字符串匹配檢測算法
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
--from offset 開始偏移
--to offset 結(jié)束偏移
[!] --string pattern:要檢測的字符串模式
[!] --hex-string pattern:要檢測字符串模式,16進(jìn)制格式
示例:
iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp
--sport 80 -m string --algo bm --string “google" -j
REJECT
? 5、time擴(kuò)展
根據(jù)將報(bào)文到達(dá)的時(shí)間與指定的時(shí)間范圍進(jìn)行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss] 時(shí)間
--timestop hh:mm[:ss]
[!] --monthdays day[,day...] 每個(gè)月的幾號
[!] --weekdays day[,day...] 星期幾
--kerneltz:內(nèi)核時(shí)區(qū),不建議使用,CentOS7系統(tǒng)默認(rèn)為UTC
注意: centos6 不支持kerneltz ,--localtz指定本地時(shí)區(qū)(默認(rèn))
示例:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
? 6、connlimit擴(kuò)展
根據(jù)每客戶端IP做并發(fā)連接數(shù)數(shù)量匹配
可防止CC(Challenge Collapsar挑戰(zhàn)黑洞)攻擊
--connlimit-upto n:連接的數(shù)量小于等于n時(shí)匹配
--connlimit-above n:連接的數(shù)量大于n時(shí)匹配
通常分別與默認(rèn)的拒絕或允許策略配合使用
示例:
iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
? 7、limit擴(kuò)展
基于收發(fā)報(bào)文的速率做匹配
令牌桶過濾器
--limit rate[/second|/minute|/hour|/day]
--limit-burst number
示例:
iptables -I INPUT -d 172.16.100.10 -p icmp --icmptype 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
iptables -I INPUT 2 -p icmp -j REJECT
? 8、state擴(kuò)展
根據(jù)”連接追蹤機(jī)制“去檢查連接的狀態(tài),較耗資源
? conntrack機(jī)制:追蹤本機(jī)上的請求和響應(yīng)之間的關(guān)系
? 狀態(tài)有如下幾種:
NEW:新發(fā)出請求;連接追蹤信息庫中不存在此連接的
相關(guān)信息條目,因此,將其識別為第一次發(fā)出的請求
ESTABLISHED:NEW狀態(tài)之后,連接追蹤信息庫中為
其建立的條目失效之前期間內(nèi)所進(jìn)行的通信狀態(tài)
RELATED:新發(fā)起的但與已有連接相關(guān)聯(lián)的連接,如:
ftp協(xié)議中的數(shù)據(jù)連接與命令連接之間的關(guān)系
INVALID:無效的連接,如flag標(biāo)記不正確
UNTRACKED:未進(jìn)行追蹤的連接,如raw表中關(guān)閉追蹤
? [!] --state state
? 示例:
iptables -A INPUT -d 172.16.100.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.100.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
? 已經(jīng)追蹤到的并記錄下來的連接信息庫
/proc/net/nf_conntrack
? 調(diào)整連接追蹤功能所能夠容納的最大連接數(shù)量
/proc/sys/net/nf_conntrack_max
? 不同的協(xié)議的連接追蹤時(shí)長
/proc/sys/net/netfilter/
? 注意:CentOS7 需要加載模塊: modprobe nf_conntrack
? iptables的鏈接跟蹤表最大容量為/proc/sys/net/nf_conntrack_max,各
種狀態(tài)的超時(shí)鏈接會從表中刪除;當(dāng)模板滿載時(shí),后續(xù)連接可能會超時(shí)
? 解決方法兩個(gè):
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.nf_conntrack_max = 393216
net.netfilter.nf_conntrack_max = 393216
(2) 降低 nf_conntrack timeout時(shí)間
vi /etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
iptables -t nat -L -n
? 開放被動模式的ftp服務(wù)
? (1) 裝載ftp連接追蹤的專用模塊:
跟蹤模塊路徑:/lib/modules/kernelversion/kernel/net/netfilter
vim /etc/sysconfig/iptables-config 配置文件
IPTABLES_MODULES=" nf_conntrack_ftp "
modproble nf_conntrack_ftp
? (2) 放行請求報(bào)文:
命令連接:NEW, ESTABLISHED
數(shù)據(jù)連接:RELATED, ESTABLISHED
iptables –I INPUT -d LocalIP -p tcp -m state --state
RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --
state NEW -j ACCEPT
? (3) 放行響應(yīng)報(bào)文:
iptables -I OUTPUT -s LocalIP -p tcp -m state --state
ESTABLISHED -j ACCEPT
開放被動模式的ftp服務(wù)示例
? yum install vsftpd
? systemctl start vsftpd
? modprobe nf_conntrack_ftp
? iptables -F
? iptables -A INPUT -m state --state
RELATED,ESTABLISHED -j ACCEPT
? iptables -A INPUT -p tcp --dport 21 -m state --
state NEW -j ACCEPT
? iptables -A OUTPUT -m state --state
ESTABLISHED -j ACCEPT
? iptables -P INPUT DROP
? iptables -P OUTPUT DROP
? iptables -vnL
? Target:
? ACCEPT, DROP, REJECT, RETURN
? LOG, SNAT, DNAT, REDIRECT, MASQUERADE,..
? LOG: 非中斷target,本身不拒絕和允許,放在拒絕和允許規(guī)則前并將日志記錄在/var/log/messages系統(tǒng)日志中
--log-level level 級別: emerg, alert, crit, error,warning, notice, info or debug
--log-prefix prefix 日志前綴,用于區(qū)別不同的日志,最多29個(gè)字符
? 示例:
iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multimport -
-dports 80,21,22,23 -m state --state NEW -j LOG --
log-prefix "new connections: "
? 任何不允許的訪問,應(yīng)該在請求到達(dá)時(shí)給予拒絕
? 規(guī)則在鏈接上的次序即為其檢查時(shí)的生效次序
? 基于上述,規(guī)則優(yōu)化
? 1 安全放行所有入站和出站的狀態(tài)為ESTABLISHED狀態(tài)連接
? 2 謹(jǐn)慎放行入站的新請求
? 3 有特殊目的限制訪問功能,要在放行規(guī)則之前加以拒絕
? 4 同類規(guī)則(訪問同一應(yīng)用),匹配范圍小的放在前面,用于特殊處理
? 5 不同類的規(guī)則(訪問不同應(yīng)用),匹配范圍大的放在前面
? 6 應(yīng)該將那些可由一條規(guī)則能夠描述的多個(gè)規(guī)則合并為一條
? 7 設(shè)置默認(rèn)策略,建議白名單(只放行特定連接)
1) iptables -P,不建議
2) 建議在規(guī)則的最后定義規(guī)則做為默認(rèn)策略
? 規(guī)則有效期限:
使用iptables命令定義的規(guī)則,手動刪除之前,其生效期限為
kernel存活期限
? 保存規(guī)則:
保存規(guī)則至指定的文件
CentOS 6
service iptables save
將規(guī)則覆蓋保存至/etc/sysconfig/iptables文件中
CentOS 7 可用下面方法保存規(guī)則
iptables -S > /PATH/TO/SOME_RULES_FILE
iptables-save > /PATH/TO/SOME_RULES_FILE
? CentOS 6:
service iptables restart
會自動從/etc/sysconfig/iptables 重新載入規(guī)則
? CentOS 7 重新載入預(yù)存規(guī)則文件中規(guī)則:
iptables-restore < /PATH/FROM/SOME_RULES_FILE
-n, --noflush:不清除原有規(guī)則
-t, --test:僅分析生成規(guī)則集,但不提交
? 開機(jī)自動重載規(guī)則文件中的規(guī)則:
? (1) 用腳本保存各iptables命令;讓此腳本開機(jī)后自動運(yùn)行
/etc/rc.d/rc.local文件中添加腳本路徑
/PATH/TO/SOME_SCRIPT_FILE
? (2) 用規(guī)則文件保存各規(guī)則,開機(jī)時(shí)自動載入此規(guī)則文件中的規(guī)則
/etc/rc.d/rc.local文件添加
iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE
? (3)自定義Unit File,進(jìn)行iptables-restore

7.網(wǎng)絡(luò)防火墻

? iptables/netfilter網(wǎng)絡(luò)防火墻:
(1) 充當(dāng)網(wǎng)關(guān)
(2) 使用filter表的FORWARD鏈
? 注意的問題:
(1) 請求-響應(yīng)報(bào)文均會經(jīng)由FORWARD鏈,要注意規(guī)則
的方向性
(2) 如果要啟用conntrack機(jī)制,建議將雙方向的狀態(tài)為
ESTABLISHED的報(bào)文直接放行

8.NAT

? NAT: network address translation
PREROUTING,INPUT,OUTPUT,POSTROUTING
請求報(bào)文:修改源/目標(biāo)IP,由定義如何修改
響應(yīng)報(bào)文:修改源/目標(biāo)IP,根據(jù)跟蹤機(jī)制自動實(shí)現(xiàn)
? SNAT:source NAT POSTROUTING, INPUT
讓本地網(wǎng)絡(luò)中的主機(jī)通過某一特定地址訪問外部網(wǎng)絡(luò),實(shí)
現(xiàn)地址偽裝
請求報(bào)文:修改源IP
? DNAT:destination NAT PREROUTING , OUTPUT
把本地網(wǎng)絡(luò)中的主機(jī)上的某服務(wù)開放給外部網(wǎng)絡(luò)訪問(發(fā)
布服務(wù)和端口映射),但隱藏真實(shí)IP
請求報(bào)文:修改目標(biāo)IP
? PNAT: port nat,端口和IP都進(jìn)行修改

9.SNAT

? nat表的target:
? SNAT:固定IP
--to-source [ipaddr[-ipaddr]][:port[-port]]
--random
? iptables -t nat -A POSTROUTING -s LocalNET ! -d
LocalNet -j SNAT --to-source ExtIP
? 示例:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j SNAT --to-source 172.18.100.6-172.18.100.9
? MASQUERADE:動態(tài)IP,如撥號網(wǎng)絡(luò)
--to-ports port[-port]
--random
? iptables -t nat -A POSTROUTING -s LocalNET ! -d
LocalNet -j MASQUERADE
? 示例:
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 -j MASQUERADE

10. DNAT

--to-destination [ipaddr[-ipaddr]][:port[-port]]
? iptables -t nat -A PREROUTING -d ExtIP -p tcp|udp --dport PORT -j DNAT --to-destination
InterSeverIP[:PORT]
? 示例:
iptables -t nat -A PREROUTING -s 0/0 -d
172.18.100.6 -p tcp --dport 22 -j DNAT --todestination
10.0.1.22
iptables -t nat -A PREROUTING -s 0/0 -d
172.18.100.6 -p tcp --dport 80 -j DNAT --todestination
10.0.1.22:8080

11.轉(zhuǎn)發(fā)

? REDIRECT:NAT表
可用于:PREROUTING OUTPUT 自定義鏈
通過改變目標(biāo)IP和端口,將接受的包轉(zhuǎn)發(fā)至不同地址
--to-ports port[-port]
示例:
iptables -t nat -A PREROUTING -d 172.16.100.10 -p
tcp --dport 80 -j REDIECT --to-ports 8080
? firewalld是CentOS 7.0新推出的管理netfilter的工具
? firewalld是配置和監(jiān)控防火墻規(guī)則的系統(tǒng)守護(hù)進(jìn)程。可以實(shí)現(xiàn)iptables,ip6tables,ebtables的功能
? firewalld服務(wù)由firewalld包提供
? firewalld支持劃分區(qū)域zone,每個(gè)zone可以設(shè)置獨(dú)立的防火墻規(guī)則
? 歸入zone順序:
? 先根據(jù)數(shù)據(jù)包中源地址,將其納為某個(gè)zone
? 納為網(wǎng)絡(luò)接口所屬zone
? 納入默認(rèn)zone,默認(rèn)為public zone,管理員可以改為其它zone
? 網(wǎng)卡默認(rèn)屬于public zone,lo網(wǎng)絡(luò)接口屬于trusted zone

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 防火墻的概念iptables的簡介iptables命令網(wǎng)絡(luò)防火墻NATfirewalld服務(wù) 一、防火墻的概念 (...
    哈嘍別樣閱讀 1,850評論 0 1
  • iptables是Linux系統(tǒng)提供的一個(gè)強(qiáng)大的防火墻工具,可以實(shí)現(xiàn)包過濾、包重定向、NAT轉(zhuǎn)換等功能。iptab...
    Mr蘿卜閱讀 2,748評論 0 6
  • 1 前言 防火墻(Firewall),就是一個(gè)隔離工具,工作于主機(jī)或者網(wǎng)絡(luò)的邊緣,對于進(jìn)出本主機(jī)或本網(wǎng)絡(luò)的報(bào)文,根...
    魏鎮(zhèn)坪閱讀 7,047評論 1 23
  • 相信很多人都有這樣的體驗(yàn):成年幾年,父母親戚就特別關(guān)心你的感情生活,有些父母迫不及待地想讓孩子快點(diǎn)結(jié)婚生孩子,兩代...
    埃爾默海的愛德華閱讀 315評論 1 0
  • 致毛毛 寶貝 今天是一個(gè)特殊的日子 請?jiān)试S我如此稱呼你 下面這封信 寫在這個(gè)特殊的日子 我希望借此時(shí)機(jī) 能給自己一...
    沉吟君閱讀 477評論 4 1