在我的/etc/pam.d/sshd
我有一行:
session optional pam_exec.so /usr/local/bin/pam_exec_sshd
每当我进行 ssh 登录或注销时,它都会调用我的脚本。脚本内容:
#!/bin/bash
IPTABLES=/usr/sbin/iptables
case $PAM_TYPE in
open_session) act=-I;;
close_session) act=-D;;
*) exit 0;;
esac
$IPTABLES "$act" INPUT -s "$PAM_RHOST" -j PAM_EXEC_SSHD
PAM_EXEC_SSHD
当发送到任何端口的任何协议的数据包来自有效的 ssh 客户端主机时,它会添加或删除一条规则,以跳转到我的自定义 netfilter 链。
如果一台主机有 2 个或多个同时 ssh 连接,链中将有 2 个以上相同的规则INPUT
- 一种引用计数。
但是当我们从PAM_EXEC_SSHD
back返回到 时INPUT
,如果还有另一个相同的规则,我们将PAM_EXEC_SSHD
再次跳转到 。如何防止这种情况发生?
如果我将脚本更改为每个主机仅保留一条规则,则当两个会话之一关闭时,该主机的唯一规则将被删除。