CentOS 6 от А до Я. Часть 5. Настройка безопасности SSH. Защита от брута.
Раздел(ы): GNU Linux - CentOS / Debian
Просмотры: 6664
Комментарии: 0
Как только Вы вырастете из рамок виртуального хостинга и начнете использовать в интернете свой сервер (выделенный или виртуальный), то сразу столкнетесь с необходимостью не только администрировать операционную систему, но и настроить защиту своего дома в сети.
Я не открою секрет, если скажу, что абсолютное большинство потерь связано не со сложными кибер атаками, а с потерей бдительности и недостатками знаний самих пользователей.
Как осуществляется удаленный доступ к серверу
Как правило удаленный доступ к серверу в интернете осуществляется посредством протокола передачи данных SSH. Сам протокол хорошо защищен и получить доступ к передаваемым данным практически невозможно.
Для доступа к удаленному серверу необходимо знать его адрес, порт, имя пользователя и пароль.
Как затруднить доступ к серверу
По-умолчанию он всех несчастий нас защищает только пароль. Так как порт SSH и имя супер-пользователя предопределено системой.
Первое, что необходимо сделать, чтобы усложнить жизнь злоумышленнику — это придумать сложный пароль. В идеале он должен состоять из малых и больших (строчных и прописных) букв латинского алфавита, цифр, знаков препинания и спецсимволов. Его длина не должна быть меньше 8 (восьми) символов. А лучше 10-16 символов. К примеру: wY3j#0k8 (Внимание!!! Придумайте свое значение!)
Второе, рекомендую сменить порт доступа. Для SSH по-умолчанию это 22. На что-нибудь мало приметное больше значения 1024 и меньше 65535. К примеру на 41302 (Внимание!!! Придумайте свое значение!). Но это защита от пионеров. Так как nmap легко вычисляет, что висит на порту. Также это вызовет нездоровый интерес, а что там спрятано раз так сделано? К тому же если у Вас несколько серверов с доступом по ssh — приходиться помнить у кого какой порт — это неудобно.
Третье, запретить пользователю ROOT иметь удаленный доступ к системе. ROOT используйте локально, а для удаленного доступа заведите нового пользователя. Это имя должно быть нестандартное. Желательно использовать буквы и цифры. К примеру Vas9213k (Внимание!!! Придумайте свое значение!)
Этими простыми действиями, мы из 4-х необходимых параметров для доступа к серверу 3-и сделали неизвестными для злоумышленника.
Четвертое. Разрешить доступ по SSH только с определенных IP адресов. К примеру выделить подсеть вашего провайдера как доверенную. То есть злоумышленники с другого конца земного шара не смогут достучаться до Вашего сервера.
Пятое. Установить дополнительный софт, к примеру sshguard или fail2ban. Программы существуют как для FreeBSD, так и для Linux. Суть работы в блокировке IP злоумышленника после нескольких неудачных попыток залогиниться.
Как защитить CentOS от Брут Форс brute force
Что такое Брут? Это метод полного перебора. В нашем случае паролей. То есть злоумышленник пытается получить доступ к серверу банально перебирая все варианты паролей. Учитывая мощности современных вычислительных систем это занимает на так много времени.
Усложним задачу злоумышленнику:
Во-первых необходимо установить временной интервал между попытками подключения. К примеру 10 секунд. Что не создаст проблем пользователю, но существенно уменьшит производительность брута.
Во-вторых увеличим тайм-аут еще больше (для конкретного адреса), после нескольких неудачных попыток подключения. То есть если выявляется явный перебор паролей, то подключение с такого IP блокируются межсетевым экраном на длительное время. К примеру на час.
Эти мероприятия сводят на нет всю вычислительную мощь и чтобы получить пароль брутом может понадобиться несколько лет.
В качестве примера. Пусть брут позволяет перебирать 1000 паролей в секунду. Тогда 3-х значный пароль из букв и цифр он подберет за (24+24+10)^3/1000 = 195 сек, то есть чуть более чем за 3 минуты. Если включить вышеописанную защиту, то за один час будут опробованы только 4 пароля, а общее время перебора всех комбинаций превысит 5 лет!
Побочным положительным эффектом (блокировка плохих IP адресов) будет снижение нагрузки на сервер.
Защита от Брута — ставим Fail2Ban
Для защиты от брута существует несколько программ. Для CentOS в репозиториях я нашел замечательную вещицу Fail2Ban. Которая работает по вышеописанному алгоритму. И сводит все попытки брута на нет.
Установка:
yum install fail2ban
При желании правим файл конфигурации /etc/fail2ban/jail.conf
Однако и на параметрах по-умолчанию, все замечательно работает.
Добавляем в автозагрузку:
chkconfig fail2ban on
Запускаем:
service fail2ban start
Посмотреть все блокировки:
iptables -L
Если Вы думаете, что никто не ломится к Вам на сервер по SSH дабы им завладеть, то Вы сильно ошибаетесь 🙂
Выполните команду:
cat /var/log/secure* | grep 'Failed password' | grep sshd | awk '{print $1,$2}' | sort -k 1,1M -k 2n | uniq -c
И получите примерно следующее, где первая колонка — количество «неудачных» подключений, иными словами попыток подобрать пароль:
277 Feb 14 / День запуска сервера 524 Feb 15 318 Feb 16 374 Feb 17 308 Feb 18 777 Feb 19 241 Feb 20 / День установки Fail2Ban 24 Feb 21 27 Feb 22 19 Feb 23 21 Feb 24
Как видите, на мой сервер, который не представляет из себя ничего ценного, в течении недели пытались подобрать пароль по 300 раз в день, а то и более. После установки fail2ban число попыток упало в разы.
Общие рекомендации по настройке программ и межсетевого экрана CentOS
Возьмите за правило устанавливать только те сервисы которыми Вы пользуетесь. То есть если Вам не нужен FTP сервер, то не устанавливайте его. Чем меньше программ на сервере, тем меньше уязвимостей.
Закрывайте все неиспользуемые порты. Межсетевой экран должен блокировать все подключения, кроме явно разрешенных. К примеру, если у Вас установлен MySQL сервер, и нет необходимости внешних подключений, то заблокируйте к нему доступ в межсетевом экране.