在 apache 的日志文件(access.log)中,我发现如下日志条目:
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 使用了 GET HTTP 方法(也就是说http://mysite.org/index.php) 使用 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
proxy.conf
我确保下没有文件$APACHE/mods-enabled
。最后,我在浏览器 (Mozzila) 上将我的 IP 设置为代理,并尝试访问http://google.com
。我没有被重定向到 google.com,而是出现了我的网页。尝试访问 时也发生了同样的情况http://ab(!)。因此,我的服务器实际上不能充当代理,因为它不会转发请求……但我认为,如果我能以某种方式将其配置为返回状态代码 403。
这是我的 Apache 配置文件:
<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)。我现在唯一的问题是是否有一些技巧可以引导那些试图使用我的服务器作为代理的人...
答案1
好的,我可以使用以下 Python 代码获取该确切的日志消息
import urllib
proxies = {'http':'http://myapacheserevr'}
file_handle = urllib.urlopen('http://www.siasatema.com',proxies=proxies)
这给了我日志条目
192.168.0.28 - - [18/Mar/2011:14:40:40 +0200] “获取http://www.siasatema.comHTTP/1.0” 200 453 “-” “Python-urllib/1.17”
顺便说一句,我从中得到的只是我的默认网页的内容,
因此,确实有东西通过您的网络服务器进行代理,这可能是黑客在寻找开放的、配置不当的代理来连接和滥用另一个网站。要阻止它,请设置:-
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 "-" "-"
答案2
您的服务器是开放代理,这是一个安全问题。垃圾邮件发送者可以通过您的服务器发送邮件。其他人可以从您的服务器查看儿童色情内容。尽快修复它。
改变
ProxyRequests Off
在代理配置中,修复它。
答案3
我不认为你的 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 服务器将提供默认页面(第一个虚拟主机)。您可以配置 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 "-" "-"
这些是 apache 已丢弃的不成功的请求。
答案4
我认为这种情况非常简单:有人使用正确的 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 服务器不需要知道这些昵称。我的家庭 Web 服务器可以通过 ipv4 和 ipv6 使用多个名称访问,但我的服务器本身不知道任何这些域名。
剩下的问题是:为什么?我猜答案是:测试您是否充当代理。而您没有。而且 Python-urllib/2.4 也被报告为 BOT(但并非总是如此)。