找回密码
 立即注册
搜索
查看: 291|回复: 0

如何使用 FirewallD 开启 IP 白名单

[复制链接]

989

主题

92

回帖

5万

积分

管理员

积分
55362
发表于 2022-7-4 16:14:01 | 显示全部楼层 |阅读模式
# M' |! k7 F5 Q: a1 B4 o
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。
* W! d7 C  _) e/ Z2 v  B在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。
% m$ A. E) j$ G! ~: Z$ A+ ?0 Q# R3 k2 SFirewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。+ [" G. `8 f) G
Firewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:) M& C9 j- c, J" m( k9 t
drop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。$ c2 U/ h) f# i& e$ a# g) r" W4 C: s
block:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。
: ]/ i3 i7 k; S6 [public:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。0 d0 q# {% m4 Q2 v5 a
external:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。. P: q% u# e" _" s
internal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。
9 W# [5 r' l; X: f, o( Vdmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。# I% G% E8 n- ^$ `
work:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。, k! ?6 g* i8 z, o8 F  r) u
home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。
2 O! _, a5 r7 v  t5 \+ _trusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。
' W/ |+ }- c* R, Q9 J7 p$ _; S安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:, k0 e+ |4 V  y$ J. z& w+ D
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld
    4 [1 L+ E7 ^* Y) d% _+ n  C
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:* p7 h2 c( K% [* H& ?, @
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public9 V) K) [5 l5 Y  \. h1 `% u% r
输入以下内容进行确认哪个区域处于激活状态:, z: P$ @+ s, [$ b: E
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public( N) A+ U9 L! F" k
  2.   interfaces: eth0
复制代码
获取可用区域的列表,输入以下命令:
  1. $ sudo firewall-cmd --get-zones
复制代码
返回:
  1. block dmz drop external home internal public trusted work
复制代码
通过指定 –zone 的 –list-all 参数,我们可以看到与区域关联的特定配置:
  1. $ sudo firewall-cmd --zone=home --list-all
复制代码
返回值:
  1. home
    ' d* M1 |- k0 O( V, Q  Z0 e
  2.   target: default4 n3 H2 q; V7 S5 N3 M5 R2 U
  3.   icmp-block-inversion: no& _! J. H' @3 q% r
  4.   interfaces: ! e- g: R# d6 @  V
  5.   sources:
    4 P7 J  |+ x5 G' K: Z5 j
  6.   services: dhcpv6-client mdns samba-client ssh
      V5 i6 j& d$ S- O9 C
  7.   ports: * o7 R! b' h7 m7 f! j
  8.   protocols: 1 B/ E+ T) b$ O) C" q" Z4 }5 X
  9.   masquerade: no
    : j4 ~- o9 q! `7 H6 X. s) w
  10.   forward-ports: - e$ E+ l, F9 K
  11.   source-ports:
    ! y2 G1 d+ }* C
  12.   icmp-blocks:
    7 l) [9 _3 ?. W
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码
& {3 S7 O+ r" Q, d: Q5 m: i
使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。4 s! ^8 S# `0 w. n/ m0 N
具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围, v: J3 P; a, I- T
  1. 103.21.244.0/22' h. E: w2 w- x; u2 ^0 g- c% M
  2. 103.22.200.0/22
    , i& a9 d  O; {; v8 e  h
  3. 103.31.4.0/22
    * w% C( T3 F$ b5 }5 t) x6 s# ]; ~
  4. 104.16.0.0/13( t/ N% p& F- {
  5. 104.24.0.0/14# {% L+ \; {; W/ w# f0 {- Y9 }) h  X% q
  6. 108.162.192.0/18
    ) j3 F6 V* `3 o2 p: ]- S
  7. 131.0.72.0/228 X: s8 w! L( R; E
  8. 141.101.64.0/18( {, ]% @" ?' l% C# l1 h9 R0 @. A/ i
  9. 162.158.0.0/15
    # A& c! X* L9 u2 R6 S  P0 d# g
  10. 172.64.0.0/13& E* [7 `( m9 u5 E% l0 v( q2 o
  11. 173.245.48.0/20
    ! {6 Y# h' X6 R
  12. 188.114.96.0/20! Z6 R  G1 @* d- @
  13. 190.93.240.0/20) N# K5 M# ~6 N1 H
  14. 197.234.240.0/221 D# D7 h2 A9 k
  15. 198.41.128.0/17
复制代码

9 e* A4 e( w* A- Z与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。
3 O+ z8 H6 t% l将这些 IP 列表逐一加入 trusted 区域,使用命令如下:8 k. Z+ f$ E6 c2 u
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20- j. A( j4 \! M- M
  2. ……
    9 W8 D4 z/ w( \% V
  3. $ sudo firewall-cmd --permanent --zone=trusted --add-source=131.0.72.0/22
复制代码
使 trusted 区域设置生效,使用命令如下:
  1. $ sudo firewall-cmd --reload
复制代码
确认 trusted 区域是否设置正确,使用命令如下:
  1. $ sudo firewall-cmd --zone=trusted --list-all
复制代码
返回:
  1. trusted (active)
    3 O) ?; g. Y' u( w6 P* b% [
  2.   target: ACCEPT6 B) q  T& T, V. s
  3.   icmp-block-inversion: no
    5 f; c/ M, @% n/ v
  4.   interfaces:
    . N- D# h( }2 g, h7 j* a
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/221 n% W) D% }; f, N# r. ]
  6.   services:
    / t& \) }8 p; M
  7.   ports: 3 K2 l) n! ]$ G2 b& a2 q: I
  8.   protocols: ' x+ b0 G% M& `4 g* V8 n. j
  9.   masquerade: no
    # S# k& T8 Z% b2 q: R2 J3 [6 `' J
  10.   forward-ports: 0 ?$ ^! x6 E  o; `3 g
  11.   source-ports:
    6 i7 f1 O9 S9 r" ^; ^1 H: e9 l
  12.   icmp-blocks:
    0 q3 M  b9 a5 \1 k; M5 G- w  _
  13.   rich rules:
复制代码
因为此时已经设置了 trusted 区域,所以还需要切换默认区域从 public 到 drop,以达到无视所有接入连接的目的。使用命令如下:
  1. $ sudo firewall-cmd --set-default-zone=drop
复制代码
再将默认网卡 eth0 分配给 drop 区域,使用命令如下:
  1. $ sudo firewall-cmd --permanent --zone=drop --change-interface=eth0
复制代码
使白名单最终生效,使用命令如下(注意:请再次确认你的所有 IP 都加入了 trusted 区域):
  1. $ sudo firewall-cmd --reload
复制代码
至此,白名单设置正式生效。7 C! s+ C" f. k4 y1 U0 d, N! X

6 L( X  O! j6 H; X
2 h9 T! o% T( w- @" o4 p4 `  {& u: l. T1 G, _

( q% e+ N  Q$ o+ N) o8 M
6 y  a7 z# L; Z( M" L
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-5-6 08:39 AM , Processed in 0.125999 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表