Linux防火墻配置與管理:firewalld使用詳解
在云計(jì)算和服務(wù)器運(yùn)維中,防火墻是保護(hù)系統(tǒng)安全的第一道防線。Linux系統(tǒng)提供了多種防火墻管理工具,其中firewalld是Red Hat系發(fā)行版(如CentOS、RHEL、Fedora)默認(rèn)的防火墻管理工具,相比傳統(tǒng)的iptables提供了更友好、動(dòng)態(tài)的配置方式。本文將詳細(xì)介紹firewalld的基本概念、常用操作和實(shí)際配置示例。
firewalld基本概念
firewalld采用zone(區(qū)域)和service(服務(wù))的概念來(lái)管理防火墻規(guī)則:
· Zone:定義信任級(jí)別,如public(公共區(qū)域)、trusted(信任區(qū)域)等
· Service:預(yù)定義的應(yīng)用程序規(guī)則集,如http、https、ssh等
· 運(yùn)行時(shí)配置:臨時(shí)生效,重啟后丟失
· 永久配置:寫入配置文件,永久生效
1. 基本管理命令
查看firewalld狀態(tài)
# 查看firewalld運(yùn)行狀態(tài)
sudo systemctl status firewalld
# 啟動(dòng)firewalld
sudo systemctl start firewalld
# 停止firewalld
sudo systemctl stop firewalld
# 設(shè)置開機(jī)自啟
sudo systemctl enable firewalld
# 禁止開機(jī)自啟
sudo systemctl disable firewalld
查看防火墻信息
# 查看默認(rèn)區(qū)域
sudo firewall-cmd --get-default-zone
# 查看所有可用區(qū)域
sudo firewall-cmd --get-zones
# 查看當(dāng)前區(qū)域配置
sudo firewall-cmd --list-all
# 查看所有區(qū)域配置
sudo firewall-cmd --list-all-zones
2. 常用配置操作
添加和移除服務(wù)
# 添加服務(wù)到當(dāng)前區(qū)域(運(yùn)行時(shí))
sudo firewall-cmd --add-service=http
# 永久添加服務(wù)
sudo firewall-cmd --add-service=http --permanent
# 從當(dāng)前區(qū)域移除服務(wù)
sudo firewall-cmd --remove-service=http
# 永久移除服務(wù)
sudo firewall-cmd --remove-service=http --permanent
# 重載配置(應(yīng)用永久規(guī)則)
sudo firewall-cmd --reload
開放和關(guān)閉端口
# 開放TCP端口(運(yùn)行時(shí))
sudo firewall-cmd --add-port=8080/tcp
# 永久開放端口
sudo firewall-cmd --add-port=8080/tcp --permanent
# 開放UDP端口
sudo firewall-cmd --add-port=53/udp
# 關(guān)閉端口
sudo firewall-cmd --remove-port=8080/tcp
sudo firewall-cmd --remove-port=8080/tcp --permanent
設(shè)置默認(rèn)區(qū)域
# 查看當(dāng)前默認(rèn)區(qū)域
sudo firewall-cmd --get-default-zone
# 設(shè)置默認(rèn)區(qū)域?yàn)閜ublic
sudo firewall-cmd --set-default-zone=public
# 查看指定網(wǎng)卡的區(qū)域
sudo firewall-cmd --get-zone-of-interface=eth0
# 將網(wǎng)卡分配到指定區(qū)域
sudo firewall-cmd --zone=public --add-interface=eth0
sudo firewall-cmd --zone=public --change-interface=eth0
3. 實(shí)際配置示例
示例1:配置Web服務(wù)器防火墻
假設(shè)需要配置一臺(tái)運(yùn)行Nginx的Web服務(wù)器,開放HTTP(80)和HTTPS(443)端口:
# 1. 查看當(dāng)前狀態(tài)
sudo firewall-cmd --state
# 2. 添加http和https服務(wù)
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
# 3. 如果使用非標(biāo)準(zhǔn)端口,如8080
sudo firewall-cmd --add-port=8080/tcp --permanent
# 4. 限制SSH訪問(wèn)只允許特定IP
# 先移除所有SSH訪問(wèn)
sudo firewall-cmd --remove-service=ssh --permanent
# 添加只允許192.168.1.0/24網(wǎng)段SSH訪問(wèn)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent
# 5. 應(yīng)用配置
sudo firewall-cmd --reload
# 6. 驗(yàn)證配置
sudo firewall-cmd --list-all
示例2:配置數(shù)據(jù)庫(kù)服務(wù)器
對(duì)于MySQL數(shù)據(jù)庫(kù)服務(wù)器,通常只需要開放數(shù)據(jù)庫(kù)端口給應(yīng)用服務(wù)器:
# 1. 移除不需要的服務(wù)
sudo firewall-cmd --remove-service=ssh --permanent
sudo firewall-cmd --remove-service=http --permanent
# 2. 開放MySQL端口(默認(rèn)3306)
sudo firewall-cmd --add-port=3306/tcp --permanent
# 3. 限制只允許特定IP訪問(wèn)數(shù)據(jù)庫(kù)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.101" port port="3306" protocol="tcp" accept' --permanent
# 4. 應(yīng)用配置
sudo firewall-cmd --reload
4. 高級(jí)配置技巧
使用富規(guī)則(Rich Rules)
富規(guī)則提供更細(xì)粒度的控制:
# 允許特定IP訪問(wèn)特定端口
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.50" port port="22" protocol="tcp" accept' --permanent
# 拒絕特定IP訪問(wèn)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/8" drop' --permanent
# 設(shè)置端口轉(zhuǎn)發(fā)
sudo firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
創(chuàng)建自定義區(qū)域
# 創(chuàng)建新區(qū)域
sudo firewall-cmd --new-zone=webserver --permanent
# 為新區(qū)域添加服務(wù)
sudo firewall-cmd --zone=webserver --add-service=http --permanent
sudo firewall-cmd --zone=webserver --add-service=https --permanent
sudo firewall-cmd --zone=webserver --add-service=ssh --permanent
# 添加網(wǎng)卡到新區(qū)域
sudo firewall-cmd --zone=webserver --add-interface=eth1 --permanent
# 應(yīng)用配置
sudo firewall-cmd --reload