В файле журнала 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 применил метод GET HTTP к /index.php (то есть http://mysite.org/index.php) получение кода статуса 404 с использованием Opera в качестве клиента / браузера. Чего я не понимаю, так это таких записей:
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 и получил код состояния HTTP 200 (?). Для меня это не имеет смысла ... единственная интерпретация, о которой я могу думать, - это то, что мой сервер 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: //a.b (!). Так что мой сервер на самом деле не работает как прокси, поскольку он не пересылает запросы ... Но я думаю, что было бы лучше, если бы я мог каким-то образом настроить его для возврата код состояния 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). Мой единственный вопрос сейчас: есть ли какой-нибудь трюк для загрузки тех, кто пытается использовать мой сервер в качестве прокси ...
Хорошо, я могу получить это точное сообщение журнала, используя следующий код Python
import urllib
proxies = {'http':'http://myapacheserevr'}
file_handle = urllib.urlopen('http://www.siasatema.com',proxies=proxies)
Что дает мне запись в журнале
192.168.0.28 - - [18 / мар / 2011: 14: 40: 40 +0200] «ПОЛУЧИТЬ http://www.siasatema.com HTTP / 1.0 «200 453» - «Python-urllib / 1.17»
Кстати, все, что я получаю от этого, - это содержимое моей веб-страницы по умолчанию,
Итак, да, что-то проксируется через ваш веб-сервер. Вероятно, хакеры ищут открытые, плохо настроенные прокси для подключения к другому сайту и злоупотребления им. Чтобы остановить это, установите: -
ProxyRequests Off
Между прочим, я могу повторить другой, сделав
$ nc ubuntuvm 80
telnet 64.12.244.203 80
Что дает: - 192.168.0.28 - - [18 / Мар / 2011: 14: 58: 47 +0200] "telnet 64.12.244.203 80" 400 505 "-" "-"
Ваш сервер - это открытый прокси, что является проблемой безопасности. Спамеры могут отправлять почту через ваш сервер. Другие могут посмотреть дочерний pr0n с вашего сервера. Исправьте это как можно скорее.
+ Изменить
ProxyRequests Off
в конфигурации прокси, чтобы исправить это.
Не думаю, что ваш апач - это открытый прокси.
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"
Может быть кто-то, кто отправляет HTTP-запрос на ваш сервер apache, используя www.siasatema.com в качестве имени хоста в запросе. В этом случае сервер 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 отклонил.
Я считаю, что все очень просто: кто-то приходит к вашему серверу с правильным IP-адресом, но не с тем именем, которое вы ожидаете, и получает первую страницу. Это может быть создано, например, с помощью следующего:
Пользователь широкополосного доступа добавляет в свой файл хостов (/ etc / hosts или / windows / system32 / drivers / etc / hosts) запись
aa.bb.cc.dd rubbishrubbishrubbish.com
где aa.bb.cc.dd - ваш IP-адрес, а после этого использует любой браузер для доступа http://rubbishrubbishrubbish.com
В файле журнала вы увидите доступ и «ПОЛУЧИТЬ» для / для rubbishrubbishrubbish.com. Типичные установки apache не заинтересованы в части имени хоста URL-адреса, а только в остальной части, таким образом возвращая вашу домашнюю страницу.
Также обратите внимание, что к вашему серверу, конечно, можно получить доступ, используя его IP-адрес или полное доменное имя, или возможные псевдонимы, которые (если это не указано явно) не обязательно должны быть известны серверу apache. Мой домашний веб-сервер может быть доступен с несколькими именами через ipv4 и ipv6, но сам мой сервер не знает ни одного из этих доменных имен.
Остается вопрос: почему? Думаю, ответ таков: проверить, действуете ли вы как прокси. А ты нет. Сообщается, что Python-urllib / 2.4 также является BOT (но не всегда).