Трапляються випадки, коли доступ до віддаленого сервера можуть отримати зловмисники. Найчастіше злам здійснюється за допомогою так званих 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/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 хвилин. При кожних спробах перебору пароля час блокування зростає експоненціально.
Не забувайте робити бекапи, щоб завжди мати можливість відкотитися!