防火墙iptables介绍
防火墻:
netfilter/iptables是集成在Linux2.4.X版本內(nèi)核中的包過濾防火墻系統(tǒng)。該架構(gòu)可以實(shí)現(xiàn)數(shù)據(jù)包過濾,網(wǎng)絡(luò)地址轉(zhuǎn)換以及數(shù)據(jù)包管理功能。linux中防火墻分為兩部分:netfilter和iptables。netfilter位于內(nèi)核空間,目前是Linux內(nèi)核的組成部分。netfilter可以對(duì)本機(jī)所有流入,流出。轉(zhuǎn)發(fā)的數(shù)據(jù)包進(jìn)行查看,修改,丟棄,拒絕等操作。netfilter位于內(nèi)核空間中,用戶無(wú)法接觸內(nèi)核和修改內(nèi)核,需要使用iptables或Firewalld等工具。
防火墻模塊位于/lib/modules/`uname -r `/kernel/net/netfilter目錄下,需要某個(gè)模塊可以通過modprobe加載該模塊。
iptables是組成Linux平臺(tái)下的包過濾防火墻,與大多數(shù)的Linux軟件一樣,這個(gè)包過濾防火墻是免費(fèi)的,它可以代替昂貴的商業(yè)防火墻解決方案,完成封包過濾、封包重定向和網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)等功能。在日常Linux運(yùn)維工作中,經(jīng)常會(huì)設(shè)置iptables防火墻規(guī)則,用來(lái)加固服務(wù)安全。
CENTOS7中在原有netfilter/iptables架構(gòu)基礎(chǔ)上添加了firewalld。iptables僅可以調(diào)整ipv4的防火墻規(guī)則。centos7中默認(rèn)是用Firewalld作為用戶的防火墻工具,當(dāng)用戶使用firewalld編寫ipv4防火墻規(guī)則時(shí),firewalld依然調(diào)用底成的iptables實(shí)現(xiàn)具體功能。
傳統(tǒng)iptables如何使用。
iptables的規(guī)則表和鏈
表(tables):提供特定的功能,iptables內(nèi)置了4個(gè)表,即
filter表(實(shí)現(xiàn)包過濾)
nat表(網(wǎng)絡(luò)地址轉(zhuǎn)換)
mangle表(修改數(shù)據(jù)標(biāo)記位規(guī)則表)
raw表(跟蹤數(shù)據(jù)表規(guī)則表) 鏈(chains):當(dāng)一個(gè)數(shù)據(jù)包到達(dá)一個(gè)鏈時(shí),iptables就會(huì)從鏈中第一條規(guī)則開始檢查,看該數(shù)據(jù)包是否滿足規(guī)則所定義的條件。如果滿足,系統(tǒng)就會(huì)根據(jù) 該條規(guī)則所定義的方法處理該數(shù)據(jù)包;否則iptables將繼續(xù)檢查下一條規(guī)則,如果該數(shù)據(jù)包不符合鏈中任一條規(guī)則,iptables就會(huì)根據(jù)該鏈預(yù)先定 義的默認(rèn)策略來(lái)處理數(shù)據(jù)包。
INPUT(入站數(shù)據(jù)過濾)
OUTPUT(出站數(shù)據(jù)過濾)
FORWARD(轉(zhuǎn)發(fā)數(shù)據(jù)過濾)
PREROUTING(路由前過濾)
POSTROUTING(路由后過濾) ?
-->PREROUTING-->路由決定----->FORWARD------------->POSTROUTING| ^| |INPUT--->LOCAL PRECESS-->OUTPUT
1)外部主機(jī)發(fā)送到數(shù)據(jù)包給防火墻本機(jī),數(shù)據(jù)經(jīng)過PREROUTING鏈和INPUT鏈
2)防火墻本機(jī)發(fā)送數(shù)據(jù)包到外部主機(jī),數(shù)據(jù)經(jīng)過OUTPUT和POSTROUTING
3)防火墻作為路由負(fù)責(zé)轉(zhuǎn)發(fā)數(shù)據(jù),數(shù)據(jù)經(jīng)過PREROUTING,FORWARD,POSTROUTING.
?1)當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入網(wǎng)卡時(shí),它首先進(jìn)入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去。
?2)如果數(shù)據(jù)包就是進(jìn)入本機(jī)的,它就會(huì)沿著圖向下移動(dòng),到達(dá)INPUT鏈。數(shù)據(jù)包到了INPUT鏈后,任何進(jìn)程都會(huì)收到它。本機(jī)上運(yùn)行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包會(huì)經(jīng)過OUTPUT鏈,然后到達(dá)POSTROUTING鏈輸出。
?3)如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會(huì)如圖所示向右移動(dòng),經(jīng)過FORWARD鏈,然后到達(dá)POSTROUTING鏈輸出。
規(guī)則概念
規(guī)則(rules)其實(shí)就是網(wǎng)絡(luò)管理員預(yù)定義的條件,規(guī)則一般的定義為“如果數(shù)據(jù)包頭符合這樣的條件,就這樣處理這個(gè)數(shù)據(jù)包”。規(guī)則存儲(chǔ)在內(nèi)核空間的信息 包過濾表中,這些規(guī)則分別指定了源地址、目的地址、傳輸協(xié)議(如TCP、UDP、ICMP)和服務(wù)類型(如HTTP、FTP和SMTP)等。
當(dāng)數(shù)據(jù)包與規(guī)則匹配時(shí),iptables就根據(jù)規(guī)則所定義的方法來(lái)處理這些數(shù)據(jù)包,如放行(accept),拒絕(reject)和丟棄(drop)等。配置防火墻的主要工作是添加,修改和刪除等規(guī)則。
其中:
?
匹配(match):符合指定的條件,比如指定的 IP 地址和端口。
丟棄(drop):當(dāng)一個(gè)包到達(dá)時(shí),簡(jiǎn)單地丟棄,不做其它任何處理。
接受(accept):和丟棄相反,接受這個(gè)包,讓這個(gè)包通過。
拒絕(reject):和丟棄相似,但它還會(huì)向發(fā)送這個(gè)包的源主機(jī)發(fā)送錯(cuò)誤消息。這個(gè)錯(cuò)誤消息可以指定,也可以自動(dòng)產(chǎn)生。
目標(biāo)(target):指定的動(dòng)作,說明如何處理一個(gè)包,比如:丟棄,接受,或拒絕。
跳轉(zhuǎn)(jump):和目標(biāo)類似,不過它指定的不是一個(gè)具體的動(dòng)作,而是另一個(gè)鏈,表示要跳轉(zhuǎn)到那個(gè)鏈上。
規(guī)則(rule):一個(gè)或多個(gè)匹配及其對(duì)應(yīng)的目標(biāo)。 防火墻的語(yǔ)法格式?
1)iptables的基本語(yǔ)法格式
iptables [-t 表名] 命令選項(xiàng) [鏈名] [條件匹配] [-j 目標(biāo)動(dòng)作或跳轉(zhuǎn)]
iptables -t 表名 <-A/I/D/R> 規(guī)則鏈名 [規(guī)則號(hào)] <-i/o 網(wǎng)卡名> -p 協(xié)議名 <-s 源IP/源子網(wǎng)> --sport 源端口 <-d 目標(biāo)IP/目標(biāo)子網(wǎng)> --dport 目標(biāo)端口 -j 動(dòng)作
說明:
表名、鏈名:用于指定iptables命令所操作的表和鏈;
命令選項(xiàng):用于指定管理iptables規(guī)則的方式(比如:插入、增加、刪除、查看等;
條件匹配:用于指定對(duì)符合什么樣 條件的數(shù)據(jù)包進(jìn)行處理;
目標(biāo)動(dòng)作或跳轉(zhuǎn):用于指定數(shù)據(jù)包的處理方式(比如允許通過、拒絕、丟棄、跳轉(zhuǎn)(Jump)給其它鏈處理。 2)iptables命令的基本參數(shù)
?
-P 設(shè)置默認(rèn)策略:iptables -P INPUT (DROP ACCEPT) -F 清空規(guī)則鏈 -L 查看規(guī)則鏈 -A 在規(guī)則鏈的末尾加入新規(guī)則 -I num 在規(guī)則鏈的頭部加入新規(guī)則 -D num 刪除某一條規(guī)則 -s 匹配來(lái)源地址IP/MASK,加嘆號(hào)"!"表示除這個(gè)IP外。 -d 匹配目標(biāo)地址 -i 網(wǎng)卡名稱 匹配從這塊網(wǎng)卡流入的數(shù)據(jù) -o 網(wǎng)卡名稱 匹配從這塊網(wǎng)卡流出的數(shù)據(jù) -p 匹配協(xié)議,如tcp,udp,icmp --dport num 匹配目標(biāo)端口號(hào) --sport num 匹配來(lái)源端口號(hào)
?
?
常用命令: -A 追加規(guī)則-->iptables -A INPUT -D 刪除規(guī)則-->iptables -D INPUT 1(編號(hào)) -R 修改規(guī)則-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代現(xiàn)行規(guī)則,順序不變(1是位置) -I 插入規(guī)則-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一條規(guī)則,原本位置上的規(guī)則將會(huì)往后移動(dòng)一個(gè)順位 -L 查看規(guī)則-->iptables -L INPUT 列出規(guī)則鏈中的所有規(guī)則,默認(rèn)是filter表,如果列出nat表的規(guī)則需要添加-t,即iptables -t nat -L -N 新的規(guī)則-->iptables -N allowed 定義新的規(guī)則通用參數(shù): -p 協(xié)議 例:iptables -A INPUT -p tcp -s源地址 例:iptables -A INPUT -s 192.168.1.1 -d目的地址 例:iptables -A INPUT -d 192.168.12.1 -sport源端口 例:iptables -A INPUT -p tcp --sport 22 -dport目的端口 例:iptables -A INPUT -p tcp --dport 22 -i指定入口網(wǎng)卡 例:iptables -A INPUT -i eth0 -o指定出口網(wǎng)卡 例:iptables -A FORWARD -o eth0 -j 指定要進(jìn)行的處理動(dòng)作
常用的ACTION: DROP:丟棄 REJECT:明示拒絕 ACCEPT:接受 SNAT基于原地址的轉(zhuǎn)換 source--指定原地址
MASQUERADE:源地址偽裝
REDIRECT:重定向:主要用于實(shí)現(xiàn)端口重定向
MARK:打防火墻標(biāo)記的
RETURN:返回 在自定義鏈執(zhí)行完畢后使用返回,來(lái)返回原規(guī)則鏈 ?實(shí)例:
1.空當(dāng)前的所有規(guī)則和計(jì)數(shù)
iptables -F # 清空所有的防火墻規(guī)則 iptables -X # 刪除用戶自定義的空鏈 iptables -Z # 清空計(jì)數(shù)
2.配置允許ssh端口連接
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT # 22為你的ssh端口, -s 192.168.1.0/24表示允許這個(gè)網(wǎng)段的機(jī)器來(lái)連接,其它網(wǎng)段的ip地址是登陸不了你的機(jī)器的。 -j ACCEPT表示接受這樣的請(qǐng)求
3.允許本地回環(huán)地址可以正常使用
iptables -A INPUT -i lo -j ACCEPT #本地圓環(huán)地址就是那個(gè)127.0.0.1,是本機(jī)上使用的,它進(jìn)與出都設(shè)置為允許 iptables -A OUTPUT -o lo -j ACCEPT
4.設(shè)置默認(rèn)的規(guī)則
iptables -P INPUT DROP # 配置默認(rèn)的不讓進(jìn) iptables -P FORWARD DROP # 默認(rèn)的不允許轉(zhuǎn)發(fā) iptables -P OUTPUT ACCEPT # 默認(rèn)的可以出去
5.配置白名單
iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT # 允許機(jī)房?jī)?nèi)網(wǎng)機(jī)器可以訪問 iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT # 允許機(jī)房?jī)?nèi)網(wǎng)機(jī)器可以訪問 iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允許183.121.3.7訪問本機(jī)的3380端口
6.開啟相應(yīng)的服務(wù)端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 開啟80端口,因?yàn)閣eb對(duì)外都是這個(gè)端口 iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允許被ping iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已經(jīng)建立的連接得讓它進(jìn)來(lái)
保存規(guī)則到配置文件中
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak # 任何改動(dòng)之前先備份,請(qǐng)保持這一優(yōu)秀的習(xí)慣 iptables-save > /etc/sysconfig/iptables cat /etc/sysconfig/iptables
列出已設(shè)置的規(guī)則
iptables -L [-t 表名] [鏈名] 四個(gè)表名 raw,nat,filter,mangle 五個(gè)規(guī)則鏈名 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING filter表包含INPUT、OUTPUT、FORWARD三個(gè)規(guī)則鏈iptables -L -t nat # 列出 nat 上面的所有規(guī)則 # ^ -t 參數(shù)指定,必須是 raw, nat,filter,mangle 中的一個(gè) iptables -L -t nat --line-numbers # 規(guī)則帶編號(hào) iptables -L INPUTiptables -L -nv # 查看,這個(gè)列表看起來(lái)更詳細(xì)
清除已有規(guī)則
iptables -F INPUT # 清空指定鏈 INPUT 上面的所有規(guī)則 iptables -X INPUT # 刪除指定的鏈,這個(gè)鏈必須沒有被其它任何規(guī)則引用,而且這條上必須沒有任何規(guī)則。# 如果沒有指定鏈名,則會(huì)刪除該表中所有非內(nèi)置的鏈。 iptables -Z INPUT # 把指定鏈,或者表中的所有鏈上的所有計(jì)數(shù)器清零。
開放指定的端口
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT?????????????? #允許本地回環(huán)接口(即運(yùn)行本機(jī)訪問本機(jī))
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT??? #允許已建立的或相關(guān)連的通行
iptables -A OUTPUT -j ACCEPT???????? #允許所有本機(jī)向外的訪問
iptables -A INPUT -p tcp --dport 22 -j ACCEPT??? #允許訪問22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT??? #允許訪問80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT??? #允許ftp服務(wù)的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT??? #允許FTP服務(wù)的20端口
iptables -A INPUT -j reject?????? #禁止其他未允許的規(guī)則訪問
iptables -A FORWARD -j REJECT???? #禁止其他未允許的規(guī)則訪問 屏蔽IP
iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP # 屏蔽惡意主機(jī)(比如,192.168.0.8 iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽單個(gè)IP的命令 iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整個(gè)段即從123.0.0.1到123.255.255.254的命令 iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即從123.45.0.1到123.45.255.254的命令 iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即從123.45.6.1到123.45.6.254的命令是
指定數(shù)據(jù)包出去的網(wǎng)絡(luò)接口,只對(duì) OUTPUT,FORWARD,POSTROUTING 三個(gè)鏈起作用。
iptables -A FORWARD -o eth0
查看已添加的規(guī)則
iptables -L -n -v Chain INPUT (policy DROP 48106 packets, 2690K bytes)pkts bytes target prot opt in out source destination5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 1499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 4364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)pkts bytes target prot opt in out source destinationChain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)pkts bytes target prot opt in out source destination5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
啟動(dòng)網(wǎng)絡(luò)轉(zhuǎn)發(fā)規(guī)則,
公網(wǎng)210.14.67.7讓內(nèi)網(wǎng)192.168.188.0/24上網(wǎng)
iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127
端口映射,
本機(jī)的 2222 端口映射到內(nèi)網(wǎng) 虛擬機(jī)的22 端口
iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22
字符串匹配
比如,我們要過濾所有TCP連接中的字符串test,一旦出現(xiàn)它我們就終止這個(gè)連接,我們可以這么做:
iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset iptables -L# Chain INPUT (policy ACCEPT) # target prot opt source destination # REJECT tcp -- anywhere anywhere STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset # # Chain FORWARD (policy ACCEPT) # target prot opt source destination # # Chain OUTPUT (policy ACCEPT) # target prot opt source destination
阻止Windows蠕蟲的攻擊
iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"
防止SYN洪水攻擊
iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEP iptables防火墻規(guī)則的順序十分重要,內(nèi)核按順序檢查這些規(guī)則,如果發(fā)現(xiàn)有匹配的規(guī)則條目,則立刻執(zhí)行相關(guān)動(dòng)作,停止繼續(xù)向下查找規(guī)則條目,如果所有的防火墻規(guī)則都未匹配成功,則按照默認(rèn)的策略處理, -A添加防火墻規(guī)則追加到整個(gè)鏈的最后,-I默認(rèn)會(huì)插入到鏈中作為第一條規(guī)則
iptables的用法:iptables [-t 表名] {-A|-D|-I|-F|-L|-R|-Z|-P} 鏈名 rule-specification
查看filter表的所有規(guī)則 iptables -nL
查看filter表防火墻規(guī)則并顯示規(guī)則編號(hào) iptables -nL --line-number
查看net表的所有規(guī)則 iptables -t nat -nL
清空filter表的所有規(guī)則 iptables -F
在filter表中添加一條新的入站規(guī)則,丟棄192.168.1.0主機(jī)發(fā)送給防火墻本機(jī)的所有數(shù)據(jù)包 iptables -A INPUT -s 192.168.0.1 -j DROP
在filter表中,拒絕192.168.0.22ping防火墻本機(jī) iptables -I INPUT -s 192.168.0.22 -p icmp -j REJECT
刪除filter表中INPUT鏈的第一條規(guī)則 iptables -D INPUT 1
替換filter表中第二條規(guī)則,拒絕192.168.1.254之外的任何主機(jī)連接到防火墻本機(jī) iptables -R INPUT 2 ! -s 192.168.1.254 -j REJECT
修改filter表中INPUT的默認(rèn)規(guī)則是接受數(shù)據(jù)包 iptables -t filter -P INPUT ACCEPT
將192.168.0.10主機(jī)發(fā)送給防火墻本機(jī)22端口的所有數(shù)據(jù)包信息記錄到messages日志: iptables -I INPUT -s 192.168.0.10 -p tcp --dport 22 -j LOG
允許任何主機(jī)從eno16網(wǎng)絡(luò)接口訪問防火墻本機(jī)的80端口 iptables -I INPUT -i eno16 --p tcp --dport 80 -j ACCEPT
IPTABLES防火墻應(yīng)用實(shí)例
案例一:允許任意客戶端訪問服務(wù)器主機(jī)提供的日常服務(wù)(http,https,ssh),在Linux系統(tǒng)中/etc/services文件可以找到各種服務(wù)對(duì)應(yīng)的端口號(hào)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
(如果你把OUTPUT 設(shè)置成DROP,就需要加上這個(gè)規(guī)則,否則SSH還是不能登錄,因?yàn)镾SH服務(wù)職能進(jìn)不能出.) iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -P INPUT DROP
(-P:設(shè)置鏈默認(rèn)規(guī)則) iptables -P OUTPUT ACCEPT
?案例二:公司擁有一個(gè)共有ip,使用防火墻實(shí)現(xiàn)局域網(wǎng)中所有主機(jī)通過SNAT共享上網(wǎng),使用centos7作為公司軟路由,公司內(nèi)部所有192.168.0.1/24網(wǎng)段內(nèi)的主機(jī)連接到外網(wǎng)124.126.199.84時(shí),防火墻自動(dòng)將所有數(shù)據(jù)包的原地址修改為路由器上的公有IP,最后互聯(lián)網(wǎng)將信息返回路由后,由路由轉(zhuǎn)交給真正的后端主機(jī)。防火墻原地址轉(zhuǎn)換(SNAT)規(guī)則需寫入到NAT表中的POSTROUTING鏈。
在centos7軟路由配置:
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 124.126.199.84
案例三:公司對(duì)外有一個(gè)公有IP,內(nèi)部有http,mail兩臺(tái)核心的服務(wù)器,通過防火墻實(shí)現(xiàn)客戶可以從互聯(lián)網(wǎng)的任意位置訪問位于公司內(nèi)部的兩臺(tái)服務(wù)器資源,連接方向發(fā)生變化,案例二是SNAT,本例是DNAT.
該案例中0.100是http,0.101是postfix,124.126.199.84是作為軟路由使用的。
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d 124.126.199.84 -p tcp --dport 80 DNAT --to-destination 192.168.0.100 iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d 124.126.199.84 -p tcp --dport 25 DNAT --to-destination 192.168.0.101
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d 124.126.199.84 -p tcp --dport 110 DNAT --to-destination 192.168.0.101
案例四:目前網(wǎng)絡(luò)上攻擊手法多,很多攻擊采用發(fā)送大量無(wú)效的數(shù)據(jù)包給服務(wù)器,造成服務(wù)器無(wú)法正常響應(yīng)正常的數(shù)據(jù)請(qǐng)求,iptables提供了一個(gè)limit擴(kuò)展功能,可以限制單位時(shí)間內(nèi)數(shù)據(jù)包的個(gè)數(shù)。下面是規(guī)則是當(dāng)每秒數(shù)據(jù)包個(gè)數(shù)為500時(shí)接受入站連接,否則拒絕連接。
iptables -I INPUT -m limit --limit 500/sec -j ACCEPT iptables -P INPUT DROP
案例五:企業(yè)環(huán)境中,服務(wù)器面臨各種攻擊,iptables本身屬于三層過濾防火墻,也提供了string擴(kuò)展功能,通過--string可以根據(jù)關(guān)鍵詞限制網(wǎng)絡(luò)連接。下面是記錄基于Linux軟路由服務(wù)器防火墻規(guī)則中,實(shí)現(xiàn)拒絕轉(zhuǎn)發(fā)包含有關(guān)鍵詞/etc/passwd 以及qq的數(shù)據(jù)包,防止將密碼文件復(fù)制出局域網(wǎng),防止內(nèi)部員工訪問QQ網(wǎng)站。
iptables -I FORWARD -m string --algo bm--string "/etc/passwd" -j REJECT iptables -I FORWARD -m string --algo bm--string "qq" -j REJECT
案例六:根據(jù)數(shù)據(jù)連接狀態(tài)設(shè)置防火墻規(guī)則,放行所有的出站數(shù)據(jù)包,拒絕入站的新連接請(qǐng)求與無(wú)效連接,放行入站的回應(yīng)請(qǐng)求。
iptables -F iptables -A INPUT -m state --state NEW -j DROP iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -P OUTPUT ACCEPT
案例七:公司基于Linux軟路由設(shè)備,要求在路由設(shè)備上設(shè)置防火墻,記錄192.168.0.1-192.168.0.11地址內(nèi)所有主機(jī)發(fā)送給路由要求轉(zhuǎn)發(fā)的數(shù)據(jù)包,并允許轉(zhuǎn)發(fā)這些數(shù)據(jù)包
iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.11 -p tcp --dport 80 -j ACCEPT
案例八:減少不安全的端口連接
iptables -A OUTPUT -p tcp --sport 31337 -j DROPiptables -A OUTPUT -p tcp --dport 31337 -j DROP 有些特洛伊木馬會(huì)掃描端口31337到31340(即黑客語(yǔ)言中的 elite 端口)上的服務(wù), 既然合法服務(wù)都不使用這些非標(biāo)準(zhǔn)端口來(lái)通信, 阻塞這些端口能夠有效地減少你的網(wǎng)絡(luò)上可能被感染的機(jī)器和它們的遠(yuǎn)程主服務(wù)器進(jìn)行獨(dú)立通信的機(jī)會(huì)。 還有其他端口:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也應(yīng)被禁止
案例九:
場(chǎng)景一
開放 tcp 10-22/80 端口 開放 icmp 其他未被允許的端口禁止訪問
存在的問題: 本機(jī)無(wú)法訪問本機(jī); 本機(jī)無(wú)法訪問其他主機(jī)場(chǎng)景二
ftp: 默認(rèn)被動(dòng)模式(服務(wù)器產(chǎn)生隨機(jī)端口告訴客戶端, 客戶端主動(dòng)連接這個(gè)端口拉取數(shù)據(jù)) vsftpd: 使 ftp 支持主動(dòng)模式(客戶端產(chǎn)生隨機(jī)端口通知服務(wù)器, 服務(wù)器主動(dòng)連接這個(gè)端口發(fā)送數(shù)據(jù))場(chǎng)景三
允許外網(wǎng)訪問: web http -> 80/tcp; https -> 443/tcp mail smtp -> 25/tcp; smtps -> 465/tcp pop3 -> 110/tcp; pop3s -> 995/tcp imap -> 143/tcp
內(nèi)部使用: file nfs -> 123/udp samba -> 137/138/139/445/tcp ftp -> 20/21/tcp remote ssh -> 22/tcp sql mysql -> 3306/tcp oracle -> 1521/tcp場(chǎng)景四
nat 轉(zhuǎn)發(fā)場(chǎng)景五
防CC攻擊
iptables -L -F -A -D # list flush append delete
# 場(chǎng)景一
iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 允許 tcp 80 端口
iptables -I INPUT -p tcp --dport 10:22 -j ACCEPT # 允許 tcp 10-22 端口
iptables -I INPUT -p icmp -j ACCEPT # 允許 icmp
iptables -A INPUT -j REJECT # 添加一條規(guī)則, 不允許所有
# 優(yōu)化場(chǎng)景一
iptables -I INPUT -i lo -j ACCEPT # 允許本機(jī)訪問
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允許訪問外網(wǎng)
iptables -I INPUT -p tcp --dport 80 -s 10.10.188.233 -j ACCEPT # 只允許固定ip訪問80
# 場(chǎng)景二
vi /etc/vsftpd/vsftpd.conf # 使用 vsftpd 開啟 ftp 主動(dòng)模式
port_enable=yes
connect_from_port_20=YES
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
vi /etc/vsftpd/vsftpd.conf # 建議使用 ftp 被動(dòng)模式
pasv_min_port=50000
pasv_max_port=60000
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
# 還可以使用 iptables 模塊追蹤來(lái)自動(dòng)開發(fā)對(duì)應(yīng)的端口
# 場(chǎng)景三
iptables -I INPUT -i lo -j ACCEPT # 允許本機(jī)訪問
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允許訪問外網(wǎng)
iptables -I INPUT -s 10.10.155.0/24 -j ACCEPT # 允許內(nèi)網(wǎng)訪問
iptables -I INPUT -p tcp -m multiport --dports 80,1723 -j ACCEPT # 允許端口, 80 -> http, 1723 -> vpn
iptables -A INPUT -j REJECT # 添加一條規(guī)則, 不允許所有
iptables-save # 保存設(shè)置到配置文件
# 場(chǎng)景四
iptables -t nat -L # 查看 nat 配置
iptables -t nat -A POST_ROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232 # SNAT
vi /etc/sysconfig/network # 配置網(wǎng)關(guān)
iptables -t nat -A POST_ROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.232:80 # DNAT
#場(chǎng)景五
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT # 限制并發(fā)連接訪問數(shù)
iptables -I INPUT -m limit --limit 3/hour --limit-burst 10 -j ACCEPT # limit模塊; --limit-burst 默認(rèn)為5 防火墻的備份和還原,如果不保存,計(jì)算機(jī)重啟后所有規(guī)則會(huì)丟失。
iptables-save > /etc/sysconfig/iptables iptables-save > firewall.bak iptables-restore < firewall.bak
轉(zhuǎn)載于:https://www.cnblogs.com/fengzhongzhuzu/p/9075935.html
總結(jié)
以上是生活随笔為你收集整理的防火墙iptables介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个水果好听的名字
- 下一篇: JS学习梳理(三)类型和语法