Трапляються випадки, коли доступ до віддаленого сервера можуть отримати зловмисники. Найчастіше злам здійснюється за допомогою так званих brute-force атак — багаторазового перебору паролів, який триває доти, доки не буде підібрано робочу комбінацію символів для доступу до сервера. Боротися із цим можна по-різному. У цій статті буде розглянуто метод захисту, що дозволяє запобігти підбору пароля будь-якого користувача, у тому числі root, для доступу до VPS за протоколом SSH. Захистити віртуальний сервер можна за допомогою спеціального програмного забезпечення, наприклад, програми SSHGuard. Вона виконує перевірку логів щодо записів про спроби неодноразового введення невірних даних доступу з метою пошуку потрібної комбінації. Якщо такі будуть виявлені, IP, з якого надходила атака, буде заблоковано в iptables.

Зміст

  1. CentOS 6
  2. CentOS 6.5+
  3. CentOS 7
  4. Debian
  5. Ubuntu

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/rn/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$MESSAGEn")
    );
};
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/rn/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$MESSAGEn")
    );
};
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 хвилин. При кожних спробах перебору пароля час блокування зростає експоненціально.

Не забувайте робити бекапи, щоб завжди мати можливість відкотитися!