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

如何使用 FirewallD 开启 IP 白名单

[复制链接]

986

主题

92

回帖

5万

积分

管理员

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

( `0 G& j6 ]( X/ c
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。
8 C' ^) n* S8 {: M在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。
% [) }- r5 C- p% ]' |; RFirewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。
% U. S6 c+ @4 d0 L* zFirewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:
& N+ x% n2 ]- edrop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。: Q3 d* _6 F) _- H6 L* w& d
block:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。$ C' g* S0 W% Q6 ^0 O
public:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。( H4 B6 t6 X& ?# E2 k& x5 ]" k% R/ y5 G
external:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。) b; S- h( |8 @) ?" I
internal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。
9 s1 d# Z3 p; S: Q! p6 Bdmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。1 \  ~" b6 i# t- Q
work:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。
% P; u* `  d0 f" y! r8 R. }/ R3 u8 {home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。
. ~0 ?) e" j4 _6 [trusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。# i9 D1 B- }/ }0 `- w, U
安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:! v- J  _4 t2 z5 P  Z/ ~
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld6 U9 k" a; f2 k
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:2 g5 G- b7 m, L: h
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public
8 M! y  N- e1 h/ U% V输入以下内容进行确认哪个区域处于激活状态:
+ U( }  h. ]2 h
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public
    * ^, b1 k. f7 y
  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/ m1 k+ k0 s3 X  u
  2.   target: default
    ! j+ [2 s% D, q  t; n
  3.   icmp-block-inversion: no
    ) r1 b+ ~5 F2 G/ e& K. {
  4.   interfaces:
    8 Q& C1 ^$ r* ?6 b% ~
  5.   sources: 2 ?, Q8 c' ^# |: f1 @
  6.   services: dhcpv6-client mdns samba-client ssh( P, g; M$ E9 Q' q) Z
  7.   ports:
    , ~: p! E: e8 k/ j% k8 G1 H
  8.   protocols: ) M# @) }" e! x
  9.   masquerade: no8 A) {8 A* L/ T! [( L  c  }+ N* v
  10.   forward-ports: ; v  y& v5 ?, b
  11.   source-ports:
    8 M0 u4 w8 B% n1 E. {% x
  12.   icmp-blocks:
    1 C  V" \. |% @, v/ n
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码
# o$ L+ v, p1 r* ^1 G
使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。
: P: O0 V4 ]( v8 g) Y+ x具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围4 f# E1 X! M- F
  1. 103.21.244.0/22
    ) [  m/ ?8 L& x
  2. 103.22.200.0/22
    # C1 w# `- W8 C3 k' H9 ]
  3. 103.31.4.0/22  C- c2 I' b, x6 J
  4. 104.16.0.0/13
    - @1 W* ~* I( b6 D
  5. 104.24.0.0/148 u: F( S- U6 t
  6. 108.162.192.0/18
    ) j* h/ m/ R+ q' ]3 {, \& w* R% m
  7. 131.0.72.0/22
    2 v/ y! A+ Z! H8 a! ]1 E, K
  8. 141.101.64.0/18$ _8 M1 E' t/ w: ?2 n; O' N
  9. 162.158.0.0/155 S' N7 G3 G' L1 T- V
  10. 172.64.0.0/13
    7 }; f, r. v; i: Y% c. w4 r
  11. 173.245.48.0/20
    9 M7 N. l- p0 G2 O! }( s1 l3 i
  12. 188.114.96.0/20
    ' l7 y; ^; J+ f" o6 c! n) `' g
  13. 190.93.240.0/20
      p, z. k! S, L* n5 g/ l
  14. 197.234.240.0/22
    5 @5 H; w# M" k) i* ?7 n" T
  15. 198.41.128.0/17
复制代码
' g& `9 K7 Q: i2 e& r( C6 Z9 K+ h
与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。
% k3 y1 A& T; v( t0 v: T将这些 IP 列表逐一加入 trusted 区域,使用命令如下:
% X2 @9 l: N+ u3 I( {% d0 S: Q, e
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20
    1 q; u: Q' c4 Q+ f% A7 O
  2. ……/ r: n5 W8 I) _0 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)
    9 H( m( a9 z+ v! c
  2.   target: ACCEPT- _) s- `) T+ G- B# K
  3.   icmp-block-inversion: no
    - p5 l) W8 J; T8 ]* E: b) N
  4.   interfaces:
    4 }7 v  p# u) @; v
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/225 y9 d1 B; {$ b+ n  W9 g
  6.   services:
    0 p1 O( d1 ]: T% g' T2 Q
  7.   ports:
    + S) C- N7 S" x4 v+ z# M
  8.   protocols:
    3 m; F" O8 U, e7 a5 r
  9.   masquerade: no
    . M: _. }  p/ @. L8 t' S) H
  10.   forward-ports:
    # u) _9 M; i7 v0 ]
  11.   source-ports: 1 }4 P3 c( D8 Z
  12.   icmp-blocks:
    2 y0 D& v) S. N# c5 R' G: r9 d
  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
复制代码
至此,白名单设置正式生效。& ^5 I; @7 d, X
4 [* z# ^  N5 f: h; `

/ _6 F- y# {) b- W& K% j( _9 _: Q+ ?6 k5 l) X! {6 F

$ m/ T0 \! @1 f/ O! H0 H3 S- U2 W4 V( \4 @! H
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2026-3-21 11:54 PM , Processed in 0.148750 second(s), 23 queries .

Powered by xyh-moon X3.5

© 2001-2025 Discuz! Team.

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