存在 Firewalld 拒绝规则,仍有流量进入

存在 Firewalld 拒绝规则,仍有流量进入

我在 ServerFault 上问了同样的问题,0 个反应...

我们开发了一个简单的工具,每当我们的服务器的 SMTP 端口反复受到攻击时,它就会向防火墙添加拒绝规则。我们发现某些规则未应用,因为流量仍然来自某些 IP 地址。一个例子:

rule family="ipv4" source address="45.125.66.22" reject
rule family="ipv4" source address="45.125.66.24" reject

我仍然看到来自这些地址的流量,因此显然防火墙允许它们通过。

28/07/2022 08:27:31   SMTP Server: Authentication failed for user monica ; connecting host 45.125.66.24

使用以下命令自动创建并激活规则:

/bin/sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=<ip-address> reject' --permanent
/bin/sudo firewall-cmd --reload

服务器是 CentOS Linux 版本 8.5.2111...我知道我们应该转移到不同的 Linux 发行版。

我错过了什么?我该怎么做才能使这项工作成功?


更新

iptables-save 的输出:

# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*filter
:INPUT ACCEPT [1160:109252]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1129:138455]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*security
:INPUT ACCEPT [1106:106324]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1130:138703]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*raw
:PREROUTING ACCEPT [1160:109252]
:OUTPUT ACCEPT [1132:139087]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*mangle
:PREROUTING ACCEPT [1160:109252]
:INPUT ACCEPT [1160:109252]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1135:139543]
:POSTROUTING ACCEPT [1135:139543]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*nat
:PREROUTING ACCEPT [239:11084]
:INPUT ACCEPT [185:8156]
:POSTROUTING ACCEPT [6:440]
:OUTPUT ACCEPT [6:440]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022

# firewall-cmd --get-zones
block dmz drop external home internal nm-shared public trusted work

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client domino http https smtp ssh websockets
  ports: 
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
    rule family="ipv4" source address="45.133.1.201" reject
    rule family="ipv4" source address="31.210.20.23" reject
    ...

# firewall-cmd --list-rich-rules
... lists the same rules as above, some 520 lines

更新

# firewall-cmd --info-service domino
domino
  ports: 1352/tcp
  protocols: 
  source-ports: 
  modules: 
  destination: 
  includes: 
  helpers: 

# firewall-cmd --info-service websockets
websockets
  ports: 3000-3029/tcp
  protocols: 
  source-ports: 
  modules: 
  destination: 
  includes: 
  helpers: 

答案1

在 RHEL/CentOS 8 和 RHEL 9 中,firewalld使用nftables而不是经典的iptables.这就是为什么你iptables-save看起来根本没有规则。

要实际查看您的nftables防火墙规则,请运行:

nft list ruleset

可以手动创建一组nftables规则,这些规则的优先级高于 所创建的规则firewalld,因此,如果有人配置了一些规则(例如,通过cockpitI see 在您的配置中允许firewalld,或通过手动编辑) ,/etc/nftables/main.nft除了firewalld这样做时,查看整个规则集以了解各种规则的处理顺序非常重要。

如果手动创建的过滤器表包含允许 SMTP 的规则,并且该表的优先级高于 由 创建的过滤器表firewalld,则这可能解释了为什么您的firewalld配置在阻止来自这些源地址的 SMTP 方面无效。

答案2

对于您的用例,您不需要丰富的规则,也不需要重新加载防火墙规则。

将这些源添加到firewalld块区域就足够了:

firewall-cmd --zone=block --add-source=45.125.66.22
firewall-cmd --permanent --zone=block --add-source=45.125.66.22
firewall-cmd --zone=block --add-source=45.125.66.24
firewall-cmd --permanent --zone=block --add-source=45.125.66.24

注意:这不会终止已经建立的连接!

你可以这样杀死它们:

ss -K dst 45.125.66.22
ss -K dst 45.125.66.24

答案3

由于某些有线原因,firewalld 只是不生成任何内容。结果内核接受所有传入流量。

只需使用和学习简单的 iptables 和 ipset,而不是混乱的firewalld - 这将更加高效和直接。

为了快速启动,只需添加规则,例如

iptables -A INPUT -s bad_ip -j DROP

并禁用firewalld。

然后为你的任务制定规则。状态规则、连接跟踪、ipset、端口...

相关内容