您現在的位置是:首頁 > 籃球
Linux系統主機防火牆Iptables如何配置?該如何進行安全審計?
- 由 ArveyCheung 發表于 籃球
- 2022-01-13
如何設定防火牆級別
一、何為防火牆?
所謂防火牆也稱之為防護牆,它是一種位於內部網路與外部網路之間的網路安全系統。一項資訊保安的防護系統。按照給定的規則,允許或者限制網路報文透過。在這裡主要透過iptables工具新增“規則”,Linux主機防火牆由使用者態iptables工具+核心態netfilter模組來實現。
說到linux主機防火牆iptables的設定之前,先來理解下所謂的
4表5鏈N規則
是個什麼梗?
我們先來看看, 當客戶端瀏覽器去訪問web伺服器的時候, 一個客戶端的資料報文和伺服器的互動流程就如下圖所示:
所以為了使防火牆達到包過濾的目的, 我們需要在資料報文流經的路徑上,設定一些關卡: 只有讓所有進出的報文都流經這些關卡中, 同時我們在關卡上設定一些條件, 報文經過檢查後,符合放行條件的才給放行, 而那些不符合不達標的條件的報文則會被阻止,不能夠放行。
在Linux主機中的防火牆“
iptables
”中,關卡就稱之為“鏈”,所謂的條件就稱之為“規則”,根據題目要求所說的配置使用防火牆,其意思就是在相應的鏈中新增規則。
二、4表5鏈N規則:
1、Linux主機防火牆中設定了有5道關卡,即“5鏈”:
這個linux主機設定的5道關卡中,分別對應有:
INPUT
(輸入);
OUTPUT
(輸出);
PREROUTING
(路由前);
FORWARD
(轉發);
POSTROUTING
(路由後)。
目前要用到的有
input
和
output
兩個鏈,其他三個鏈是作為一些閘道器路由器裝置時才會使用,就先暫且不說。
而組合完整的一個數據報文的場景如下圖所示:
根據實際的場景,資料報文的流向:
PREROUTING -> INPUT
(外網 到本機的報文);
PREROUTING -> FORWARD -> POSTROUTING
(由本機路由器 轉發的報文) ;
OUTPUT -> POSTROUTING
(本機程序發出的報文);
2、鏈和規則之間的關係:
規則:
就是是滿足某個條件,就做什麼事情,由條件+操作組合而成。其操作 :
-j ACCEPT|DROP(允許/不允許)
來表示。
每個關卡中可以設定多條“
規則
”, 所謂的“
鏈
”即是“
關卡
”,就是每一個關卡中由多條規則串在一起的就叫“
鏈
”,
如下圖所示:
3、何為4表?
首先,我們先得知道防火牆的作用:
它就是對經過的報文匹配一定的“規則”, 然後執行對應的操作,比如放行或是阻攔。
在有些場景中,為了實現特定的功能,就需要在幾個不同關卡中去配置相應的規則,而這幾個不同關卡就統稱為“
表
”。
Linux主機系統中內建的有4個表,分別如下所示:
filter:
資料包過濾、 INPUT、FORWARD、OUTPUT ;
nat:
網路地址轉換(對映)、PREROUTING、INPUT、OUTPUT、POSTROUTING;
mangle:
報文拆解、修改報文並重新封裝:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING;
raw:
關閉連結追蹤機制等、PREROUTING、INPUT、OUTPUT。
注:
新版核心中增加內建表 security,同時 這裡只講下其中一個表“
filter”
。
4表5鏈N規則的之間構成的關係如下圖所示:
以及各個表之間的鏈是按照一定順序進行來判斷的,如下圖所示:
三、防火牆iptables運用:
在遇到有不知如何操作的,可以透過
iptables -h
命令檢視幫助,找到對應的解決方法。
我這裡先開啟看看我們原始的iptables配置,可以透過命令
iptables -L
進行檢視。
1、"-A"追加:
這上面是原始的,沒配置過的,現在,比如我們在伺服器80埠上面部署了一個網站,我想讓其新增一條規則,以至於讓大家都訪問不了這個網站怎麼辦?這時候可以透過以下命令來達到要求:
iptables -t filter -A INPUT -p tcp ——dport 80 -j DROP
其意思就是往iptables防火牆中的
filter表
裡的
INPUT鏈
追加一條
規則,
協議是
TCP
的,並且目的地址是
80埠的
就丟棄掉。
2、檢視行號:
或者檢視對應的行號,透過以下命令:
iptables -t filter -L ——line-numbers
3、"-D"刪除:
知道了行號,可以透過刪除對應的行號,以下命令實現:
iptables -t filter -D INPUT 1
結果,刪除成功:
此“
D
”為刪除某個鏈中的第幾條規則。
4、"-I"插入:
有刪除,既有插入規則,可以透過以下命令實現:
iptables -t filter -I INPUT 1 -p tcp ——dport 80 -j ACCEPT
5、"-R"替換:
也可以透過 “
-R”
將某個鏈中的第幾條規則替換成新的規則,透過以下命令:
iptables -t filter -R INPUT 2 -p tcp ——dport 23 -j ACCEPT
沒替換之前:
替換之後:
6、"-F"清空:
作用:
清空某個鏈的規則,如果鏈的引數沒有給定,那麼就清空整個表,
命令如下
:
iptables -t filter -F INPUT
如今,整個表清空之後已恢復初始的樣子:
注:
如果
iptables -t filter -F
(後面不帶任何對應的鏈),則清空整個表。
當然條件中,還有涉及到以下條件:
-s 源ip地址:
匹配ip報文源地址是某個IP;
-d 目的ip地址:
匹配ip報文目的地址是某個IP;
-p <協議>:
如-p tcp|udp等等;
擴充套件的選項,判斷埠號:
如——dport 目標埠號,——sport 源埠號;
-i 網絡卡名:
從哪個網絡卡流入的報文;
-o 網絡卡名:
從哪個網絡卡流出的報文。
例如:
開放 80埠給所有請求,命令可以這樣:
iptables -t filter -A INPUT -p tcp ——dport 80 -j ACCEPTiptables -t filter -A OUTPUT -p tcp ——sport 80 -j ACCEPT
假設有一條堡壘機的ip地址為192.168.1.1,那麼開放23埠給堡壘機的命令則可以這麼寫:
iptables -t filter -A INPUT -s 192。168。1。1 -p tcp ——dport 23 -j ACCEPTiptables -t filter -A OUTPUT -d 192。168。1。1 -p tcp ——sport 23 -j ACCEPT
以及禁止所有請求訪問,可以設定所有鏈中的預設策略為
DROP
,這裡僅設為INPUT的預設策略為DROP,命令則可以這樣:
iptables -t filter -P INPUT DROP
以上等等條件,根據不用情況具體問題具體分析。
防火牆的iptables規則的判斷順序是從第一條開始一條條往下判斷的,如果條件匹配就執行對應的操作,則不會再繼續往下走。
四、對於ping攻擊如何防護?
有一種低階的DDoS攻擊,像這種透過
ping -s <數量>
可以透過命令設定:
iptables -t filter -A INPUT -p icmp ——icmp-type 8 -j DROP
同時出去的報文如果是
icmp echo-reply
型別(0號) ,也是要禁止的,可以命令設定為:
iptables -t filter -A OUTPUT -p icmp ——icmp-type 0 -j DROP
最後,也可以透過配置伺服器,來關閉ping的echo報文的響應,
命令則可以這樣
:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
五、防火牆iptables如何進行匯出與匯入?
1、匯出:
比如透過這串命令:
iptables-save > /要儲存的檔案路徑/iptables。rule
2、匯入:
透過這串命令:
iptabels-restore < /之前所儲存的檔案路徑/iptables。rule
就可以看到之前所配置的規則了,儲存匯出的資料相當於備份了一份檔案。
六、安全審計:
什麼是安全審計?
[安全審計就是一種事後追蹤技術,比如被入侵了,從核心中去監控使用者的行為,記錄使用者的敏感操作,也並不是要將使用者的所有操作都記錄下來,僅只需要記錄敏感資訊。]
在對這個工作進行前,需要安裝安全審計服務的工具“
auditd
”,如果Linux中沒有自帶,可以自行安裝即可,安裝之前,先更新一下源:
透過命令
:
apt-get update
安裝步驟如下
:
第一步安裝:
sudo apt install auditd
我之前安裝過了,所以顯示:
第二步啟動審計服務:
sudo /etc/init。d/auditd start 或者透過 systemctl status auditd。service
這代表啟動成功的介面:
第三步驗證安裝是否成功?能夠看到 auditd 就行:
ps aux | grep audit
七、安全審計使用:
工具安裝好了之後,現在是配置檔案環節,配置檔案有個注意的地方,不看清楚的話,也算是個[
小坑
]。
注意:
這個小坑在於配置檔案的檔案路徑是在這個目錄下的:
/etc/audit/rules.d/audit.rules,
而非
/etc/audit/audit.rules
檔案目錄下,因為這個檔案是最後生成的臨時檔案,每次重啟服務都會重新生成一個,就是你每次配置設定這個檔案之後,每當重啟服務後,發現修改是無效的。
檢視日誌動態的檔案可以透過進入:
/var/log/audit/ ,然後執行命令:
tail -f audit。log
透過檢視
/var/log/audit/audit.log
日誌來確定使用者的行為,包括可以檢視其日誌型別包含了時間戳,對應的程序號、使用者id、組id、終端id,執行的命令以及命令的地址以及關鍵字等。如果多個使用者同時ssh連線,每個ssh連線對應終端號也不一樣。
比如透過這個命令可以檢視對應的時間:
date -d “@1635082742。047”
1、auditctl用法:
審計服務的核心控制命令,audit。rulese就是要使用這個命令來載入配置規則的。
透過
auditctl -w 檔名..... -p 許可權 -k 關鍵字。
注意:這個
同樣也是一個臨時檔案,重啟audit後也會不存在,最終還是需要到這個
/etc/audit/rules.d/audit.rules
檔案裡去配置。
所以我這裡先新增一條審計規則
auditctl -w /home/arveycheung/software/test/testss。txt -p rwxa -k hello
以下有三個命令:
auditctl -l:可以
檢視當前生效的規則;
auditctl -s:
可以檢視審計服務的執行狀態;
auditctl -D:
可以清空當前審計服務生效的規則。
效果如下所示:
2、ausearch的使用:
作用:
依賴審計日誌來進行日誌查詢,以下有三個命令方法的實現:
(1)、ausearch -k keyname :
可以檢視關鍵字key相關的內容;
(2)、ausearch -f filename :
可以檢視和檔案相關內容;
(3)、ausearch -ui uidtext :
可以檢視某個使用者id相關內容。
這裡內容過多就不截圖了。
3、aureport的使用:
作用:
依賴審計日誌來產生一個報告,正常的審查流程是先檢視報告的,若報告有問題再去檢視具體的日誌資訊。
(1)、
透過這個 [
aureport
] 命令得到如下資訊;
(2)、
透過這個命令 [
aureport -au
] 可以檢視和鑑權相關的資訊;
(3)、
透過這個命令 [
aureport -m
] 可以檢視和賬戶修改相關的資訊;
八、總結:
除了有iptables防火牆之外,還有一種輕量級別的防火牆“
tcpwrapper
”,使用前提,服務可執行程式需要連線了libwrap。so動態庫,對於一些人來說很麻煩。總而言之,能用iptables防火牆儘量就用iptables吧。