Я покажу как за несколько минут защитить сервер от подбора паролей[знаю, что тема избитая, но решил написать для людей, кому не интересно долго ковыряться в настройках]. Итак, у вас уже должен быть установлен python. Если нет то устанавливаем:
apt-get install pythonСкачиваем сам скрипт [На момент написания заметки версия 2.6].
wget http://sourceforge.net/projects/denyhosts/files/denyhosts/2.6/DenyHosts-2.6.tar.gz/downloadДальше распаковываем архив, заходим в него и запускаем процесс установки[из под root]:
$ tar xvfz DenyHosts-2.6.tar.gzПосле этого необходимо скопировать конфигурационный файл в каталог /etc:
$ cd ./DenyHosts-2.6
# python setup.py install
cp ./denyhosts.cfg-dist /etc/denyhosts.cfgА также файл daemon-control-dist в /usr/sbin/daemon-control:
cp ./daemon-control-dist /usr/sbin/daemon-controlПосле того как все удачно завершилось переходим к конфигурированию /etc/denyhosts.cfg. Т.к. статья расчитана на "немного ленивых админов"[сам из таких =)], то я сразу прикладываю нужный вам конфиг:
debian:/# cat ./denyhosts.cfgДалее нужно открыть файл на редактирование /usr/sbin/daemon-control и внести изменение в несколько первых строк:
SECURE_LOG = /var/log/auth.log
HOSTS_DENY = /etc/hosts.deny
PURGE_DENY =
BLOCK_SERVICE = sshd
DENY_THRESHOLD_INVALID = 5
DENY_THRESHOLD_VALID = 10
DENY_THRESHOLD_ROOT = 1
DENY_THRESHOLD_RESTRICTED = 1
WORK_DIR = /usr/share/denyhosts/data
SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES
HOSTNAME_LOOKUP=YES
LOCK_FILE = /var/run/denyhosts.pid
AGE_RESET_VALID=5d
AGE_RESET_ROOT=25d
AGE_RESET_RESTRICTED=25d
AGE_RESET_INVALID=10d
DAEMON_LOG = /var/log/denyhosts
DAEMON_SLEEP = 30s
DAEMON_PURGE = 1h
DENYHOSTS_BIN = "/usr/bin/denyhosts.py"Теперь просто стартуем наш denyhosts следующей командой и прописать эту же команду в автозагрузку например в /etc/rc.local:
DENYHOSTS_LOCK = "/var/run/denyhosts.pid"
DENYHOSTS_CFG = "/etc/denyhosts.cfg"
PYTHON_BIN = "/usr/bin/env python"
/usr/sbin/daemon-control start > /dev/hull &Через некоторое время у вас в файле начнут появляться заблокированные IP-адреса, с которых 5 раз[параметр DENY_THRESHOLD_INVALID = 5] был введены логин с паролем.
Замечательная автошкола приглашает всех желающих пройти курсы вождения.
7 комментариев:
Но denyhosts имеется в репозитории, начиная с oldstable (etch). Зачем ставить из исходников?
Для бана по IP после n-количества неудачных авторизаций есть замечательный fail2ban. Можно настраивать время бана, максимальное количество неудачных логинов и многое другое.
Есть в репозитории Debian.
Описание: bans IPs that cause multiple authentication errors
Monitors log files (e.g. /var/log/auth.log, /var/log/apache/access.log) and temporarily or persistently bans failure-prone
addresses by updating existing firewall rules. The software was completely rewritten at version 0.7.0 and now allows easy
specification of different actions to be taken such as to ban an IP using iptables or hostsdeny rules, or simply to send a
notification email. Currently, by default, supports ssh/apache/vsftpd but configuration can be easily extended for
monitoring any other ASCII file. All filters and actions are given in the config files, thus fail2ban can be adopted to be
used with a variety of files and firewalls.
Сайт: http://www.fail2ban.org
тоже хотел про fail2ban сказать по ходу читания статьи.
там еще и бан по другим сервисам можно ставить, не только от перебора по ssh а еще и по почтовым портам, ftp. вобщем дельная штука.
Спасибо. Обязательно посмотрю
Зачем придумывать велосипед?
iptables с етим хорошо справляется (только нужно чтоб в ядре recent (ipt_recent) был включен) в дефолтных ядрах он включен, 2.6.30+ которые сам компилиш выключен по умолчанию
==================
iptables -N ssh_brute_check # Создаем цепочку для проверки попыток соединений на защищаемый порт
# Если за последние 10 минут (600 секунд) с одного адреса было 3 или более новых соединений — блокируем этот адрес
iptables -A ssh_brute_check -m recent --update --seconds 600 --hitcount 3 -j DROP
# В противном случае — разрешаем, и при этом заносим в список
iptables -A ssh_brute_check -m recent --set -j ACCEPT
iptables -F INPUT # Очищаем цепочку INPUT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Разрешаем пакеты по установленным соединениям
# Все попытки открыть новое соединение по SSH направляем на проверку
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j ssh_brute_check
# Здесь можно разрешать те порты, для которых такая проверка не нужна. Например, HTTP
iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j ACCEPT
iptables -P INPUT DROP # Что не разрешено — то запрещено
===================
Спасибо всё работает :)
Но во как бы ещё сделать что бы он не банил локальные айпи а только внешку
Отправить комментарий