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

如何使用 FirewallD 开启 IP 白名单

[复制链接]
发表于 2022-7-4 16:14:01 | 显示全部楼层 |阅读模式

0 U% d2 v" B0 c
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。
% C& ~3 n$ t9 f6 r4 _9 F在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。! b( }4 n# K& g, ]  G
Firewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。+ R8 U4 Q% N1 L2 o! l
Firewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:
3 q( _* C& r2 ~% }+ gdrop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。. B; |3 R  q; \& L# T6 h
block:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。" |' i* u! D, Y5 U
public:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。, w- x* f9 b5 S6 F2 b
external:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。6 ^3 z  O% y" e. j, K) g8 N! k
internal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。
5 P- T; I! ~" F2 xdmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。& H& _) c  S8 y, _* K& t) P
work:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。; [( K2 N0 _. c5 B: t
home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。) g. B, L) G/ @: t, M
trusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。
2 D0 P6 m' m! k/ c0 Y* A/ a. ~安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:
' i3 d4 t. c  B, M  N( W
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld# z. l! \' S/ p7 e- P. g# X" n. _
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:8 V5 h( `7 S- H$ c5 F- D
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public1 I+ Q2 j6 @4 X+ _+ f+ j* y/ V
输入以下内容进行确认哪个区域处于激活状态:
, D- W/ t+ T- T  V6 v
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public  h4 P2 N+ f, Q
  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/ _/ N& p5 C7 e1 n) |+ c: \7 Q
  2.   target: default. m  d) O/ p8 y) t$ H
  3.   icmp-block-inversion: no5 W" N8 L2 N# z. Y* d* Z2 E1 t
  4.   interfaces: 7 a# |/ M: N4 I' `3 v0 T* R9 {( |
  5.   sources: , T1 R- {2 |; f1 {( O' X$ _
  6.   services: dhcpv6-client mdns samba-client ssh
    + L0 f+ L! ^) F& M
  7.   ports:
    1 R  r. G- K# F2 [. e
  8.   protocols:
    ( Z% ?  ~7 D4 j: L/ q
  9.   masquerade: no
    - E9 H8 m- W4 n# j$ K
  10.   forward-ports:
    9 ?$ R) V3 z5 Z) k
  11.   source-ports: 7 U7 q) J; Y0 M% l& Z1 ]
  12.   icmp-blocks: ) y  w7 C, `5 L& h# u
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码
$ H' L( x- t+ c5 T: v# M
使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。
5 `: T: Y0 U5 X0 ^具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围:
/ S* Q) X4 b* |& @. O0 f
  1. 103.21.244.0/22, h% ^0 Q' E& g. ]! m+ l, |- Y( O8 ]
  2. 103.22.200.0/22* Z) V: z" @( T) f: V9 u/ E: p
  3. 103.31.4.0/22
    & _5 H9 Q$ Z$ h3 J) d$ q6 ?
  4. 104.16.0.0/13
      \5 x7 {* G, @1 \. p8 w5 U) l
  5. 104.24.0.0/148 y$ }8 c" B& i' ~  ~2 d
  6. 108.162.192.0/18
    ' O, X. c# |2 z8 S0 H+ V+ [8 }4 b
  7. 131.0.72.0/22; h4 @+ b$ _" a" K3 e1 q% E' M
  8. 141.101.64.0/18
    ( n& I# {+ G0 d- l: N% g' m
  9. 162.158.0.0/15
    4 ~. u- e) p5 r, R
  10. 172.64.0.0/138 [7 i* G, l) M: d+ k
  11. 173.245.48.0/20
    / y2 ^& h, a8 O8 \
  12. 188.114.96.0/20! F9 K! e. S, n9 {
  13. 190.93.240.0/20
    ! [2 o6 V7 c: e, r) c
  14. 197.234.240.0/22
    9 x8 |! Y1 A: q1 E4 D
  15. 198.41.128.0/17
复制代码
0 z2 S9 ?0 y6 o: ?( q) f
与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。4 R9 _( k5 n1 ?' K
将这些 IP 列表逐一加入 trusted 区域,使用命令如下:1 [+ l2 p4 D( Y
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20, p4 E" P, k9 p
  2. ……1 @9 w. Z9 t# }* `* Q9 G
  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)
    : O' B1 Q& R/ s3 J
  2.   target: ACCEPT
    : u/ i/ j  m3 n' |  V4 T; w+ n
  3.   icmp-block-inversion: no- O+ k0 y+ o# A% t$ W7 r: z
  4.   interfaces: 9 i3 \( E+ j# j3 p# y; ?9 `. x
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/225 _0 ~+ \" `$ o, u; x' @4 Q" p
  6.   services:
    5 e1 w) j' e' K  a% C  ]* b2 q
  7.   ports:
    ) s- F% Y6 q! L
  8.   protocols:
    & Q2 m' R5 E* v% w& q
  9.   masquerade: no
    : U: O0 P$ ?+ k0 Q
  10.   forward-ports: % }) S1 {- v3 H; a7 x0 \# n
  11.   source-ports: + G7 ?' l# x5 Z
  12.   icmp-blocks:
    # U* B+ ~( |7 x- S: b1 o8 P
  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
复制代码
至此,白名单设置正式生效。% d: `8 K! A6 F

6 ~0 j2 `1 G) r, T& \2 g" S. d% E- g9 M1 z1 |* o7 b& p$ v
& y+ n1 Z+ a; G; N" Y
/ p9 V9 u- C$ ~% K" {3 T0 R
) W( O$ D! Z4 n* n
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-11-3 02:34 AM , Processed in 0.089334 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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