log de acesso para conter indicação quando alguém faz o telnet do meu servidor e digita lixo

1

Eu tenho o servidor apache 2.2.22 instalado no Ubuntu Linux.

Eu criei um host virtual na porta 443 e quero que todas as indicações de telnet para essa porta sejam listadas no log de acesso.

assim, por exemplo, se eu fizer telnet para essa porta na porta 443 e não escrever nada, ele me desconectará após alguns segundos e, em seguida, mostrará uma indicação no log de acesso.

192.168.1.140 - - [15/Jul/2013:11:40:19 +0300] "-" 408 0 "-" "-"

mas se eu telnet a porta 443 e digito algum texto lixo e ele me desconecta, não vejo nenhuma indicação no log de acesso que tentei conectar.

esta é a minha diretiva de log de acesso no arquivo de configuração do apache:

CustomLog ${APACHE_LOG_DIR}/apache-ssl-access.log combined

Como posso consertar isso mesmo quando eu faço telnet para essa porta e digito lixo eu ainda verei uma indicação de que alguém tentou se conectar?

Eu tenho o módulo reqtimeout ativado.

obrigado.

    
por ufk 15.07.2013 / 10:42

2 respostas

3

A razão para isso é que a conexão com a porta 443 é tratada em duas etapas. O primeiro é a negociação SSL. Para que isso funcione, o cliente precisa falar SSL válido. O segundo passo é o HTTP real. Apenas o segundo passo é registrado no log de acesso.

Desde que, quando você está telnet, você não está fazendo uma negociação SSL bem-sucedida, você nunca chega à segunda etapa.

Se você quiser apenas verificar se o log funciona como projetado, você deve usar openssl s_client -connect your.server.name:443 em vez de telnet. Isso abrirá uma sessão SSL no seu servidor.

Se você quiser registrar até conexões interrompidas, você pode adicionar

<IfModule mod_ssl.c>
  ErrorLog /var/log/apache2/ssl_engine.log
  LogLevel debug
</IfModule>

para o host virtual SSL. Isso se tornará um log enorme se você tiver muito tráfego SSL; Eu vi discos ficando cheios dentro de horas depois de definir isso.

    
por 15.07.2013 / 10:51
3

Você não pode fazer isso diretamente no Apache. Ele não registrará o lixo no error.log.

No entanto, você pode criar uma regra de firewall que produzirá eventos de log no seu syslog! Por exemplo, primeiro crie uma nova cadeia de firewall para fazer o registro:

iptables -N LOGGER
iptables -A LOGGER -j LOG --log-prefix 'New Connection: ' --log-level 4
iptables -A LOGGER -j ACCEPT

Com essa configuração, você agora precisa fazer duas coisas: Primeiro, informe ao firewall para permitir que todos os pacotes estabeleçam conexões estabelecidas sem registro. Em segundo lugar, registre tudo mais:

iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -j LOGGER

É isso aí!

    
por 15.07.2013 / 11:00