Как защитить сервер от взлома
Компрометация доступов к серверу может обернуться многими неприятностями: появление сторонних скриптов, нагружающих ресурсы сервера, потеря или кража данных, расположенных на нём.
Первый признак сторонних подключений — появление подобных сообщений при авторизации по протоколу SSH:
Last failed login: Wed Dec 27 13:52:45 MSK 2017 from 51.15.193.10 on ssh:notty
There were 9134 failed login attempts since the last successful login.
Если видите такие сообщения при авторизации на сервере — были осуществлены неудачные попытки входа. Злоумышленники целенаправленно подбирают SSH пароли либо делают это автоматически, с помощью уже заражённых компьютеров.
Чтобы избежать компрометации данных, воспользуйтесь следующими рекомендациями:
1. Смените порт SSH
Для этого в файле /etc/ssh/sshd_config
необходимо раскомментировать и изменить Port 22 на свободный, это может быть любое число до 65536.
После чего перезапустить службу командой service sshd restart
.
2. Используйте только ключи SSH
Преимущество ключа перед паролем в том, что его почти невозможно подобрать.
Пара ключей создаётся командой ssh-keygen
. Секретный ключ (файл без расширения) копируется на ПК, а публичный (имяключа.pub) — в файл .ssh/authorized_keys
на сервере.
Чтобы отключить авторизацию по паролю, в том же конфиге SSH нужно изменить директиву PasswordAuthentication yes на PasswordAuthentication no
и перезапустить службу — останется авторизация только по ключу SSH.
3. Установите Google Authenticator
В отличие от приватных ключей, телефон всегда под рукой.
На сервер приложение устанавливается командой apt-get (yum) install google-authenticator
После установки запускается командой google-authenticator
После установки приложения на экране терминала появится секретный ключ. Его нужно добавить в Google Authenticator на смартфон и скопировать аварийные ключи восстановления.
Особенность программы в том, что при подключении по ключу код авторизации запрашиваться не будет, только при входе по паролю, если он включён.
Помимо самого сервера, рекомендуется также защитить двухфакторной аутентификацией и панели управления: вход в ISPmanager, VMmanager. Это делается через пункт Настройки пользователя
в правом верхнем углу экрана:
При входе будет так же запрошен временный код:
Если ключ не добавляется, проверьте время на телефоне и сервере — оно должно совпадать.
4. Настройте доступ с определённых IP
Если планируется подключаться к серверу только с определённых IP-адресов, то можно внести строки в файл /etc/hosts.deny sshd: ALL
В файл /etc/hosts.allow Sshd: 188.120.252.0/24
Таким образом будет запрещён доступ по SSH для всех подсетей, кроме указанной.
После этого нужно перезапустить службу командой service sshd restart.
В панели управления ISPmanager можно настроить фаервол через пункт Система → Брандмауэр. Для серверов с KVM-виртуализацией здесь можно заблокировать не только целые подсети, но и отдельные страны:
5. Установите Fail2ban
Чтобы не блокировать адреса злоумышленников вручную, можно установить Fail2ban. Программа предназначена для блокировки подозрительных и частых подключений.
Установка проста: yum install fail2ban Centos или apt-get install fail2ban
для Debian/Ubuntu.
Все политики настраиваются в /etc/fail2ban/jail.conf
Например, политика для защиты SSH:
[ssh-iptables]
enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] logpath = /var/log/secure maxretry = 3
Если предоставляете доступы к серверу сторонним специалистам, имейте в виду человеческий фактор. После окончания работ доступы к серверу рекомендуется менять.
Если в результате манипуляций доступ к серверу был заблокирован, авторизоваться можно через VNC в панели VMmanager либо IPMI через DCImanager.
Если же сервер взломан на уровне администратора и стал частью ботнета, осуществляющего атаки на другие серверы, оптимальным способом избавиться от вредоноcного ПО будет перенос данных на другой сервер или переустановка ОС с сохранением данных.
С заражением сайтов на PHP и рассылкой спама с сервера поможет модуль ImunifyAV.
6. Настройте бэкапы на удалённое хранилище
Панель ISPmanager позволяет настраивать бэкапы не только на диск сервера, но и на облачные хранилища, например, Яндекс.Диск или Google Drive. Это позволит оперативно восстановить пользовательские данные, даже если они были полностью удалены с сервера.