permite que apenas usuários específicos efetuem login via sshd, mas recusam a conexão com usuários não listados

3

Estou rodando um servidor CentOS (7.0) e gostaria de fazer login via sshd como usuário, não como root. Então eu defino PermitRootLogin no no arquivo de configuração e su - após o login. Eu recebi muitas atividades de hackers e decidi permitir que apenas um usuário fizesse login via sshd. Como o nome de usuário não é meu nome verdadeiro ou qualquer nome comum, acho que seria bom o suficiente. Vamos dizer que é 'hkbjhsqj'.

Eu tentei as duas formas introduzidas no nixCraft: AllowUsers em sshd_config ou pam_listfile.so no PAM . O único problema para mim é que alguém ainda tem chances de digitar senhas e isso deixa registros em / var / log / secure. Presumo que essas ações consumam os recursos do meu servidor para executar a verificação de senha e outras coisas.

Digamos que eu tente fazer login com o nome de usuário "admin":

www$ ssh [email protected]
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

e no log seguro:

Aug  8 08:28:40 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown
Aug  8 08:28:40 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd
Aug  8 08:28:43 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2
Aug  8 08:28:47 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown
Aug  8 08:28:47 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd
Aug  8 08:28:50 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2
Aug  8 08:28:52 www sshd[30497]: pam_unix(sshd:auth): check pass; user unknown
Aug  8 08:28:52 www sshd[30497]: pam_listfile(sshd:auth): Refused user admin for service sshd
Aug  8 08:28:55 www sshd[30497]: Failed password for invalid user admin from 192.168.0.1 port 52382 ssh2
Aug  8 08:28:55 www sshd[30497]: Connection closed by 192.168.0.1 [preauth]
Aug  8 08:28:55 www sshd[30497]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.0.1

Embora tudo isso não aconteça se eu adicionar o IP em /etc/hosts.deny:

www$ ssh [email protected]
ssh_exchange_identification: Connection closed by remote host

e no log seguro:

Aug  8 08:35:11 www sshd[30629]: refused connect from 192.168.0.1 (192.168.0.1)
Aug  8 08:35:30 www sshd[30638]: refused connect from 192.168.0.1 (192.168.0.1)

Então, minha pergunta seria: existe uma maneira de recusar as solicitações ssh de todos os usuários irrelevantes de qualquer lugar sem verificação de senha, como eu as coloco na lista hosts.deny? Mas ao mesmo tempo eu preciso permitir todas as requisições ssh com o nome de usuário 'hkbjhsqj' de qualquer lugar e verificar a senha então.

    
por leoce 08.08.2014 / 15:18

2 respostas

5

Eu não acho que é possível fazer o que você está pedindo. Se você pudesse, alguém poderia "força bruta" para encontrar nomes de usuários válidos em seu servidor. Também tenho certeza que o nome de usuário e a senha são enviados simultaneamente pelo cliente, você pode verificar isso capturando pacotes usando o Wireshark em uma conexão SSH não criptografada.

Por "atividades de hacking", presumo que você esteja falando de tentativas de força bruta em senhas. Há muitas maneiras de se proteger disso, vou explicar as formas mais comuns.

Desativar login raiz Ao negar o login da raiz com o SSH, o invasor precisa saber ou adivinhar um nome de usuário válido. A maioria dos ataques automatizados de força bruta tentam apenas fazer login como root.

Bloqueio de IPs na falha de autenticação Daemons como o fail2ban e o sshguard monitoram seus arquivos de log para detectar falhas de login. Você pode configurá-los para bloquear o endereço IP tentando efetuar login após várias tentativas de login com falha. No seu caso, é isso que eu recomendaria. Isso reduz o spam de log e sobrecarrega seu servidor, já que todos os pacotes desse IP seriam bloqueados antes de chegarem ao daemon sshd. Você pode, por exemplo, configurar o fail2ban para bloquear IPs com três falhas de login nos últimos 5 minutos por 60 minutos. No pior dos casos, você verá três logins com falha em seu log a cada 60 minutos, supondo que o invasor não desista e siga em frente.

Autenticação de chave pública Você pode desativar completamente a autenticação de senha e só permitir clientes com chaves específicas. Geralmente, essa é considerada a solução mais segura (supondo que o cliente mantenha sua chave segura e criptografada). Para desabilitar a autenticação por senha, adicione sua chave pública a ~/.ssh/authorized_keys no servidor e defina PasswordAuthentication para no em sshd_config. Existem inúmeros tutoriais e ferramentas para ajudar nisso.

Espero que isso ajude você!

    
por 08.08.2014 / 16:52
0

Se a sua única preocupação é a quantidade de registros, você pode reduzir isso com a configuração LogLevel em sshd_config.

Se você preferir evitar a adulteração excessiva do seu servidor SSH, poderá usar algo como o fail2ban para bloquear endereços IP após uma determinada quantidade de tentativas com falha.

    
por 08.08.2014 / 16:49

Tags