是否可以通过 ssh 连接远程重新启动 IPFW 或重新加载其脚本而不丢失当前连接?
答案1
我想我找到了问题的答案:在这个讨论我的问题得到了部分回答。是的,确实,当您运行脚本时,它会刷新所有规则,因为开头的许多脚本都使用这一行ipfw -f flush
。
但根据文档,有一个特殊的集 31,无法禁用,并且集合 31 中的规则不会被该ipfw flush
命令删除(但您可以使用该命令删除它们ipfw delete set 31
)。因此,只需set 31
在脚本中添加规则编号并重新启动就不会影响断开 ssh 连接的规则。举个例子:
$cmd 00410 set 31 allow tcp from any to me 22 in via $pif setup keep-state
或者
$cmd 00280 set 31 allow log tcp from any to any 22 out via $pif setup keep-state
答案2
如果您只关心 SSH 会话,那么您可以通过在规则的早期仅使用 SSH 的静态规则来避免刷新动态规则表时发生的断开连接:
例如,代替:
ipfw add 100 allow tcp from any to any 22 in via $pif setup keep-state
ipfw add 101 allow ip from any 22 to any out via $pif setup keep-state
使用:
ipfw add 100 allow ip from any to any 22 in via $pif
ipfw add 101 allow ip from any 22 to any out via $pif
答案3
假设一个 SH 脚本,“/etc/fw.rules”(如果我没记错的话,FBSD 的正常脚本是“rc.firewall”)和 sudo 权限(显然,可以以 root 身份运行):
#sudo sh -c "/bin/sh /etc/fw.rules > /dev/null 2>&1"