UPDDATE AT BOTTOM - >
Estou usando um servidor Red Hat Enterprise Linux versão 7.4 (Maipo) VM na minha classe OS de cerca de 20 alunos que geralmente lançam cerca de duas conexões ssh para esta máquina com seus próprios ids específicos . Isso parece funcionar bem quando os alunos chegam à sala de aula.
No entanto, no início da aula, quando a maioria dos alunos tenta fazer login, eu tenho alunos que não conseguem fazer login no sistema com uma mensagem “ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection refused”
. Esperar 20 minutos ou mais parece eventualmente deixar mais algumas pessoas entrarem. O sshd está definitivamente rodando. O conjunto de usuários que estão sendo recusados varia, e às vezes também me inclui. Eu poderia ter conectado via ssh com sucesso alguns minutos antes, mas não posso iniciar uma segunda sessão.
Todo o tráfego de saída usa uma configuração NAT Many-to-1, portanto, todas as conexões ssh de entrada no servidor aparecerão como se estivessem vindo do mesmo número IP. Depois de olhar os documentos e fazer algumas pesquisas eu mudei o seguinte parâmetro no arquivo sshd_config :
#MaxSessions 10
MaxSessions 500
e
#MaxStartups 10:30:100
MaxStartups 75:10:200
Pelo que entendi, o MaxSessions controla o número de conexões ssh ativas ao servidor - mesmo que sejam provenientes apenas de um número IP, enquanto o MaxStartups se relaciona com tentativas iniciais de conexão ( por exemplo, pessoas tentando fazer login que ainda não forneceram uma senha) nesse caso eu poderia acomodar 75 na inicialização e, em seguida, a taxa seria de 10% até atingir um limite de 200 (então devo definir MaxSessions e esse número é o mesmo?)
Estou usando a autenticação por senha e o login raiz está desativado. Geralmente, nós fazemos login a partir de máquinas com o Windows 10 usando o shell bash do git (embora eu também tenha usado o putty para ver se isso faria diferença, não o fez).
De qualquer forma, estou no caminho certo aqui lidando com o login em questão? O problema é que não posso reproduzir isso de maneira confiável à vontade. Esse problema só parece ocorrer na classe quando há várias tentativas de conexão ao mesmo tempo, estou entrando e saindo sem nenhum problema em outros momentos, e nenhum dos alunos relatou esses problemas em outros momentos.
O que mais posso tentar para ajudar a diagnosticar e corrigir esse problema? Eu sei que isso parece ser um tipo de erro que ocorre para muitos, e eu li um pouco aqui, mas ainda não encontrei uma correção de trabalho.
UPDATE
Então, quando eu tento reproduzir esse problema com este pequeno script (crédito para @RobbieMckennie por me dar essa idéia)
LIMIT=5
for i in $(seq $LIMIT)
do
echo
echo "============================= ${i} ==================="
ssh -vvv [email protected]
echo
done
Vou receber isso depois de 3 tentativas de login:
$ ssh -vvv [email protected]
OpenSSH_7.5p1, OpenSSL 1.0.2k 26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: resolving "xx.xx.xxx.xx" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to xx.xx.xxx.xx [xx.xx.xxx.xx] port 22.
debug1: connect to address xx.xx.xxx.xx port 22: Connection refused
ssh: connect to host xx.xx.xxx.xx port 22: Connection refused
na verdade eu sou capaz de reproduzir isso "à mão" se eu fizer o login em 3 vezes rapidamente um após o outro, a quarta tentativa resulta nisto. O número ip de origem está na minha lista ignoreip no fail2ban ( jail.local
) e parece funcionar tanto quanto eu posso dizer
2017-10-12 07:38:04,481 fail2ban.filter [52845]: WARNING Determined IP using DNS Lookup: c-yy-yy-yy-yyy.hsd1.il.comcast.net = ['yy.yy.yy.yyy']
2017-10-12 07:38:04,482 fail2ban.filter [52845]: INFO [sshd] Ignore yy.yy.yy.yyy by ip
embora eu não tenha certeza se o aviso significa alguma coisa.
Então, duas perguntas:
O que está causando essa rejeição? Eu nem sequer chego ao sistema tanto quanto posso dizer. Existe uma configuração que eu preciso ajustar?
Mais importante, quando todos os meus 22 alunos tentam fazer login no campus, todas essas conexões são originárias do mesmo número de IP devido ao nosso Many-to-1-NAT. Isso explicaria isso? Parece-me que poderia (?)
A única coisa que é diferente, leva cerca de 15 minutos para que os alunos façam login quando essa rejeição acontece, enquanto no meu experimento acima eu volto dentro de alguns segundos. Isso é devido a algum tipo de atraso?
Em particular, esta entrada eu acabei de descobrir esta entrada no IPtables
Chain INPUT_direct (1 references)
target prot opt source destination
tcp -- anywhere anywhere tcp dpt:ssh state NEW recent: SET name: DEFAULT side: source mask: 255.255.255.255
REJECT tcp -- anywhere anywhere tcp dpt:ssh state NEW recent: UPDATE seconds: 30 **hit_count: 4** name: DEFAULT side: source mask: 255.255.255.255 reject-with tcp-reset
Isso explicaria o limite de três logins, mas, novamente, não tenho certeza de que isso explicaria os 15 minutos de espera no campus para fazer login novamente quando encontrarmos isso.