如何使用 FirewallD 开启 IP 白名单

如何使用 FirewallD 开启 IP 白名单Ljd免费资源网
Firewalld 是可用于许多 Linux 发行版的防火墙管理解决方案,它充当 Linux 内核提供的 iptables 数据包过滤系统的前端。Ljd免费资源网
在本教程中,介绍如何为服务器设置防火墙,并使用 firewall-cmd 管理工具来管理防火墙添加 IP 白名单。Ljd免费资源网

Firewalld 中的基本概念

区域(zone)

区域(zone)基本上是一组规则,它们决定了允许哪些流量,具体取决于你对计算机所连接的网络的信任程度。为网络接口分配了一个区域,以指示防火墙应允许的行为。Ljd免费资源网
Firewalld 一般已经默认内置了 9 个区域(zone),大部分情况下,这些已经足够使用,按从最不信任到最受信任的顺序为:Ljd免费资源网

drop:最低信任级别。所有传入的连接都将被丢弃而不会回复,并且只能进行传出连接。Ljd免费资源网
block:与上述类似,但不是简单地删除连接,而是使用 icmp-host-prohibitedor 和 icmp6-adm-prohibited 消息拒绝传入的请求。Ljd免费资源网
public:表示不信任的公共网络。您不信任其他计算机,但可能会视情况允许选择的传入连接。默认情况下,此区域为激活状态。Ljd免费资源网
external:如果你使用防火墙作为网关,则为外部网络。将其配置为 NAT 转发,以便你的内部网络保持私有但可访问。Ljd免费资源网
internal:external 区域的另一侧,用于网关的内部。这些计算机值得信赖,并且可以使用一些其他服务。Ljd免费资源网
dmz:用于 DMZ (DeMilitarized Zone) 中的计算机(将无法访问网络其余部分的隔离计算机),仅允许某些传入连接。Ljd免费资源网
work:用于工作机。信任网络中的大多数计算机。可能还允许其他一些服务。Ljd免费资源网
home:家庭环境。通常,这意味着您信任其他大多数计算机,并且将接受其他一些服务。Ljd免费资源网
trusted:信任网络中的所有计算机。可用选项中最开放的,应谨慎使用。Ljd免费资源网

安装并启用防火墙

Firewalld 是在某些 Linux 发行版上默认安装的,但有时候需要手动安装。CentOS 下的安装命令如下:Ljd免费资源网

  $ sudo yum install firewalld

启用 Firewalld 服务并允许自启动Ljd免费资源网

  $ sudo systemctl start firewalld  $ sudo systemctl enable firewalld

确认 Firewalld 服务是否正在运行Ljd免费资源网

  $ sudo firewall-cmd --state

返回 running 则表示已经运行;not running 则表示没有运行。Ljd免费资源网

熟悉当前的防火墙规则

输入以下命令,可以看到当前选择哪个区域作为默认区域:Ljd免费资源网

  $ sudo firewall-cmd --get-default-zone

一般情况下会返回 publicLjd免费资源网
输入以下内容进行确认哪个区域处于激活状态:Ljd免费资源网

  $ sudo firewall-cmd --get-active-zones

一般情况下,在只有一个网卡的情况下会返回:Ljd免费资源网

  public    interfaces: eth0

获取可用区域的列表,输入以下命令:Ljd免费资源网

  $ sudo firewall-cmd --get-zones

返回:Ljd免费资源网

  block dmz drop external home internal public trusted work

通过指定 –zone 的 –list-all 参数,我们可以看到与区域关联的特定配置:Ljd免费资源网

  $ sudo firewall-cmd --zone=home --list-all

返回值:Ljd免费资源网

  home    target: default    icmp-block-inversion: no    interfaces:     sources:     services: dhcpv6-client mdns samba-client ssh    ports:     protocols:     masquerade: no    forward-ports:     source-ports:     icmp-blocks:     rich rules:

获取可用区域列表的详细信息,输入以下命令:Ljd免费资源网

  $ sudo firewall-cmd --list-all-zones

使用 Firewalld 配置 IP 白名单

如前所述,Firewalld 有内置的区域,可以利用这些区域不同的特性,来简单快捷地配置 IP 白名单。Ljd免费资源网
具体做法就是,首先要收集你要允许的 IP 白名单列表,比如 Cloudflare 的所有 IP 范围Ljd免费资源网

  173.245.48.0/20  103.21.244.0/22  103.22.200.0/22  103.31.4.0/22  141.101.64.0/18  108.162.192.0/18  190.93.240.0/20  188.114.96.0/20  197.234.240.0/22  198.41.128.0/17  162.158.0.0/15  104.16.0.0/12  172.64.0.0/13  131.0.72.0/22

与此同时,你也要加入你自己的 IP 地址,否则白名单一旦生效,可能会将你阻挡在外而无法连接。Ljd免费资源网

将这些 IP 列表逐一加入 trusted 区域,使用命令如下:Ljd免费资源网

  $ sudo firewall-cmd --permanent --zone=trusted --add-source=173.245.48.0/20  ……  $ sudo firewall-cmd --permanent --zone=trusted --add-source=131.0.72.0/22

使 trusted 区域设置生效,使用命令如下:Ljd免费资源网

  $ sudo firewall-cmd --reload

确认 trusted 区域是否设置正确,使用命令如下:Ljd免费资源网

  $ sudo firewall-cmd --zone=trusted --list-all

返回:Ljd免费资源网

  trusted (active)    target: ACCEPT    icmp-block-inversion: no    interfaces:     sources: 173.245.48.0/20 …… 131.0.72.0/22    services:     ports:     protocols:     masquerade: no    forward-ports:     source-ports:     icmp-blocks:     rich rules:

因为此时已经设置了 trusted 区域,所以还需要切换默认区域从 public 到 drop,以达到无视所有接入连接的目的。使用命令如下:Ljd免费资源网

  $ sudo firewall-cmd --set-default-zone=drop

再将默认网卡 eth0 分配给 drop 区域,使用命令如下:Ljd免费资源网

  $ sudo firewall-cmd --permanent --zone=drop --change-interface=eth0

使白名单最终生效,使用命令如下(注意:请再次确认你的所有 IP 都加入了 trusted 区域):Ljd免费资源网

  $ sudo firewall-cmd --reload

至此,白名单设置正式生效。Ljd免费资源网

后记

之所以要设置 IP 白名单,是因为最近遇到了 SYN_RECV 攻击,大量的 IP 连接到服务器的 80 和 443 端口,瞬间让整个机器动弹不得。Ljd免费资源网
因为网站使用了 Cloudflare 的 CDN 服务,所以设置了只允许 Cloudflare 的所有 IP 以及自己的常用固定 IP 可以访问。Ljd免费资源网
除此之外的 IP 则一律不许连接,这样在保证网站正常的情况下,也可以防止 DDoS 攻击。Ljd免费资源网

参考链接

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-firewalld-on-centos-7Ljd免费资源网

《免费共享资源》本网站内容收集于互联网,不承担任何由于内容的合法性及健康性所引起的争议和法律责任。
免费共享资源网 » 如何使用 FirewallD 开启 IP 白名单

发表评论

提供最优质的资源集合

立即查看 了解详情