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

如何使用 FirewallD 开启 IP 白名单

[复制链接]

979

主题

90

回帖

5万

积分

管理员

积分
53052
发表于 2022-7-4 16:14:01 | 显示全部楼层 |阅读模式
7 E3 P8 l7 V" W
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。
: b6 s- w9 {1 U8 }$ S1 v6 }在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。
7 h5 v0 r; A4 G  k0 O2 b9 L& CFirewalld 中的基本概念区域(zone)区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。0 h1 J  w+ s# K/ |2 ]
Firewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:
& b8 A5 p3 u5 G1 X# L/ \drop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。; ?/ G0 `0 `' y* ^. x' M
block:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。
$ G8 P) @5 H0 b# Kpublic:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。
. I6 f) E/ X* @& xexternal:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。
' d; e  C. i7 D4 W! j  d4 Hinternal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。1 d  ^+ c6 N! R6 r. l! ~) a8 U1 G
dmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。
$ p- Z$ J: s3 j/ l* Ywork:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。
, t6 H$ j4 O3 Yhome:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。
# P1 a! h5 k8 k& s+ Gtrusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。& W5 A+ ~# o- q; [$ ?: v7 z6 |. k
安装并启用防火墙Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:' b5 y5 ~0 k( H
  1. $ sudo yum install firewalld
复制代码
启用 Firewalld 服务并允许自启动
  1. $ sudo systemctl start firewalld  d3 J0 s+ x" A1 s* _
  2. $ sudo systemctl enable firewalld
复制代码
确认 Firewalld 服务是否正在运行
  1. $ sudo firewall-cmd --state
复制代码
返回 running 则表示已经运行;not running 则表示没有运行。熟悉当前的防火墙规则输入以下命令,可以看到当前选择哪个区域作为默认区域:
! j+ Y3 f8 p% U6 R6 W5 |
  1. $ sudo firewall-cmd --get-default-zone
复制代码
一般情况下会返回 public
' v5 S2 r! k% A+ k输入以下内容进行确认哪个区域处于激活状态:
) S  q  j3 O; l* K2 L; L6 g
  1. $ sudo firewall-cmd --get-active-zones
复制代码
一般情况下,在只有一个网卡的情况下会返回:
  1. public
    ( t; K5 [+ o& U, _0 E+ O' I5 Q  N
  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
    0 @1 ~( ]8 m+ j' ^: |" Q
  2.   target: default
    2 G- A' `; f/ E9 Q! ^" {3 K
  3.   icmp-block-inversion: no
    4 u) q. S. X6 l1 D
  4.   interfaces: 9 Y( H7 y9 A( D$ I9 v
  5.   sources:
    , M0 L! {! O6 B& ]. z0 v# X: I
  6.   services: dhcpv6-client mdns samba-client ssh/ a& @# r, F3 k- x4 E5 ^! m
  7.   ports: 9 B: t6 \( j; O+ i" g0 [
  8.   protocols:   ?& W( i2 q6 y$ Q* I7 h
  9.   masquerade: no% g+ h$ D; c3 p+ S1 H, K( e
  10.   forward-ports:
    1 l4 ?9 p+ q" b* H6 p/ o/ H
  11.   source-ports:
    . K" M' I( B0 m, q+ n
  12.   icmp-blocks: ' {- @+ F# b4 Y. A& n
  13.   rich rules:
复制代码
获取可用区域列表的详细信息,输入以下命令:
  1. $ sudo firewall-cmd --list-all-zones
复制代码
& H/ {# B; O: M7 |) N1 g
使用 Firewalld 配置 IP 白名单如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。+ \$ |" s( U1 i& Z3 M) @
具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围+ q/ `; Y( h4 }1 S9 c
  1. 103.21.244.0/22
    ) d3 {$ A5 k: R, y9 E
  2. 103.22.200.0/225 \8 h1 G( y/ g" C" H: q
  3. 103.31.4.0/22
    + R" ]% s+ ?8 r  V4 e
  4. 104.16.0.0/13' S9 Q4 N' T/ n' R: r; _. S$ J
  5. 104.24.0.0/144 t8 `6 }& a  w# N. i0 v7 B
  6. 108.162.192.0/18# ?! @: ~: Q0 \
  7. 131.0.72.0/22
    ! ^- u- ~6 M8 V; H# J0 _
  8. 141.101.64.0/18
    ' v1 }1 b- [+ w0 q" y0 v
  9. 162.158.0.0/15
    5 C$ T# j3 N- R
  10. 172.64.0.0/13" @2 }: c/ P. F$ x, m
  11. 173.245.48.0/20
    & K8 P% B1 V9 a$ W0 A6 ]
  12. 188.114.96.0/203 b# [4 W5 r1 ?- S4 R
  13. 190.93.240.0/20
    # e5 X, B5 u2 `. A( M
  14. 197.234.240.0/22
    8 H0 v3 B: B: H/ Z$ E
  15. 198.41.128.0/17
复制代码
2 Q& A% }$ Q% X5 Q
与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。% u1 L, f2 l' P* R$ c) k! I
将这些 IP 列表逐一加入 trusted 区域,使用命令如下:
. l" C. {' Z  r7 z
  1. $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20
    3 n; u2 W& o. Y$ n2 I) a* b
  2. ……
    / W+ ^! F; o/ I! }8 f, \
  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)
    # q% J6 X; ~) T* _
  2.   target: ACCEPT
    4 q, ?6 }' B+ b+ R+ W7 t% q
  3.   icmp-block-inversion: no
    ( L$ q0 R3 D& \* g- E- c% x
  4.   interfaces:
    5 E8 Z7 R; ]5 X, V
  5.   sources: 173.245.48.0/20 …… 131.0.72.0/22
    / O4 _$ _* ^1 ?7 s
  6.   services:
    : \; A7 K7 V( W$ B) F8 f0 t  O
  7.   ports: 8 ?/ s# L$ Y9 |5 \$ {1 d
  8.   protocols: ( \/ G# A+ t1 ?% R7 F
  9.   masquerade: no4 E9 B7 r- X' Y1 d+ t
  10.   forward-ports: * @- i6 }+ y6 |0 v! c; `
  11.   source-ports: 4 P0 E! X' o1 `8 A# c9 G' ]
  12.   icmp-blocks:
    0 {' x% D. V& L
  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
复制代码
至此,白名单设置正式生效。" I$ _* Q  U! k. W
+ C# U$ {; \% L' ?1 t

! P6 N6 U& h7 Q/ N3 k" e% ]# D' m/ }0 a6 k" A

- `2 z# h6 A% P, [& W& v2 z0 {8 g1 n; C5 _! g8 }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|

GMT+8, 2025-2-25 00:24 , Processed in 0.115756 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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