Бывают случаи, когда доступ к удаленному серверу могу получить злоумышленники. Зачастую взлом осуществляется с помощью так называемых brute-force атак – многократного перебора паролей, который длится до тех пор, пока не будет подобрана рабочая комбинация символов для доступа к серверу. Бороться с этим можно по-разному. В данной статье будет рассмотрен метод защиты, позволяющий предотвратить подбор пароля любого пользователя, в том числе root, для доступа к VPS по протоколу SSH. Обезопасить работу виртуального сервера можно при помощи специального программного обеспечения, например, программы SSHGuard. Она выполняет проверку логов на предмет записей о попытках неоднократного ввода неверных данных доступа с целью поиска нужной комбинации. Если таковые будут обнаружены, IP, с которого приходила атака, будет заблокирован в iptables.
Содержание
CentOS 6
Если на вашем VPS установлена операционная система CentOS 6 (до версии 6.5), то процедура установки SSHGuard выглядит следующим образом:
1. Подключитесь к виртуальному серверу по протоколу SSH.
2. Установите на свой VPS дополнительное программное обеспечение: компилятор gcc и утилиту make. Для этого выполните следующую команду:
yum install gcc make
3. Скачайте архив с программой SSHGuard и распакуйте его, выполнив представленные ниже команды по очереди:
wget http://sourceforge.net/projects/sshguard/files/sshguard/sshguard-1.5/ sshguard-1.5.tar.bz2 bunzip2 -v -d sshguard-1.5.tar.bz2 tar -xvf sshguard-1.5.tar cd sshguard-1.5 ./configure –with-firewall=iptables make && make install
4. Теперь задайте цепочку правил в iptables командой
iptables -N sshguard
5. Обязательно настройте проверку всего входящего трафика через установленную цепочку правил командой
iptables -A INPUT -j sshguard
6. Настройте отслеживание активности на основных портах FTP, SSH, POP3, IMAP.
iptables -A INPUT -m multiport -p tcp --destination-ports 21,22,110,143 -j sshguard
Дополнительно вы можете настроить блокировку нарушителей на портах TCP и UDP командами:
iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT
7. Чтобы SSHGuard имел право доступа на динамическое изменение настроек iptables, выполните команду
chmod +s /usr/local/sbin/sshguard
8. Сохраните внесенные в правила изменения командой
/sbin/service iptables save
либо
iptables-save > /etc/sysconfig/iptables
9. Теперь выполните запуск SSHGuard командой
/usr/local/sbin/sshguard -l /var/log/secure
Параметр -l указывает программе, где именно ей нужно читать логи.
10. На этом установка SSHGuard завершена. Отныне после каждых 4 неуспешных попыток подключения к VPS IP-адрес нарушителя будет блокироваться. Однако, созданные настройки будут работать до первой перезагрузки виртуального сервера. Восстанавливать их придется командой
/sbin/service iptables restart
Чтобы не делать этого каждый раз, можно на сервере создать специальный файл и разместить в нем текст скрипта, который бы выполнял запуск программы автоматически.
11. Загрузите или создайте файл со скриптом на VPS. Если вы хотите его загрузить, производите загрузку в каталог /etc/rc.d/init.d/ Вы можете просто скачать файл по этой ссылке и загрузить на VPS. После загрузки убедитесь, что файл имеет необходимые права доступа. Для его исполнения нужны права 755. Если вы выполнили этот пункт, можете пропустить следующий пункт. Если хотите создать файл вручную – переходите к пункту 12.
12. Создание такого файла осуществляется командой
touch /etc/rc.d/init.d/sshguard
После того, как вы открыли файл с названием sshguard, добавьте в него все строки из файла (открыть файл можно простым блокнотом). Далее откройте файл на сервере для редактирования: vi /etc/rc.d/init.d/sshguard, если вы используете редактор vi. nano /etc/rc.d/init.d/sshguard, если для вас предпочтительнее редактор nano.
При необходимости установку редактора можно выполнить командой
yum install nano
или
yum install vi
Не забудьте сохранить внесенные изменения.
13. Чтобы операционная система могла прочитать созданный файл, выполните приведенный ниже набор команд:
yum install perl perl -pi -e 's/\r\n/\n/;' /etc/rc.d/init.d/sshguard
14. Дополнительно установите на свой VPS специальную утилиту для чтения логов – syslog-ng. Ее установка и запуск выполняется следующей последовательностью команд:
yum install chkconfig cd /root wget http://dl.fedoraproject.org/pub/epel/6Server/i386/epel-release-6-8.noarch.rpm yum -y update rpm -Uvh /root/epel-release-6-8.noarch.rpm yum repolist yum check-update sudo sed -i "s/mirrorlist=https/mirrorlist=http/" /etc/yum.repos.d/epel.repo yum list *syslog-ng* yum install syslog-ng syslog-ng-libdbi chkconfig rsyslog off chkconfig syslog-ng on chkconfig --list syslog-ng service rsyslog stop service syslog-ng start
15. С помощью редактора nano или vi откройте файл syslog-ng.conf:
nano /etc/syslog-ng/syslog-ng.conf
или
vi /etc/syslog-ng/syslog-ng.conf
Добавьте в него такие строки:
# pass only entries with auth+authpriv facilities from programs other than sshguard filter f_sshguard { facility(auth, authpriv) and not program("sshguard"); }; # pass entries built with this format destination sshguard { program("/usr/local/sbin/sshguard" template("$DATE $FULLHOST $MSGHDR$MESSAGE\n") ); }; log { source(src); filter(f_sshguard); destination(sshguard); };
Сохраните изменения в файле и выполните команду
killall -HUP syslog-ng
16. Остается только выполнить запуск скрипта командами:
chkconfig sshguard on service sshguard start
CentOS 6.5+
Для CentOS 6.5 и выше набор команд для установки SSHGuard несколько отличается, но принцип их действия тот же:
yum install gcc make wget http://sourceforge.net/projects/sshguard/files/sshguard/sshguard-1.5/sshguard-1.5.tar.bz2 tar xjpf sshguard-1.5.tar.bz2 cd sshguard-1.5 ./configure –with-firewall=iptables make && make install iptables -N sshguard iptables -A INPUT -j sshguard iptables -P INPUT ACCEPT iptables -A INPUT -m multiport -p tcp --destination-ports 21,22,110,143 -j sshguard iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT chmod +s /usr/local/sbin/sshguard service iptables save
После этого повторите шаги из предыдущего раздела, начиная с п. 11. Это необходимо для того, чтобы избежать аннулирования действия выполненных настроек при следующей перезагрузке VPS.
CentOS 7
Алгоритм установки программы SSHGuard на CentOS 7 похож с процедурой установки на CentOS 6, однако здесь необходимо использовать другую версию репозитория EPEL.
1. Для того чтобы установить SSHGuard, выполните следующие команды:
yum -y install gcc make wget http://sourceforge.net/projects/sshguard/files/sshguard/sshguard-1.5/sshguard-1.5.tar.bz2 tar xjpf sshguard-1.5.tar.bz2 cd sshguard-1.5 ./configure -with-firewall=iptables make && make install
2. Добавьте правила реагирования в iptables
iptables -N sshguard iptables -A INPUT -j sshguard iptables -P INPUT ACCEPT iptables -A INPUT -m multiport -p tcp --destination-ports 21,22,110,143 -j sshguard iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT
3. Внесите финальные изменения в настройки SSHGuard, добавьте утилиту для чтения логов и запустите программу:
chmod +s /usr/local/sbin/sshguard service iptables save touch /etc/rc.d/init.d/sshguard chmod 755 /etc/rc.d/init.d/sshguard nano /etc/rc.d/init.d/sshguard yum -y install perl perl -pi -e 's/\r\n/\n/;' /etc/rc.d/init.d/sshguard yum -y install chkconfig cd /root wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm yum -y update rpm -ivh epel-release-7-5.noarch.rpm yum repolist yum check-update sudo sed -i "s/mirrorlist=https/mirrorlist=http/" /etc/yum.repos.d/epel.repo yum list *syslog-ng* yum -y install syslog-ng syslog-ng-libdbi chkconfig rsyslog off chkconfig syslog-ng on chkconfig --list syslog-ng service rsyslog stop service syslog-ng start nano /etc/syslog-ng/syslog-ng.conf killall -HUP syslog-ng chkconfig sshguard on service sshguard start
Debian
Для Debian процедура установки SSHGuard следующая:
1. Выполните команду
apt-get -y install sshguard
2. Создайте правила в iptables, поочередно выполнив такие команды:
iptables -N sshguard iptables -A INPUT -j sshguard iptables -P INPUT ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Указанный выше набор правил предусматривает разрешение подключения к серверу только через порты 22, 53, 80, 443. Подключения через другие порты будут блокироваться.
Это лишь пример цепочки правил для iptables. Вы можете задавать и свои условия проверки. Например, можно использовать и предложенное в предыдущих пунктах условие мониторинга активности на основных портах доступа к серверу:
iptables -A INPUT -m multiport -p tcp --destination-ports 21,22,110,143 -j sshguard
3. Сохраните заданные правила в памяти сервера командой iptables-save
4. Чтобы заданная цепочка правил имела действие после перезапуска виртуального сервера, необходимо открыть для редактирования файл 00-iptables. Предварительно установите к себе на VPS предпочитаемый редактор, например, nano:
apt-get install nano nano -w /etc/network/if-up.d/00-iptables
Содержимое файла должно быть таким:
#!/bin/sh iptables-restore < /etc/firewall.conf
Сохраните обновления и предоставьте скрипту необходимые права для выполнения:
chmod +x /etc/network/if-up.d/00-iptables
5. Передайте заданную ранее цепочку правил в firewall:
iptables-save >/etc/firewall.conf
6. Теперь предоставьте SSHGuard права, чтобы была возможность перезаписывать правила в iptables:
chmod +s /usr/sbin/sshguard iptables-save > /etc/init.d/iptables /usr/sbin/sshguard -l /var/log/messages
Ubuntu
Установка SSHGuard на Ubuntu выполняется следующим образом:
1. Скачайте и установите программу, выполнив команды
apt-get update apt-get install sshguard
2. Далее установите на сервер специальную утилиту для чтения логов:
apt-get autoremove rsyslog apt-get install syslog-ng
3. Укажите цепочку правил iptables и сохраните их командами:
iptables -A INPUT -j sshguard iptables -P INPUT ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p udp --dport 53 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables-save -c
4. Откройте конфигурационный файл syslog-ng.conf для редактирования:
nano /etc/syslog-ng/syslog-ng.conf
Добавьте в него следующие строки:
# pass only entries with auth+authpriv facilities from programs other than sshguard filter f_sshguard { facility(auth, authpriv) and not program("sshguard"); }; # pass entries built with this format destination sshguard { program("/usr/sbin/sshguard" template("$DATE $FULLHOST $MSGHDR$MESSAGE\n") ); }; log { source(src); filter(f_sshguard); destination(sshguard); };
Сохраните внесенные изменения в файле, после чего выполните команду:
killall -HUP syslog-ng
5. Чтобы настроенные в iptables правила действовали и после перезагрузки VPS, откройте для редактирования файл 00-iptables:
nano -w /etc/network/if-up.d/00-iptables
Добавьте в него следующие строки:
#!/bin/sh iptables-restore < /etc/firewall.conf
Сохраните изменения и укажите для указанного файла права для запуска командой
chmod +x /etc/network/if-up.d/00-iptables
6. Сохраните заданную цепочку правил в конфигурационный файл firewall:
iptables-save >/etc/firewall.conf
7. И, наконец, запустите SSHGuard командой
/etc/init.d/sshguard start
Теперь после 4 неудачных попыток ввода пароля при подключении к VPS IP компьютера, с которого выполнялось подключение, попадет в бан. Сначала время блокировки составляет около 10 минут. При каждых последующих попытках перебора пароля время блокировки возрастает по экспоненте.
Не забывайте делать бэкапы, чтобы всегда иметь возможность откатиться!