Вчера некто пытался подобрать адрес к phpmyadmin (а затем бы и пароль), видимо, на одном из моих сайтов.
Работал с 2 IP адресов, видимо, какой-то программой, так как за 1 минуту перебрал 26 предполагаемых URI.
Придется как-то реагировать на это событие. Как вариант заблокировать оба адреса. Ну для этого, видимо можно использовать снипет http://www.djangosnippets.org/snippets/744/ или настройку BANNED_IPS в самой django.
Можно ещё избавиться от трейсбэков по поводу не существующей страницы немного переработав указанный ранее снипет:
from django.conf import settings
from django import http
class BlockedUriMiddleware(object):
def process_request(self, request):
if request.META['REQUEST_URI'] in settings.BLOCKED_URIS:
return http.HttpResponseForbidden('<h1>Forbidden</h1>')
return None
# in settings.py:
MIDDLEWARE_CLASSES = (
...
"myapp_with_middleware_module.BlockedUriMiddleware",
)
BLOCKED_URIS = (
'/phpmyadmin/index.php',
'/phpMyAdmin/index.php',
'/PMA/index.php',
'/pma/index.php',
'/dbadmin/index.php',
'/mysql/index.php',
...
)
Кстати в тест-сервере (это тот, что по runserver запускается) нет никакого REQUEST_URI, так что работать не будет – подробнее тут http://groups.google.com/group/django-users/browse_thread/thread/3261e7ece9ff3b33.
UPD: А можно ещё внимательней почитать документацию и обнаружить для себя два параметра настройки: IGNORABLE_404_ENDS и IGNORABLE_404_STARTS.
Со вторым, вместо BLOCKED_URIS можно написать IGNORABLE_404_STARTS со следующим контентом:
IGNORABLE_404_STARTS = (
'/cgi-bin/',
'/_vti_bin',
'/_vti_inf'
'/php',
'/PMA',
'/pma',
'/dbadmin',
'/mysql',
'/myadmin',
'/sql',
'/p/m/a/',
'/web',
'/Tools',
'/index.php',
'/wp-login',
)
Первые три лежат в настройке по умолчанию.
7 комментариев:
да всё время такое в логах, но у меня ни phpmyadmin ни mysql нет. так что особо как-то не беспокоит =)
Не совсем понятно какой смысл вообще блокировать подобные урли?
Понятно, что блокировка, как таковая где-то может понадобиться, но в каком-нибудь другом случае.
Я блокирую их, чтоб они мне не портили настроение с утра :). Другого применения пока и сам не придумал.
Костыли такие костыли. man iptables Вам в руки.
Причем тут iptables?
Ок, не допустим iptables, но если хотите выдавать 403, то зачем джангой это велосипедить? Отдавайте сервером.
Не вижу ничего дурного в том, чтоб делать это django'й.
К тому же, на хостингах задачу решать с помощью того же апача уже сложней.
В чем конкретные минусы моего решения?
Отправить комментарий