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

如何使用 FirewallD 开启 IP 白名单

[复制链接]

989

主题

92

回帖

5万

积分

管理员

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

5 Z) y: v( d( T" W
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。; Z9 V9 P) H; A, m7 d) `; g% p
在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。; E' l) y# a/ k& v  b1 b
Firewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。
) [( r5 X6 K: AFirewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:- v0 _9 V( h4 g% M- Q7 D6 K
drop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。) w8 Z, V# ^$ {# z$ f+ i- ?% ]) W
block:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。
" g4 q. d2 S: K8 E& ppublic:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。2 ?3 {9 I6 {7 z' X5 _) J6 [
external:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。
8 y, x- b* u: ainternal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。5 ?( p. \5 Q& {3 a2 J& Q! h/ K! m, R
dmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。
4 W* c' s, i/ n4 R! g* ~work:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。
% T! G3 D4 l/ g* ?home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。
6 m+ }" m/ a7 o6 B  ?. gtrusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。, l& R* w6 e  k9 V
安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:: M6 |! W- X3 t) ~2 B% y9 U0 m
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld, A- q" p9 J& O8 C
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:
0 r; o; K  N, k6 z' h
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public
! L- S1 V, B4 L2 s5 G% I输入以下内容进行确认哪个区域处于激活状态:2 u6 Y; X' T  A
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public6 Z9 r. Z; i- O9 e8 n$ E. C
  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. home8 D# B0 M) A+ E: G
  2.   target: default  C/ N0 D2 d2 [% T' `4 o
  3.   icmp-block-inversion: no
    0 P' d- g/ V. }& `5 L; f" F2 I
  4.   interfaces:
    ) Z; \3 E, H, r+ n: f% C
  5.   sources:
    7 _) H4 L9 D. H
  6.   services: dhcpv6-client mdns samba-client ssh
    - I  ?' Z8 b# v( N. }0 Z
  7.   ports:
    ( q, u3 q6 @- _' G
  8.   protocols: 1 L' t" q* }5 b1 u9 d
  9.   masquerade: no9 i0 T( G/ ?/ t8 T. C. {$ D# h
  10.   forward-ports:
    & d5 r% ?; u) `0 D7 y  A
  11.   source-ports:
    * D3 G. @7 w9 \9 i* }4 N
  12.   icmp-blocks:   Z( d& E& b% T. Z; s4 S
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码

: E) ^1 {; `- `. f. E1 M使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。/ w- `4 d  s9 K  [0 `3 b
具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围
* E  I" N1 R( g+ z  [+ J
  1. 103.21.244.0/22
    " R0 K& g% r* ?8 K; Q0 i7 @7 [
  2. 103.22.200.0/22* R) N! F% D0 D* }& `; V) s5 k
  3. 103.31.4.0/22
    3 `  _) Q3 _9 v- d" q  G. i
  4. 104.16.0.0/13
    * w( }2 J8 u$ P7 j
  5. 104.24.0.0/141 \* ?- ^. ~5 M  N
  6. 108.162.192.0/18- X- ~& }7 ^. m- N0 ^' J7 U* Z) ?' T* `
  7. 131.0.72.0/221 c" c# v" F. l& O/ a/ |9 L
  8. 141.101.64.0/18
    + k0 ?; G2 x  y. d3 q
  9. 162.158.0.0/150 |; X# U# g8 D9 A( G" S7 N
  10. 172.64.0.0/13; b/ b) W! |3 `% h: e' U
  11. 173.245.48.0/20
    8 @. _! Z; a- x- A3 W# S2 c
  12. 188.114.96.0/200 `+ Z# j/ t8 i5 L/ `3 @
  13. 190.93.240.0/20
    7 z+ A; q" t# O. i, I
  14. 197.234.240.0/222 a) g# l$ ?# H
  15. 198.41.128.0/17
复制代码

5 k' l  Z# f/ U$ B: v1 ^( B0 B8 `8 q与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。
! ?* C+ p  y0 G$ d8 _, f: ^/ o将这些 IP 列表逐一加入 trusted 区域,使用命令如下:2 w/ c+ U. N7 l4 Z2 c2 a% @; `! l
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20
    , T+ m; m1 j* X( C  @" G
  2. ……
    ( U4 T1 R- N' e6 u) J
  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)
    ) j& _! _$ o: T1 k) ^3 _
  2.   target: ACCEPT
    / F8 U- ?  A1 b0 A$ S2 M: ^% b! t
  3.   icmp-block-inversion: no. M' h: W( A6 m3 i2 c
  4.   interfaces:
    + s' x: `. q; Z
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/22
    $ X$ N# L$ R" b' ?
  6.   services:
    % h! p) Q: G( s. g
  7.   ports:
    0 T6 B, r. F4 i5 ]
  8.   protocols:
    ! z2 h8 K0 H/ V- e7 A2 {- G
  9.   masquerade: no4 Z& x  _6 G! j' I) j) _/ o8 T: j
  10.   forward-ports: / S8 U5 p5 F9 m( u
  11.   source-ports: 2 _: L& t. O) V4 A1 Q
  12.   icmp-blocks: ( G; R* x6 ]8 _( ~' w7 g" m, ~
  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
复制代码
至此,白名单设置正式生效。& b0 A2 i( t7 y$ d; p

- Q8 b4 x4 z: ^4 G! b+ E$ D/ F
. v0 A9 W+ L& N+ m* @. e: @6 _1 r$ K8 P

$ P  l6 g5 `/ k+ ]- |
) l8 L9 M1 n# G
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

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

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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