如何在Ubuntu服务器上禁用用户的SSH出站连接同时保留入站SSH访问权限?
如何在Ubuntu服务器上禁用用户的SSH出站连接同时保留入站SSH访问权限?
嗨,我来帮你搞定这个配置!要实现禁止服务器上的用户发起SSH出站连接,但保留外部机器对你的Ubuntu服务器的SSH入站访问,用Ubuntu自带的UFW防火墙是最直观且易维护的方案,下面是详细步骤:
步骤1:确认UFW状态并启用(如果未启用)
首先检查UFW是否已经在运行:
sudo ufw status
如果显示inactive,先别急着启用——如果你是远程操作服务器,一定要先确保入站SSH已经被允许,不然启用防火墙后会直接断开连接。先执行入站允许命令,再启用UFW:
sudo ufw allow ssh sudo ufw enable
当系统提示“Command may disrupt existing ssh connections. Proceed with operation (y|n)?”,输入y确认即可。
步骤2:拒绝所有SSH出站连接
现在添加规则禁止服务器上的所有用户发起SSH出站请求:
sudo ufw deny out ssh
如果你服务器上的SSH用的不是默认的22端口(比如改成了2222),请把命令里的ssh换成对应的端口号,比如:
sudo ufw deny out 2222/tcp
步骤3:验证配置是否生效
- 验证入站访问:从你的本地机器或者其他外部服务器尝试SSH连接到这台Ubuntu服务器,应该能正常登录,说明入站权限没问题。
- 验证出站限制:在Ubuntu服务器上用普通用户执行
ssh username@external-server.com(替换成真实的外部服务器地址),你会发现连接被拒绝,无法建立SSH会话。
备选方案:用iptables配置(适合更进阶的场景)
如果你习惯用原生iptables而不是UFW,也可以直接添加规则:
- 允许入站SSH连接:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 拒绝所有SSH出站连接:
sudo iptables -A OUTPUT -p tcp --dport 22 -j REJECT
配置完后记得保存iptables规则,确保重启后依然生效:
sudo iptables-save | sudo tee /etc/iptables/rules.v4
额外提示(可选)
如果之后需要给特定用户开放SSH出站权限(比如管理员账户),可以通过iptables的owner模块来匹配用户,或者在UFW里针对特定用户组设置例外规则,但这属于进阶配置,如果你没有这个需求的话可以暂时忽略。
备注:内容来源于stack exchange,提问作者Mousavi
相关产品推荐
相关产品推荐

