我在 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
,因此,如果有人配置了一些规则(例如,通过cockpit
I 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、端口...