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 firewalldactive
# systemctl is-active iptablesinactive
# systemctl is-active ip6tablesinactive
# systemctl is-active ebtablesinactive
查看防火墻狀態
# 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 --staterunning
啟動防火墻服務:
# 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 firewalldRemoved symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
# systemctl enable firewalldCreated 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 --permanentRH-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-allpublic (active)
target: defaulticmp-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-ports8123/tcp
[root@mylnx ~]# firewall-cmd --reloadsuccess
[root@mylnx ~]# firewall-cmd --zone=public --list-ports8123/tcp 8124/tcp
另外,還需要注意--reload與--complete-reload的區別:
# firewall-cmd --reload
# firewall-cmd --complete-reload
兩者的區別就是第一個無需斷開連接,就是firewalld特性之一動態添加規則,第二個需要斷開連接,類似重啟服務
如何一次開放多個埠呢? 這里有兩種方法,總結如下:
方法1:使用shell腳本,回圈添加多個埠,
#!/bin/bashfor i in 22 21 1337 3306 31337
do
firewall-cmd --zone=public --add-port=${i}/tcpdone
方法2:如果埠是區間段,那么可以使用下面命令:
# firewall-cmd --zone=public --add-port=6001-6020/tcp --permanentsuccess
# firewall-cmd --reloadsuccess
# firewall-cmd --zone=public --list-ports8123/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系統
