将 ssh 限制到本地网络,git 用户除外

将 ssh 限制到本地网络,git 用户除外

我有一台 Ubuntu 12.04 服务器,其中设置了 Gitlab 和 OpenVPN,作为我们的 git 和 vpn 服务器。

目前我已经在防火墙中打开了端口 1194,以用于 OpenVPN,并让用户通过 rsa 证书和 google 身份验证密钥进行身份验证。

我还没有打开防火墙来允许 SSH 通信,因为我不想让 SSH 完全暴露在 WAN 中。但是我们需要能够在不连接 VPN 的情况下进行推送和拉取。

如何仅为有限的 git 用户开放对 WAN 的 ssh 访问,同时允许管理员从 LAN 访问服务器?

我怀疑我应该在 sshd_config 文件中寻找使用匹配组的方向。正如这个问题所示:“如何设置 OpenSSH 每个用户的身份验证方法?“,有人有这方面的经验吗?


编辑:

我最初接受了使用 access.conf 来限制登录访问权限的答案。但后来的答案表明,也可以在 sshd.conf 中通过 match 指令或使用 username@hostaddress 语法来实现相同的目的。

一开始,我觉得将其放入 sshd 中更直观,而且其他管理员可能更容易维护和理解。与 sshd.conf 相比,使用 access.conf 有什么显著优势吗?

如果我要根据它们的直观程度对这里提到的选项进行排序,我会说:1. sshd.conf 2. access.conf 3. IpTables

你同意?

答案1

您可以使用以下方式控制用户从哪里登录允许群组允许用户拒绝群组, 和拒绝用户指令sshd_配置. 它们按以下顺序处理拒绝用户允许用户拒绝群组允许群组允许用户可以包括主机以及用户名;我认为其他人只允许名字。

假设你的

  • LAN 是 192.168.1.0/24
  • git 用户名是 git
  • 管理员用户名为 alice 和 bob

在 sshd_config 中你会说

AllowUsers [email protected]/24 [email protected]/24 git

或者,你可以使用匹配指令。match 指令允许您根据条件(例如用户连接的地址)改变 sshd 的行为。

在全球部分sshd_配置你将会拥有

AllowUsers git

在文件末尾,你可以使用以下命令覆盖 LAN 中的此项

Match Address 192.168.1.0/24
    AllowUsers alice bob git

答案2

您正在寻找pam_access,使用它您可以配置 sshd 以接受来自本地网络的所有用户和来自任何地方的 git 用户的身份验证。

就像是:

+ : ALL : 10. crond :0 tty1 tty2 tty3 tty4 tty5 tty6
+ : git : ALL
- : ALL : ALL

在你的 access.conf 中应该可以解决问题

答案3

您可以使用 sshd_config 文件来控制每个用户/主机和网络的访问,除此之外,您还可以使用 iptables 以及 tcpwrappers。除了 iptables 之外,我建议您在这种情况下使用 tcpwrappers 来控制访问。使用 iptables:

使用 iptables 的 -s 选项。它接受格式为 nnn.nnn.nnn.nnn 或带有掩码的 IP(nnn.nnn.nnn.nnn/nnn.nnn.nnn.nnn 或 nnn.nnn.nnn.nnn/nn)。因此,为了允许来自 nnn.nnn.nnn.* 的连接,您可以编写

iptables -A INPUT -s nnn.nnn.nnn.0/255.255.255.0 -i em1 -p tcp --dport XXXXX -m state --state NEW,ESTABLISHED -j ACCEPT

或者

iptables -A INPUT -s nnn.nnn.nnn.0/24 -i em1 -p tcp --dport XXXXX -m state --state

如果您无法创建网络掩码,那么恐怕您必须为要允许连接到服务器的每个 IP 地址重复规则。

使用 tcp 包装器,打开 /etc/hosts.allow 以允许访问:

sshd: 192.168.0.0/255.255.255.0 1.2.3.4

上面它将允许您的 LAN 和单个 WAN IP,在本例中为 1.2.3.4。然后您可以简单地拒绝所有其他主机的访问。

拒绝访问:

在文本编辑器中打开文件 /etc/hosts.deny。此文件列出了不允许访问系统的主机/IP。要拒绝所有人使用 ssh,请执行以下操作:

sshd: ALL

请参阅以下内容TCP Wrapper 的参考请访问 RedHat 网站了解更多详细信息。

我的建议是您应该使用多层安全措施以使您的服务器更加安全,当然您应该对 ssh 使用基于密钥的密码身份验证。

答案4

使用 iptables 锁定盒子非常简单.....如果您想要的只是丢弃流量,除了用于 ssh 管理的单个 ip,并且本地 lan 可以达到 tcp/80(用于 http)

iptables -F
iptables -A INPUT -P tcp -p 22 -s [你的 IP 地址]/32 -j ACCEPT
iptables -A INPUT -P tcp -p 80 -s [你的本地网络地址]/[你的本地网络掩码] -j ACCEPT
iptables -A INPUT -j DROP

我不清楚您的内部网络地址/内部网络掩码是什么,但如果内部局域网是/16,并且网络地址是192.168.0.0,则这可能允许非rfc私有ip地址访问端口80(假设此配置位于具有直接传入ip流量的外围设备上)。

你可以也应该有更详细/更具体的 iptables 规则,但作为最低限度,这应该可以工作

相关内容