Умение защитить сервер на Linux от возможных атак может спасти ваш проект от простоя, а бизнес от потери прибыли. Разбираем как защитить VPS.

Каждый VPS, как только он появляется в сети, будет практически неизбежно подвержен огромному количеству атак. В первую очередь происходит наплыв большого числа ботов, которые занимаются тем, что ищут уязвимости в защите VDS сервера. Найдя такие уязвимости, если они имеются, а имеются они практически у любого ресурса, эти боты сообщают о них хакерам, которые этих ботов, собственно, и запустили. Для того, чтобы научиться надежно защищать свой проект от таких опасностей, его владельцу потребуется немало времени и опыта. Основные правила устранения уязвимостей и налаживания защиты от опасностей будут полезными для любого ресурса, чем бы он ни занимался.
Итак, одним из наиболее популярных помощников в защите серверов на операционной системе Linux является утилита iptables. Она предназначена для управления межсетевым экраном. Также популярным решением считается fail2ban, в которой применяется iptables, чтобы блокировать передачу данных с запрещенных ip-адресов, а также python, чтобы подобные ip-адреса отслеживать и находить.
Перенос порта SSH сервера
Для начала стоит изменить обычный SSH на более безопасный. Чтобы осуществить данную процедуру, нужно в настройках файла SSH прописать:
sudo nano /etc/ssh/sshd_config
Нужно заменить стандартный порт на более сложный и многозначный, причем значение этого порта нужно выбрать из диапазона от 49152 до 65535. Это необходимо, чтобы избежать конфликтов с другими программами:

Далее следует все сохранить и выполнить перезапуск SSH:
sudo service ssh restart
Для нового входа нужно будет указывать новый установленный порт:
ssh user@host -p 49681
Блокировка всех портов, за исключением HTTP, HTTPS, SSH
Для большей безопасности сервера, на котором располагаются важные сайты, будет достаточно этих трех портов. Для иных сервисов, связанных с сетью, рекомендуется иметь отдельный сервер. Причем и настройки безопасности для таких отдельных серверов будут соответствующими. Поскольку клиенты обычных сайтов, а точнее их браузеры, обычно используют всего два порта – HTTP и HTTPS, то для серверов, хостящих обычные сайты и не выполняющих другие функции, является полезным отключить любые другие порты, кроме этих двух. Кроме этого, стоит оставить и порт, который использует для подключения администратор ресурса – SSH. Для этого нужно иметь следующий файл настроек для iptables:
sudo touch /etc/iptables.firewall-rules
Внутри которого должен содержаться следующий весьма объемный код:

Для того, чтобы после каждого перезапуска системы она самостоятельно применяла данные настройки, необходимо создать определенный скрипт. Для этого нужно создать файл с сразу сделать его исполняемым:

Внутри нужно прописать:

Для первичного исполнения указанной команды нужно выполнить ее самостоятельно. При дальнейших запусках за это будет отвечать созданный вами скрипт. Посмотреть настройки iptables можно, введя данную команду:
sudo iptables -L
Динамическая защита с использованием FAIL2BAN
Для установки данной утилиты, поскольку она не входит в систему по умолчанию, нужно выполнить следующее действие:
sudo apt-get install fail2ban
Важным советом является создание резервной копии файла настроек, в которой и следует проводить все изменения. Это вызвано тем, что исходный файл будет перезаписан во время обновления:
cd /etc/fail2ban/ && cp jail.conf jail.local
Хоть данный инструмент по умолчанию и оснащен некоторыми фильтрами для веб-сервера Apache, лучше будет создать собственные самостоятельно. Первый будет использоваться для лога access, а другой для error. Полезно выполнить настройку виртуальных хостов так, чтобы данные логи распространялись сразу на все сайты сервера. Это сделает защиту VPS более надежной, а ее настройку более простой и понятной, ведь осуществляется она всего двумя фильтрами сразу для всех ресурсов. Для этого нужно создать новые файлы:

Для лога access содержимое соответствующего файла должно иметь вид:

Этот файл будет постепенно дополняться строчками в разделе failregex. Это связано с тем, что вы так или иначе будете находить опасную деятельность ботов или хакеров. В примере представлена блокировка запросов, включающих в себя определенные слова или символы (обособлены звездочками, например *\\\*) Для лога error фильтр мало чем отличается структурно:

В файле настроек jail.local следует подключить новые созданные фильтры, указав пути к созданным недавно файлам:

После перезапуска FAIL2BAN защита активируется:
sudo service fail2ban restart
Всю информацию по фильтрам и заблокированным адресам можно посмотреть с помощью команды:
sudo iptables -L