上一篇文章學習了用戶及文件相關權限,本篇繼續學習防火牆技術。python
防火牆做爲公網與內網之間的保護屏障,對系統相當重要。防火牆又分爲硬件防火牆和軟件防火牆,主要功能都是依據設置的策略對穿越防火牆的流量進行過濾。本篇主要講解Centos7系統自帶的軟件防火牆。linux
因爲在初學階段爲了不干擾不少時候咱們都是直接關閉防火牆,但在生產環境這樣作是很不安全的,所以咱們須要掌握防火牆的相關配置方法。centos
Linux系統包含兩個層面的防火牆,一種是基於TCP/IP的流量過濾工具,另一種是TCP Wrappers服務。前者包括iptables、firewalld等防火牆,後者是能容許或禁止Linux系統提供服務的防火牆,在更高層面保護系統的安全。安全
在RHEL7系統中,firewalld取代了以前版本的iptables防火牆,成爲默認的防火牆。兩者有很大區別,iptables的防火牆策略是交由內核層面的netfilter網絡過濾器來處理的,而firewalld則是交由內核層面的nftables包過濾框架來處理。服務器
嚴格意義上說,iptables和firewalld都不是真正的防火牆,只是用來定義防火牆策略的防火牆管理工具而已,他們都是一種服務。網絡
防火牆管理工具主要是爲了方便運維管理人員對防火牆策略進行配置和管理,這類工具思路大同小異,只要掌握一個便可,本文主要講解firewalld這款防火牆管理工具。app
Centos7中集成了多款防火牆工具,其中默認的是firewalld,全稱爲:Dynamic Firewall Manager of Linux systems,Linux系統的動態防火牆管理器。它用於命令行界面CLI或圖形用戶界面GUI兩種管理方式,下文將分別進行介紹。框架
firewalld相比以前傳統的防火牆管理配置工具,它支持動態更新技術並加入了區域(zone)的概念。簡單說就是事先定義幾套防火牆策略模板,用戶根據實際場景進行選擇,從而實現策略之間的快速切換。好比設置好home和work區域的策略後,在家就選擇home區域,在公司就選擇work策略,極大提高了防火牆策略的應用效率。運維
firewalld中蟬蛹的區域名稱和策略規則以下:ssh
區域 | 默認策略規則 |
---|---|
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 | 同block |
firewall-cmd是 firewalld 防火牆配置管理工具的 CLI(命令行界面)版本。它的參數通常都是以「長格式」來提供的。它的參數較多,可是因爲centos7已經支持此命令的參數補齊了,因此要多用tab鍵。下表列出經常使用的參數及做用,更多參數自行經過man命令進行查看。
參數 | 做用 |
---|---|
--get-default-zone | 查詢默認的區域名稱 |
--set-default-zone= <區域名稱> | 設置默認的區域,使其永久生效 |
--get-zones | 顯示可用的區域 |
--get-active-zones | 顯示當前正在使用的區域與網卡名稱 |
--get-services | 顯示預先定義的服務 |
--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 | 關閉應急情況模式 |
使用firewall配置策略有兩種模式:運行時模式(runtime)、永久模式(permanent)。運行時模式又稱爲當前生效模式,並且隨着系統的重啓會失效,它是默認的模式。而若是須要配置永久生效,就須要添加--permanent 參數。
主要注意的是永久模式配置的策略只有重啓以後才能自動生效,若是想讓配置的策略當即生效,須要手動執行firewall-cmd --reload 命令。
若是安裝本系列教程逐步操做的話,系統以及是默認安裝了firewalld服務,若是你用的是其餘系統或未安裝firewalld服務,能夠經過命令自行安裝便可。安裝命令:yum install firewalld firewall-config
[root@heimatengyun ~]# firewall-cmd --state running [root@heimatengyun ~]# systemctl status firewalld firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled) Active: active (running) since Sat 2019-12-21 21:26:53 CST; 1h 31min ago Main PID: 915 (firewalld) CGroup: /system.slice/firewalld.service └─915 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid Dec 21 21:26:53 heimatengyun systemd[1]: Started firewalld - dynamic firewal.... Hint: Some lines were ellipsized, use -l to show in full.
可使用firewall-cmd --state 或systemctl status firewalld查看防火牆狀態。
[root@heimatengyun ~]# systemctl restart firewalld.service
注意等同於systemctl restart firewalld,能夠省略服務後綴名。
[root@heimatengyun ~]# systemctl stop firewalld [root@heimatengyun ~]# firewall-cmd --state not running
[root@heimatengyun ~]# systemctl start firewalld [root@heimatengyun ~]# firewall-cmd --state running
配置文件說明:firewalld 存放配置文件有兩個目錄,/usr/lib/firewalld/和/etc/firewalld/。前者存放了一些默認的文件,後者主要是存放用戶自定義的數據,因此咱們添加的service或者rule都在後者下面進行。
[root@heimatengyun ~]# ls /usr/lib/firewalld/ icmptypes services zones [root@heimatengyun ~]# ls /etc/firewalld/ firewalld.conf icmptypes lockdown-whitelist.xml services zones
server:存儲服務數據,就是一組定義好的規則。
zones:存儲區域規則。
firewalld.conf:默認配置文件,能夠設置默認使用的區域,默認區域爲 public,對應 zones目錄下的public.xml。
[root@heimatengyun ~]# firewall-cmd --get-default-zone public
[root@heimatengyun ~]# firewall-cmd --zone=public --query-service=ssh yes [root@heimatengyun ~]# firewall-cmd --zone=public --query-service=https no
[root@heimatengyun ~]# firewall-cmd --zone=public --add-service=https success [root@heimatengyun ~]# firewall-cmd --zone=public --query-service=https yes [root@heimatengyun ~]# firewall-cmd --permanent --zone=public --add-service=https success [root@heimatengyun ~]# firewall-cmd --reload success
[root@heimatengyun ~]# firewall-cmd --zone=public --list-ports [root@heimatengyun ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp success [root@heimatengyun ~]# firewall-cmd --zone=public --list-ports 8080-8081/tcp
firewall-config是 firewalld 防火牆配置管理工具的 GUI(圖形用戶界面)版本,幾 乎能夠實現全部以命令行來執行的操做。即便沒有紮實的 Linux 命令基 礎,也徹底能夠經過它來妥善配置 RHEL 7 中的防火牆策略。
輸入命令後,將打開主界面
[root@heimatengyun ~]# firewall-config
頂部的Configuration對應選擇是運行模式仍是永久模式。
左邊Zones選項卡對應的是不一樣的區域。
在使用 firewall-config 工具配置完防火牆策略以後,無須進行二次確認,由於只要有修改內容,它就自動進行保存。
添加規則後,還須要reload讓配置的策略當即生效。
TCP Wrappers是RHEL7系統中默認啓用的一款流量監控程序,它可以根據來訪主機的地址與本機的目標服務程序做出容許或拒絕的操做。
前文已提到firewalld是基於TCP/IP 協議的流量過濾工具,而 TCP Wrappers 服務則是能容許或 禁止 Linux 系統提供服務的防火牆,從而在更高層面保護了 Linux 系統的安全運行。
TCP Wrappers 服務的防火牆策略由兩個控制列表文件所控制,用戶能夠編輯容許控制列表文 件來放行對服務的請求流量,也能夠編輯拒絕控制列表文件來阻止對服務的請求流量。
控制列表 文件修改後會當即生效,系統將會先檢查容許控制列表文件(/etc/hosts.allow),若是匹配到相應 的容許策略則放行流量;若是沒有匹配,則去進一步匹配拒絕控制列表文件(/etc/hosts.deny),若 找到匹配項則拒絕該流量。若是這兩個文件全都沒有匹配到,則默認放行流量。
編寫拒絕策略規則時,填寫的是服務名稱,而非協議名稱;
建議先編寫拒絕策略規則,再編寫容許策略規則。
TCP Wrappers服務的控制列表文件中經常使用的參數以下表:
客戶端類型 | 示例 | 知足條件的客戶端列表 |
---|---|---|
單一主機 | 192.168.1.1 | ip地址爲192.168.1.1的主機 |
指定網段 | 192.168.1. | ip段爲192.168.1.0/24的主機 |
指定網段 | 192.168.10.0/255.255.255.0 | IP 段爲 192.168.10.0/24 的主機 |
指定 DNS 後綴 | .heimatengyun.com | 全部後綴爲.heimatengyun.com的主機 |
指定主機名稱 | www.heimatengyun.com | 主機名稱爲www.heimatengyun.com的主機 |
指定全部客戶端 | ALL或* | 全部主機所有包括在內 |
編輯hosts.deny文件
[root@heimatengyun ~]# vi /etc/hosts.deny
添加:sshd:* 保存並退出。
此時退出遠程鏈接工具,再次遠程鏈接,將沒法鏈接進去。
直接登陸虛擬機,並編輯/etc/hosts.allow文件,容許本地電腦的ip能遠程鏈接服務器。
[root@heimatengyun ~]# vi /etc/hosts.allow
添加:sshd:192.168.78. 保存並退出
注意此處的192.168.78. 爲你將訪問linux的ip地址,根據實際狀況進行設置。本文演示的環境中取的是VMnet8的ip地址,而不是宿主機的ip。
而後再次用遠程鏈接工具,發現能夠鏈接上了。