在Linux系統(tǒng)中,防火墻是保障系統(tǒng)安全的重要工具,它可以控制網(wǎng)絡(luò)流量的進(jìn)出,防止未經(jīng)授權(quán)的訪問。通過命令行配置防火墻規(guī)則能夠讓我們更加靈活地定制安全策略。本文將詳細(xì)介紹如何在Linux中通過命令行配置防火墻規(guī)則,涵蓋常見的防火墻工具如iptables和firewalld。
一、iptables防火墻規(guī)則配置
iptables是Linux系統(tǒng)中經(jīng)典的防火墻工具,它基于內(nèi)核的netfilter框架,通過規(guī)則鏈來管理網(wǎng)絡(luò)數(shù)據(jù)包的過濾和轉(zhuǎn)發(fā)。
1. 基本概念
iptables有多個(gè)規(guī)則鏈,常見的有INPUT(處理進(jìn)入本機(jī)的數(shù)據(jù)包)、OUTPUT(處理從本機(jī)發(fā)出的數(shù)據(jù)包)和FORWARD(處理轉(zhuǎn)發(fā)的數(shù)據(jù)包)。規(guī)則由匹配條件和動(dòng)作組成,匹配條件用于篩選符合特定條件的數(shù)據(jù)包,動(dòng)作則決定對這些數(shù)據(jù)包的處理方式,如ACCEPT(接受)、DROP(丟棄)、REJECT(拒絕)等。
2. 查看當(dāng)前規(guī)則
在配置規(guī)則之前,我們可以先查看當(dāng)前的iptables規(guī)則。使用以下命令:
iptables -L -n -v
其中,-L表示列出當(dāng)前的規(guī)則,-n表示以數(shù)字形式顯示IP地址和端口號,-v表示顯示詳細(xì)信息。
3. 清空規(guī)則
如果需要重新配置規(guī)則,可以先清空現(xiàn)有的規(guī)則。使用以下命令:
iptables -F
該命令會清空所有規(guī)則鏈中的規(guī)則。
4. 設(shè)置默認(rèn)策略
在清空規(guī)則后,需要設(shè)置默認(rèn)策略。一般來說,我們會將INPUT鏈的默認(rèn)策略設(shè)置為DROP,以拒絕所有未經(jīng)允許的進(jìn)入數(shù)據(jù)包,將OUTPUT鏈的默認(rèn)策略設(shè)置為ACCEPT,允許本機(jī)發(fā)出的數(shù)據(jù)包正常通過。使用以下命令:
iptables -P INPUT DROP iptables -P OUTPUT ACCEPT
5. 添加允許規(guī)則
接下來,我們可以添加允許特定服務(wù)的規(guī)則。例如,允許SSH服務(wù)(默認(rèn)端口22)的數(shù)據(jù)包進(jìn)入:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
其中,-A表示將規(guī)則添加到指定鏈的末尾,-p表示指定協(xié)議,--dport表示指定目標(biāo)端口,-j表示指定動(dòng)作。
如果要允許HTTP服務(wù)(默認(rèn)端口80)和HTTPS服務(wù)(默認(rèn)端口443),可以使用以下命令:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
6. 保存規(guī)則
在配置完規(guī)則后,需要保存規(guī)則,否則重啟系統(tǒng)后規(guī)則會丟失。不同的Linux發(fā)行版保存規(guī)則的方法可能不同。在CentOS系統(tǒng)中,可以使用以下命令保存規(guī)則:
service iptables save
在Debian或Ubuntu系統(tǒng)中,可以使用以下命令保存規(guī)則:
iptables-save > /etc/iptables.rules
并在系統(tǒng)啟動(dòng)時(shí)加載規(guī)則:
iptables-restore < /etc/iptables.rules
二、firewalld防火墻規(guī)則配置
firewalld是CentOS7及以上版本默認(rèn)的防火墻管理工具,它提供了更高級的配置接口和動(dòng)態(tài)更新規(guī)則的功能。
1. 基本概念
firewalld使用區(qū)域(zone)和服務(wù)(service)的概念來管理規(guī)則。區(qū)域定義了不同的信任級別,如public(公共區(qū)域,對網(wǎng)絡(luò)連接的信任度較低)、trusted(信任區(qū)域,對網(wǎng)絡(luò)連接的信任度較高)等。服務(wù)是一組預(yù)定義的端口和協(xié)議組合,如ssh、http、https等。
2. 查看當(dāng)前狀態(tài)
使用以下命令查看firewalld的當(dāng)前狀態(tài):
systemctl status firewalld
如果firewalld未啟動(dòng),可以使用以下命令啟動(dòng):
systemctl start firewalld
如果需要在系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟動(dòng)firewalld,可以使用以下命令:
systemctl enable firewalld
3. 查看區(qū)域信息
使用以下命令查看當(dāng)前使用的區(qū)域:
firewall-cmd --get-active-zones
使用以下命令查看所有區(qū)域的信息:
firewall-cmd --list-all-zones
4. 添加服務(wù)到區(qū)域
如果要允許某個(gè)服務(wù)通過防火墻,可以將該服務(wù)添加到相應(yīng)的區(qū)域。例如,將SSH服務(wù)添加到public區(qū)域:
firewall-cmd --zone=public --add-service=ssh --permanent
其中,--zone指定區(qū)域,--add-service指定要添加的服務(wù),--permanent表示永久生效。添加完服務(wù)后,需要重新加載防火墻規(guī)則:
firewall-cmd --reload
5. 添加端口到區(qū)域
如果要允許某個(gè)特定的端口通過防火墻,可以將該端口添加到相應(yīng)的區(qū)域。例如,允許TCP端口8080通過public區(qū)域:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
同樣,添加完端口后需要重新加載防火墻規(guī)則。
6. 刪除規(guī)則
如果要?jiǎng)h除之前添加的規(guī)則,可以使用相應(yīng)的刪除命令。例如,刪除之前添加的SSH服務(wù):
firewall-cmd --zone=public --remove-service=ssh --permanent
刪除之前添加的TCP端口8080:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
刪除規(guī)則后,同樣需要重新加載防火墻規(guī)則。
三、高級防火墻規(guī)則配置
除了基本的規(guī)則配置,我們還可以進(jìn)行一些高級的防火墻規(guī)則配置。
1. 基于IP地址的過濾
在iptables中,可以根據(jù)源IP地址或目標(biāo)IP地址進(jìn)行過濾。例如,允許特定IP地址的數(shù)據(jù)包進(jìn)入:
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
其中,-s表示指定源IP地址。
在firewalld中,可以使用rich rules來實(shí)現(xiàn)基于IP地址的過濾。例如,允許特定IP地址的SSH服務(wù):
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" service name="ssh" accept' --permanent
2. 端口轉(zhuǎn)發(fā)
在某些情況下,我們需要將一個(gè)端口的流量轉(zhuǎn)發(fā)到另一個(gè)端口。在iptables中,可以使用以下命令實(shí)現(xiàn)端口轉(zhuǎn)發(fā):
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
該命令將所有目標(biāo)端口為80的TCP流量轉(zhuǎn)發(fā)到端口8080。
在firewalld中,可以使用以下命令實(shí)現(xiàn)端口轉(zhuǎn)發(fā):
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
3. 限制連接速率
為了防止惡意的連接請求,我們可以限制某個(gè)IP地址的連接速率。在iptables中,可以使用以下命令限制每個(gè)IP地址每秒最多發(fā)起3個(gè)連接:
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT
四、總結(jié)
通過命令行配置Linux防火墻規(guī)則可以讓我們更加靈活地定制網(wǎng)絡(luò)安全策略。iptables是經(jīng)典的防火墻工具,適合對規(guī)則有更精細(xì)控制的場景;firewalld是較新的防火墻管理工具,提供了更高級的配置接口和動(dòng)態(tài)更新規(guī)則的功能。在實(shí)際應(yīng)用中,我們可以根據(jù)具體需求選擇合適的防火墻工具,并結(jié)合基本和高級規(guī)則配置方法,保障系統(tǒng)的網(wǎng)絡(luò)安全。