CentOS 7 — базовая настройка безопасности

В данной статье будет описано, как настроить свежую систему для безопасной работы. Особенно актуально для тех, кто собирается хостить что-то либо на своей машине, либо открывать доступ к компьютеру извне. Итак, начнем.

SELinux

SELinux — это реализация системы принудительного контроля доступа, которая может работать параллельно с классической избирательной системой контроля доступа. Весьма полезный инструмент для гибкой и точной настройки безопасности. Многие считают, что его нужно сразу отключать и не использовать вообще. В этой статье мы не будем рассматривать его конфигурирование. Временно отключим SELinux, материала о его настройке достаточно для отдельной статьи.

Файл конфигурации находится в /etc/sysconfig/selinux. Открываем его текстовым редактором и правим строчку:

#nano /etc/sysconfig/selinux
SELINUX = Enforcing Disabled

Тем самым вы переведете режим работы SELinux в «отключить». Для применения настройки необходимо перезагрузиться командой:

#systemctl reboot

Firewalld

Firewalld предоставляет функциональность динамически управляемого брандмауэра с поддержкой сетевых зон, призванных определить уровень доверия для сетевого соединения или интерфейса. Он имеет поддержку настройки межсетевого экрана IPv4, IPv6 и сетевых мостов, а также разделяет среду выполнения и параметры конфигурации. Firewalld также имеет интерфейс для добавления правил брандмауэра непосредственно из служб и приложений.

По умолчанию Firewalld включен, а все порты считаются закрытыми. Если вам необходимо открыть какой-либо порт, воспользуйтесь командой:

#firewall-cmd --permanent --zone=public --add-port=80/tcp

В данном случае 80 — номер порта, который необходимо открыть (подставьте нужный). Порты будут открытыми до тех пор, пока вы их сами не закроете, или пока не отключите Firewalld. Firewalld отключается командами:

#systemctl stop firewalld
#systemctl disable firewalld

Но делать это категорически не рекомендую, особенно, если вы собираетесь открывать доступ к серверу извне. В целях безопасности, доступ по SSH открывают на нестандартном порту. Выберите свой порт, и пропишите новое правило в Firewalld:

#firewall-cmd --permanent --zone=public --add-port=12345/tcp

То же самое необходимо проделать для каждого порта, который вы планируете держать открытыми. Если какой-либо порт уже не будет использоваться вами в будущем, лучше всего его закрыть командой:

#firewall-cmd --permanent --zone=public --remove-port=12345/tcp

Fail2ban

Fail2ban — это система для защиты сервера от брутфорс-атак (атаки с перебором пароля). Принцип работы заключается в том, что если в течение определенного времени было n неудачных попыток авторизации, то ip-адрес, с которого были предприняты попытки авторизации заносится в бан-лист. Данная система просто необходима, т.к. без него к вашему серверу могут получить доступ. Fail2ban следит за указанными портами, например SSH — 22 (стандартный, желательно изменить на свой). Fail2ban настраивается через конфигурационный файл. Ниже инструкция о том, как установить и настроить Fail2ban.

Для начала необходимо подключить репозиторий EPEL, пакет Fail2ban находится там. Делаем это командой:

#rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

Далее устанавливаем:

#yum install fail2ban

После установки производим настройку Fail2ban. Конфигурационный файл находится здесь — /etc/fail2ban/jail.conf, но, как сказано в комментариях в его начале, данный файл рекомендуется не изменять, вместо этого нужно создать локальную копию /etc/fail2ban/jail.local. И в дальнейшем править конфигурацию именно в нем.

#cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
#nano /etc/fail2ban/jail.local

Конфигурационный файл содержит множество секций, сначала обратим внимание на [Default]. В данной секции указаны настройки по умолчанию, если Fail2ban настроен для работы различных сервисов и там не прописаны правила для них, то параметры будут браться отсюда. Приведу пример настроек:

ignoreip = 127.0.0.1/8 192.168.1.10/24
bantime = 900
findtime = 600
maxretry = 6

ignoreip — означает, какие ip-адреса будут игнорироваться при отслеживании. Указываем здесь localhost, а также, через пробелы вы можете указать дополнительные ip-адреса, например адрес другого вашего компьютера в локальной сети, за которым вы постоянно работаете. Можно также указывать внешние ip-адреса, но, в таком случае, безопасность снижается.

bantime — время, на которое указанный ip-адрес попадет в бан-лист. Время указывается в секундах. Для постоянного бана достаточно указать любое отрицательное число.

findtime — время, в течение которого после неверной попытки авторизации будет производится слежение за данным ip-адресом. Если за время findtime совершится maxretry попыток неудачной авторизации, то ip-адрес попадет в бан-лист.

maxretry — максимальное количество неверных попыток авторизации за время findtime. При достижении этого порогового значения ip-адрес будет занесен в бан-лист.

Далее спускаемся ниже и находим раздел JAILS, в нем описывается, какие сервисы и порты нужно мониторить, и что с ними делать в случае срабатывания защиты. Также в каждой секции можно определить свои параметры bantime, findtime, maxretry, а если они не указаны, то параметры берутся из секции [Default]. Ищем интересующие нас секции и редактируем их, мы настроим слежение за сервисом SSH. Для этого переходим к секции [sshd], дописываем в нее строчку «enabled = true», и меняем порт на назначенный нами ранее:

[sshd]
enabled = true
port = 12345
action = iptables-multiport[name=SSH,port=12345]
logpath = %(sshd_log)s

Запускаем сервис fail2ban и добавляем его в автозагрузку:

#systemctl start fail2ban
#systemctl enable fail2ban

На этом базовая настройка безопасности заканчивается. Теперь можно спокойно открывать доступ к серверу по SSH. Если какой-либо злоумышленник попытается использовать брутфорс для получения доступа к вашему серверу по SSH, то у него ничего не выйдет — его ip-адрес будет блокироваться. Все остальные порты защищены с помощью firewalld.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *