Назад | Перейти на главную страницу

журнал доступа, содержащий информацию о том, что кто-то подключился к моему серверу и набрал мусор

У меня установлен сервер apache 2.2.22 на ubuntu linux.

Я создал виртуальный хост на порту 443, и я хочу, чтобы все указания telnet для этого порта были перечислены в журнале доступа.

так, например, если я подключусь к этому порту через порт 443 и ничего не пишу, он отключает меня через несколько секунд, а затем показывает индикацию в журнале доступа.

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

но если я telnet-порт 443 и набираю какой-то мусорный текст, и он отключает меня, я не вижу никаких указаний в журнале доступа, что я пытался подключиться.

это моя директива журнала доступа в файле конфигурации apache:

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

как я могу исправить это так, что даже когда я подключаюсь к этому порту и набираю мусор, я все равно буду видеть указание на то, что кто-то пытался подключиться?

У меня включен модуль reqtimeout.

Спасибо.

Вы не можете сделать это прямо в Apache. Он не будет записывать мусор в error.log.

Однако вы можете создать правило брандмауэра, которое будет регистрировать события в вашем системном журнале! Например, сначала создайте новую цепочку брандмауэра для ведения журнала:

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

После этой настройки вам нужно сделать две вещи: во-первых, указать брандмауэру пропускать все пакеты для установленных соединений без регистрации. Во-вторых, запишите все остальное:

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

Это оно!

Причина этого в том, что подключение к порту 443 осуществляется в два этапа. Первый - это согласование SSL. Чтобы это работало, клиент должен использовать действующий SSL. Второй шаг - это собственно HTTP. В журнал доступа заносится только второй шаг.

Поскольку при использовании telnet-соединения вы не выполняете успешное согласование SSL, вы никогда не дойдете до второго шага.

Если вы хотите просто убедиться, что ведение журнала работает так, как задумано, вам следует использовать openssl s_client -connect your.server.name:443 вместо телнета. Это откроет сеанс SSL для вашего сервера.

Если вы хотите регистрировать даже прерванные соединения, вы можете добавить

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

к виртуальному хосту SSL. Это станет огромный войти, если у вас много SSL-трафика; Я видел, как диски заполнялись в течение нескольких часов после установки этого параметра.