Limita o ssh à rede local, exceto pelo usuário do git

5

Eu tenho um servidor Ubuntu 12.04 configurado com Gitlab e OpenVPN para servir como um servidor git e vpn para nós.

Atualmente, abri a porta 1194 no firewall para abrir o OpenVPN e permitir que os usuários sejam autenticados por um certificado rsa e uma chave de autenticação do google.

Ainda não abri o firewall para o tráfego SSH, pois não quero que o SSH seja totalmente exposto à WAN. No entanto, precisamos ser capazes de empurrar e puxar sem estar conectado a vpn.

Como pode abrir o acesso ssh à WAN apenas para o usuário git limitado, enquanto permite que os administradores acessem o servidor a partir da LAN?

Eu suspeito que eu deveria estar procurando algo na direção de usar grupos de correspondência no arquivo sshd_config. Como visto nesta pergunta: " Como posso configurar os métodos de autenticação por usuário do OpenSSH? ", alguém tem experiência com isso?

Editar:

Eu inicialmente aceitei a resposta de usar access.conf para limitar o acesso de login. Mas respostas posteriores indicam que o mesmo pode ser alcançado no sshd.conf por uma diretiva de correspondência ou usando a sintaxe username @ hostaddress.

A princípio, acho mais intuitivo colocar isso em sshd, e provavelmente será mais fácil manter e entender para outros administradores. Há alguma vantagem strong em usar o access.conf sobre o sshd.conf?

Se eu tivesse que escolher as opções mencionadas aqui sobre o quão intuitivas elas são, eu diria: 1. sshd.conf 2. access.conf 3. IpTables

Você concorda?

    
por Trygve 08.12.2013 / 17:39

5 respostas

4

Você pode controlar onde os usuários podem fazer login usando AllowGroups , AllowUsers , DenyGroups DenyUsers diretivas em sshd_config . Eles são processados na ordem DenyUsers , AllowUsers , DenyGroups , AllowGroups . AllowUsers pode incluir o host, bem como o nome de usuário; Eu acho que os outros apenas permitem nomes.

Digamos que você

  • LAN é 192.168.1.0/24
  • git user é nomeado git
  • usuários admins são nomeados alice e bob

Em sshd_config você diria

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

Como alternativa, você pode fazer isso com a diretiva Match . A diretiva match permite que você altere o comportamento do sshd com base nas condições, como o endereço do qual o usuário está se conectando.

Na parte global do sshd_config você teria

AllowUsers git

no final do arquivo, você deve substituir isso pela sua LAN com

Match Address 192.168.1.0/24
    AllowUsers alice bob git
    
por 09.12.2013 / 01:06
5

Você está procurando por pam_access , com ele você pode configurar o sshd para aceitar autenticação para todos os usuários da rede local e para o usuário git de qualquer lugar.

Algo como:

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

no seu access.conf deve fazer o truque

    
por 08.12.2013 / 18:12
3

Você pode usar o arquivo sshd_config para controlar o acesso por usuário / host e rede, além de poder usar iptables e tcpwrappers. Eu recomendo que você use tcpwrappers para controlar o acesso neste caso além do iptables. Usando o iptables:

Use a opção -s do iptables. Ele aceita um IP no formato nnn.nnn.nnn.nnn ou com uma máscara (nnn.nnn.nnn.nnn / nnn.nnn.nnn.nnn ou nnn.nnn.nnn.nnn / nn). Então, para permitir conexões de exemplo de nnn.nnn.nnn. * Você pode escrever

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

ou

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

Se não conseguir criar uma máscara de rede, receio que você tenha que duplicar a regra para cada um dos endereços IP que deseja permitir conectar ao seu servidor.

Usando os wrappers tcp, abra /etc/hosts.allow para permitir o acesso:

sshd: 192.168.0.0/255.255.255.0 1.2.3.4

Acima, permitirá sua LAN e um único IP da WAN, que é 1.2.3.4 neste caso. e então você pode simplesmente negar o acesso a todos os outros hosts.

Para negar acesso:

Abra o arquivo /etc/hosts.deny no editor de texto. Esta lista de arquivos de hosts / IPs que não têm permissão para acessar o sistema. Para negar o ssh para todos:

sshd: ALL

Consulte a seguinte referência do TCP Wrapper no site da RedHat para mais detalhes.

Minha recomendação é que você use várias camadas de segurança para tornar seu servidor mais seguro e, é claro, você deve usar autenticação baseada em chave com senha para ssh.

    
por 08.12.2013 / 17:48
1

pam_access pode ser uma opção, mas eu uso apenas preciso restringir os acessos ssh e console

Para ssh, a seguinte linha de configuração deve funcionar para você:

AllowUsers git *@localhost
    
por 09.12.2013 / 08:26
0

é bastante simples bloquear a caixa com iptables ..... se tudo que você quer é eliminar o tráfego, exceto por um único ip para ssh mgmt, e lan local pode atingir tcp / 80 (para 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

não estou claro qual é o endereço de rede interno / máscara de rede interna para você, mas se a lan interna for / 16 e o endereço de rede for 192.168.0.0, isso pode permitir que adddrs de ip privados não-rfc acessem porta 80 (supondo que esta configuração esteja no dispositivo de perímetro com tráfego IP de entrada direta).

você pode e deve ter regras de iptables mais elaboradas / específicas, mas, no mínimo, isso deve funcionar

    
por 08.12.2013 / 18:16

Tags