Установка и настройка SSHGuard

Бывают случаи, когда доступ к удаленному серверу могу получить злоумышленники. Зачастую взлом осуществляется с помощью так называемых 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 минут. При каждых последующих попытках перебора пароля время блокировки возрастает по экспоненте.

Не забывайте делать бэкапы, чтобы всегда иметь возможность откатиться!