若生產中使用有docker,建議不要使用firewalld,改用iptables,用firewalld坑不少,暫時還未找到解決辦法,在此作下記錄:docker
說明:若加參數permanent爲永久添加即添加至zone配置中,reload生效,重啓firewalld也會生效,若不加 --permanent,重啓後再也不生效)服務器
docker和firewalld共存時,使用命令添加開放端口規則,且加 --permanent參數網絡
firewall-cmd --add-port=80/tcp --permanent 添加規則後,80端口被外部正常訪問,ssh
而後使用firewall-cmd --remove-port=80/tcp --permanent 永久移除規則,按正常狀況80端口將不能被外部網絡訪問,tcp
但實際確依然能被外部訪問,並且此後防火牆像是被關閉了同樣,全部服務端口都能被外部訪問到。但查看配置中已經沒有開放80端口的測試
規則,firewalld也是runing狀態,此後從新開一臺測試機,不安裝docker進行測試,firewalld再也不出現以上問題。spa
一、啓動firewalld3d
systemctl start firewalld調試
systemctl enable firewalld #加入到開機啓動blog
二、查看狀態
systemctl status firewalld
或
firewall-cmd --state
三、關閉firewalld
systemctl stop firewalld
service說明:
在 /usr/lib/firewalld/services/ 目錄中,還保存了另一類配置文件,每一個文件對應一項具體的網絡服務,如 ssh 服務等.
與之對應的配置文件中記錄了各項服務所使用的 tcp/udp 端口,在最新版本的 firewalld 中默認已經定義了 70+ 種服務供咱們使用.
當默認提供的服務不夠用或者須要自定義某項服務的端口時,咱們須要將 service 配置文件放置在 /etc/firewalld/services/ 目錄中.
service 配置的好處顯而易見:
第一,經過服務名字來管理規則更加人性化,
第二,經過服務來組織端口分組的模式更加高效,若是一個服務使用了若干個網絡端口,則服務的配置文件就至關於提供了到這些端口的規則管理的批量操做快捷方式。
每加載一項 service 配置就意味着開放了對應的端口訪問
四、查看系統自帶默認有那些service能夠進行配置
firewall-cmd --get-services
五、查看當前已經開放的service和port
firewall-cmd --list-services
firewall-cmd --zone=public --list-services # 指定區域進行查看
firewall-cmd --list-ports
firewall-cmd --zone=public --list-ports # 指定區域進行查看
六、查看全部已開放的service和port等
firewall-cmd --list-all # 查看默認區域的
firewall-cmd --zone=public --list-all # 只查看指定pubilc區域的
firewall-cmd --list-all-zones # 查看全部區域的
七、查詢單個服務的啓用狀態[返回值yes/no]
firewall-cmd --query-service http
八、動態添加一條防火牆規則至默認區域(public),好比開放服務或端口(此方法能夠當即生效,但重啓firewalld服務或reload後將再也不生效,由於沒有保存在配置文件中)
firewall-cmd --add-service=ftp
firewall-cmd --add-port=2326/tcp
firewall-cmd --zone=public --add-port=4990-4999/udp #添加4990-4999 udp端口 ,並指定區域
九、動態添加規則後若想保存至zone配置中須要添加參數 --permanent(reload才生效)
firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-port=12222/tcp --permanent
firewall-cmd --zone=public --add-port=4990-4999/udp --permanent #添加4990-4999 udp端口 ,並指定區域
firewall-cmd --reload #配置生效
十、動態移除規則,但須要重載防火牆纔可生效
firewall-cmd --remove-service=http #移除直接生效
firewall-cmd --remove-port=2327/tcp --permanent #永久移除、刪除,需reload才生效
firewall-cmd --reload
十一、重載防火牆規則
一般手動修改zone配置進行規則添加後,須要進行重載生效,以 root 身份輸入如下命令,從新加載防火牆,並不中斷用戶鏈接,即不丟失狀態信息
firewall-cmd --reload
注意:一般在防火牆出現嚴重問題時,這個命令纔會被使用。好比,防火牆規則是正確的,但卻出現狀態信息問題和沒法創建鏈接。
firewall-cmd --complete-reload
十二、‘將同一臺服務器上80端口的流量轉發至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
1三、若是要將端口轉發到另一臺服務器上
1)在須要的區域中激活 masquerade
firewall-cmd --zone=public --add-masquerade
2)添加轉發規則
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.0.10.15
1四、防火牆假裝IP
firewall-cmd --query-masquerade # 檢查是否容許假裝IP
firewall-cmd --add-masquerade # 容許防火牆假裝IP
firewall-cmd --remove-masquerade# 禁止防火牆假裝IP
危險命令:[當即生效]
若是是遠程的機器執行上面的規則會馬上斷開網絡鏈接,必須緊記不能隨便執行。若是你只是虛擬機或者物理機器登錄就能夠執行來調試。
拒絕全部包:firewall-cmd --panic-on
取消拒絕狀態: firewall-cmd --panic-off
查看是否拒絕: firewall-cmd --query-panic
***************************************************************************************************************
拒絕訪問操做:
#添加禁止響應ping
firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
#查看是否有此規則[等號後面跟詳細的名稱]
firewall-cmd --query-rich-rule='rule protocol value='icmp' drop'
#刪除方法
firewall-cmd --remove-rich-rule='rule protocol value=icmp drop'
firewall-cmd --add-rich-rule "rule family=ipv4 source address=10.0.10.1 service name='ssh' reject"
或直接丟棄
firewall-cmd --add-rich-rule "rule family=ipv4 source address=10.0.10.1 service name='ssh' reject"
或對端口進行操做
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.10.1 port port=22 protocol=tcp reject'
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.10.1" accept'
#容許一個IP(10.0.10.1)僅能經過指定端口(8080-8090)訪問到目標(10.0.10.13):
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.10.1" destination address="10.0.10.13/32" port port="8080-8090" protocol="tcp" accept'
firewall-cmd --remove-rich-rule='rule family="ipv4" source address="10.0.10.1" destination address="10.0.10.13/32" port port="80" protocol="tcp" accept'