阻止来自服务器的传出 SSH 连接

阻止来自服务器的传出 SSH 连接

背景

我有一项连接到第三方 SFTP 站点以提取文件的服务。第三方有一个系统,当某些用户尝试连接时,它会自动阻止传入的 IP。有人正在使用被禁止的用户进行一些连接尝试,因为这是遗留系统,任何用户都可以 root 身份访问系统。每当此人尝试 sftp root@remote-site 时,他/她只会破坏几个依赖同一远程 SFTP 的应用程序。

问题 有没有办法使用 SSH 来阻止特定用户@站点的传出连接?匹配规则是针对 sshd_config 的,它基本上是传入的。 ssh 客户端有等效的吗?

答案1

你必须使用iptable,例如:

阻止ssh192.168.1.0/24 子网的传出连接

 iptables -I OUTPUT -d 192.168.1.0/24  -p tcp --dport 22 -j REJECT

然后验证

ssh -v 192.168.1.6
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 192.168.1.6 [192.168.1.6] port 22.
debug1: connect to address 192.168.1.6 port 22: **Connection refused**
ssh: connect to host 192.168.1.6 port 22: **Connection refused**

答案2

匹配sshd_config 的规则也适用于 ssh_config,特别是/etc/ssh/ssh_config您可以编辑以包含以下内容的全局文件:

Match host site user root
 Hostname DontDoThat

当您执行 ssh 或 sftp 时,这将替换主机名:

$ sftp root@site
Couldn't read packet: Connection reset by peer

$ sudo sftp site
ssh: Could not resolve hostname dontdothat: Name or service not known

当然,用户的~/.ssh/config文件仍然可以覆盖此设置。

您可能希望通过向匹配行添加脚本调用(必须退出 0)来记录有关执行 sftp 的人员的信息,例如exec "/bin/mylogger somearg..."(不要使用单引号)。

答案3

您始终可以使用 iptables“用户”模块允许传出 SSH 连接:

iptables -A OUTPUT -o eth0  -p tcp --destination-port 22 -m owner --uid-owner {USERNAME} -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --destination-port 22 -j DROP

这将阻止所有传出 ssh 连接,但允许 {USERNAME} 执行它。

相关内容