限制ssh到本地networking,除了git用户

我有一个与Gitlab和OpenVPN设置的Ubuntu 12.04服务器,作为我们的git和vpn服务器。

目前我已经在防火墙中打开了1194端口来打开OpenVPN,让用户通过rsa证书和谷歌authentication密钥进行身份validation。

我还没有为SSHstream量打开防火墙,因为我不希望SSH完全暴露给广域网。 但是,我们需要能够推拉,而不必连接到VPN。

如何才能打开SSH访问只有有限的git用户,同时允许pipe理员从局域网访问服务器?

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


编辑:

我最初接受了使用access.conf来限制login访问的答案。 但是后来的答案表明,在sshd.conf中也可以通过匹配指令或使用username @ hostaddress语法来实现。

起初我认为我更直观的把它放在sshd中,而且对其他pipe理员来说可能更容易维护和理解。 在sshd.conf上使用access.conf有什么好处吗?

如果我在这里提到的选项的范围是多么直观,我会说:1. sshd.conf 2. access.conf 3. IpTables

你同意吗?

您可以使用sshd_config中AllowGroupsAllowUsersDenyGroupsDenyUsers指令来控制允许用户login的位置 。 它们按照DenyUsersAllowUsersDenyGroupsAllowGroups的顺序进行处理。 AllowUsers可以包含主机和用户名; 我认为其他人只是允许姓名。

让我们说你的

  • 局域网是192.168.1.0/24
  • git用户名为git
  • pipe理员用户被命名为爱丽丝和鲍勃

在sshd_config你会说

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

或者,你可以用Match指令来做到这一点。 match指令可以让你根据条件改变sshd的行为,比如用户连接的地址。

sshd_config的全局部分中,你将拥有

 AllowUsers git 

在文件的末尾,你会覆盖你的局域网

 Match Address 192.168.1.0/24 AllowUsers alice bob git 

您正在寻找pam_access ,通过它您可以configurationsshd以接受来自本地networking的所有用户以及来自任何地方的git用户的身份validation。

就像是:

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

在你的access.conf应该做的伎俩

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

使用iptables的-s选项。 它接受一个forms为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 

如果你不能创build一个networking掩码,那么恐怕你将不得不复制你想允许连接到你的服务器的每个IP地址的规则。

使用tcp wrapper,打开/etc/hosts.allow来允许访问:

 sshd: 192.168.0.0/255.255.255.0 1.2.3.4 

以上它将允许你的局域网和一个单一的广域网IP在1.2.3.4这种情况下。 然后你可以简单地拒绝所有其他主机的访问。

拒绝访问:

在文本编辑器中打开文件/etc/hosts.deny。 这是不允许访问系统的主机/ IP的文件列表。 为了否认ssh:

 sshd: ALL 

有关更多详细信息,请参阅RedHat网站上的TCP Wrapper参考资料 。

我的build议是,你应该使用多层的安全性,以使您的服务器更安全,当然你应该使用基于密码的身份validation密码为SSH。

pam_access可能是一个选项,但我只使用它,我需要限制ssh和控制台访问

对于ssh,下面的configuration行应该适合你:

 AllowUsers git *@localhost 

它非常简单的locking框与iptables …..如果你想要的是丢弃stream量,除了一个单一的ip为ssh mgmt,本地局域网可以击中tcp / 80(http)

iptables -F
iptables -A INPUT -P tcp -p 22 -s [your-ip-address] / 32 -j ACCEPT
iptables -A INPUT -P tcp -p 80 -s [your-local-network-addr] / [your-local-netmask] -j ACCEPT
iptables -A INPUT -j DROP

我不清楚你的内部networking地址/内部networking掩码是什么,但如果内部局域网是一个/ 16,networking地址是192.168.0.0,这可能是允许非rfc专用ip adddrs访问端口80(假设这个configuration是在外围设备与直接传入的IPstream量)。

你可以也应该有更详尽的/特定的iptables规则,但作为一个最低限度,这应该工作