Задать вопрос
@Bjornie
Изучаю Python

Минимальные настройки безопасности Linux на VPS?

Я абсолютно начинающий в Linux. Мой вопрос касается настройки безопасности ОС Linux на VPS-сервере. Изначально я просто установил OpenVPN и запустил его (всё работает). Затем постепенно начали появляться различные вопросы. Ввиду незнания системы я не знаю на что в первую очередь стоит обратить внимание.

Дано:
VPS
ОС выбрал Debian 8
Соединение по ключу SSH.

Кое-что я уже прочитал и сделал:
- запретить логин по руту\паролю
- создать отдельного пользователя
- проверить и отключить лишние службы (которые на данный момент не нужны для работы)

Список может быть и смешной, но мне хотелось бы понять что критически важно настроить на свежем дистрибутиве.
Например: iptables, стоит ли трогать его, какие правила важно вписать в первую очередь? Что запретить, а что разрешить?

Другой пример: вбил netstat и кроме самого себя увидел в Internet connections какой-то китайский adsl-адрес (переподключался каждую минуту). Погуглив нашел его в блэклистах, как сканирующего ssh. Что это было: просто внешнее соединение, или он сумел авторизироваться?

Что стоить почитать в обязательном порядке? Какие книги, статьи, плейлисты с видео на ютуб? Что порекомендуете?

Заранее извиняюсь за нубские вопросы.

P.S. моя основная ОС не Linux, поэтому для его изучения предпочитаю только консоль, никаких отдельных установок дистрибутивов с GUI.
  • Вопрос задан
  • 11627 просмотров
Подписаться 76 Оценить 4 комментария
Решение пользователя Tyranron К ответам на вопрос (5)
Tyranron
@Tyranron
Ряд моментов Вы уже сделали, но я все равно их опишу для полноты списка.

1. Создать отдельного пользователя и хороший пароль на sudo. Не использовать больше root напрямую. Совсем.

2. SSH. Отключаем метод аутентификации по паролю. Если Вам не нужны другие методы, то их тоже можно отключить, оставив только publickey. Отключаем возможность аутентификации root'ом. Включаем использование только 2й версии SSH протокола.

3. Устанавливаем Fail2Ban и настраиваем чтобы после нескольких неуспешных попыток подключения по SSH банило по IP на длительное время. Кол-во попыток и время бана можно тюнить в меру своей паранойи. У меня, например, банит на час после 2х неуспешных попыток.

4. Iptables. Действуем по принципу "запрещено все, что не разрешено". Запрещаем по умолчанию весь INPUT и FORWARD трафик снаружи. Открываем на INPUT'е 22 порт. В дальнейшем открываем порты/forwarding по мере необходимости. Если у нас предполагаются сервисы на соседних серверах нужные только для внутренней коммуникации (Memcached, Redis, и т.д.), то открываем для них порты только для определенных IP. Просто так торчать наружу для всех они не должны.

5. Настраиваем автоматические обновления apt-пакетов. Уровень security. То есть так, чтобы обновления безопасности накатывались автоматически, но при этом не выполнялись обновления со сменой мажорной версии (дабы обезопасить себя от "само сломалось").

6. Устанавливаем ntpd. Серверное время должно быть точным. Также временную зону сервера лучше всего установить в UTC.

7. TLS (не SSL) используем везде где можем. Через Let's Encrypt получаем бесплатные валидные сертификаты. В конфигах веб-серверов, mail-серверов, и других приложений торчащих наружу (в том числе и OpenVPN), запрещаем/убираем использование слабых шифров. Все ключи/параметры генерируем не менее 2048 бит. Самоподписные сертификаты подписываем с помощью SHA-256 (не SHA-1). Diffie-Hellman параметры (dh.pem) под каждый сервис лучше сгенерить отдельно. Проверяем TLS сервисов через Nmap. Минимальный grade должен быть A, не должно быть warning'ов.

8. Правильный менеджмент пользователей/групп. Приложения/сервисы не должны запускаться под root'ом (разве что они действительно этого требуют и иначе никак). Для каждого сервиса создается свой пользователь.

9. Если предполагается upload файлов через PHP (либо другие скриптовые языки), в директории, куда эти файлы загружаются (и которая доступна снаружи), должно быть жестко отключено любое выполнение скриптов/бинарников, что на уровне ОС (x права), что на уровне веб-сервера.

Это была база.
Дальше, в меру своей паранойи можно за'harden'ить сервер ещё следующими моментами:
- SELinux, chroot
- доступ к SSH только с определенных IP (нужно иметь 3-4 VPN-сервера под рукой)

UPD И да, все это помнить/настраивать руками каждый раз может быть запарно. Используйте Ansible и автоматизируйте процесс (там родные и YAML, Jinja2 и Python).
Ответ написан