У меня установлен сервер 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-трафика; Я видел, как диски заполнялись в течение нескольких часов после установки этого параметра.