W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Linux上新用的防火墻軟件,跟iptables差不多的工具
firewall-cmd 是 firewalld的字符界面管理工具,firewalld是centos7的一大特性,最大的好處有兩個(gè):支持動(dòng)態(tài)更新,不用重啟服務(wù);第二個(gè)就是加入了防火墻的“zone”概念。
firewalld跟iptables比起來至少有兩大好處:
firewalld自身并不具備防火墻的功能,而是和iptables一樣需要通過內(nèi)核的netfilter來實(shí)現(xiàn),也就是說firewalld和 iptables一樣,他們的作用都是用于維護(hù)規(guī)則,而真正使用規(guī)則干活的是內(nèi)核的netfilter,只不過firewalld和iptables的結(jié) 構(gòu)以及使用方法不一樣罷了。
命令格式
firewall-cmd [選項(xiàng) ... ]
通用選項(xiàng)
-h, --help # 顯示幫助信息;
-V, --version # 顯示版本信息. (這個(gè)選項(xiàng)不能與其他選項(xiàng)組合);
-q, --quiet # 不打印狀態(tài)消息;
狀態(tài)選項(xiàng)
--state # 顯示firewalld的狀態(tài);
--reload # 不中斷服務(wù)的重新加載;
--complete-reload # 中斷所有連接的重新加載;
--runtime-to-permanent # 將當(dāng)前防火墻的規(guī)則永久保存;
--check-config # 檢查配置正確性;
日志選項(xiàng)
--get-log-denied # 獲取記錄被拒絕的日志;
--set-log-denied=<value> # 設(shè)置記錄被拒絕的日志,只能為 'all','unicast','broadcast','multicast','off' 其中的一個(gè);
# 安裝firewalld
yum install firewalld firewall-config
systemctl start firewalld # 啟動(dòng)
systemctl stop firewalld # 停止
systemctl enable firewalld # 啟用自動(dòng)啟動(dòng)
systemctl disable firewalld # 禁用自動(dòng)啟動(dòng)
systemctl status firewalld # 或者 firewall-cmd --state 查看狀態(tài)
# 關(guān)閉服務(wù)的方法
# 你也可以關(guān)閉目前還不熟悉的FirewallD防火墻,而使用iptables,命令如下:
systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services
systemctl start iptables
systemctl enable iptables
配置firewalld
firewall-cmd --version # 查看版本
firewall-cmd --help # 查看幫助
# 查看設(shè)置:
firewall-cmd --state # 顯示狀態(tài)
firewall-cmd --get-active-zones # 查看區(qū)域信息
firewall-cmd --get-zone-of-interface=eth0 # 查看指定接口所屬區(qū)域
firewall-cmd --panic-on # 拒絕所有包
firewall-cmd --panic-off # 取消拒絕狀態(tài)
firewall-cmd --query-panic # 查看是否拒絕
firewall-cmd --reload # 更新防火墻規(guī)則
firewall-cmd --complete-reload
# 兩者的區(qū)別就是第一個(gè)無需斷開連接,就是firewalld特性之一動(dòng)態(tài)添加規(guī)則,第二個(gè)需要斷開連接,類似重啟服務(wù)
# 將接口添加到區(qū)域,默認(rèn)接口都在public
firewall-cmd --zone=public --add-interface=eth0
# 永久生效再加上 --permanent 然后reload防火墻
# 設(shè)置默認(rèn)接口區(qū)域,立即生效無需重啟
firewall-cmd --set-default-zone=public
# 查看所有打開的端口:
firewall-cmd --zone=dmz --list-ports
# 加入一個(gè)端口到區(qū)域:
firewall-cmd --zone=dmz --add-port=8080/tcp
# 若要永久生效方法同上
# 打開一個(gè)服務(wù),類似于將端口可視化,服務(wù)需要在配置文件中添加,/etc/firewalld 目錄下有services文件夾,這個(gè)不詳細(xì)說了,詳情參考文檔
firewall-cmd --zone=work --add-service=smtp
# 移除服務(wù)
firewall-cmd --zone=work --remove-service=smtp
# 顯示支持的區(qū)域列表
firewall-cmd --get-zones
# 設(shè)置為家庭區(qū)域
firewall-cmd --set-default-zone=home
# 查看當(dāng)前區(qū)域
firewall-cmd --get-active-zones
# 設(shè)置當(dāng)前區(qū)域的接口
firewall-cmd --get-zone-of-interface=enp03s
# 顯示所有公共區(qū)域(public)
firewall-cmd --zone=public --list-all
# 臨時(shí)修改網(wǎng)絡(luò)接口(enp0s3)為內(nèi)部區(qū)域(internal)
firewall-cmd --zone=internal --change-interface=enp03s
# 永久修改網(wǎng)絡(luò)接口enp03s為內(nèi)部區(qū)域(internal)
firewall-cmd --permanent --zone=internal --change-interface=enp03s
服務(wù)管理
# 顯示服務(wù)列表
Amanda, FTP, Samba和TFTP等最重要的服務(wù)已經(jīng)被FirewallD提供相應(yīng)的服務(wù),可以使用如下命令查看:
firewall-cmd --get-services
# 允許SSH服務(wù)通過
firewall-cmd --new-service=ssh
# 禁止SSH服務(wù)通過
firewall-cmd --delete-service=ssh
# 打開TCP的8080端口
firewall-cmd --enable ports=8080/tcp
# 臨時(shí)允許Samba服務(wù)通過600秒
firewall-cmd --enable service=samba --timeout=600
# 顯示當(dāng)前服務(wù)
firewall-cmd --list-services
# 添加HTTP服務(wù)到內(nèi)部區(qū)域(internal)
firewall-cmd --permanent --zone=internal --add-service=http
firewall-cmd --reload # 在不改變狀態(tài)的條件下重新加載防火墻
端口管理
# 打開443/TCP端口
firewall-cmd --add-port=443/tcp
# 永久打開3690/TCP端口
firewall-cmd --permanent --add-port=3690/tcp
# 永久打開端口好像需要reload一下,臨時(shí)打開好像不用,如果用了reload臨時(shí)打開的端口就失效了
# 其它服務(wù)也可能是這樣的,這個(gè)沒有測試
firewall-cmd --reload
# 查看防火墻,添加的端口也可以看到
firewall-cmd --list-all
直接模式
# FirewallD包括一種直接模式,使用它可以完成一些工作,例如打開TCP協(xié)議的9999端口
firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT
firewall-cmd --reload
自定義服務(wù)管理
選項(xiàng)
(末尾帶有 [P only] 的話表示該選項(xiàng)除了與(--permanent)之外,不能與其他選項(xiàng)一同使用!)
--new-service=<服務(wù)名> 新建一個(gè)自定義服務(wù) [P only]
--new-service-from-file=<文件名> [--name=<服務(wù)名>]
從文件中讀取配置用以新建一個(gè)自定義服務(wù) [P only]
--delete-service=<服務(wù)名>
刪除一個(gè)已存在的服務(wù) [P only]
--load-service-defaults=<服務(wù)名>
Load icmptype default settings [P only]
--info-service=<服務(wù)名>
顯示該服務(wù)的相關(guān)信息
--path-service=<服務(wù)名>
顯示該服務(wù)的文件的相關(guān)路徑 [P only]
--service=<服務(wù)名> --set-description=<描述>
給該服務(wù)設(shè)置描述信息 [P only]
--service=<服務(wù)名> --get-description
顯示該服務(wù)的描述信息 [P only]
--service=<服務(wù)名> --set-short=<描述>
給該服務(wù)設(shè)置一個(gè)簡短的描述 [P only]
--service=<服務(wù)名> --get-short
顯示該服務(wù)的簡短描述 [P only]
--service=<服務(wù)名> --add-port=<端口號(hào)>[-<端口號(hào)>]/<protocol>
給該服務(wù)添加一個(gè)新的端口(端口段) [P only]
--service=<服務(wù)名> --remove-port=<端口號(hào)>[-<端口號(hào)>]/<protocol>
從該服務(wù)上移除一個(gè)端口(端口段) [P only]
--service=<服務(wù)名> --query-port=<端口號(hào)>[-<端口號(hào)>]/<protocol>
查詢該服務(wù)是否添加了某個(gè)端口(端口段) [P only]
--service=<服務(wù)名> --get-ports
顯示該服務(wù)添加的所有端口 [P only]
--service=<服務(wù)名> --add-protocol=<protocol>
為該服務(wù)添加一個(gè)協(xié)議 [P only]
--service=<服務(wù)名> --remove-protocol=<protocol>
從該服務(wù)上移除一個(gè)協(xié)議 [P only]
--service=<服務(wù)名> --query-protocol=<protocol>
查詢該服務(wù)是否添加了某個(gè)協(xié)議 [P only]
--service=<服務(wù)名> --get-protocols
顯示該服務(wù)添加的所有協(xié)議 [P only]
--service=<服務(wù)名> --add-source-port=<端口號(hào)>[-<端口號(hào)>]/<protocol>
添加新的源端口(端口段)到該服務(wù) [P only]
--service=<服務(wù)名> --remove-source-port=<端口號(hào)>[-<端口號(hào)>]/<protocol>
從該服務(wù)中刪除源端口(端口段) [P only]
--service=<服務(wù)名> --query-source-port=<端口號(hào)>[-<端口號(hào)>]/<protocol>
查詢該服務(wù)是否添加了某個(gè)源端口(端口段) [P only]
--service=<服務(wù)名> --get-source-ports
顯示該服務(wù)所有源端口 [P only]
--service=<服務(wù)名> --add-module=<module>
為該服務(wù)添加一個(gè)模塊 [P only]
--service=<服務(wù)名> --remove-module=<module>
為該服務(wù)移除一個(gè)模塊 [P only]
--service=<服務(wù)名> --query-module=<module>
查詢該服務(wù)是否添加了某個(gè)模塊 [P only]
--service=<服務(wù)名> --get-modules
顯示該服務(wù)添加的所有模塊 [P only]
--service=<服務(wù)名> --set-destination=<ipv>:<address>[/<mask>]
Set destination for ipv to address in service [P only]
--service=<服務(wù)名> --remove-destination=<ipv>
Disable destination for ipv i service [P only]
--service=<服務(wù)名> --query-destination=<ipv>:<address>[/<mask>]
Return whether destination ipv is set for service [P only]
--service=<服務(wù)名> --get-destinations
List destinations in service [P only]
控制端口 / 服務(wù)
可以通過兩種方式控制端口的開放,一種是指定端口號(hào)另一種是指定服務(wù)名。雖然開放 http 服務(wù)就是開放了 80 端口,但是還是不能通過端口號(hào)來關(guān)閉,也就是說通過指定服務(wù)名開放的就要通過指定服務(wù)名關(guān)閉;通過指定端口號(hào)開放的就要通過指定端口號(hào)關(guān)閉。還有一個(gè)要注意的就是指定端口的時(shí)候一定要指定是什么協(xié)議,tcp 還是 udp。知道這個(gè)之后以后就不用每次先關(guān)防火墻了,可以讓防火墻真正的生效。
firewall-cmd --add-service=mysql # 開放mysql端口
firewall-cmd --remove-service=http # 阻止http端口
firewall-cmd --list-services # 查看開放的服務(wù)
firewall-cmd --add-port=3306/tcp # 開放通過tcp訪問3306
firewall-cmd --remove-port=80tcp # 阻止通過tcp訪問3306
firewall-cmd --add-port=233/udp # 開放通過udp訪問233
firewall-cmd --list-ports # 查看開放的端口
偽裝 IP
firewall-cmd --query-masquerade # 檢查是否允許偽裝IP
firewall-cmd --add-masquerade # 允許防火墻偽裝IP
firewall-cmd --remove-masquerade# 禁止防火墻偽裝IP
端口轉(zhuǎn)發(fā)
端口轉(zhuǎn)發(fā)可以將指定地址訪問指定的端口時(shí),將流量轉(zhuǎn)發(fā)至指定地址的指定端口。轉(zhuǎn)發(fā)的目的如果不指定 ip 的話就默認(rèn)為本機(jī),如果指定了 ip 卻沒指定端口,則默認(rèn)使用來源端口。 如果配置好端口轉(zhuǎn)發(fā)之后不能用,可以檢查下面兩個(gè)問題:
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 將80端口的流量轉(zhuǎn)發(fā)至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1 # 將80端口的流量轉(zhuǎn)發(fā)至192.168.0.1
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 將80端口的流量轉(zhuǎn)發(fā)至192.168.0.1的8080端口
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: