![阻止来自外部 LAN 的 SSH 访问](https://linux22.com/image/1460649/%E9%98%BB%E6%AD%A2%E6%9D%A5%E8%87%AA%E5%A4%96%E9%83%A8%20LAN%20%E7%9A%84%20SSH%20%E8%AE%BF%E9%97%AE.png)
我有一台 Ubuntu 服务器,它在 DMZ 中托管 Redmine 和 git 存储库。唯一具有 SSH 访问权限的用户是管理员。外部用户需要访问 Git 和 Redmine 的 Web 界面,但我希望 SSH 访问仅限于网络内部的连接(我们设置了 VPN,因此即使从外部,我也可以通过它 SSH 访问服务器)。
如何防止来自 LAN 外部的 SSH 访问,同时仍允许 Git 访问?
提前谢谢您!
R
答案1
OpenSSH(我假设你正在使用它)有一个AllowUsers
选择:
允许用户- 此关键字后面可以跟一串用户名模式,以空格分隔。如果指定,则仅允许与其中一个模式匹配的用户名登录。只有用户名才有效;数字用户 ID 不被识别。默认情况下,允许所有用户登录。如果模式采用 USER@HOST 形式,则分别检查 USER 和 HOST,将登录限制为特定主机的特定用户。允许/拒绝指令按以下顺序处理:
DenyUsers
、、、最后。AllowUsers
DenyGroups
AllowGroups
编辑文件/etc/ssh/sshd_config
文件,并将其添加到其底部:
AllowUsers git [email protected].* [email protected].* [email protected].* [email protected].*
如果这不起作用(这种方法实际上可能更干净)您可以使用Match
选项和...一起AllowUsers
:
# This is the default setting (only allow GIT access)
AllowUsers git
# This is the setting that is ONLY available if you are SSHing from the LAN (allow the listed users)
Match Address 192.168.0.*
AllowUsers git adam bob cliff dave
答案2
你可以使用你的系统 iptables。这三行代码就能产生神奇的效果
# iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
也许您确实需要调整诸如 Lan IP 地址之类的参数。
如果你的 vpn 用户被路由到例如 192.169.8.0/24 你必须调整它并添加
# iptables -A INPUT -p tcp --dport 22 -s 192.168.8.0/24 -j ACCEPT
在添加 drop 行之前,因为如果不这样做,则只有当所有者拥有 192.168.0.0/24 或本地主机地址时,才会接受端口 22 上的包。