Linux上新用的防火墻軟件炉爆,跟iptables差不多的工具
補(bǔ)充說(shuō)明
firewall-cmd 是 firewalld的字符界面管理工具梆造,firewalld是centos7的一大特性待德,最大的好處有兩個(gè):支持動(dòng)態(tài)更新丁眼,不用重啟服務(wù)锨亏;第二個(gè)就是加入了防火墻的“zone”概念炕泳。
firewalld跟iptables比起來(lái)至少有兩大好處:
firewalld可以動(dòng)態(tài)修改單條規(guī)則纵诞,而不需要像iptables那樣,在修改了規(guī)則后必須得全部刷新才可以生效培遵。
firewalld在使用上要比iptables人性化很多浙芙,即使不明白“五張表五條鏈”而且對(duì)TCP/ip協(xié)議也不理解也可以實(shí)現(xiàn)大部分功能。
firewalld自身并不具備防火墻的功能籽腕,而是和iptables一樣需要通過(guò)內(nèi)核的netfilter來(lái)實(shí)現(xiàn)嗡呼,也就是說(shuō)firewalld和 iptables一樣,他們的作用都是用于維護(hù)規(guī)則皇耗,而真正使用規(guī)則干活的是內(nèi)核的netfilter南窗,只不過(guò)firewalld和iptables的結(jié) 構(gòu)以及使用方法不一樣罷了。
命令格式
firewall-cmd [選項(xiàng) ... ]
選項(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è)荐操;
實(shí)例
# 安裝firewalld
yum install firewalld firewall-config
systemctl start? firewalld # 啟動(dòng)
systemctl status firewalld # 或者 firewall-cmd --state 查看狀態(tài)
systemctl disable firewalld # 停止
systemctl stop firewalld? # 禁用
# 關(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è)無(wú)需斷開(kāi)連接托启,就是firewalld特性之一動(dòng)態(tài)添加規(guī)則宅倒,第二個(gè)需要斷開(kāi)連接,類似重啟服務(wù)
# 將接口添加到區(qū)域屯耸,默認(rèn)接口都在public
firewall-cmd --zone=public --add-interface=eth0
# 永久生效再加上 --permanent 然后reload防火墻# 設(shè)置默認(rèn)接口區(qū)域拐迁,立即生效無(wú)需重啟
firewall-cmd --set-default-zone=public# 查看所有打開(kāi)的端口:
firewall-cmd --zone=dmz --list-ports# 加入一個(gè)端口到區(qū)域:
firewall-cmd --zone=dmz --add-port=8080/tcp# 若要永久生效方法同上
# 打開(kāi)一個(gè)服務(wù)蹭劈,類似于將端口可視化,服務(wù)需要在配置文件中添加线召,/etc/firewalld 目錄下有services文件夾铺韧,這個(gè)不詳細(xì)說(shuō)了,詳情參考文檔
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ù)通過(guò)
firewall-cmd --enable service=ssh# 禁止SSH服務(wù)通過(guò)
firewall-cmd --disable service=ssh# 打開(kāi)TCP的8080端口
firewall-cmd --enable ports=8080/tcp# 臨時(shí)允許Samba服務(wù)通過(guò)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)的條件下重新加載防火墻
端口管理
# 打開(kāi)443/TCP端口
firewall-cmd --add-port=443/tcp# 永久打開(kāi)3690/TCP端口
firewall-cmd --permanent --add-port=3690/tcp# 永久打開(kāi)端口好像需要reload一下哈打,臨時(shí)打開(kāi)好像不用,如果用了reload臨時(shí)打開(kāi)的端口就失效了
# 其它服務(wù)也可能是這樣的讯壶,這個(gè)沒(méi)有測(cè)試
firewall-cmd --reload# 查看防火墻料仗,添加的端口也可以看到
firewall-cmd --list-all
控制端口 / 服務(wù)
可以通過(guò)兩種方式控制端口的開(kāi)放,一種是指定端口號(hào)另一種是指定服務(wù)名伏蚊。雖然開(kāi)放 http 服務(wù)就是開(kāi)放了 80 端口立轧,但是還是不能通過(guò)端口號(hào)來(lái)關(guān)閉,也就是說(shuō)通過(guò)指定服務(wù)名開(kāi)放的就要通過(guò)指定服務(wù)名關(guān)閉躏吊;通過(guò)指定端口號(hào)開(kāi)放的就要通過(guò)指定端口號(hào)關(guān)閉氛改。還有一個(gè)要注意的就是指定端口的時(shí)候一定要指定是什么協(xié)議,tcp 還是 udp颜阐。知道這個(gè)之后以后就不用每次先關(guān)防火墻了平窘,可以讓防火墻真正的生效。
firewall-cmd --add-service=mysql # 開(kāi)放mysql端口
firewall-cmd --remove-service=http? ? ? # 阻止http端口
firewall-cmd --list-services? ? ? ? ? ? # 查看開(kāi)放的服務(wù)
firewall-cmd --add-port=3306/tcp? ? ? ? # 開(kāi)放通過(guò)tcp訪問(wèn)3306
firewall-cmd --remove-port=80tcp? ? ? ? # 阻止通過(guò)tcp訪問(wèn)3306
firewall-cmd --add-port=233/udp? ? ? ? # 開(kāi)放通過(guò)udp訪問(wèn)233
firewall-cmd --list-ports? ? ? ? ? ? ? # 查看開(kāi)放的端口
端口轉(zhuǎn)發(fā)
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端口