我在 ubuntu linux 上安装了 apache 2.2.22 服务器。
我在端口 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
我该如何解决这个问题,即使我 telnet 到该端口并输入垃圾,我仍然会看到有人试图连接的迹象?
我启用了 reqtimeout 模块。
谢谢你。
原因是与端口 443 的连接分两步处理。第一个是 SSL 协商。为此,客户端需要使用有效的 SSL。第二步是实际的 HTTP。访问日志中只记录了第二步。
因为,当您进行远程登录时,您并没有进行成功的 SSL 协商,因此您永远无法进入第二步。
如果您只想验证日志记录是否按设计工作,则应使用
openssl s_client -connect your.server.name:443
而不是 telnet。这将打开到您的服务器的 SSL 会话。如果您想记录甚至中止的连接,您可以添加
到 SSL 虚拟主机。如果您有大量 SSL 流量,这将成为一个巨大的日志;我已经看到磁盘在设置后的几个小时内就变满了。
您不能直接在 Apache 中执行此操作。它不会将垃圾记录到 error.log 中。
但是,您可以创建一个防火墙规则,将日志事件生成到您的系统日志中!例如,首先创建一个新的防火墙链来进行日志记录:
有了这个设置,您现在需要做两件事:首先,告诉防火墙允许所有已建立连接的数据包通过,而不进行记录。其次,记录其他所有内容:
而已!