不管軟硬件防火墻,主要功能都是依據策略對穿越防火墻自身的流量進行過濾。
防火墻的策略可以基于流量的源目地址、端口號、協議、應用等信息來定制,然后防火 墻使用預先定制的策略規則監控出入的流量,若流量與某一條策略規則相匹配,則執行相應的處理,反之則丟棄。
iptables與firewalld都不是真正的防火墻,只是防火墻管理工具而已。或是一種服務。
iptables服務會把配置好的防火墻策略交由內核層面的netfilter網絡過濾器來處理;
firewalld服務則是把配置好的防火墻策略交由內核層面的nftables包過濾框架來處理。
#### iptables
iptables服務把用于處理或過濾流量的策略條目稱之為規則,多條規則可以組成一個規則鏈,而規則鏈則依據數據包處理位置的不同進行分類。
- 在進行路由選擇前處理數據包(PREROUTING);
- 處理流入的數據包(INPUT);
- 處理流程的數據包(OUTPUT);
- 處理轉發的數據包(FORWARD);
- 在進行路由選擇后處理數據包(POSTROUTING)。
iptables服務術語:ACCEPT(允許流量通過)、REJECT(拒絕流量通過)、LOG(記錄日志信息)、DROP(拒絕流量通過)。
REJECT與DROP的不同:DROP就是直接將流量丟棄且不響應;REJECT拒絕流量后再回復信息,從而讓流量發送方清晰看到數據被拒絕的響應信息。
注意:規則鏈的默認拒絕動作只能是DROP,不能是REJECT。
防火墻策略規則的匹配順序是從上至下,要把較為嚴格、優先級較高的策略規則放到前面,以免發生錯誤。
iptables中常用的參數及作用
參數
作用
-P
設置默認策略
-F
清空規則鏈
-L
查看規則鏈
-A
在規則鏈的末尾加入新規則
-I num
在規則鏈的頭部加入新規則
-D num
刪除某一條規則
-s
匹配來源地址IP/MASK,加嘆號“!”表示除這個IP外
-d
匹配目標地址
-i 網卡名稱
匹配從這塊網卡流入的數據
-o 網卡名稱
匹配從這塊網卡流出的數據
-p
匹配協議,如TCP、UDP、ICMP
\--dport num
匹配目標端口號
\--sport num
匹配來源端口號
舉例:
\# iptables -L (查看規則鏈)
\# iptables -F (清空規則鏈)
\# iptables -L (再次查看規則鏈,是否清空)
\# iptables -P INPUT DROP (把input規則鏈默認策略設置為拒絕)
\# iptables -L (查看設置的情況)
\# ping -c 4 192.168.10.10 (ping不通)
\# iptables -I INPUT -p icmp -j ACCEPT (向INPUNT鏈中添加運行ICMP進入,實際是允許 PING)
\# ping -c 4 192.168.10.10 (可以ping通)
\# iptables -D INPUT 1 (刪除剛剛加入的那條策略)
\# iptables -P INPUT ACCEPT (把INPUT默認策略設置為允許)
\# iptables -L (看下設置的結果)
\# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT (只允許指定網段的主機訪問本機的22端口)
\# iptables -A INPUT – p tcp --dport 22 -j REJECT (在規則鏈末尾添加拒絕其他所有主機訪問)
\# iptables -L
\# ssh 192.168.10.10 (這個22端口是SSH服務使用的。測試連接)
\# ssh 192.168.10.10 (這個地方使用另一個網段的機器連接,測試失敗)
\# iptables -I INPUT -p tcp --dport 12345 -j REJECT
\# iptables -I INPUT -p udp --dport 12345 -j REJECT
(上面是拒絕所有人訪問本機12345端口的策略,tcp和udp協議)
\# iptables -L (再次查看配置策略信息)
\# iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
(拒絕192.168.10.5訪問本機80端口(web服務))
\# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
\# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
(拒絕所有主機訪問本機1000~1024端口)
\# service iptables save (保存防火墻的配置,永久生效。不然重啟就失效)
#### firewalld
firewalld(Dynamic Firewall Manager of Linux System,Linux系統的動態防火墻管理器)是RHEL7默認的防火墻配置管理工具,擁有CLI(命令行界面)和基于GUI(圖形用戶界面)的兩種管理方式。
firewalld支持動態更新技術并加入了區域(zone),區域就是firewalld預先準備了幾套防火墻策略集合(相當于策略模板),用戶可以根據生產場景的不同選擇合適的策略集合,從而實現防火墻策略之間的快速切換。
**firewalld中常用的區域名稱及策略規則**
區域
默認策略規則
trusted
允許所有的數據包
home
拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、mdns、ipp-client、amba-client與dhcpv6-client服務相關,則允許流量
internal
等同于home區域
work
拒絕流入的流量,除非與流出的流量數相關;而如果流量與ssh、ipp-client與dhcpv6-client服務相關,則允許流量
public
拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh、dhcpv6-client服務相關,則允許流量
external
拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量
dmz
拒絕流入的流量,除非與流出的流量相關;而如果流量與ssh服務相關,則允許流量
block
拒絕流入的流量,除非與流出的流量相關
drop
拒絕流入的流量,除非與流出的流量相關
**firewall-cmd命令中使用的參數及作用**
參數
作用
\--get-default-zone
查詢默認的區域名稱
\--set-default-zong=<區域名稱>
設置默認的區域,使其永久生效
\--get-zones
顯示可用的區域
\--get-services
顯示預先定義的服務
\--get-active-zones
顯示當前正在使用的區域與網卡名稱
\--add-source=
將源自此IP或子網的流量導向指定的區域
\--remove-source=
不再將源自此IP或子網的流量導向某個指定區域
\--add-interface=<網卡名稱>
將源自該網卡的所有流量都導向某個指定區域
\--change-interface=<網卡名稱>
將某個網卡與區域進行關聯
\--list-all
顯示當前區域的網卡配置參數、資源、端口及服務等信息
\--list-all-zones
顯示所有區域的網卡配置參數、資源、端口及服務等信息
\--add-service=<服務名>
設置默認區域允許該服務的流量
\--add-port=<端口號/協議>
設置默認區域允許該端口的流量
\--remove-service=<服務名>
設置默認區域不再允許該服務的流量
\--remove-port=<端口號/協議>
設置默認區域不再允許該端口的流量
\--reload
讓“永久生效”的配置規則立即生效,并覆蓋當前的配置規則
\--panic-on
開啟應急狀況模式
\--panic-off
關閉應急狀況模式
firewalld配置的防火墻策略默認運行時(Runtime)模式,又稱為當前生效模式,重啟就會失效,需要成為永久;則在用firewall-cmd命令時添加--permanent參數,但是必須系統重啟之后才能自動生效;如果想立即生效,需要手動執行firewall-cmd --reload命令。
舉例:
# firewall-cmd --get-default-zone (查看firewalld服務當前所使用的區域)
\# firewall-cmd --get-zone-of-interface=eno16777728 (查詢eno16777728網卡區域)
# firewall-cmd --permanent --zone=external --change-interface=eno16777728
(把網卡eno16777728的默認區域修改為external,永久模式下)
# firewall-cmd --get-zone-of-interface=eno16777728 (查看當前模式下的區域名稱)
# firewall-cmd --permanent --get-zone-of-interface=eno16777728
(查看永久模式下的區域名稱)
\# firewall-cmd --set-default-zone=public (設置當期默認區域為public)
\# firewall-cmd --get-default-zone
\# firewall-cmd --panic-on (啟動防火墻的應急模式)
\# firewall-cmd --panic-off (關閉防火墻的應急模式)
\# firewall-cmd --zone=public --query-service=ssh (查詢public區域是否允許ssh)
\# firewall-cmd --zone=public --query-service=https (查詢public區域是否允許https)
\# firewall-cmd --zone=public --add-service=https (允許public區域https流量)
\# firewall-cmd --permanent --zone=public --add-service=https (永久允許https)
\# firewall-cmd --reload (永久允許立即生效)
\# firewall-cmd --permanent --zone=public --remove-service=http (永久拒絕http)
\# firewall-cmd --reload (永久拒絕立即生效)
\# firewall-cmd --zone=public --add-port=8080-8081/tcp
(允許訪問8080和8081端口,僅限當前生效)
\# firewall-cmd --zone=public --list-ports (查看端口信息)
\# firewall-cmd --permanent --zone=public -add-forward-port=port=888:proto=tcp:
toport=22:toaddr=192.168.10.10 (把原本訪問本機888端口的流量轉發到22端口,當前與長期均有效)
注意:
流量轉發命令格式為firewall-cmd --permanent --zone=<區域> --add-forward-port=port=<源端口號>:proto=<協議>:toport=<目標端口號>:toaddr=<目標IP地址>
\# firewall-cmd --reload
\# ssh -p 888 192.168.10.10 (用ssh訪問192.168.10.10主機的888端口,成功的)
firewalld中的富規則表示更細致、更詳細的防火墻策略配置,它可以針對系統服務、端口號、源地址和目標地址等諸多信息進行更有針對性的策略配置。它的優先級在所有防火墻策略中也是最高的。
\# firewall-cmd --permanent --zone=public --**add-rich-rule**= “rule family=
“ipv4”source address= “192.168.10.0/24”service name= “ssh”reject”
(拒絕192.168.10.0/24網段的所有用戶訪問本機的ssh服務)
\# firewall-cmd --reload
\# ssh 192.168.10.10 (訪問失敗)
#### 圖形管理工具
firewall-config功能:
- 1、選擇運行時(Runtime)模式或永久(Permanent)模式的配置
- 2、可選的策略集合區域列表
- 3、常用的系統服務列表
- 4、當前正在使用的區域
- 5、管理當前被選中區域中的服務
- 6、管理當前被選中區域中的端口
- 7、開啟或關閉SNAT(源地址轉換協議)技術
- 8、設置端口轉發策略
- 9、控制請求icmp服務的流量
- 10、管理防火墻的富規則
- 11、管理網卡設備
- 12、被選中區域的服務,若勾選了相應服務前面的復選框,則表示運行與之相關的流量
- 13、firewall-config工具的運行狀態
注:SNAT是一種為了解決IP地址匱乏而設計的技術,它可以使得多個內網中的用戶通過同一個外網IP接入Internet(互聯網)。
#### 服務的訪問控制列表
TCP Wrappers是RHEL7系統的默認啟用的一款流量監控程序,它能夠根據來訪主機的地址與本機的目標服務程序作出允許或拒絕的操作。
TCP Wrappers服務的防火墻策略由兩個控制列表文件所控制,用戶可以編輯允許控制列表文件來放行對服務的請求流量,也可以編輯拒絕控制列表文件來阻止對服務的請求流量。生效后,先檢查允許控制列表文件(/etc/hosts.allow),如匹配則放行;沒找到,則進一步檢查拒絕控制列表文件(/etc/hosts.deny),如找到則拒絕。如兩個都沒有找到則默認放行。
**TCP Wrappers服務的控制列表文件中常用的參數**
客戶端類型
實例
滿足示例的客戶端列表
單一主機
192\.168.10.10
IP地址為192.168.10.10的主機
指定網段
192\.168.10.
IP段為192.168.10.0/24的主機
指定網段
192\.168.10.0/255.255.255.0
IP段為192.168.10.0/24的主機
指定DNS后綴
.linuxprobe.com
所有DNS后綴為.linuxprobe.com的主機
指定主機名稱
[www.linuxprobe.com](http://www.linuxprobe.com)
主機名稱為[www.linuxprobe.com](http://www.linuxprobe.com)的主機
指定所有客戶端
ALL
所有主機全部包括在內
**配置TCP Wrappers服務時需要遵循的兩個原則:**
- 編寫拒絕策略規則時,填寫的是服務名稱,而非協議名稱;
- 建議先編寫拒絕策略規則,再編寫允許策略規則,以便直觀地看到相應的效果
\# vi /etc/hosts.deny (加一行:sshd:\*)
\# vi /etc/hosts.allow (加一行: sshd:192.168.10.)
- 常用的RPM軟件包命令
- 常見的Yum命令
- Linux開機過程
- Systemd初始化進程服務的劣勢:
- system 與 system V init 的區別以及作用
- systemctl管理服務的啟動、重啟、停止、重載、查看狀態等常用命令
- systemctl設置服務開機啟動、不啟動、查看各級別下服務啟動狀態等常用命令
- 主流 Linux 系統選擇 Bash 解釋器作為命令行終端主要有以下 4 項優勢
- 常見執行Linux命令的格式:
- man命令中常用按鍵以及用途
- man命令幫助信息的接個歐以及意義
- 常用系統命令(10)
- 系統狀態檢測命令(8)
- 工作目錄切換命令(3)
- 文本文件編輯命令(9)
- 文件目錄管理命令(7)
- 打包壓縮與搜索命令(3)
- 輸入輸出重定向
- 管道命令符
- 命令行的通配符
- 常用的轉義字符
- 重要的環境變量
- Vim文本編輯器
- 編寫Shell腳本
- 流程控制語句
- 計劃任務服務程序
- 用戶身份與文件權限
- 文件權限與歸屬
- 文件的隱藏屬性
- 文件訪問控制列表
- su命令與sudo服務
- 存儲結構與磁盤劃分
- 使用RAID與LVM磁盤陣列技術
- iptables與firewalld防火墻
- 使用SSH服務管理遠程主機