Базовая защита Linux сервера (часть 1)

27/01/2019

defence

В процессе работы часто задается вопрос — что нужно делать, чтобы защитить работу серверов под управлением Linux. Многие организации для работы серверных приложений выбирают операционную систему Linux. Кто-то предпрочитает CentOS/RedHat, кто-то Ubuntu/Debian. Принципиальной разницы при работе с ними я не вижу. Есть и другие экзотические дистрибутивы Linux, но в реальном продакшене по опыту они встречаются крайне редко. Время для выполнения работ по администрированию на других дистрибутивах заметно увеличивается. Все что пишу в этой статье применимо ко всем вышеуказанным дистрибутивам с возможными небольшими отклонениями.

Различных приложений, которые работают под управлением Linux не счесть — веб сервера, почтовые сервера, контейнеры, системы управления, ftp и прочие, прочие. Описывать в одной статье способы защиты для каждого из них не представляется возможным, да и нужным. Я сосредоточусь на основных вещах — как работать с пользователями на сервере, как организовывать правильно удаленный доступ через ssh, а так же на базовой фильтрафии сетевых пакетов, поступающих на сервер.

Контроль пользователей системы

Одно из базовых правил — не использовать пользователя root в операциях на сервере. В идеале необходимо отключить пользователя root. Для этого ставим в файле /etc/shadow в строчке с данными о root звездочку вместо хеша пароля. В результате файл должен выглядеть примерно следующим образом:

root:*:17755:0:99999:7:::
daemon:*:16911:0:99999:7:::
bin:*:16911:0:99999:7:::
sys:*:16911:0:99999:7:::
sync:*:16911:0:99999:7:::
games:*:16911:0:99999:7:::
man:*:16911:0:99999:7:::
lp:*:16911:0:99999:7:::
mail:*:16911:0:99999:7:::
news:*:16911:0:99999:7:::
uucp:*:16911:0:99999:7:::
proxy:*:16911:0:99999:7:::
www-data:*:16911:0:99999:7:::
backup:*:16911:0:99999:7:::
list:*:16911:0:99999:7:::
irc:*:16911:0:99999:7:::
gnats:*:16911:0:99999:7:::
nobody:*:16911:0:99999:7:::
systemd-timesync:*:16911:0:99999:7:::
systemd-network:*:16911:0:99999:7:::
systemd-resolve:*:16911:0:99999:7:::
systemd-bus-proxy:*:16911:0:99999:7:::
syslog:*:16911:0:99999:7:::      

Так же необходимо отключить в сервисе ssh возможность подключаться пользователю root. Это делается в следующей дерективе PermitRootLogin в файле конфигурации сервера ssh — /etc/ssh/sshd_config

PermitRootLogin no

Для выполнения задач с повышенными привилегиями используется механизм sudo. С помощью него каждому конкретному пользователю, можно указать именно те команды с повышенными привелегиями, которые ему необходимы в работе. В отдельных случаях разрешаются все возможные команды на сервере пользователю или определенной группе пользователей. Само приложение sudo обычно идет установленным в большей части современных дистрибутивов. Конфигурация происходит через команду visudo или прямое редактирование файла /etc/sudoers. Пример конфигурации этого файла ниже:

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
testuser        ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d    

Политика использования паролей

Классика жанра — использовать сложные пароли для пользователей, а также ограничивать срок действия пароля. Как настроить такие политики в ОС Linux. Это делается в двух местах. Во-первых в файле /etc/pam.d/common-password. Но для начала, Вы должны установить необходимую библиотеку — libpam-pwquality. В Debian/Ubuntu это выполняется следующим образом:

#sudo apt-get install libpam-pwquality

Теперь изменим конфигурацию файла /etc/pam.d/common-password таким образом, чтобы пароль был как минимум из 8 символов, содержал по меньше мере 1 большую букву, 1 маленьку букву и 1 спецсимвол. В результате получится следующий файл:

password        requisite                       pam_pwquality.so retry=3 ucredit=-1 dcredit=-1 ocredit=-1
password        [success=1 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512 minlen=8     

Во-вторых, нам нужно подкоректировать файл /etc/login.defs, где мы укажем параметры времени жизни пароля. В нем для этого есть три парамета: максимальное время использования пароля перед сменой, минимальное время использования пароля перед сменой, а также количество дней перед окончанием срока жизни пароля, когда система начнет оповещать пользователя. Пример настройки нужных параметров в этом файле представлен ниже:

PASS_MAX_DAYS   90
PASS_MIN_DAYS   0
PASS_WARN_AGE   7 

Безопасность SSH

С помощью ssh происходит удаленное управление сервером. Как только Вы выставите свой сервер в Интернет с реальным ip адресом, то сразу же попадаете под постоянное сканирование и попытки взлома сервера со стороны тысячей хакеров. И от этого никуда не деться. Чтобы не оказаться легкой жертвой злоумышленников крайне необходимо соответствующим образом настроить SSH сервер.

Для начала необходимо поменять TCP порт, на котором работает SSH сервер. По умолчанию это порт 22. Мы с помощью директивы Port в конфигурационном файле /etc/ssh/sshd_config меняем его, к примеру, на 12345.

Port 12345

Далее, указываем для SSH сервера конкретные IP адреса, на которых он будет работать. Если этого не сделать, ssh будет работать на всех ip адресах, которые доступны в системе. Для данной настройки используем директиву ListenAddress и указываем адрес, через который будем обращаться к серверу.

ListenAddress 10.8.0.254 

Также указываем конкретных пользователей системы, которым разрешено подключаться по ssh к серверу. Это делается с помощью директивы AllowUsers. Зачастую в системе создаются пользователи для каких-то приложений, например для доступа по ftp. Однако, далеко не всем пользователям разрешается подключаться к серверу к командной строке.

AllowUsers user1 user2 user3

На этом первую часть статьи о базовой защите сервера под управлением OS Linux завершаю. Во второй части мы пройдемся по теме базового фаервола на базе iptables, а такж скрипта для защиты от брутфорса fail2ban.


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

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