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

如何使用 FirewallD 开启 IP 白名单

[复制链接]

991

主题

92

回帖

5万

积分

管理员

积分
55422
发表于 2022-7-4 16:14:01 | 显示全部楼层 |阅读模式
9 M( t, m4 ~5 A  W! U$ ~0 \
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。3 q9 Z6 v( T& X# ?
在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。1 ?7 Z4 ^1 a* p! q
Firewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。8 `8 z! {9 _  `6 ^
Firewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:* n  O' G9 H  [! U: d; G  y
drop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。; `  A. S+ l+ O: @4 A/ j
block:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。
) G$ n8 b$ \9 @( J9 @public:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。
' ?2 F8 {! y* R) X" T' U+ _2 pexternal:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。
; X2 c7 `7 K+ y0 T+ einternal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。
# m0 d2 y# Q3 Rdmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。
% m' \: L3 W0 c3 k; Ywork:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。0 f6 s. ~* [; r
home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。
# u* L$ I( i/ `" D! y. m  }trusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。0 {0 M" s; ^  V# A
安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:
" h) `) _) S7 ^1 h+ E. A5 i' _
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld
    # r" x" f7 X+ D3 h/ _
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:
& w" Q$ N9 B% l! b- G
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public
/ F7 C7 J6 F+ B' S) Q* R输入以下内容进行确认哪个区域处于激活状态:$ U* D* q3 p5 _4 E5 h; ?, F0 S- U! B
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public
    ( F/ T2 k/ h) A* e
  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
    % z" \* f4 a- o0 _; m
  2.   target: default2 V/ h0 T' }( W0 \
  3.   icmp-block-inversion: no
    1 [6 b2 S% R6 v% e4 q
  4.   interfaces: . Z5 {. X% W+ z4 Y
  5.   sources:
    ( b* j; I' e3 }: u# ]4 j
  6.   services: dhcpv6-client mdns samba-client ssh
    ! ]4 r& P& ?! e1 D: i* z  |
  7.   ports:
    ) b7 t. v$ J+ a% Q, u9 f: v
  8.   protocols: 0 E, O% X  g; X8 B/ k
  9.   masquerade: no
    ( a$ h* s3 ]7 l) }2 [: p) R. i
  10.   forward-ports:
    3 r% @8 |7 L5 h4 [' L) Q
  11.   source-ports:
    ' t0 H7 \2 X, s2 y/ C$ g7 K; H8 ?5 c
  12.   icmp-blocks:
    7 I$ q* @1 y$ m" [: a0 y
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码

- a: X% Q( L9 y使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。
' a2 J% c: j1 x3 E$ \3 ~具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围+ E& I: z$ e  O, E. Z% p
  1. 103.21.244.0/22
    0 j7 n1 P0 b2 o  Z
  2. 103.22.200.0/229 S# F  D" a# D8 R* N4 m$ k
  3. 103.31.4.0/226 v# D) M3 W$ S
  4. 104.16.0.0/13
    6 ^; ]+ H, z6 U1 V+ G
  5. 104.24.0.0/14- _* Y9 ]5 P; @, s/ }
  6. 108.162.192.0/18" S; K/ @9 ~! Y: W. N# G
  7. 131.0.72.0/22
    6 N' g7 ]) o! w8 z/ ~8 ]6 r( Q3 j( @
  8. 141.101.64.0/18
    5 h/ l7 f6 o8 I; r/ X8 U# {4 _" `
  9. 162.158.0.0/15
    3 n: k5 w8 }- m
  10. 172.64.0.0/13( q5 {* [0 u/ I8 k& U2 ^, b* e0 P
  11. 173.245.48.0/203 q3 \  \* f5 X+ ~
  12. 188.114.96.0/20
    ; D8 a/ ~0 F* I5 r- |2 t
  13. 190.93.240.0/20' }( Y; ]9 I. x$ ^. \
  14. 197.234.240.0/22
    * o- i7 L, Q) w/ h, i  R" G0 {
  15. 198.41.128.0/17
复制代码

% n% G2 y# ~' j0 N& p与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。3 I" {0 V8 r3 v0 _
将这些 IP 列表逐一加入 trusted 区域,使用命令如下:
. [% X" D! P! T
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20
    + t# V3 u; k) _; ^
  2. ……7 h3 |$ r& C6 k% H1 Z! `
  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)
    6 x% R$ ^+ v7 J
  2.   target: ACCEPT2 k8 v2 J' p( ?: K* O
  3.   icmp-block-inversion: no
    8 [% N6 q; m+ K
  4.   interfaces: 9 `* ^" q8 R$ N1 a
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/22
    ' r& M2 _; Q$ I, C, H* L. n
  6.   services:
    ' J- K$ `$ y: a. X, j0 c) a7 q
  7.   ports:
    # _9 ?1 n$ y( K" {7 q% \
  8.   protocols:
    ) |) {) j3 W, r
  9.   masquerade: no
    : H9 n* R7 [( u; D. l
  10.   forward-ports: - R/ c. S+ A1 R& w! ]; k
  11.   source-ports: / K" ?: f. }9 `
  12.   icmp-blocks:
    8 y/ T! O$ s2 l7 D* B, @/ x4 F
  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
复制代码
至此,白名单设置正式生效。- ^5 F( E# {* Z8 d1 @) V7 V
6 A0 f" M3 L, e) ^, s2 @! \# n8 A

3 a( j8 d4 Q, |8 v0 O2 a% G
( a0 }2 U, J6 e$ G+ f' h# l- B: T$ I0 z2 W1 l+ D, m4 k$ N8 ^

, a6 [  D6 @9 O! D8 r! ?) T
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-6-20 01:06 PM , Processed in 0.085566 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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