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

如何使用 FirewallD 开启 IP 白名单

[复制链接]

991

主题

92

回帖

5万

积分

管理员

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

, H2 z; x. p: @5 ?3 H- ~1 B
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。+ r" G% f, u1 q% ~
在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。
1 F/ C% @0 \( O, i* L" W4 H# d2 i) r$ \Firewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。
# Z* e0 J4 q* v) X; K. R7 ]% UFirewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:
+ Z) ~7 e  }# y0 Bdrop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。
6 \' d& p0 c2 B, ublock:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。2 ]8 y3 j6 Q$ @
public:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。
6 [" ~, f: @# H0 O; w4 Jexternal:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。
8 _) c% t- X8 y" o8 Minternal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。5 D# \1 e* g# ^2 ?6 p1 V8 [
dmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。
. u# d; j' X; E: p9 g( f9 o- Twork:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。% y4 s" M- M8 @* Q& R8 \/ R
home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。! s' `6 Z( n! C  m
trusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。
9 Z* Z, d$ D1 w  F安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:4 N* n- `5 j) z  b0 m  k$ r
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld* b; [, s- Z- I6 I3 j
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:
5 \+ ~$ ~6 _7 @  ~
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public- ]- P$ t" j3 `2 \$ P' C
输入以下内容进行确认哪个区域处于激活状态:. z5 t+ {# i: K$ |8 j
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public# \0 k: w/ b4 p; M) b: L& r
  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" E) x0 g* s0 G$ n5 {
  2.   target: default
    ( Z- Z4 V' I" h9 P- H% m
  3.   icmp-block-inversion: no
    ( j- g! F- g" P: C0 o
  4.   interfaces:
    + o( g4 s) P9 E+ O
  5.   sources:
    1 p8 o; b" [3 Y" `3 {8 H% b: }
  6.   services: dhcpv6-client mdns samba-client ssh
    - \% \, D& P, o: e. |. F8 V
  7.   ports: $ Z0 I' R7 f: y' ]- z& T
  8.   protocols: 7 D* L) L* w" i$ w
  9.   masquerade: no
    4 {6 C( I% f4 E
  10.   forward-ports: + p1 O4 N( j$ _6 M/ M/ A
  11.   source-ports:
    0 Q; |! x3 T' h$ ~8 G/ a# A
  12.   icmp-blocks:
    . N3 p) o6 b. o  ]3 c5 z
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码

8 I6 Z" Q! e9 ^' g6 w使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。
6 ?6 [2 p7 D- g2 {& }, R具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围
  C3 A) m; |) E9 Q: q
  1. 103.21.244.0/22
    * C7 ~. X0 D/ v  V5 }$ o8 J
  2. 103.22.200.0/22
    6 T% E* D* R& m; |$ [( Q% R
  3. 103.31.4.0/22% r0 E& f3 X; e/ a* d+ r: U* ?+ h7 `
  4. 104.16.0.0/131 d( X/ L1 ?* Y6 Z8 D6 F
  5. 104.24.0.0/14. M& L" C9 G& t- a1 i1 g: i4 B
  6. 108.162.192.0/18
    $ F5 {- P6 y  c& u- l) H
  7. 131.0.72.0/22
    8 }2 R8 N8 F* B* x+ M0 z
  8. 141.101.64.0/18
    & u; L/ l3 S' r/ [9 K6 L3 m
  9. 162.158.0.0/15
    / O+ U0 ?% ]* j/ ~9 U! l% x0 b3 q' J5 ~( S
  10. 172.64.0.0/134 ?. B' ?( h' v1 N: k
  11. 173.245.48.0/20
    8 K4 @) y  ^; ?: C* Q' b9 r
  12. 188.114.96.0/203 }5 k6 S* h3 k4 [9 E7 L9 W9 l3 W8 `
  13. 190.93.240.0/20
    ( l2 X, O' m) ^1 v/ t: Z  B3 m
  14. 197.234.240.0/22! y8 P5 K/ m5 O8 o6 O
  15. 198.41.128.0/17
复制代码

' n! X4 v3 b- `" Z( c: p与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。: V4 w. p& z) k1 q* h/ W. r) r7 A
将这些 IP 列表逐一加入 trusted 区域,使用命令如下:
& D$ c: J, \1 P1 q9 j! k6 Z) c
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20
    : o; c0 C8 j4 y5 l+ ]
  2. ……
    ( @. r1 p* b0 B% j8 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)5 E! T  J/ e: F/ G9 _
  2.   target: ACCEPT
    " _1 i8 N7 G; r3 |' B, y# L5 v  [
  3.   icmp-block-inversion: no
    - e9 F: g3 M/ {# k
  4.   interfaces:
    ) }5 N8 g: d: J
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/22' T' j; j( l5 ?/ }" Q! H* K7 x/ _
  6.   services: 8 ^8 V7 i: B( h/ D& t( k
  7.   ports: + [; ~4 i+ C2 G
  8.   protocols: ( m7 x$ M+ A1 e. Z# z" N# [
  9.   masquerade: no. H  R4 q3 H. U! `, S& s+ c* E' p6 l
  10.   forward-ports: & t$ m: [! K/ i/ }
  11.   source-ports: ; x( B( n; @( A
  12.   icmp-blocks: 2 g+ ~; g; J2 H) h. J$ N
  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% R2 [: S& J  n
0 u, X4 B) }) F; V- \7 _: E) d9 H0 ~* O% I4 Y
6 W/ @9 l- i. \) G" W

; G# r9 D2 v9 l
( O# O- D5 ^' D; v( r. v) h- O
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-8-5 03:29 PM , Processed in 0.090257 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2026 Discuz! Team.

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