
互聯網上提供了各種網路服務,而防火墻可以設定各種規則來限制訪問,保護服務器,
概述
Linux的防火墻體系主要作業在網路層,針對TCP/IP資料包實施過濾和限制,屬于典型的包過濾防火墻,
Linux系統的防火墻體系基于內核編碼實作,具有非常穩定的性能和極高的效率,
三種防火墻
netfilter
- 指
linux內核中實作包過濾防火墻的內部結構 - 屬于
內核態的防火墻功能體系
iptables
- 指管理
linux防火墻的命令程式 - 屬于
用戶態的防火墻管理體系
Firewalld
CentOS 7默認的防火墻管理工具,取代之前的iptables防火墻- 屬于
用戶態 firewalld和iptables內部結構都指向netfilter這個強大的網路過濾子系統,以實作包過濾防火墻功能- 支持動態更新、加入防火墻
zone概念 - 支持
IPv4和IPv6地址 - 字符管理工具
firewall-cmd和圖形化管理工具firewall-config
區別
| 名稱 | Firewalld | iptables |
|---|---|---|
| 組態檔 | /usr/lib/firewalld/和/etc/firewalld/ | /etc/sysconfig/iptables |
| 對規則的修改 | 不需要全部重繪策略,不丟失現行連接 | 需要全部重繪策略,丟失連接 |
| 防火墻型別 | 動態防火墻 | 靜態防火墻 |
網路區域
區域介紹
| 區域 | 描述 |
|---|---|
| drop (丟棄) | 任何接收的網路資料包都被丟棄,沒有任何回復,僅能有發送出去的網路連接 |
| block (限制) | 任何接收的網路連接都被IPv4的icmp-host-prohibited資訊和IPv6的icmp6-adm-prohibited資訊所拒絕 |
| public (公共) | 在公共區域內使用,不能相信網路內的其他計算機不會對您的計算機造成危害,只能接收經過選取的連接 |
| external (外部) | 特別是為路由器啟用了偽裝功能的外部網,您不能信任來自網路的其他計算,不能相信它們不會對您的計算機造成危害,只能接收經過選擇的連接 |
| dmz (非軍事區) | 用于您的非軍事區內的電腦,此區域內可公開訪問,可以有限地進入您的內部網路,僅僅接收經過選擇的連接 |
| work (作業) | 用于作業區,您可以基本相信網路內的其他電腦不會危害您的電腦,僅僅接收經過選擇的連接 |
| home (家庭) | 用于家庭網路,您可以基本信任網路內的其他計算機不會危害您的計算機,僅僅接收經過選擇的連接 |
| internal (內部) | 用于內部網路,您可以基本上信任網路內的其他計算機不會威脅您的計算機,僅僅接受經過選擇的連接 |
| trusted (信任) | 可接受所有的網路連接 |
- 每個區域都具有不同限制程度的規則
- 可以使用一個或多個區域,但是任何一個活躍區域至少需要關聯源地址或介面
- 默認情況下,public區域是默認區域,包含所有介面(網卡)
資料處理流程
檢查資料來源的源地址
- 若源地址關聯到特定的區域,則執行該區域所指定的規則
- 若源地址未關聯到特定的區域,則使用傳入網路介面的區域并執行該區域所指定的規則
- 若網路介面未關聯到特定的區域,則使用默認區域并執行該區域所指定的規則
配置方法
運行時配置
- 實時生效,并持續至
Firewalld重新啟動或重新加載配置 - 不中斷現有連接
- 不能修改服務配置
永久配置
- 不立即生效,除非
Firewalld重新啟動或重新加載配置 - 中斷現有連接
- 可以修改服務配置
組態檔
Firewalld會優先使用/etc/firewalld/中的配置,如果不存在組態檔,則使用/usr/ib/firewalld/中的配置
-
/etc/firewalld/:用戶自定義組態檔,需要時可通過從/usr/ib/firewalld/中拷貝 -
/usr/ib/firewalld/:默認組態檔,不建議修改,若恢復至默認配置,可直接洗掉/etc/firewalld/中的配置
圖形工具
[root@localhost ~]# firewall-config
命令列工具
[root@localhost ~]# firewall-cmd 命令
- 以下是整理的一些命令
--get-default-zone
顯示網路連接或介面的默認區域
--set-default-zone=<zone>
設定網路連接或介面的默認區域
--get-active-zones
顯示已激活的所有區域
--get-zone-of-interface=<interface>
顯示指定介面系結的區域
--zone=<zone> --add-interface=<interface>
為指定介面系結區域
--zone=<zone> --change-interface=<interface>
為指定的區域更改系結的網路介面
--zone=<zone> --remove-interface=<interface>
為指定的區域洗掉系結的網路介面
--query-interface=<interface>
查詢區域中是否包含某介面
--list-all-zones
顯示所有區域及其規則
[--zone=<zone>] --list-all
顯示所有指定區域的所有規則
[--zone=<zone>] --list-services
顯示指定區域內允許訪問的所有服務
[--zone=<zone>] --add-service=<service>
為指定區域設定允許訪問的某項服務
[--zone=<zone>] --remove-service=<service>
洗掉指定區域已設定的允許訪問的某項服務
[--zone=<zone>] --query-service=<service>
查詢指定區域中是否啟用了某項服務
[--zone=<zone>] --list-ports
顯示指定區域內允許訪問的所有埠號
[--zone=<zone>] --add-port=<port>[-<port>]/<protocol> [--timeout=<seconds>]
啟用區域埠和協議組合,可選配置超時時間
[--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
禁用區域埠和協議組合
[--zone=<zone>] --query-port=<port>[-<port>]/<protocol>
查詢區域中是否啟用了埠和協議組合
[--zone=<zone>] --list-icmp-blocks
顯示指定區域內阻塞的所有ICMP型別
[--zone=<zone>] --add-icmp-block=<icmptype>
為指定區域設定阻塞的某項ICMP型別
[--zone=<zone>] --remove-icmp-block=<icmptype>
洗掉指定區域已阻塞的某項ICMP型別
[--zone=<zone>] --query-icmp-block=<icmptype>
查詢指定區域的ICMP阻塞功能
firewall-cmd
狀態操作
- 停止、啟動
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl start firewalld
- 禁止/允許開機啟動
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl enable firewalld
- 查看狀態
[root@localhost ~]# systemctl status firewalld
[root@localhost ~]# firewall-cmd --state
running
獲取預定義資訊
預定義資訊主要包括三種:可用的區域、可用的服務以及可用的
ICMP阻塞型別
- 顯示預定義的區域
[root@localhost ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
- 顯示預定義的服務
[root@localhost ~]# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
- 顯示預定義的
icmp阻塞型別
[root@localhost ~]# firewall-cmd --get-icmptypes
address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
- 各種阻塞型別的含義分別如下所示:
destination-unreachable:目的地址不可達,
echo-reply:應答回應(pong),
parameter-problem:引數問題,
redirect:重新定向,
router-advertisement:路由器通告,
router-solicitation:路由器征尋,
source-quench:源端抑制,
time-exceeded:超時,
timestamp-reply:時間戳應答回應,
timestamp-request:時間戳請求,
區域管理
使用
firewall-cmd命令可以實作獲取和管理區域,為指定區域系結網路介面等功能,
--get-default-zone
顯示網路連接或介面的默認區域
--set-default-zone=<zone>
設定網路連接或介面的默認區域
--get-active-zones
顯示已激活的所有區域
--get-zone-of-interface=<interface>
顯示指定介面系結的區域
--zone=<zone> --add-interface=<interface>
為指定介面系結區域
--zone=<zone> --change-interface=<interface>
為指定的區域更改系結的網路介面
--zone=<zone> --remove-interface=<interface>
為指定的區域洗掉系結的網路介面
--list-all-zones
顯示所有區域及其規則
[--zone=<zone>] --list-all
顯示所有指定區域的所有規則,省略--zone=<zone>時表示僅對默認區域操作
- 顯示當前系統中的默認區域
[root@localhost ~]# firewall-cmd --get-default-zone
public
- 顯示默認區域的所有規則
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
- 顯示網路介面
ens33對應的區域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
public
- 將網路介面
ens33對應區域改為internal區域
[root@localhost ~]# firewall-cmd --zone=internal --change-interface=ens33
The interface is under control of NetworkManager, setting zone to 'internal'.
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
internal
- 顯示
internal區域下有哪些網路介面
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces
ens33
- 顯示所有已激活的區域
[root@localhost ~]# firewall-cmd --get-active-zones
internal
interfaces: ens33
服務管理
為了方便管理,firewalld預先定義了很多服務,存放在/usr/lib/firewalld/services/目錄中,服務通過單個的XML組態檔來指定,
這些組態檔則按以下格式命名:service-name.xml,每個檔案對應一項具體的網路服務,如ssh服務等,
與之對應的組態檔中記錄了各項服務所使用的tcp/udp埠,在最新版本的firewalld中默認已經定義了70多種服務供我們使用,對于每個網路區域,均可以配置允許訪問的服務,
當默認提供的服務不適用或者需要自定義某項服務的埠時,我們需要將service組態檔放置在/etc/firewalld/services/目錄中,
service配置具有以下優點,
- 通過服務名字來管理規則更加人性化,
- 通過服務來組織埠分組的模式更加高效,如果一個服務使用了若干個網路埠,則服務的組態檔就相當于提供了到這些埠的規則管理的批量操作快捷方式,
[--zone=<zone>] --list-services
顯示指定區域內允許訪問的所有服務
[--zone=<zone>] --add-service=<service>
為指定區域設定允許訪問的某項服務
[--zone=<zone>] --remove-service=<service>
洗掉指定區域已設定的允許訪問的某項服務
[--zone=<zone>] --list-ports
顯示指定區域內允許訪問的所有埠號
[--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol>
為指定區域設定允許訪問的某個/某段埠號(包括協議名)
[--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol>
洗掉指定區域已設定的允許訪問的埠號(包括協議名)
[--zone=<zone>] --list-icmp-blocks
顯示指定區域內拒絕訪問的所有 ICMP 型別
[--zone=<zone>] --add-icmp-block=<icmptype>
為指定區域設定拒絕訪問的某項 ICMP 型別
[--zone=<zone>] --remove-icmp-block=<icmptype>
洗掉指定區域已設定的拒絕訪問的某項 ICMP 型別,省略--zone=<zone>時表示對默認區域操作
- 顯示默認區域允許訪問的所有服務
[root@localhost ~]# firewall-cmd --list-services
ssh dhcpv6-client
- 設定默認區域允許訪問
http服務
[root@localhost ~]# firewall-cmd --add-service=http
success
- 設定默認區域允許訪問
https服務
[root@localhost ~]# firewall-cmd --add-service=https
success
- 顯示默認區域允許訪問的所有服務
[root@localhost ~]# firewall-cmd --list-services
ssh dhcpv6-client http https
- 顯示
internal區域內允許訪問的所有服務
[root@localhost ~]# firewall-cmd --zone=internal --list-services
ssh mdns samba-client dhcpv6-client
- 設定
internal區域允許訪問mysql服務
[root@localhost ~]# firewall-cmd --zone=internal --add-service=mysql
success
- 設定
internal區域不允許訪問samba-client服務
[root@localhost ~]# firewall-cmd --zone=internal --remove-service=samba-client
success
- 顯示
internal區域內允許訪問的所有服務
[root@localhost ~]# firewall-cmd --zone=internal --list-services
ssh mdns dhcpv6-client mysql
埠管理
在進行服務配置時,預定義的網路服務可以使用服務名配置,服務所涉及的埠就會自動打開,
但是,對于非預定義的服務只能手動為指定的區域添加埠,
- 在
internal區域打開443/TCP埠
[root@localhost ~]# firewall-cmd --zone=internal --add-port=443/tcp
success
- 在
internal區域禁止443/TCP埠訪問
[root@localhost ~]# firewall-cmd --zone=internal --remove-port=443/tcp
success
兩種配置模式
前面提到firewall-cmd命令工具有兩種配置模式:
- 運行時模式
Runtime mode表示當前記憶體中運行的防火墻配置,在系統或firewalld服務重啟、停止時配置將失效, - 永久模式
Permanent mode表示重啟防火墻或重新加載防火墻時的規則配置,是永久存盤在組態檔中的,
firewall-cmd命令工具與配置模式相關的選項有三個,
-
--reload:重新加載防火墻規則并保持狀態資訊,即將永久配置應用為運行時配置, -
--permanent:帶有此選項的命令用于設定永久性規則,這些規則只有在重新啟動firewalld或重新加載防火墻規則時才會生效;若不帶有此選項,表示用于設定運行時規則, -
--runtime-to-permanent:將當前的運行時配置寫入規則組態檔中,使之成為永久性,
[root@localhost ~]# firewall-cmd --runtime-to-permanent
success
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/161480.html
標籤:Linux
