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

如何使用 FirewallD 开启 IP 白名单

[复制链接]

985

主题

92

回帖

5万

积分

管理员

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

# C) r) J" n, s; S3 m! O1 G
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。
1 C1 C( f, W; x! X/ G1 ]' p在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。
6 D) H: n4 q1 e, x' c) ~& ]# Y) T- v) _Firewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。
) G$ r3 Y' z, m$ GFirewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:
# k0 z- q8 }8 P& M4 g+ H% Vdrop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。, T+ A! Q" |8 H' I$ P  n
block:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。4 ]3 T( ~8 ]( F. s
public:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。+ z( J( I/ [! w7 U9 `2 o6 c
external:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。7 W6 I8 z& c+ d6 x( P
internal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。
9 ~- h  ]  M" ~, ?. ]( ^/ sdmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。7 V, W" X6 o( F+ @) t- d9 q) r7 y3 z
work:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。
% X) z( u' C/ Q' R( q5 L: ]home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。
  T* e1 W/ S% otrusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。. y6 E3 E2 I* P! Y8 T* _. p% g6 g
安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:( V' M6 J# i- y3 {3 }
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld
    # O5 B9 c$ `5 P; r) f
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:
% W. w. w* ?' G6 V" e9 J* l
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public
: B7 m/ A/ e$ G/ |$ N输入以下内容进行确认哪个区域处于激活状态:
! Q( {0 c* p/ N; c8 k
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public% ^3 r+ N( ]! F
  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
    + a( {) c$ T. A6 o$ S' M0 y/ I& X
  2.   target: default0 S9 a; l8 s% z: a% ~; Q1 P) ^
  3.   icmp-block-inversion: no
    3 Y6 y; Y1 Q$ H& x0 K, C. I
  4.   interfaces:
      S4 S+ Q3 M& k: l- N
  5.   sources: * W! }( h+ D% C$ }( S4 H2 D' }$ U
  6.   services: dhcpv6-client mdns samba-client ssh4 v& L8 C3 Y! D3 H! Z
  7.   ports:
    ! {& L( ~9 b: }2 M6 D0 B
  8.   protocols:
    ) i5 j3 T, m, [( A; Z2 b# H" H
  9.   masquerade: no) B. ]: m  L5 r* `
  10.   forward-ports:
    9 L- B) B8 t  I) c
  11.   source-ports:
    ! h/ j0 F  |! x3 J+ T, A
  12.   icmp-blocks:
    + P0 ~; q7 E0 ]9 Z, {
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码
  p5 d0 B! Y" {% T# f$ m* x  }
使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。
8 p4 m' K+ T* X3 I9 u. Y$ c具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围
- B& c" R; ], w+ }: {+ J
  1. 103.21.244.0/22. N( d8 m( @9 h9 O
  2. 103.22.200.0/22$ K4 h0 k* u* O9 g
  3. 103.31.4.0/22
    & v1 t: H: }) x6 P9 y: u+ m
  4. 104.16.0.0/13. c, ~8 \! t+ }" w6 r4 z% E3 j$ {
  5. 104.24.0.0/14
    " `4 B. C, Z" g; p4 K( X
  6. 108.162.192.0/18
    + I- }* J* S- @4 {- V/ P0 i* y
  7. 131.0.72.0/229 g# }0 d9 q2 q
  8. 141.101.64.0/184 u: _% o& B2 q" m/ p9 F, |# d3 H
  9. 162.158.0.0/15/ I- L5 |/ Q. h$ E* G1 d, Q
  10. 172.64.0.0/13
    & Q7 R  }% ^2 }
  11. 173.245.48.0/205 r0 M3 y' }* b) ^9 e
  12. 188.114.96.0/20/ d9 Q% r) M' Y- i5 S5 G9 u$ f2 W
  13. 190.93.240.0/20
    ; g( H7 @& m/ Z( R( h$ M
  14. 197.234.240.0/22
    + M5 L2 c2 v; t4 u& @
  15. 198.41.128.0/17
复制代码
# n% t" L: p$ W9 r5 L3 g" c  c( I
与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。0 t6 f* D. r8 g0 L6 z. `1 S- p
将这些 IP 列表逐一加入 trusted 区域,使用命令如下:
+ j3 Y1 \+ ^/ k; v
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/203 b- c! E; U+ G, K# X
  2. ……
    , D- [% b3 J- A$ f6 ?) j3 B7 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)
    # `5 @! N3 o9 k8 P$ q
  2.   target: ACCEPT
    " G# O9 y* z+ j' }
  3.   icmp-block-inversion: no
    6 g+ x8 e4 E' A: \! j7 L
  4.   interfaces:
    - {; q: w# T6 ~- H* l% k
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/22
    2 m) ]8 K( n* q) K) ?6 I1 V5 L
  6.   services:
    & K+ X2 i& }7 `/ l
  7.   ports:   A1 J! c- Y( G5 n
  8.   protocols:
    + T- P3 s- {1 w# C6 v8 T' D# T9 ^
  9.   masquerade: no$ L8 W# T' h. s: F! v6 u9 j  C, @
  10.   forward-ports: 6 y5 B& Q& M7 r  |, X$ J
  11.   source-ports: + m# d, S- e1 |. J
  12.   icmp-blocks:
    % c. x7 M/ h6 [& w9 K5 R1 G7 t
  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
复制代码
至此,白名单设置正式生效。
) L6 r9 J& U. x- _. f! x+ }& Y* u& y) x2 D: _. l( K, g% [

/ F! e# k: s/ ]
0 y) p) U3 S9 \+ M$ y" {
7 t" T! i. V2 @& c( A) P! T
/ j2 h) E' S1 q; _! _) }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

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

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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