firewalld (v0.4.4.2)
我正在尝试在 Debian 9 上配置REJECT
来自内部网络的无效请求。
但是,如果我将相关区域的默认目标设置为REJECT
,请求仍然会被丢弃。 (如果我测试它,我会得到连接超时而不是被拒绝。)
根据文档,REJECT
不是静态分配的,但是:
%%REJECT%% 目标用于块区域中以拒绝 (使用默认的firewalld拒绝类型)每个数据包不匹配任何规则。
所以看来默认拒绝类型是错误的。我不知道如何改变这个。感谢您的任何建议。
iptables -L
(裁剪):
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
INPUT_direct all -- anywhere anywhere
INPUT_ZONES_SOURCE all -- anywhere anywhere
INPUT_ZONES all -- anywhere anywhere
DROP all -- anywhere anywhere ctstate INVALID
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
[...]
也许firewalld正在使用REJECT
上面的内容,但它看起来很好icmp-host-prohibited
。但是我没有从客户那里得到这个答案。
iptables -vnL
:
Chain IN_internal (1 references)
pkts bytes target prot opt in out source destination
0 0 IN_internal_log all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 IN_internal_deny all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 IN_internal_allow all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
答案1
有时,某些操作系统可能无法正确响应icmp-host-prohibited
TCP 连接的消息,因为拒绝 TCP 连接的经典预期方法是通过 TCP RST 数据包。 (或者某些防火墙可能无法识别与 TCP 连接尝试相关的 ICMP 响应,并将其过滤掉?)
iptables
(并且通过扩展,也)的默认拒绝方法firewalld
是icmp-host-prohibited
,它试图成为一种“一刀切”的拒绝方法,同样适用于所有协议。因此,您可能希望使用拒绝类型为 TCP 数据包添加自定义拒绝规则tcp-reset
。
TCP 拒绝的丰富规则的语法firewall-cmd
如下所示:
firewall-cmd --zone=internal --add-rich-rule='rule protocol value="tcp" reject type="tcp-reset"'