我正在寻找与ufw default deny
firewalld等效的东西;这个想法是,当我通过 SSH 登录到我的新服务器后,我想阻止所有传入的新连接,以便我有时间更新和保护系统。我使用带有firewalld的CentOS7。
答案1
要实施在默认区域上制定的丰富规则,以丢弃任何和所有 IPv4 流量:
firewall-cmd --zone=$(firewall-cmd --get-default-zone) \
--add-rich-rule='rule family=ipv4 source address=0.0.0.0/0 drop'
这模仿了ufw default deny
行为;要改为发送 ICMP 拒绝消息,请将 更改drop
为reject
。上述规则特定于 IPv4;对于 IPv6,请使用:
firewall-cmd --zone=$(firewall-cmd --get-default-zone) \
--add-rich-rule='rule family=ipv6 source address=::/0 drop'
经过调查,这会在 iptables 中添加一个条目后“接受相关且已建立”的连接,因此它不会破坏您现有的 ssh 会话。在我的测试中,生成的 iptables“链”(对于默认区域“public”):
INPUT -> INPUT_ZONES -> IN_public -> IN_public_deny
如果您希望在更新过程中重新启动,请添加该--permanent
标志。
如果您不希望在更新过程中重新启动,则可以使用该--timeout
标志,它接受诸如5s
、10m
或 之类的值15h
,分别表示“5 秒”、“10 分钟”或“15 小时”。此类规则将在该超时期限后被删除。
当您想要删除已添加的规则时,只需firewall-cmd
像以前一样运行,但替换--add-rich-rule
为--remove-rich-rule
;以 IPv4 为例:
firewall-cmd --zone=$(firewall-cmd --get-default-zone) \
--remove-rich-rule='rule family=ipv4 source address=0.0.0.0/0 accept'
参考:http://www.firewalld.org/documentation/man-pages/firewalld.richlanguage.html