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

如何使用 FirewallD 开启 IP 白名单

[复制链接]

985

主题

92

回帖

5万

积分

管理员

积分
53561
发表于 2022-7-4 16:14:01 | 显示全部楼层 |阅读模式

) x- b. T' V) z7 g" J; g1 n; q6 ?: s$ b
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。7 v$ e) x3 G3 ~0 A# i0 C- y
在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。/ d) L; m' {# ~: B7 q
Firewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。6 C; Q: M5 m5 x  f, t2 I
Firewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:
! c8 H3 I1 L4 A& a3 d' _: edrop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。
" l7 F3 f1 x; o$ A! P2 s* Yblock:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。
& j# a! n  g: k* r( upublic:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。
& K( H0 D, F6 J) j: oexternal:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。7 v* H6 T3 U. D5 w: ~
internal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。" U' C( B3 H) |
dmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。# T! ^0 |" M2 ~& l7 ~& b/ m
work:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。$ X9 b7 K+ x$ {* p- m! `. E
home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。
  g" p6 K2 @6 _% Gtrusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。
' ]- p3 t+ A: |2 P9 s安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:
* c5 o6 Y9 c$ f
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld
    * d5 M/ Q% @5 I! {' @: A
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:. ?$ k1 k( r1 B$ Q
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public* S  c+ J( F% Q" _
输入以下内容进行确认哪个区域处于激活状态:9 S3 j; S4 A- W# h4 C7 r! x2 r8 Y! P
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public4 ?+ m' U8 O4 K, C6 Q- b/ j
  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. home4 l5 s$ l. J/ [( Z- }, E; U$ r
  2.   target: default
    + s7 B/ Y; @. r# m: }% f0 {0 H4 V
  3.   icmp-block-inversion: no7 m' N  Z2 [: s( O2 k( r5 Y; E
  4.   interfaces:
    4 k5 p7 Z7 r5 S/ c6 p8 p
  5.   sources: % I3 R4 F; p8 S  S
  6.   services: dhcpv6-client mdns samba-client ssh
    0 k6 I( ^' b( p9 y
  7.   ports:
    ; S+ ]: ]9 |$ Y2 V! l! v. }4 A
  8.   protocols: : T" P6 v5 L5 s" d: ]& L( k. X$ r
  9.   masquerade: no
    0 U+ M, f5 A6 M3 M6 r* j
  10.   forward-ports:   R& v% j/ S' V; w+ |
  11.   source-ports: - r5 v- A7 Y  b. F! \
  12.   icmp-blocks: 5 F, @  t% U( }" Y3 T8 [+ Z
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码
7 F) h% N/ |& h) b
使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。; p7 [( @$ ]! d  v& c4 l+ A$ {
具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围
7 F4 u  A+ `! G, s* a
  1. 103.21.244.0/22
    ! }  A# s9 n/ r' }5 `$ l* S
  2. 103.22.200.0/22
    2 c8 \1 ~: b+ ]
  3. 103.31.4.0/22
    ; v- G$ `7 B, U& N+ a
  4. 104.16.0.0/13
    / i1 z. B( s1 ^8 e
  5. 104.24.0.0/14- a) ]9 S; v9 E% `3 j
  6. 108.162.192.0/18
    1 D6 W, q6 o$ H8 j, y1 e1 A
  7. 131.0.72.0/22
    % g6 n* s2 p# x( M" O/ q
  8. 141.101.64.0/18
    * \( b; a( }$ _9 W8 g$ i
  9. 162.158.0.0/15' x/ n% ]- Q; E& g
  10. 172.64.0.0/13
    " J8 {* H8 c. @8 f
  11. 173.245.48.0/20* [% G( {# o% a- [" A* w- Y
  12. 188.114.96.0/20
    - {9 h0 r$ y4 d7 v: k
  13. 190.93.240.0/20
    $ ?0 `" H- m8 F9 H+ n9 B
  14. 197.234.240.0/22
    ) A( J# j8 B% n; X% o
  15. 198.41.128.0/17
复制代码
+ L* J+ h1 }) J+ D9 N1 G4 M- p
与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。
' G& c% v" u2 F9 O将这些 IP 列表逐一加入 trusted 区域,使用命令如下:! G; f' K) R9 j+ m9 Y: ?
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20
    1 v7 {1 q, ]" R4 V7 J* w. ?6 G
  2. ……
    : Y3 W% {( V5 O2 i9 `6 d) G& K8 @, b
  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)
    / W; Q4 g8 l/ `: A9 V5 A; K8 O
  2.   target: ACCEPT- O, _0 R) M3 ~( e+ l
  3.   icmp-block-inversion: no
    / U$ k! e7 j) y' T+ E
  4.   interfaces:
    2 b9 F2 P" r9 j; O2 q9 ?
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/22
    : W/ z$ }3 Q+ _8 |6 n
  6.   services: . n/ o+ h5 T/ z. J3 y/ ?/ U& u9 I; `
  7.   ports:
    2 r, u& ?! l6 _$ h0 a. ?) n$ ]
  8.   protocols: ; ~, @  T& {, P; c% `. A
  9.   masquerade: no  z9 d! Y  X+ E( u* m
  10.   forward-ports: ( V  ]4 x( @% v1 {7 s# p
  11.   source-ports:
    . G# w& N: H  p! n
  12.   icmp-blocks:
    1 \  U; ~1 D* r, N/ t4 y8 q- D& a
  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
复制代码
至此,白名单设置正式生效。
  V( }, L4 ^2 t% U( _" u$ }1 {
4 l4 q8 o% K/ i/ f/ e$ e4 |& x9 g& o+ A' z/ d, n' S
2 K8 [5 a6 V/ U
& p- |# w2 [, j: P) V' [
  ~- l4 Z. P" U' h, M2 Z: o
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-11-5 05:55 AM , Processed in 0.112508 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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