10分鐘精通LinuxFirewalld:從入門到企業級安全防護,新手必看!

連結:https://www.cnblogs.com/shouke/p/18366534

實踐環境

CentOS-7-x86_64-DVD-2009

簡介

Firewalld是一種簡單的、有狀態的、基於區域(zone-based)的防火牆。策略和區域用於組織防火牆規則。網路在邏輯上被劃分為多個區域,它們之間的流量可以透過策略進行管理。

檢視防火牆狀態

#

service firewalld status

或者
#

systemctl status firewalld

● firewalld.service - firewalld - dynamic firewall daemon

Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

Active: inactive (dead)

Docs: man:firewalld(1)

說明:如果輸出顯示 Active: inactive (dead),則表示未開啟防火牆。如果現實Active: active (running)則表示開啟了防火牆。
或者
#

firewall-cmd --state

not running

開啟防火牆

#

service firewalld start

或者
#

systemctl start firewalld

重啟防火牆

#

service firewalld restart

或者
#

systemctl restart firewalld

設定防火牆開機自啟

#

systemctl

enable

firewalld

Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.

Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.

停用防火牆開機自啟

#

systemctl

disable

firewalld

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

檢視預定義區域

#

firewall-cmd --get-zones

block dmz drop external home internal public trusted work

# #檢視每個區域的詳細資訊
#

firewall-cmd --list-all-zones

區域簡介:
區域 預設規則
block 拒絕流入的流量,除非與流出的流量相關
dmz 拒絕流入的流量,除非與流出的流量相關;如果流量與ssh服務相關,則允許流量
drop 拒絕流入的流量,除非與流出的流量相關
external 拒絕流入的流量;除非與流出的流量相關;如果流量與ssh服務相關,則允許流量
home 拒絕流入的流量;除非與流出的流量相關;如果流量與ssh,mdns,ipp-client,amba-client,dhcpv6-client服務相關,則允許流量
internal 等同於home區域
public 拒絕流入的流量;除非與流出的流量相關;如果流量與ssh,dhcpv6-client服務相關,則允許流量
trusted 允許所有的資料包流入與流出
work 拒絕流入的流量;除非與流出的流量相關;如果流量與ssh,ipp-client,dhcpv6-client服務相關,則允許流量

建立自定義區域

#

firewall-cmd --permanent --new-zone=testing

success

注意:--permanent選項不能少

檢視預設區域

#

firewall-cmd --get-default-zone

public

檢視網絡卡關聯的區域

#

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

inet 127.0.0.1/8 scope host lo

valid_lft forever preferred_lft forever

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 00:0c:29:12:86:da brd ff:ff:ff:ff:ff:ff

inet 192.168.206.102/24 brd 192.168.206.255 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::20c:29ff:fe12:86da/64 scope link

valid_lft forever preferred_lft forever

#

firewall-cmd --get-zone-of-interface=ens33

public

注意:一張網絡卡只能關聯一個區域

修改預設區域

例子:
# #修改預設區域為`trusted`
#

firewall-cmd --set-default-zone=trusted

success

#

firewall-cmd --get-default-zone

trusted

#

firewall-cmd --get-zone-of-interface=ens33

trusted

# #還原
#

firewall-cmd --set-default-zone=public

success

#

firewall-cmd --get-default-zone

public

#

firewall-cmd --get-zone-of-interface=ens33

public

修改網絡卡關聯的區域

方法1:先刪除現有關聯區域,再新增目標關聯區域(因為同一時間,一張網絡卡只能關聯一個區域,所以要先新增再刪除)
#

firewall-cmd --remove-interface=ens33 --zone=public

success

#

firewall-cmd --get-zone-of-interface=ens33

no zone

## 設定ens33關聯區域為trusted
#

firewall-cmd --add-interface=ens33 --zone=trusted

success

#

firewall-cmd --get-zone-of-interface=ens33

trusted

方法2:
## 設定ens33關聯區域為public
#

firewall-cmd --change-interface=ens33 --zone=public

success

#

firewall-cmd --get-zone-of-interface=ens33

public

列印當前活動區域及繫結的介面和源

firewall-cmd --get-active-zones

列印當前活動區域以及這些區域中使用的介面和源。活動區域是與介面或源繫結的區域。輸出格式為:
zone1
interfaces:interface1interface2..
sources:source1..
zone2
interfaces:interface3..
zone3
sources:source2..
如果沒有介面和源繫結到區域,則忽略該對應區域行
例子:
#

firewall-cmd --get-active-zones

public

interfaces: ens33

埠訪問限制

檢視已開放埠

firewall-cmd [--permanent] [--zone=zone] --list-ports

以空格分隔的列表形式列出為區域新增的埠。埠的形式為portid[-portid]/protocol,它可以是埠和協議對,也可以是具有協議的埠範圍。如果忽略--zone選項配置,將使用預設區域。

新增開放埠

firewall-cmd [--permanent] [--zone=zone] --add-port=portid[-portid]/protocol [--timeout=timeval]

zone(區域)新增埠。如果省略了--zone選項配置,將使用預設區域。此選項可以多次指定。如果提供了--timeout

,則該規則將在指定的超時時間內處於活動狀態,超時之後將自動刪除。timeval是一個數字(秒)或數字後跟一個字元s(秒)、m(分鐘)、h(小時),例如20m或1h。

埠可以是單個埠號,也可以是埠範圍

portid-portid。協議可以是tcpudpsctpdccp

--timeout選項不能與--permanent選項組合使用。

取消開放埠

firewall-cmd [--permanent] [--zone=zone] --remove-port=portid[-portid]/protocol

從區域中刪除埠。如果省略了--zone

選項配置,將使用預設區域。此選項可以多次指定。

--permanent 可用於持久設定選項。這些更改不會立即生效,只有在重新啟動/重新載入服務或系統重新啟動後才會生效。如果未使用--permanent,則更改將僅是執行時配置的一部分(所做的變更在重啟服務、重新載入服務後失效),下同,不再贅述。

例子

例子:為public區域持久開放 tcp協議埠 15672
#

firewall-cmd --permanent --add-port=15672/tcp

#

firewall-cmd --list-ports

# 查不到埠
# #讓配置生效
#

firewall-cmd --reload

success

#

firewall-cmd --list-ports

15672/tcp

說明:
  1. firewall-cmd --reload
    重新載入防火牆規則並保留狀態資訊。當前的持久配置將成為新的執行時配置,也就說執行的所有僅執行時變更在重新載入規則後丟失。類似的,有以下命令
  2. firewall-cmd --complete-reload
    完全重新載入防火牆,甚至netfilter核心模組。這很可能會終止活動連線,因為狀態資訊會丟失。此選項僅用於嚴重的防火牆問題。例如,防火牆規則正確的情況下,無法建立連線的狀態資訊問題
例子:為public區域持久開放 tcp協議埠範圍 1000-2000(包括1000及2000)
#

firewall-cmd --permanent --add-port=1000-2000/tcp

success

#

firewall-cmd --reload

success

#

firewall-cmd --list-ports

15672/tcp 1000-2000/tcp

例子:為public區域持久取消開放 tcp協議埠 15672
#

firewall-cmd --permanent --remove-port=15672/tcp

success

#

firewall-cmd --reload

success

#

firewall-cmd --list-ports

1000-2000/tcp

例子:為public區域持久取消開放tcp協議埠範圍 1000-2000(包括1000及2000)
]#

firewall-cmd --permanent --remove-port=1000-2000/tcp

success

#

firewall-cmd --reload

success

#

firewall-cmd --list-ports


#

IP、網路訪問限制

新增開放源

firewall-cmd [--permanent] [--zone=zone] --add-source=source[/mask]|MAC|ipset:ipset

繫結源(source,IP、網路、MAC、IP集)到區域zone。如果省略了--zone選項配置,將使用預設區域。

取消開放源

firewall-cmd [--permanent] --remove-source=source[/mask]|MAC|ipset:ipset

從區域zone刪除之前新增繫結的源

例子

例子:允許IP 192.168.50.182持久訪問為public區域
#

firewall-cmd --permanent --add-source=192.168.50.182

success

#

firewall-cmd --reload

success

說明:新增IP白名單後,即使未新增開放埠,針對當前IP,也可以正常訪問。
例子:允許子網192.168.50.0/24持久訪問為public區域
#

firewall-cmd --permanent --add-source=192.168.50.0/24

success

#

firewall-cmd --reload

success

例子:取消IP 192.168.50.182對public區域的持久訪問許可
#

firewall-cmd --permanent --remove-source=192.168.50.182

success

#

firewall-cmd --reload

success

富語言規則

列出富語言規則

firewall-cmd [--permanent] [--zone=zone] --list-rich-rules

以換行符分隔的列表形式列出為區域新增的富語言規則。如果省略了--zone選項,將使用預設區域。

新增富語言規則

firewall-cmd [--permanent] [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]

為區域新增富語言規則'rule'。此選項可以多次指定。如果省略了區域,將使用預設區域。如果提供了--timeout,則該規則將在指定的超時時間內處於活動狀態,超時之後將自動刪除。timeval是一個數字(秒)或數字後跟一個字元s(秒)、m(分鐘)、h(小時),例如20m或1h。
--timeout選項不能與--permanent選項組合使用。

刪除富語言規則

firewall-cmd [--permanent] [--zone=zone] --remove-rich-rule='rule'

從區域中刪除富語言規則'rule'。此選項可以多次指定。如果省略了區域,將使用預設區域。

查詢富語言規則

firewall-cmd [--permanent] [--zone=zone] --query-rich-rule='rule'

返回是否為區域添加了富語言規則'rule'。如果省略了--zone,將使用預設區域。如果為真,則返回0,否則返回1。

例子

例子:允許 IP 192.168.50.182 持久訪問public區域tcp協議埠15672
#

firewall-cmd --permanent --add-rich-rule=

'rule family="ipv4" source address="192.168.50.182" port protocol="tcp" port="15672" accept'
#

firewall-cmd --reload

例子:取消 IP 192.168.50.182 持久訪問public區域tcp協議埠15672的許可
#

firewall-cmd --permanent --remove-rich-rule=

'rule family="ipv4" source address="192.168.50.182" port protocol="tcp" port="15672" accept'

success

#

firewall-cmd --reload

例子:禁止 IP 192.168.50.182 持久訪問public區域
#

firewall-cmd --permanent --add-rich-rule=

'rule family="ipv4" source address="192.168.50.182" reject'
#

firewall-cmd --reload

注意:新增訪問限制前,建議先移除之前的訪問許可配置,否則可能導致當前規則不起作用。此外,這裡的reject也可以替換為drop,即直接丟棄來訪請求資料包。
例子:取消禁止 IP 192.168.50.182 持久訪問public區域限制
#

firewall-cmd --permanent --remove-rich-rule=

'rule family="ipv4" source address="192.168.50.182" reject'
#

firewall-cmd --reload

例子:檢視當前配置的富語言規則
#

firewall-cmd --list-rich-rules

rule family="ipv4" source address="192.168.50.182" reject

列出為區域啟用或新增的所有內容

firewall-cmd[--permanent] [--zone=zone] --list-all

列出為區域新增或啟用的所有內容。如果省略了--zone選項配置,則將使用預設區域。
例子:
#

firewall-cmd --list-all

public (active)

target: default

icmp-block-inversion: no

interfaces: ens33

sources:

services: dhcpv6-client ssh

ports: 15672/tcp

protocols:

masquerade: no

forward-ports:

source-ports:

icmp-blocks:

rich rules:

儲存當前執行時配置為持久配置

#

firewall-cmd --runtime-to-permanent

儲存活動執行時配置並用它覆蓋持久配置。
END
官方站點:www.linuxprobe.com
Linux命令大全:www.linuxcool.com
劉遄老師QQ:5604215
Linux技術交流群:2636170
(新群,火熱加群中……)
想要學習Linux系統的讀者可以點選"閱讀原文"按鈕來了解書籍《Linux就該這麼學》,同時也非常適合專業的運維人員閱讀,成為輔助您工作的高價值工具書!


相關文章