在基於RHEL7的服務器,提供了一個firewall的動態管理的防火牆,其支持IPv4和IPv6,還支持以太網橋,並有分離運行時間和永久性配置選擇。它還具有一個通向服務或者應用程序以直接增長防火牆規則的接口。shell
firewall的配置文件:/etc/lib/firewalld/
和/etc/firewalld/
下的XML文件。配置firewall能夠直接編輯配置文件,也可使用firewall-cmd命令行工具。服務器
firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --get-zone-of-interface=ens33
firewall-cmd --zone=public --list-interfaces
firewall-cmd --zone=public --list-all firewall-cmd --list-all
# 關閉全部輸入輸出的數據包 firewall-cmd --panic-on # 開啓再次輸入輸出的數據包 firewall-cmd --panic-off # 查看panic模式的狀態(yes啓用 no退出) firewall-cmd --query-panic
# 從新加載防火牆,不中斷用戶鏈接(不丟失狀態信息) firewall-cmd --reload # 從新加載防火牆並中斷用戶鏈接(丟失狀態信息),防火牆出現嚴重問題才執行 firewall-cmd --complete-reload
# 把em1增長到公共分區,增長--permanent選擇並從新加載防火牆,是之永久生效 firewall-cmd --zone=public --add-interface=em1
# 設置默認分區,當即生效,不須要從新加載防火牆 firewall-cmd --set-default-zone=public # 將一個端口加入分區 firewall-cmd --zone=public --permanent --add-port=8080/tcp firewall-cmd --reload # 查看開發的端口 firewall-cmd --zone=public --list-ports # 刪除 firewll-cmd --zone=pubic --remove --remove-port=8080/tcp
# 加入 firewall-cmd --permanent --zone=work --add-service=http firewall-cmd --reload # 移除 firewall-cmd --permanent --zone=work --remove-service=http firewall-cmd --reload # 注意,這並不會中斷已經創建的鏈接。若是您打算中斷,您可使用 --complete-reload 選項,但這不單單中斷您已經移除的服務,還會中斷全部已經創建的鏈接。
# 查詢是否可用 firewall-cmd --zone=external --query-masquerade # 容許假裝IP firewall-cmd --zone=external --add-masquerade # 禁用假裝IP firewall-cmd --zone=external --remove-masquerade
# 將22端口轉發到3753端口,使用tcp協議 firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3753 # 本來發往22端口的程序包如今被轉發到地址是192.0.2.55下相同的端口 firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.0.2.55 # 將22端口的數據包轉發到192.0.2.55下的2055端口 firewall-cmd --zone=external / --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.0.2.55
# 增長一個自定義規則到 「IN_public_allow」 鏈裏: firewall-cmd --direct --add-rule ipv4 filter IN_public_allow \ 0 -m tcp -p tcp --dport 666 -j ACCEPT # 從 「IN_public_allow」 鏈移除一個自定義規則: firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow \ 0 -m tcp -p tcp --dport 666 -j ACCEPT # 列出 「IN_public_allow」 鏈中的規則: firewall-cmd --direct --get-rules ipv4 filter IN_public_allow
# 添加 firewall-cmd [--zone=zone] --add-rich-rule='rule' [--timeout 9=seconds] # 移除 firewall-cmd [--zone=zone] --remove-rich-rule='rule' # 檢查是否存在 firewall-cmd [--zone=zone] --query-rich-rule='rule'
多規則結構: ```shell rule [family="<rule family>"] [ source address="<address>" [invert="True"] ] [ destination address="<address>" [invert="True"] ] [ <element> ] [ log [prefix="<prefix text>"] [level="<log level>"] [limit value="rate/duration"] ] [ audit ] [ accept|reject|drop ]
多規則命令:tcp
source:指定源地址,不支持使用主機名。能夠經過增長 invert="true" 或 invert="yes" 來顛倒源地址命令的意思。全部提供的地址都匹配。 destination:經過制定目的地址,目標能夠被限制在目的地址中。 service:服務名稱是 firewalld 提供的其中一種服務。能夠經過 firewall-cmd --get-services查看。格式: service name=service_name port: 端口,可爲範圍或者獨立數字 格式:port port=number_or_range protocol=protocol protocol:協議 icmp-block:用這個命令阻絕一個或多個 ICMP 類型,查看支持的icmp類型列表:firewall-cmd --get-icmptypes,格式: icmp-block name=icmptype_name masquerade:打開規則裏的 IP 假裝。用源地址而不是目的地址來把假裝限制在這個區域內。在此,指定一個動做是不被容許的。 forward-port:從一個帶有指定爲 tcp 或 udp 協議的本地端口轉發數據包到另外一個本地端口,或另外一臺機器,或另外一臺機器上的另外一個端口.格式:forward-port port=number_or_range protocol=protocol / to-port=number_or_range to-addr=address
運行來自主機192.168.1.3的全部IPv4流量ide
firewall-cmd --zone=public --add-rich-rule="rule family='ipv4' source address=192.168.1.3 accept"
拒絕來自主機192.168.1.4到22端口的tcp流量工具
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.1.4 port port=22 protocol=tcp reject'
容許主機10.1.0.3到80端口的IPv4的TCP流量,並轉發到65530端口上命令行
firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=65530'