Apache access.log解释

在apache(access.log)的日志文件中,我find如下所示的日志条目:

10.20.30.40 - - [18/Mar/2011:02:12:44 +0200] "GET /index.php HTTP/1.1" 404 505 "-" "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.7.62 Version/11.01" 

谁的意思是明确的:IP 10.20.30.40的客户端在/index.php(也就是说http://mysite.org/index.php )上使用GET HTTP方法,使用Opera作为客户端/浏览器接收状态码404 。 我不明白的是像这样的条目:

 174.34.231.19 - - [18/Mar/2011:02:24:56 +0200] "GET http://www.siasatema.com HTTP/1.1" 200 469 "-" "Python-urllib/2.4" 

所以在这里我看到的是,有人(IP为174.34.231.19的客户端)访问了http://www.siasatema.com并获得了200个HTTP状态码(?)。 这对我来说没有任何意义…我能想到的唯一解释就是我的apache服务器像代理一样行事! 这里有一些没有我的网站作为目的地的其他请求…

 187.35.50.61 - - [18/Mar/2011:01:28:20 +0200] "POST http://72.26.198.222:80/log/normal/ HTTP/1.0" 404 491 "-" "Octoshape-sua/1010120" 87.117.203.177 - - [18/Mar/2011:01:29:59 +0200] "CONNECT 64.12.244.203:80 HTTP/1.0" 405 556 "-" "-" 87.117.203.177 - - [18/Mar/2011:01:29:59 +0200] "open 64.12.244.203 80" 400 506 "-" "-" 87.117.203.177 - - [18/Mar/2011:01:30:04 +0200] "telnet 64.12.244.203 80" 400 506 "-" "-" 87.117.203.177 - - [18/Mar/2011:01:30:09 +0200] "64.12.244.203 80" 400 301 "-" "-" 

我相信所有这些都与服务器的某种攻击或滥用有关。 有人可以解释可能发生了什么事情,以及如何应对这种情况?

更新1:

我禁用了mod_proxy以确保我没有打开的代理:

 # a2dismod proxy 

我从哪里得到的消息:

 Module proxy already disabled 

我确定在$APACHE/mods-enabled下没有文件proxy.conf 。 最后,我将我的IP作为代理设置在我的浏览器(Mozzila)上,并尝试访问http://google.com 。 我没有redirect到google.com,而是出现了我的网页。 尝试访问http:// ab (!)也是如此。 所以我的服务器并没有真正作为代理工作,因为它不转发请求…但是我认为这会更好,如果我能configuration它返回一个状态代码403 。

这里是我的Apacheconfiguration文件:

 <VirtualHost *:80> ServerName mysite.org ServerAdmin webmaster@localhost DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost> 

更新2:

使用块,我限制使用除GET和POST之外的其他方法…

 <Limit POST PUT CONNECT HEAD OPTIONS DELETE PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> Order deny,allow Deny from all </Limit> <LimitExcept GET> Order deny,allow Deny from all </LimitExcept> 

现在,其他GET方法被禁止(403)。 我现在唯一的问题是,是否有一些技巧来启动这些如何尝试使用我的服务器作为代理了…

好吧,我可以使用下面的Python代码得到确切的日志消息

 import urllib proxies = {'http':'http://myapacheserevr'} file_handle = urllib.urlopen('http://www.siasatema.com',proxies=proxies) 

这给了我日志条目

HTTP:/ /“18 / Mar / 2011:14:40:40 +0200]”GET http://www.siasatema.com HTTP / 1.0“200 453” – “”Python-urllib / 1.17“

可以肯定的是,我从这里得到的是我的默认网页的内容,

所以,有的东西是通过你的networking服务器代理的,它可能是黑客寻找开放的,configuration不当,代理连接和滥用另一个网站。 停止设置: –

 ProxyRequests Off 

我可以通过这样做复制另一个人

 $ nc ubuntuvm 80 telnet 64.12.244.203 80 

它给出: – 192.168.0.28 – – [18 / Mar / 2011:14:58:47 +0200]“telnet 64.12.244.203 80”400 505“ – ”“ –

您的服务器是一个开放代理,这是一个安全问题。 垃圾邮件发送者可以通过您的服务器发送邮件。 其他人可以从你的服务器上查看子pr0n。 尽快修复。

更改

 ProxyRequests Off 

,在代理configuration,解决它。

我不认为你的Apache是​​一个开放的代理。

 174.34.231.19 - - [18/Mar/2011:02:24:56 +0200] "GET http://www.siasatema.com HTTP/1.1" 200 469 "-" "Python-urllib/2.4" 

可能是某个人使用www.siasatema.com作为请求中的主机名向您的apache服务器发送HTTP请求。 在这种情况下,Apache服务器将作为默认页面(第一个虚拟主机)。 你可以configurationApache来放弃这种请求或redirect到你的主页面。

 187.35.50.61 - - [18/Mar/2011:01:28:20 +0200] "POST http://72.26.198.222:80/log/normal/ HTTP/1.0" 404 491 "-" "Octoshape-sua/1010120" 87.117.203.177 - - [18/Mar/2011:01:29:59 +0200] "CONNECT 64.12.244.203:80 HTTP/1.0" 405 556 "-" "-" 87.117.203.177 - - [18/Mar/2011:01:29:59 +0200] "open 64.12.244.203 80" 400 506 "-" "-" 87.117.203.177 - - [18/Mar/2011:01:30:04 +0200] "telnet 64.12.244.203 80" 400 506 "-" "-" 87.117.203.177 - - [18/Mar/2011:01:30:09 +0200] "64.12.244.203 80" 400 301 "-" "-" 

这些都是不成功的请求,阿帕奇丢弃。

我相信这种情况非常简单:有人来到您的服务器,使用正确的IP,但不是您期望的名称,并获得首页。 这可以通过以下方式生成:

宽带用户添加到他的主机文件(/ etc / hosts或/ windows / system32 / drivers / etc / hosts)中的条目

aa.bb.cc.dd rubbishrubbishrubbish.com

其中aa.bb.cc.dd是您的IP地址,然后使用任何浏览器访问http://rubbishrubbishrubbish.com

您将在日志文件中看到访问权限,以及rubbishrubbishrubbish.com的“GET”。 典型的apache安装对URL的主机名部分不感兴趣,只是在其余部分,因此返回您的主页。

还要注意,你的服务器当然可以通过使用它的IP地址或者FQDN来访问,或者可能的昵称(除非明确强制)不需要被apache服务器知道。 我的家庭networking服务器可以通过ipv4和ipv6访问多个名称,但是我的服务器本身并不知道任何这些域名。

剩下的问题是:为什么? 我想答案是:testing你是否代理。 而你不会。 Python-urllib / 2.4也被报道为BOT(但并不总是)。