iptables與firewalld防火墻配置完全指南
1. 防火墻基礎(chǔ)概念
1.1 什么是防火墻
防火墻是一種網(wǎng)絡(luò)安全設(shè)備,用于監(jiān)控和控制網(wǎng)絡(luò)流量,根據(jù)預(yù)定義的安全規(guī)則來允許或阻止數(shù)據(jù)包通過。Linux系統(tǒng)中主要有兩種防火墻解決方案:iptables和firewalld。
1.2 iptables vs firewalld
?iptables:傳統(tǒng)的Linux防火墻工具,直接操作內(nèi)核的netfilter框架
?firewalld:動(dòng)態(tài)防火墻管理器,提供更高級(jí)的抽象和動(dòng)態(tài)配置能力
2. iptables詳解
2.1 iptables基本概念
2.1.1 表(Tables)
?filter表:默認(rèn)表,用于過濾數(shù)據(jù)包
?nat表:用于網(wǎng)絡(luò)地址轉(zhuǎn)換
?mangle表:用于修改數(shù)據(jù)包頭部信息
?raw表:用于配置連接跟蹤
2.1.2 鏈(Chains)
?INPUT:處理入站數(shù)據(jù)包
?OUTPUT:處理出站數(shù)據(jù)包
?FORWARD:處理轉(zhuǎn)發(fā)數(shù)據(jù)包
?PREROUTING:在路由決策前處理數(shù)據(jù)包
?POSTROUTING:在路由決策后處理數(shù)據(jù)包
2.1.3 目標(biāo)(Targets)
?ACCEPT:接受數(shù)據(jù)包
?DROP:丟棄數(shù)據(jù)包
?REJECT:拒絕數(shù)據(jù)包并返回錯(cuò)誤信息
?LOG:記錄日志
?MASQUERADE:IP偽裝
2.2 iptables基本語法
iptables [-t table] -[ADI] chain rule-specification iptables [-t table] -[FLZ] [chain] iptables [-t table] -N chain iptables [-t table] -X [chain] iptables [-t table] -P chain target
2.3 iptables常用命令
2.3.1 查看規(guī)則
# 查看所有規(guī)則 iptables -L -n -v # 查看特定表的規(guī)則 iptables -t nat -L -n -v # 查看規(guī)則編號(hào) iptables -L INPUT --line-numbers
2.3.2 添加規(guī)則
# 允許SSH連接 iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允許HTTP和HTTPS iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允許特定IP訪問 iptables -A INPUT -s 192.168.1.100 -j ACCEPT # 允許本地回環(huán) iptables -A INPUT -i lo -j ACCEPT # 允許已建立的連接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
2.3.3 刪除規(guī)則
# 刪除特定規(guī)則 iptables -D INPUT -p tcp --dport 80 -j ACCEPT # 按行號(hào)刪除 iptables -D INPUT 3 # 清空所有規(guī)則 iptables -F iptables -X iptables -Z
2.3.4 設(shè)置默認(rèn)策略
# 設(shè)置默認(rèn)拒絕策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT
2.4 iptables高級(jí)配置
2.4.1 端口范圍和多端口
# 端口范圍 iptables -A INPUT -p tcp --dport 3000:3010 -j ACCEPT # 多端口 iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT
2.4.2 時(shí)間限制
# 只在工作時(shí)間允許訪問 iptables -A INPUT -p tcp --dport 22 -mtime--timestart 09:00 --timestop 18:00 -j ACCEPT
2.4.3 連接限制
# 限制并發(fā)連接數(shù) iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT # 限制連接速率 iptables -A INPUT -p tcp --dport 22 -mlimit--limit5/min --limit-burst 10 -j ACCEPT
2.4.4 NAT配置
# SNAT(源地址轉(zhuǎn)換) iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE # DNAT(目標(biāo)地址轉(zhuǎn)換) iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
2.5 iptables規(guī)則持久化
2.5.1 CentOS/RHEL系統(tǒng)
# 保存規(guī)則 service iptables save # 或者手動(dòng)保存 iptables-save > /etc/sysconfig/iptables # 恢復(fù)規(guī)則 iptables-restore < /etc/sysconfig/iptables
2.5.2 Ubuntu/Debian系統(tǒng)
# 安裝iptables-persistent apt-get install iptables-persistent # 保存規(guī)則 netfilter-persistent save # 恢復(fù)規(guī)則 netfilter-persistent reload
3. firewalld詳解
3.1 firewalld基本概念
3.1.1 區(qū)域(Zones)
?drop:丟棄所有傳入連接
?block:拒絕所有傳入連接
?public:公共區(qū)域,默認(rèn)區(qū)域
?external:外部區(qū)域,用于NAT
?dmz:DMZ區(qū)域
?work:工作區(qū)域
?home:家庭區(qū)域
?internal:內(nèi)部區(qū)域
?trusted:信任區(qū)域,允許所有連接
3.1.2 服務(wù)(Services)
預(yù)定義的服務(wù)配置,包含端口、協(xié)議等信息。
3.1.3 富規(guī)則(Rich Rules)
提供更復(fù)雜的規(guī)則配置語法。
3.2 firewalld基本命令
3.2.1 服務(wù)管理
# 啟動(dòng)firewalld systemctl start firewalld # 停止firewalld systemctl stop firewalld # 重啟firewalld systemctl restart firewalld # 查看狀態(tài) systemctl status firewalld firewall-cmd --state
3.2.2 區(qū)域管理
# 查看默認(rèn)區(qū)域 firewall-cmd --get-default-zone # 設(shè)置默認(rèn)區(qū)域 firewall-cmd --set-default-zone=public # 查看活動(dòng)區(qū)域 firewall-cmd --get-active-zones # 查看所有區(qū)域 firewall-cmd --get-zones # 查看區(qū)域信息 firewall-cmd --zone=public --list-all
3.2.3 服務(wù)管理
# 查看可用服務(wù) firewall-cmd --get-services # 查看已開放的服務(wù) firewall-cmd --list-services # 添加服務(wù) firewall-cmd --add-service=http firewall-cmd --add-service=https # 刪除服務(wù) firewall-cmd --remove-service=http # 永久添加服務(wù) firewall-cmd --permanent --add-service=http
3.2.4 端口管理
# 添加端口 firewall-cmd --add-port=8080/tcp # 刪除端口 firewall-cmd --remove-port=8080/tcp # 查看開放端口 firewall-cmd --list-ports # 永久添加端口 firewall-cmd --permanent --add-port=8080/tcp
3.3 firewalld高級(jí)配置
3.3.1 自定義服務(wù)
# 創(chuàng)建自定義服務(wù)配置文件 cat> /etc/firewalld/services/myapp.xml <EOF # 重新加載配置 firewall-cmd --reload # 添加自定義服務(wù) firewall-cmd --add-service=myapp MyApp My Application Service
3.3.2 富規(guī)則配置
# 允許特定IP訪問特定端口 firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept' # 限制連接速率 firewall-cmd --add-rich-rule='rule service name="ssh" limit value="10/m" accept' # 阻止特定IP firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.200" drop' # 端口轉(zhuǎn)發(fā) firewall-cmd --add-rich-rule='rule family="ipv4" forward-port port="80" protocol="tcp" to-port="8080"'
3.3.3 接口綁定
# 將接口綁定到區(qū)域 firewall-cmd --zone=internal --add-interface=eth1 # 查看接口綁定 firewall-cmd --get-zone-of-interface=eth1 # 更改接口區(qū)域 firewall-cmd --zone=public --change-interface=eth1
3.3.4 IP偽裝和端口轉(zhuǎn)發(fā)
# 啟用IP偽裝 firewall-cmd --add-masquerade # 端口轉(zhuǎn)發(fā) firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 # 查看轉(zhuǎn)發(fā)規(guī)則 firewall-cmd --list-forward-ports
4. 實(shí)戰(zhàn)配置案例
4.1 Web服務(wù)器防火墻配置
4.1.1 iptables配置
#!/bin/bash # Web服務(wù)器防火墻配置腳本 # 清空現(xiàn)有規(guī)則 iptables -F iptables -X iptables -Z # 設(shè)置默認(rèn)策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 允許本地回環(huán) iptables -A INPUT -i lo -j ACCEPT # 允許已建立的連接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允許SSH(限制連接數(shù)) iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允許HTTP和HTTPS iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允許FTP iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT # 允許DNS iptables -A INPUT -p udp --dport 53 -j ACCEPT # 保存規(guī)則 service iptables save
4.1.2 firewalld配置
#!/bin/bash # Web服務(wù)器防火墻配置腳本 # 設(shè)置默認(rèn)區(qū)域 firewall-cmd --set-default-zone=public # 添加服務(wù) firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --permanent --add-service=ssh firewall-cmd --permanent --add-service=ftp # 限制SSH連接 firewall-cmd --permanent --add-rich-rule='rule service name="ssh" limit value="3/m" accept' # 重新加載配置 firewall-cmd --reload
4.2 數(shù)據(jù)庫服務(wù)器防火墻配置
4.2.1 iptables配置
#!/bin/bash # 數(shù)據(jù)庫服務(wù)器防火墻配置 # 清空現(xiàn)有規(guī)則 iptables -F iptables -X iptables -Z # 設(shè)置默認(rèn)策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 允許本地回環(huán) iptables -A INPUT -i lo -j ACCEPT # 允許已建立的連接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允許SSH(僅限管理網(wǎng)段) iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT # 允許MySQL(僅限應(yīng)用服務(wù)器) iptables -A INPUT -s 192.168.1.100 -p tcp --dport 3306 -j ACCEPT iptables -A INPUT -s 192.168.1.101 -p tcp --dport 3306 -j ACCEPT # 保存規(guī)則 service iptables save
4.2.2 firewalld配置
#!/bin/bash # 數(shù)據(jù)庫服務(wù)器防火墻配置 # 創(chuàng)建數(shù)據(jù)庫區(qū)域 firewall-cmd --permanent --new-zone=database # 設(shè)置默認(rèn)區(qū)域 firewall-cmd --set-default-zone=database # 添加SSH服務(wù)(限制源IP) firewall-cmd --permanent --zone=database --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' # 添加MySQL服務(wù)(限制源IP) firewall-cmd --permanent --zone=database --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="mysql" accept' firewall-cmd --permanent --zone=database --add-rich-rule='rule family="ipv4" source address="192.168.1.101" service name="mysql" accept' # 重新加載配置 firewall-cmd --reload
5. 故障排查和優(yōu)化
5.1 常見問題排查
5.1.1 規(guī)則不生效
# 檢查規(guī)則是否正確添加 iptables -L -n -v firewall-cmd --list-all # 檢查服務(wù)狀態(tài) systemctl status iptables systemctl status firewalld # 檢查日志 tail-f /var/log/messages journalctl -u firewalld -f
5.1.2 連接被拒絕
# 啟用日志記錄 iptables -A INPUT -j LOG --log-prefix"INPUT DROP: " # 查看日志 tail-f /var/log/messages # firewalld日志 firewall-cmd --set-log-denied=all
5.2 性能優(yōu)化
5.2.1 規(guī)則優(yōu)化
# 將常用規(guī)則放在前面 iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT # 使用狀態(tài)匹配減少規(guī)則數(shù)量 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 使用multiport匹配多個(gè)端口 iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT
5.2.2 監(jiān)控和統(tǒng)計(jì)
# 查看規(guī)則統(tǒng)計(jì) iptables -L -n -v --line-numbers # 重置計(jì)數(shù)器 iptables -Z # 實(shí)時(shí)監(jiān)控 watch -n 1'iptables -L -n -v'
6. 安全最佳實(shí)踐
6.1 基本安全原則
1.最小權(quán)限原則:只開放必要的端口和服務(wù)
2.白名單策略:默認(rèn)拒絕所有連接,只允許必要的連接
3.定期審計(jì):定期檢查和更新防火墻規(guī)則
4.日志監(jiān)控:?jiǎn)⒂萌罩居涗洸⒍ㄆ诜治?/p>
6.2 配置建議
# 設(shè)置合理的默認(rèn)策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 啟用連接跟蹤 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 限制連接速率 iptables -A INPUT -p tcp --dport 22 -mlimit--limit5/min --limit-burst 10 -j ACCEPT # 防止掃描 iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
6.3 備份和恢復(fù)
# 備份iptables規(guī)則 iptables-save > /root/iptables.backup.$(date+%Y%m%d) # 恢復(fù)iptables規(guī)則 iptables-restore < /root/iptables.backup.20231201 # 備份firewalld配置 cp?-r /etc/firewalld /root/firewalld.backup.$(date?+%Y%m%d)
7. 總結(jié)
iptables和firewalld都是Linux系統(tǒng)中強(qiáng)大的防火墻工具。iptables提供了更底層的控制能力,適合對(duì)防火墻規(guī)則有詳細(xì)要求的場(chǎng)景;firewalld則提供了更友好的管理界面和動(dòng)態(tài)配置能力,更適合日常運(yùn)維管理。
選擇使用哪種工具主要取決于具體的應(yīng)用場(chǎng)景和個(gè)人偏好。在實(shí)際部署中,建議根據(jù)系統(tǒng)的具體需求制定合適的防火墻策略,并定期進(jìn)行安全審計(jì)和規(guī)則優(yōu)化。
記住防火墻只是網(wǎng)絡(luò)安全的一個(gè)組成部分,還需要結(jié)合其他安全措施(如入侵檢測(cè)、日志監(jiān)控、定期更新等)來構(gòu)建完整的安全防護(hù)體系。
-
Linux
+關(guān)注
關(guān)注
88文章
11575瀏覽量
216584 -
防火墻
+關(guān)注
關(guān)注
0文章
441瀏覽量
36507 -
網(wǎng)絡(luò)安全
+關(guān)注
關(guān)注
11文章
3413瀏覽量
62440
原文標(biāo)題:Linux防火墻終極對(duì)決:iptables與firewalld完整配置教程
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Linux系統(tǒng)iptables和firewall防火墻的配置方法

Linux中使用Iptables實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)站防火墻

Linux系統(tǒng)firewalld防火墻實(shí)戰(zhàn)指南

Linux內(nèi)核防火墻netfilter的原理和應(yīng)用
Linux防火墻的配置方法(firewalld服務(wù))
Linux下關(guān)閉防火墻的關(guān)閉及開放端口
Linux如何關(guān)閉防火墻
請(qǐng)問如何自動(dòng)加載iptables的防火墻規(guī)則?
基于Linux防火墻的可視化管理系統(tǒng)的研究與實(shí)現(xiàn)
Linux新型內(nèi)核防火墻研究和應(yīng)用
Linux防火墻配置(iptables和firewalld)
請(qǐng)問Centos7如何配置firewalld防火墻規(guī)則?

Linux軟件防火墻iptables詳解

如何在CentOS系統(tǒng)中配置防火墻

評(píng)論