一. 概念
iptables
其實(shí)不是真正的防火墻,我們可以把它理解成一個(gè)客戶端代理,用戶通過iptables
這個(gè)代理,將用戶的安全設(shè)定執(zhí)行到對(duì)應(yīng)的安全框中,這個(gè)全框才是真正的防火墻,這個(gè)框架的名字叫netfilter
netfilter
才是防火墻真正的安全框架(framework
),netfilter
位于內(nèi)核空間,iptables
其實(shí)是一個(gè)命令行工具,位于用戶空間,我們用這個(gè)工具操作真正的框架
數(shù)據(jù)包信息表 = 源地址、目的地址、傳輸協(xié)議(如 T C P )和服務(wù)類型(如 H T T P ) 數(shù)據(jù)包信息表=源地址、目的地址、傳輸協(xié)議(如TCP)和服務(wù)類型(如HTTP) 數(shù)據(jù)包信息表=源地址、目的地址、傳輸協(xié)議(如TCP)和服務(wù)類型(如HTTP)
數(shù)據(jù)包與規(guī)則匹配時(shí),iptables
就根據(jù)規(guī)則所定義的方法來處理這些數(shù)據(jù)包,如放行(accept
)、拒絕(reject
)和丟棄(drop
)等。配置防火墻的主要工作就是添加、修改和刪除這些規(guī)則
二. 表結(jié)構(gòu)
不同功能的規(guī)則,我們可以放置在不同的表中進(jìn)行管理,而iptables
已經(jīng)為我們定義了4種表
-
filter
表:負(fù)責(zé)過濾功能,防火墻;內(nèi)核模塊:iptables_filter
-
nat
表:network address translation
,網(wǎng)絡(luò)地址轉(zhuǎn)換功能;內(nèi)核模塊:iptable_nat
-
mangle
表:拆解報(bào)文,做出修改,并重新封裝 的功能;iptable_mangle
-
raw
表:關(guān)閉nat
表上啟用的連接追蹤機(jī)制;iptable_raw
三. 安裝配置
3.1 安裝
# 安裝軟件
sudo apt-get install iptables
# 安裝軟件的配置文件,這個(gè)不一定能安裝成功
sudo apt-get install iptables-services
3.2 配置策略【可以不配置,自定義規(guī)則】
編輯配置文件
vi /etc/iptables.rules
添加如下內(nèi)容
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# 常用端口
#-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 59.109.149.221 -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 7080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 7180 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允許loopback!(不然會(huì)導(dǎo)致DNS無法正常關(guān)閉等問題)
-A OUTPUT -o lo -p all -j ACCEPT
-A INPUT -i lo -p all -j ACCEPT
# 允許SSH連接
# The --dport 端口號(hào)要與 /etc/ssh/sshd_config 中的Port參數(shù)相同
-A INPUT -p tcp --dport 22 -j ACCEPT
-A OUTPUT -p tcp --sport 22 -j ACCEPT
#允許icmp包通過,也就是允許ping
-I INPUT -p icmp --icmp-type echo-request -j ACCEPT
-A INPUT -p ICMP --icmp-type timestamp-request -j DROP
-A INPUT -p ICMP --icmp-type timestamp-reply -j DROP
-A INPUT -p ICMP --icmp-type time-exceeded -j DROP
-A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
-A OUTPUT -p ICMP --icmp-type time-exceeded -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A INPUT -p tcp -m tcp --dport 8080 -j DROP
COMMIT
############################
使配置生效
iptables-restore < /etc/iptables.rules
四. 規(guī)則
iptables
的規(guī)則無非增刪改查,但是在學(xué)習(xí)之前,還需要了解字段含義以及如何使用ping
命令
使用指定的網(wǎng)卡去ping
指定ip
地址
# [interface] 是指要使用的網(wǎng)卡的名稱,例如 eth0
# [ip address] 是要 ping 的目標(biāo) IP 地址
ping -I [interface] [ip address]
查看接收到的 ping
命令數(shù)據(jù)包來自哪個(gè)IP
地址
apt-get install tcpdump
隨后開啟檢測(cè)
# [interface] 是指要監(jiān)視的網(wǎng)絡(luò)接口的名稱,例如 eth0
sudo tcpdump -i [interface] icmp
4.1 字段含義
-
pkts
:對(duì)應(yīng)規(guī)則匹配到的報(bào)文的個(gè)數(shù) -
bytes
:對(duì)應(yīng)匹配到的報(bào)文包的大小總和 -
target
:規(guī)則對(duì)應(yīng)的target,往往表示規(guī)則對(duì)應(yīng)的”動(dòng)作”,即規(guī)則匹配成功后需要采取的措施 -
prot
:表示規(guī)則對(duì)應(yīng)的協(xié)議,是否只針對(duì)某些協(xié)議應(yīng)用此規(guī)則。 -
opt
:表示規(guī)則對(duì)應(yīng)的選項(xiàng)。 -
in
:表示數(shù)據(jù)包由哪個(gè)接口(網(wǎng)卡)流入,即從哪個(gè)網(wǎng)卡來。 -
out
:表示數(shù)據(jù)包將由哪個(gè)接口(網(wǎng)卡)流出,即到哪個(gè)網(wǎng)卡去。 -
source
:表示規(guī)則對(duì)應(yīng)的源頭地址,可以是一個(gè)IP,也可以是一個(gè)網(wǎng)段。 -
destination
:表示規(guī)則對(duì)應(yīng)的目標(biāo)地址??梢允且粋€(gè)IP,也可以是一個(gè)網(wǎng)段。
4.2 查詢
查看表的所有規(guī)則,其中-t
表示指定表的名稱,-L
表示列出全部
sudo iptables -t filter -L
sudo iptables -t raw -L
sudo iptables -t mangle -L
sudo iptables -t nat -L
如果要展示具體的表中的某個(gè)鏈規(guī)則,可以在-L
后追加具體的鏈名稱
sudo iptables -t filter -L INPUT
展示具體的表中的某個(gè)鏈的具體規(guī)則,再添加-v
參數(shù)
sudo iptables -t filter -vL INPUT
將ip
地址做出解析,可直接將源地址和目的地址展示,添加-n
參數(shù)
sudo iptables -t filter -nvL INPUT
可以對(duì)當(dāng)前規(guī)則執(zhí)行編號(hào),添加--line
參數(shù)
sudo iptables --line -t filter -nvL INPUT
4.3 增加
增添規(guī)則
先使用同一網(wǎng)段一臺(tái)機(jī)器(10.250.143.29
)連通測(cè)試機(jī)(10.250.143.175
),發(fā)現(xiàn)網(wǎng)絡(luò)可聯(lián)通
隨后在測(cè)試機(jī)上添加攔截規(guī)則,規(guī)則含義是報(bào)文源地址為10.250.143.29
時(shí),報(bào)文則被DROP
(丟棄),查看對(duì)應(yīng)的表,發(fā)現(xiàn)規(guī)則已經(jīng)被添加進(jìn)去
iptables -t filter -I INPUT -s 10.250.143.29 -j DROP
-
-t
選項(xiàng)指定了要操作的表,此處指定了操作filter
表 -
-I
選項(xiàng),即insert
,指明將”規(guī)則”插入至哪個(gè)鏈中,默認(rèn)插入第一個(gè)位置 -
-s
選項(xiàng),即source
,指明”匹配條件”中的”源地址” -
-j
選項(xiàng),即judge
,指明當(dāng)”匹配條件”被滿足時(shí),在iptables
所對(duì)應(yīng)的為動(dòng)作target
,上例中指定的動(dòng)作為DROP
再去測(cè)試連通性,發(fā)現(xiàn)網(wǎng)絡(luò)不通
再次查看規(guī)則表,發(fā)現(xiàn)七個(gè)數(shù)據(jù)包被攔截,總計(jì)588 bytes
,能和上述對(duì)應(yīng)
追加規(guī)則
如果要在尾部添加規(guī)則,則使用- A
選項(xiàng),此時(shí)表示報(bào)文源地址為10.250.143.29
時(shí),報(bào)文則被ACCEPT
(接受)。雖然此時(shí)第一條為丟棄語句,第二條為接受語句,但是iptables
按照順序執(zhí)行匹配,當(dāng)前依舊無法接收到數(shù)據(jù)包
iptables -t filter -A INPUT -s 10.250.143.29 -j ACCEPT
在指定位置插入
可以在INPUT
后寫入數(shù)字來指定的位置插入我們的規(guī)則,如下圖即可發(fā)現(xiàn)在第一行插入了規(guī)則
iptables -t filter -I INPUT 1 -s 10.250.143.29 -j ACCEPT
4.4 刪除
刪除filter
表中INPUT
中的一條規(guī)則,有兩種辦法,下圖為當(dāng)前規(guī)則表
按照編號(hào)刪除
假設(shè)我們要?jiǎng)h除編號(hào)為1
的規(guī)則
iptables -t filter -D INPUT 1
具體的匹配條件與動(dòng)作刪除
假設(shè)我們按照源地址和動(dòng)作規(guī)則來刪除
iptables -t filter -D INPUT -s 10.250.143.29 -j ACCEPT
清除整個(gè)表
-F
參數(shù)表示flush
刷新,請(qǐng)勿隨便清空鏈或者表中的規(guī)則
iptables -t filter -F
4.5 修改
所謂修改,就是將某條規(guī)則中的動(dòng)作進(jìn)行改動(dòng),比如將上圖中的accept
改為reject
,要注意以下幾點(diǎn)
-
最重要的:使用
-s
指定對(duì)應(yīng)規(guī)則中原本的源地址,否則修改的規(guī)則中的源地址會(huì)自動(dòng)變?yōu)?code>0.0.0.0/0,即那么所有IP的請(qǐng)求都被拒絕了 - 一定要指定規(guī)則的序號(hào)
iptables -t filter -R INPUT 1 -s 10.250.143.29 -j REJECT
我們修改完如下圖,
此時(shí)我們?cè)偃y(cè)試連通,會(huì)直接展示不可達(dá)
4.6 保存
我們防火墻所做出的修改都是臨時(shí)的,為了防止這種情況的發(fā)生,我們需要將規(guī)則保存
ubuntu 20.04
仿佛沒有網(wǎng)上說的配置文件,那么我們需要自定義配置文件,并且將其設(shè)置為開機(jī)自啟
首先,創(chuàng)建我們的配置文件
vi /etc/iptables.rules
此后,寫完命令,我們執(zhí)行保存配合重定向,即可將我們當(dāng)前的規(guī)則保存在配置文件中
iptables-save > /etc/iptables.rules
我們同時(shí)也可以從配置文件中來加載規(guī)則
iptables-restore < /etc/iptables.rules
但是我們每次開機(jī)來加載配置文件很麻煩,所以我們要設(shè)置該配置文件開機(jī)自動(dòng)生效
第一步:賦予啟動(dòng)文件的修改權(quán)限
sudo chmod 777 /lib/systemd/system/rc-local.service
第二步:然后設(shè)置該 rc-local
服務(wù)開機(jī)啟動(dòng)
systemctl enable /lib/systemd/system/rc-local.service
第三步:創(chuàng)建腳本文件
sudo vi /etc/rc.local
第四步:添加如下內(nèi)容
#!/bin/sh
iptables-restore < /etc/iptables.rules
exit 0
第五步:這個(gè)超級(jí)重要:對(duì)rc.local
賦予執(zhí)行權(quán)限,否則沒有權(quán)限無法運(yùn)行文章來源:http://www.zghlxwxcb.cn/news/detail-640482.html
sudo chmod 777 /etc/rc.local
到此位置,開機(jī)配置文件即可生效文章來源地址http://www.zghlxwxcb.cn/news/detail-640482.html
到了這里,關(guān)于iptables防火墻概念-規(guī)則命令詳解-配置文件修改的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!