Como posso identificar tentativas de conexão de domínio e https para o sshd?

3

Estou executando meu sshd(8) ouvindo domain e https ports . (O que mais há para ser executado nessas portas?):

Obviamente, DNS real (quando voltando ao TCP) e clientes HTTPS podem tentar se conectar ao meu servidor SSH ouvindo nessas portas. Como posso descobrir quantas tentativas de conexão recebe de clientes DNS / TCP e HTTPS / TCP? Existe, por exemplo, algum padrão que eu possa pesquisar os logs do servidor para que seja exclusivo para um cliente DNS / TCP ou um cliente HTTPS / TCP conversando com um servidor SSH? Existe alguma ferramenta de rede que pode mostrar isso facilmente?

Eu vinculei o OpenBSD /etc/services e sshd acima, então estou obviamente interessado em como fazer isso principalmente no OpenBSD. Mas se houver uma maneira multiplataforma de fazer isso que não seja específica de nenhum sistema operacional, inclua-a.

    
por cnst 11.01.2017 / 00:45

3 respostas

7

Você pode adicionar regras de firewall baseadas em conteúdo que analisam os primeiros bytes de conexões de entrada. Por exemplo, no Linux, com iptables:

iptables -N notssh
iptables -A input -p tcp --dport 443 -m string --algo bm --from 0 --to 7 ! --string SSH-2.0 -j notssh

O contador na regra notssh fornece o número de vezes que essa regra foi acionada desde que foi estabelecida ou porque o contador foi redefinido com iptables -Z notssh . Há também um contador nas regras individuais.

Isso conta incorretamente as conexões em que o primeiro pacote da conexão TCP contém menos de 7 bytes do protocolo SSH, mas isso é raro na prática.

    
por 11.01.2017 / 01:31
4

Um cliente DNS sobre TCP pode ser emulado com dig(1) assim (explicitamente usamos port 22 as a domain port pode não estar traduzida na própria caixa):

dig @example.org -p22 +tcp example.org

Ou assim :

dig @example.org -p22 axfr example.org

E parece resultar nas seguintes entradas em /var/log/authlog :

Jan 10 15:08:41 example sshd[21075]: Did not receive identification string from 64.124.xxx.xx
Jan 10 15:08:51 example sshd[22052]: Did not receive identification string from 64.124.xxx.xx
Jan 10 15:09:01 example sshd[24980]: Did not receive identification string from 64.124.xxx.xx

Considerando https,

curl https://example.org:22/

parece resultar na seguinte entrada (embora o número de entradas por tentativa pareça diferir de diferentes navegadores):

Jan 10 15:25:06 example sshd[9203]: Bad protocol version identification '\026\003\001' from 64.124.xxx.xx

Parece que algumas tentativas de conexão HTTPS também terminam com um caractere a menos:

Bad protocol version identification '\026\003' from

Podemos determinar todas as outras variações possíveis:

% fgrep " sshd[" /var/log/authlog | cut -d" " -f7-12 | grep ^Bad | sort | uniq -c | sort -rn | head
 351 Bad protocol version identification '\026\003\001' from
 110 Bad protocol version identification '\026\003\001\001E\001' from
  91 Bad protocol version identification '\026\003\002' from
  63 Bad protocol version identification '\026\003\001\001=\001' from
  52 Bad protocol version identification '\026\003\001\002' from
  44 Bad protocol version identification '\026\003\003' from
  21 Bad protocol version identification '\026\003\001\001?\001' from
  16 Bad protocol version identification '\026\003\001\001B\001' from
  13 Bad protocol version identification '\026\003\001\0017\001' from
  10 Bad protocol version identification '\026\003' from

Também podemos ver um possível número de domain solicitações:

% fgrep " sshd[" /var/log/authlog | cut -d" " -f7-12 | grep ^Did | sort | uniq -c
 227 Did not receive identification string from
    
por 11.01.2017 / 00:45
0

É uma solução um pouco mais complexa, mas você pode experimentar o sslh multiplexador ssl / ssh mas eu acho que você terá que adicionar verificações manualmente para os pacotes DNS e você terá que configurar sslh no modo transparente se precisar dos endereços originais do cliente (para view no DNS, allow/deny no servidor da Web e from= no ssh authorized_keys )

    
por 11.01.2017 / 09:47