You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ubuntu服务器上阻止出站SSH连接?

如何在Ubuntu服务器上阻止出站SSH连接?

看来你是想让特定用户组能正常SSH登录到你的Ubuntu服务器,但严格禁止他们从这台机器发起出站SSH连接对吧?之前尝试iptables没生效大概率是配置逻辑或者顺序出了问题,我给你分享几个经过验证的靠谱方案:

方法一:用iptables针对用户组精准限制(推荐)

这是最直接且彻底的方式,利用iptables的owner模块匹配用户组,阻止该组用户发起的出站SSH请求(默认端口22)。

步骤1:准备目标用户组

如果还没创建受限用户组,先执行:

sudo groupadd restricted-ssh-out

把需要限制的用户加入这个组:

sudo usermod -aG restricted-ssh-out 你的用户名

步骤2:配置iptables规则

注意:iptables规则是从上到下匹配的,顺序非常重要!

  • 先放行已建立的关联连接(避免打断现有正常会话):
sudo iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  • 阻止restricted-ssh-out组的用户访问远程22端口(即出站SSH):
sudo iptables -A OUTPUT -p tcp --dport 22 -m owner --gid-owner restricted-ssh-out -j DROP
  • (可选)根据你的需求放行该组用户的其他必要出站请求,比如DNS解析:
sudo iptables -A OUTPUT -p udp --dport 53 -m owner --gid-owner restricted-ssh-out -j ACCEPT

步骤3:保存iptables规则(重启后生效)

Ubuntu上可以用iptables-persistent来持久化规则,先安装工具:

sudo apt update && sudo apt install iptables-persistent

安装过程中会提示是否保存现有规则,选择Yes即可;之后手动保存规则的命令是:

sudo iptables-save > /etc/iptables/rules.v4

方法二:用受限shell辅助限制(适合轻量场景)

如果觉得iptables太复杂,也可以给受限组用户指定rbash(受限bash),并禁止他们执行ssh命令:

  1. 给用户设置rbash:
sudo usermod -s /bin/rbash 你的用户名
  1. 编辑/etc/rbashrc,添加以下内容来屏蔽ssh命令:
if [[ $(id -Gn | grep -qw restricted-ssh-out) ]]; then
    alias ssh='echo "抱歉,你没有权限发起SSH出站连接"'
    # 或者直接将ssh从PATH中移除,增强限制
    PATH=$(echo $PATH | tr ':' '\n' | grep -v '/usr/bin' | tr '\n' ':')
fi

⚠️ 注意:这个方法不如iptables彻底,用户可能通过绝对路径/usr/bin/ssh绕过,建议配合iptables一起使用。

为什么你之前的iptables没生效?

大概率是这两个原因:

  • 规则顺序错误:如果把DROP规则放在了允许所有出站的规则后面,那么这条限制规则永远不会被匹配到;
  • 未加载owner模块:可以用lsmod | grep ipt_owner检查模块状态,如果没加载,执行modprobe ipt_owner手动加载。

测试验证

切换到受限组的用户账号,尝试发起SSH连接:

ssh 其他服务器IP

正常情况下应该会直接连接失败(iptables的DROP规则会让连接超时),而未在该组的用户则可以正常发起出站SSH。

备注:内容来源于stack exchange,提问作者ConnerWithAnE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 12:24:36