主頁 > 作業系統 > RHEL Linux 7的防火墻firewalld學習總結

RHEL Linux 7的防火墻firewalld學習總結

2020-09-29 05:58:51 作業系統

RHEL Linux 7的防火墻firewalld學習總結

 

本文介紹一下RHEL 7下的防火墻配置工具firewalld, 在RHEL 7之前,我們一般使用iptables防火墻管理工具,其實,iptables與firewalld都不是真正的防火墻,它們都只是用來定義防火墻策略的防火墻管理工具而已,或者說,它們只是一種服務或程式,iptables服務會把配置好的防火墻策略交由內核層面的netfilter網路過濾器來處理,而firewalld服務則是把配置好的防火墻策略交由內核層面的nftables包過濾框架來處理,

 

firewalld(Dynamic Firewall Manager of Linux systems,Linux系統的動態防火墻管理器),在RHLE 7下是默認的防火墻配置管理工具,它擁有基于CLI(命令列界面 firewalld-cmd)和基于GUI(圖形用戶界面 firewalld-config)的兩種管理方式,相較于傳統的防火墻管理配置工具,firewalld支持動態更新技術并加入了區域(zone)的概念,簡單來說,區域就是firewalld預先準備了幾套防火墻策略集合(策略模板),用戶可以根據生產場景的不同而選擇合適的策略集合,從而實作防火墻策略之間的快速切換,它具備對IP V4和IP V6防火墻設定的支持,

 

防火墻中的一切都與一個或者多個區域相關聯,下面對各個區進行說明:

 

Zone                                    Description 
-----------------------------------------------------
drop (immutable)             Deny all incoming connections, outgoing ones are accepted. 
block (immutable)            Deny all incoming connections, with ICMP host prohibited messages issued. 
trusted (immutable)          Allow all network connections 
public                       Public areas, do not trust other computers
external                     For computers with masquerading enabled, protecting a local network 
dmz                          For computers publicly accessible with restricted access.  
work                         For trusted work areas 
home                         For trusted home network connections 
internal                     For internal network, restrict incoming connections

 

drop(丟棄)

任何流入網路的包都被丟棄,不作出任何回應,只允許流出的網路連接,即使開放了某些服務(比如http),這些服務的資料也是不允許通過的,

 

block(限制)

任何進入的網路連接都被拒絕,并回傳IPv4的icmp-host-prohibited報文或者IPv6的icmp6-adm-prohibited 報文,只允許由該系統初始化的網路連接,

 

trusted(信任)

可接受所有的網路連接,允許所有網路連接,即使沒有開放任何服務,那么使用此zone的流量照樣通過(一路綠燈)

 

public(公共)

在公共區域內使用,不能相信網路內的其他計算機不會對您的計算機造成危害,只能接收經過選取的連接,

 

external(外部)

特別是為路由器啟用了偽裝功能的外部網,您不能信任來自網路的其他計算,不能相信它們不會對您的計算機造成危害,只能接收經過選擇的連接,

 

dmz(非軍事區)

用以允許隔離區(dmz)中的電腦有限地被外界網路訪問,只允許選中的服務通過,

 

work(作業)

用于作業區,您可以基本相信網路內的其他電腦不會危害您的電腦,只允許選中的服務通過,

 

home(家庭)

用于家庭網路,您可以基本信任網路內的其他計算機不會危害您的計算機,,只允許選中的服務通過,

 

internal(內部)

用于內部網路,您可以基本上信任網路內的其他計算機不會威脅您的計算機,只允許選中的服務通過,

 

 

 

 

 

檢查防火墻工具

 

如果你要判斷RHEL 7使用的是iptables還是firewalld,那么可以通過命令來判斷

 

有iptables的情況:

 

# systemctl status iptables.service
● iptables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

 

沒有iptables的情況

 

 

# systemctl status iptables.service

Unit iptables.service could not be found.

 

 

當然,最簡單的方法是使用下面命令來判別

 

# systemctl is-active firewalld
active
# systemctl is-active iptables
inactive
# systemctl is-active ip6tables
inactive
# systemctl is-active ebtables
inactive

 

 

 

查看防火墻狀態

 

    # systemctl status firewalld

    # firewall-cmd --state

 

[root@mylnx ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2018-03-07 11:46:34 HKT; 1 day 4h ago
 Main PID: 124126 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─124126 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
 
Mar 07 11:46:34 mylnx systemd[1]: Starting firewalld - dynamic firewall daemon...
Mar 07 11:46:34 mylnx systemd[1]: Started firewalld - dynamic firewall daemon.
 
 
# firewall-cmd --state
running

 

 

啟動防火墻服務:

 

 

# systemctl start firewalld

# systemctl start firewalld.service

 

 

重啟防火墻服務:

 

# systemctl restart firewalld.service

 

 

# systemctl restart firewalld

 

 

關閉防火墻:

 

systemctl stop firewalld

 

 

[root@mylnx ~]# systemctl stop firewalld
[root@mylnx ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Thu 2018-03-08 16:35:17 HKT; 6s ago
  Process: 124126 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 124126 (code=exited, status=0/SUCCESS)
 
Mar 07 11:46:34 mylnx systemd[1]: Starting firewalld - dynamic firewall daemon...
Mar 07 11:46:34 mylnx systemd[1]: Started firewalld - dynamic firewall daemon.
Mar 08 16:35:16 mylnx systemd[1]: Stopping firewalld - dynamic firewall daemon...
Mar 08 16:35:17 mylnx systemd[1]: Stopped firewalld - dynamic firewall daemon.
[root@mylnx ~]# 

 

 

禁用&啟用防火墻:

 

開機時啟用&禁用防火墻

 

# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
# 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.

 

 

firewall-cmd幫助資訊

 

# firewall-cmd --help

 

 

 

配置防火墻

 

 

firewall-cmd有臨時設定(runtime)和永久(permanent)設定兩種方式,臨時設定reload后或重啟服務器后會恢復原狀態,而永久設定方式則不會,引數--permanent表示永久(permanent)設定,下面如果指定了引數--permanent表示永久設定,

 

 

 

1:列出當前有幾個區域(zone)

 

 

[root@mylnx ~]# firewall-cmd --get-zones

block dmz drop external home internal public trusted work

[root@mylnx ~]#

 

 

2:  查看當前活動的區域(zone)

 

[root@mylnx ~]# firewall-cmd --get-active-zones

public

  interfaces: eth0

[root@mylnx ~]#

 

3: 查看當前默認的區域(zone)

 

[root@mylnx ~]# firewall-cmd --get-default-zone

public

 

 

4:設定當前默認的區域

 

[root@mylnx ~]# firewall-cmd --set-default-zone=public

Warning: ZONE_ALREADY_SET: public

success

 

5: 查看firewalld支持的服務,

 

 
[root@mylnx ~]# firewall-cmd --get-service   
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

 

 

6:檢查下一次多載后將激活的服務,

 

[root@mylnx ~]# firewall-cmd --get-service --permanent
 
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

 

 

7: 列出區域開放的埠

 

[root@mylnx ~]# firewall-cmd --zone=public --list-ports

8123/tcp 8124/tcp 8217/tcp 80/tcp 443/tcp 3306/tcp 10050/tcp

 

 

8: 列出指定區域的設定資訊

 

[root@mylnx ~]# firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources: 
  services: dhcpv6-client ssh
  ports: 8123/tcp 8124/tcp 8217/tcp 80/tcp 443/tcp 3306/tcp 10050/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

 

 

9:開放指定區域的特定埠號

 

 

例如,我們需要開放埠號8123

 

# firewall-cmd --zone=public --add-port=8123/tcp --permanent

success

# firewall-cmd --reload  #更新防火墻規則

 

--zone              #作用域

--add-port=8123/tcp     #添加埠,格式為:埠/通訊協議

--permanent         #永久生效,沒有此引數重啟后失效

 

注意:有沒有--reload 選項的區別:

 

[root@mylnx ~]# firewall-cmd --zone=public --add-port=8124/tcp --permanent 
success
[root@mylnx ~]# firewall-cmd --zone=public --list-ports
8123/tcp
[root@mylnx ~]# firewall-cmd --reload
success
[root@mylnx ~]# firewall-cmd --zone=public --list-ports
8123/tcp 8124/tcp

 

另外,還需要注意--reload與--complete-reload的區別:

 

# firewall-cmd --reload

# firewall-cmd --complete-reload

 

兩者的區別就是第一個無需斷開連接,就是firewalld特性之一動態添加規則,第二個需要斷開連接,類似重啟服務

 

 

 

 

如何一次開放多個埠呢? 這里有兩種方法,總結如下:

 

方法1:使用shell腳本,回圈添加多個埠,

 

#!/bin/bash
for i in 22  21 1337 3306 31337
do
  firewall-cmd --zone=public --add-port=${i}/tcp
done

 

方法2:如果埠是區間段,那么可以使用下面命令:

 

# firewall-cmd --zone=public --add-port=6001-6020/tcp --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --zone=public --list-ports
8123/tcp 8124/tcp 8217/tcp 80/tcp 443/tcp 3306/tcp 10050/tcp 6001-6020/tcp

 

 

 

 

10:洗掉開放的埠

 

 

firewall-cmd --zone= public --remove-port=80/tcp --permanent

 

 

 

移除一個區間段的埠號:

 

# firewall-cmd --zone=public --remove-port=6001-6020/tcp --permanent

success

 

# firewall-cmd  --reload

success

 

 

11: 查看有哪些服務可以打開,

 

 

# firewall-cmd --get-services

 

 

12: 開放某個服務

 

# firewall-cmd --add-service=zabbix-agent --permanent

success

 

# firewall-cmd --zone=public --add-service=zabbix-agent --permanent

success

 

 

 

13: 關閉某個服務

 

# firewall-cmd --remove-service=zabbix-agent --permanent

success

# firewall-cmd --reload

success

 

 

 

14:   查看當前開放了哪些服務

 

 

# firewall-cmd --list-services

dhcpv6-client ssh

 

# firewall-cmd --zone=public --list-services

dhcpv6-client ssh

 

 

查詢某個服務是否開放

 

# firewall-cmd --query-service ftp

no

# firewall-cmd --query-service ssh

yes

 

15:  一些不常用的應急命令

 

firewall-cmd --panic-on         # 拒絕所有流量,遠程連接會立即斷開,只有本地能登陸 
firewall-cmd --panic-off        # 取消應急模式,但需要重啟firewalld后才可以遠程ssh 
firewall-cmd --query-panic         # 查看是否為應急模式

 

16: 設定某些IP允許訪問某個服務

 

 

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="ssh" accept"
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.0.4/24" service name="ssh" accept"

 

 

 

 

 

 

 

firewall組態檔

 

這里存放了一些默認的檔案,如默認區域和公用服務,避免修改它們,因為每次 firewall 軟體包更新時都會覆寫這些檔案

 

 

$ ls -lrt /usr/lib/firewalld
total 16
drwxr-xr-x. 2 root root  224 Feb 18 11:03 helpers
drwxr-xr-x. 2 root root   20 Feb 18 11:03 ipsets
drwxr-xr-x. 2 root root 4096 Feb 18 11:03 icmptypes
drwxr-xr-x. 2 root root 8192 Feb 18 11:03 services
drwxr-xr-x. 2 root root  163 Feb 18 11:03 zones

 

 

這里存放了用戶自定義資料

 

$ ls -lrt /etc/firewalld
total 8
drwxr-x---. 2 root root   46 Feb  5 00:29 zones
drwxr-x---. 2 root root    6 Feb  5 00:29 services
-rw-r--r--. 1 root root  272 Feb  5 00:29 lockdown-whitelist.xml
drwxr-x---. 2 root root    6 Feb  5 00:29 ipsets
drwxr-x---. 2 root root    6 Feb  5 00:29 icmptypes
drwxr-x---. 2 root root    6 Feb  5 00:29 helpers
-rw-r--r--. 1 root root 2006 Feb  5 00:29 firewalld.conf

 

 

firewall命令非常豐富、靈活,限于篇幅和經驗,不可能面面俱到,這里只是總結了一些比較常用、簡單的命令,后續在作業中遇到了一些特殊需求,在不斷學習和完善,

 

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/137097.html

標籤:Linux

上一篇:linux下添加環境變數

下一篇:VMware 安裝Linux系統

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more