2021-05-12 14:32:11
CentOS 7下firewall防火牆使用入門基礎
1 防火牆簡介
在基於RHEL7的伺服器,提供了一個firewall的動態管理的防火牆,其支援IPv4和IPv6,還支援乙太網橋,並有分離執行時間和永久性設定選擇。它還具備一個通向服務或者應用程式以直接增加防火牆規則的介面。
2 簡單介紹
firewall的組態檔:/etc/lib/firewalld/和/etc/firewalld/下的XML檔案。設定firewall可以直接編輯組態檔,也可以使用firewall-cmd命令列工具。
3 防火牆使用
檢視firewalld的狀態
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
將一個服務(http)加入到分割區
# 加入
firewall-cmd --permanent --zone=work --add-service=http
firewall-cmd --reload
# 移除
firewall-cmd --permanent --zone=work --remove-service=http
firewall-cmd --reload
# 注意,這並不會中斷已經建立的連線。如果您打算中斷,您可以使用 --complete-reload 選項,但這不僅僅中斷您已經移除的服務,還會中斷所有已經建立的連線。
設定偽裝 IP 地址
# 查詢是否可用
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
設定rich language語法:
格式:
# 新增
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'
多規則結構:
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 ]
多規則命令:
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流量
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'
相關文章