一、Linux防火墻基礎(chǔ)
1.Linux防火墻概術(shù)
Linux 系統(tǒng)的防火墻:IP信息包過(guò)濾系統(tǒng),它實(shí)際上由兩個(gè)組件netfilter 和 iptables組成。
主要工作在網(wǎng)絡(luò)層,針對(duì)IP數(shù)據(jù)包,體現(xiàn)在對(duì)包內(nèi)的IP地址、端口、協(xié)議等信息的處理上。
2.netfilter/iptables
netfilter
- 位于Linux內(nèi)核中的包過(guò)濾功能體系
- 稱(chēng)為L(zhǎng)inux防火墻的“內(nèi)核態(tài)"
iptables
- 位于/sbin/iptables,用來(lái)管理防火墻規(guī)則的工具
- 稱(chēng)為L(zhǎng)inux防火墻的“用戶(hù)態(tài)"
netfilter/iptables后期簡(jiǎn)稱(chēng)為iptables。iptables是基于內(nèi)核的防火墻,其中內(nèi)置了raw、mangle、 nat 和 filter四個(gè)規(guī)則表。表中所有規(guī)則配置后,立即生效,不需要重啟服務(wù)。
3.四表五鏈
規(guī)則表的作用: 容納各種規(guī)則鏈
規(guī)則鏈的作用:容納各種防火墻規(guī)則
總結(jié):表中有鏈,鏈中有規(guī)則
四表:
- 在 iptables 的四個(gè)規(guī)則表中,mangle 表和 raw 表的應(yīng)用相對(duì)較少。
- 數(shù)據(jù)包到達(dá)防火墻時(shí),規(guī)則表之間的優(yōu)先順序:raw > mangle > nat > filter
raw表: | 確定是否對(duì)該數(shù)據(jù)包進(jìn)行狀態(tài)跟蹤。包含兩個(gè)規(guī)則鏈,OUTPUT、PREROUTTNG。 |
---|---|
mangle表: | 修改數(shù)據(jù)包內(nèi)容,用來(lái)做流量整形的,給數(shù)據(jù)包設(shè)置標(biāo)記。包含五個(gè)規(guī)則鏈,INPUT、OUTPUT、FORMARD、PREROUTING、POSTROUTING。 |
nat表: | 負(fù)責(zé)網(wǎng)絡(luò)地址轉(zhuǎn)換,用來(lái)修改數(shù)據(jù)包中的源、目標(biāo)IP地址或端口。包含三個(gè)規(guī)則鏈,OUTPUT、PREROUTING、POSTROUTING。 |
filter表: | 負(fù)責(zé)過(guò)濾數(shù)據(jù)包,確定是否放行該數(shù)據(jù)包 (過(guò)濾)。包含三個(gè)規(guī)則鏈,INPUT、EORMARD、OUTPUT。 |
五鏈:
INPUT: | 處理入站數(shù)據(jù)包,匹配目標(biāo)IP為本機(jī)的數(shù)據(jù)包。 |
---|---|
OUTPUT: | 外理出站數(shù)據(jù)包,一般不在此鏈上做配置。 |
FORWARD: | 處理轉(zhuǎn)發(fā)數(shù)據(jù)包,匹配流經(jīng)本機(jī)的數(shù)據(jù)包。 |
PREROUDING鏈: | 在進(jìn)行路由選擇前處理數(shù)據(jù)包,用來(lái)修改目的地址,用來(lái)做DNA。相當(dāng)于把內(nèi)網(wǎng)服務(wù)器的IP和端口映射到路由器的外網(wǎng)IP和端口上。 |
POSTROUZING鏈: | 在進(jìn)行路由選擇后處理數(shù)據(jù)包,用來(lái)修改源地址,用來(lái)做SAT。相當(dāng)于內(nèi)網(wǎng)通過(guò)路由器NAT轉(zhuǎn)換功能實(shí)現(xiàn)內(nèi)網(wǎng)主機(jī)通過(guò)一個(gè)公網(wǎng)IP地址上網(wǎng)。 |
4.規(guī)則鏈之間的匹配順序
主機(jī)型防火墻:
- 入站數(shù)據(jù)(來(lái)自外界的數(shù)據(jù)包,且目標(biāo)地址是防火墻本機(jī)):PREROUTING --> INPUT --> 本機(jī)的應(yīng)用程序
- 出站數(shù)據(jù)(從防火墻本機(jī)向外部地址發(fā)送的數(shù)據(jù)包):本機(jī)的應(yīng)用程序 --> OUTPUT -->POSTROUTING
網(wǎng)絡(luò)型防火墻:
- 轉(zhuǎn)發(fā)數(shù)據(jù)(需要經(jīng)過(guò)防火墻轉(zhuǎn)發(fā)的數(shù)據(jù)包) :PREROUTING --> EORWARD --> POSTROUTING
規(guī)則鏈內(nèi)的匹配順序:
- 自上向下按順序依次進(jìn)行檢查,找到相匹配的規(guī)則即停止 (LOG策略例外,表示記錄相關(guān)日志)
- 若在該鏈內(nèi)找不到相匹配的規(guī)則,則按該鏈的默認(rèn)策略處理(未修改的狀況下,默認(rèn)策略為允許)
二、iptables 安裝
CentOS 7默認(rèn)使用firewalld防火墻,沒(méi)有安裝 iptables,若想使用iptables防火墻。必須先關(guān)閉firewalld防火墻,再安裝 iptables
systemctl stop firewalld.service
systemctl disable firewalld.service
yum -y install iptables iptables-services
systemctl start iptables.service
1.常用的控制類(lèi)型
選項(xiàng) | 說(shuō)明 |
---|---|
ACCEPT: | 允許數(shù)據(jù)包通過(guò)。 |
DROP: | 直接丟棄數(shù)據(jù)包,不給出任何回應(yīng)信息。 |
REJECT: | 拒絕數(shù)據(jù)包通過(guò),會(huì)給數(shù)據(jù)發(fā)送端一個(gè)響應(yīng)信息。 |
SNAT: | 修改數(shù)據(jù)包的源地址。 |
DNAT: | 修改數(shù)據(jù)包的目的地址。 |
MASQUERADE: | 偽裝成一個(gè)非固定公網(wǎng)IP地址。 |
LOG: | 在/var/log/messages文件中記錄日志信息,然后將數(shù)據(jù)包傳遞給下一條規(guī)則。 |
2.常用的管理選項(xiàng)
選項(xiàng) | 說(shuō)明 |
---|---|
-A: | 在指定鏈的末尾追加 (–append) 一條新的規(guī)則 |
-I: | 在指定鏈的開(kāi)頭插入 (–insert) 一條新的規(guī)則,未指定序號(hào)時(shí)默認(rèn)作為第一條規(guī)則 |
-R: | 修改、替換(–replace) 指定鏈中的某一條規(guī)則,可指定規(guī)則序號(hào)或具體內(nèi)容 |
-P: | 設(shè)置指定鏈的默認(rèn)策略 --policy) |
-D: | 刪除 (–delete) 指定鏈中的某一條規(guī)則,可指定規(guī)則序號(hào)或具體內(nèi)容 |
-F: | 清空(–flush) 指定鏈中的所有規(guī)則,若未指定鏈名,則清空表中的所有鏈 |
-L: | 列出 (–list) 指定鏈中所有的規(guī)則,若未指定鏈名,則列出表中的所有鏈 |
-n: | 使用數(shù)字形式(–numeric) 顯示輸出結(jié)果,如顯示 IP 地址而不是主機(jī)名 |
-v: | 顯示詳細(xì)信息,包括每條規(guī)則的匹配包數(shù)量和匹配字節(jié)數(shù) |
–line-numbers: | 查看規(guī)則時(shí),顯示規(guī)則的序號(hào) |
三、示例演示
1.添加新的規(guī)則
iptables -t filter -A INPUT -p icmp -j REJECT
iptables -l INPUT 2 -p tcp --dport 22 -j ACCEPT
2.查看規(guī)則列表
iptables 【-t 表名】-n -L 【鏈名】【–line-numbers】
或 iptables -【vn】L
iptables -nL --line-numbers
#注意:不可以合寫(xiě)為 -Ln
3.刪除規(guī)則
iptables -D INPUT 2 刪除INPUT鏈中的第二個(gè)2規(guī)則 (按序號(hào)進(jìn)行刪除)
iptables -t filter -D INPUT -p icmp -j REJECT (完整格式刪除)
注意!
- 若規(guī)則列表中有多條相同的規(guī)則時(shí),按內(nèi)容匹配只刪除的序號(hào)最小的一條
- 按號(hào)碼匹配刪除時(shí),確保規(guī)則號(hào)碼小于等于已有規(guī)則數(shù),否則報(bào)錯(cuò)
- 按內(nèi)容匹配刪數(shù)時(shí),確保規(guī)則存在,否則報(bào)錯(cuò)
4.清空規(guī)則
iptables 【-t 表名】 -F 【鏈名】
iptables -F INPUT 清空f(shuō)ilter表中的INPUT鏈中所有規(guī)則
iptables -F 清空f(shuō)ilter表中所有鏈中規(guī)則
注意!
- -F 僅僅是清空鏈中的規(guī)則,并不影響 -P 設(shè)置的默認(rèn)規(guī)則,默認(rèn)規(guī)則需要手動(dòng)進(jìn)行修改
- -P 設(shè)置了DROP后,使用 -F 一定要小心!
#防止把允許遠(yuǎn)程連接的相關(guān)規(guī)則清除后導(dǎo)致無(wú)法遠(yuǎn)程連接主機(jī),此情況如果沒(méi)有保存規(guī)則可重啟主機(jī)解決 - 如果不寫(xiě)表名和鏈名,默認(rèn)清空f(shuō)ilter表中所有鏈里的所有規(guī)則
四、規(guī)則的匹配
1.通用匹配
可直接使用,不依賴(lài)于其他條件或擴(kuò)展,包括網(wǎng)絡(luò)協(xié)議、IP地址、網(wǎng)絡(luò)接口等條件。
協(xié)議匹配:-p 協(xié)議名
地址匹配:-s 源地址、-d 目的地址 #可以是IP、網(wǎng)段、域名、空(任何地址)
接口匹配:-i 入站網(wǎng)卡、-o 出站網(wǎng)卡
iptables -A FORWARD ! -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.80.11 -j DROP
iptables -I INPUT -i ens33 -s 192.168.80.0/24 -j DROP
2.隱含匹配
要求以特定的協(xié)議匹配作為前提,包括端口、TCP標(biāo)記、ICMP類(lèi)型等條件。
端口匹配:–sport 源端口、–dport 目的端口
#可以是個(gè)別端口、端口范圍
–sport 1000 匹配源端口是1000的數(shù)據(jù)包
–sport 1000:3000 匹配源端口是1000-3000的數(shù)據(jù)包
–sport :3000 匹配源端口是3000及以下的數(shù)據(jù)包
–sport 1000: 匹配源端口是1000及以上的數(shù)據(jù)包
注意!:–sport 和 --dport 必須配合 -p <協(xié)議類(lèi)型> 使用
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I FORWARD -d 192.168.80.0/24 -p tcp --dport 24500:24600 -j DROP
3.顯式匹配
要求以“-m 擴(kuò)展模塊”的形式明確指出類(lèi)型,包括多端口、MAC地址、IP范圍、數(shù)據(jù)包狀態(tài)等條件。
多端口匹配:
-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j ACCEPT
iptables -A INPUT -p udp -m multiport --dport 53 -j ACCEPT
IP范圍匹配:-m iprange --src-range IP范圍
iptables -A FORWARD -p udp -m iprange --src-range 192.168.142.100-192.168.142.200 -j DROP
#禁止轉(zhuǎn)發(fā)源地址位于192.168.142.100-192.168.142.200的udp數(shù)據(jù)包
MAC地址匹配:-m mac --mac-source MAC地址
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
#禁止來(lái)自某MAC 地址的數(shù)據(jù)包通過(guò)本機(jī)轉(zhuǎn)發(fā)
狀態(tài)匹配:-m state --state 連接狀態(tài)
常見(jiàn)的連接狀態(tài):文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-465724.html
連接 | 狀態(tài) |
---|---|
NEW : | 與任何連接無(wú)關(guān)的,還沒(méi)開(kāi)始連接 |
ESTABLISHED : | 響應(yīng)請(qǐng)求或者已建立連接的,連接態(tài) |
RELATED : | 與已有連接有相關(guān)性的(如FTP 主被動(dòng)模式的數(shù)據(jù)連接),衍生態(tài),一般與ESTABLISHED 配合使用 |
INVALID : | 不能被識(shí)別屬于哪個(gè)連接或沒(méi)有任何狀態(tài) |
iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
#禁止轉(zhuǎn)發(fā)與正常 TCP 連接無(wú)關(guān)的非–syn 請(qǐng)求數(shù)據(jù)包(如偽造的網(wǎng)絡(luò)攻擊數(shù)據(jù)包)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-465724.html
到了這里,關(guān)于【Linux】iptables防火墻的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!