Безопасность Ubuntu Server 16.04

6 Февраля 2018

Приведенные в этой статье пять простых способов позволят перевести безопасность Ubuntu Server 16.04 на новый уровень.

Ограничиваем доступ по SSH

По умолчанию на платформе xelent.cloud для входа на сервер подразумевается использовать учетные данные пользователя root. С точки зрения удобства — это отлично, вы сразу получаете максимальные права доступа, что позволяет комфортно настроить собственный сервер. Но постоянно работать, используя учетные данные суперпользователя — плохая идея. Хотя бы потому, что можно даже ненароком снести всю систему по неосторожности, я уже не говорю о возможности взлома учетной записи.

Отключать или нет учетную запись root — каждый решает сам. Мы же попытаемся повысить безопасность Ubuntu Server 16.04, ограничив доступ по сервису ssh. Первым делом создайте обычную учетную запись, которую вы будете использовать для текущих задач администрирования (чтобы не использовать учетку root):

adduser den

Создание учетной записи обычного пользователя в ssh ubuntu

Рис. 1. Создание учетной записи обычного пользователя

Далее нужно предоставить созданному пользователю использовать команду sudo. Можно добавить его в группу admin, а можно командой visudo отредактировать файл sudoers и предоставить привилегии использования команды sudo конкретно этому пользователю. Какой способ лучше — решать вам, а вот системы на xelent.cloud уже настроены на использование нормального редактора по умолчанию — вместо архаичного vi, поэтому использовать visudo очень удобно. Просто добавьте строчку в ваш sudoers:

den ALL=(ALL:ALL) ALL

Данная строчка разрешает выполнение всех команд от имени пользователя root. Если нужно разрешить выполнение только определенных команд, обратитесь к документации по sudoers.

Команда visudo ssh ubuntu

Рис. 2. Команда visudo

После этого нужно сохранить файл (Ctrl + O) и выйти из редактора (Ctrl + X). Если вы используете для входа на сервер не команду ssh в Linux, а какой-то сторонний SSH-клиент вроде Bitvise, укажите новые учетные данные для входа (рис. 3).

учетные записи для входа в ubuntu

Рис. 3. Используем новые учетные данные для входа

Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

После входа вы можете работать, как обычный пользователь, а можете выполнять команды от имени пользователя root, используя команду sudo. Еще раз повторимся, что для улучшения безопасности Ubuntu Server лучше взаимодействовать с системой основную часть времени через учетку простого юзера. Чтобы получить полноценную сессию root, введите команду:

sudo bash

Этим вы запустите командный интерпретатор с правами root, то есть получите root-оболочку в полном объеме. Обратите внимание, что команда sudo запрашивает пароль пользователя den, а не пароль пользователя root.

 root-сессия ssh ubuntu

Рис. 4. Полноценная root-сессия

Теперь приступим к настройке sshd. Откройте /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config

Добавьте в конец файла строку:

AllowUsers den@192.168.1.100

Вместо den укажите имя созданного вами пользователя, а вместо указанного IP-адреса — ваш IP-адрес или же строку вида 192.168.1.*, если у вас динамический IP. Данная строчка разрешает вход по ssh только пользователя den с определенного IP-адреса. Если будет указано имя другого пользователя и введен правильный пароль, все равно войти не получится. Как и не получится войти под логином den, но с другого IP-адреса.

Затем найдите директиву PermitRootLogin и смените значение yes на no, чтобы запретить вход, как пользователь root. Сразу после нее добавьте строку MaxAuthTries 3, что ограничивает число попыток входа тремя. После этого все попытки входа в систему блокируются. По умолчанию для этой директивы используется значение 6, так что у злоумышленника будет на 3 попытки меньше подобрать ваш пароль.

Итак, ssh мы защитили (почти):

  1. Мы запретили входить как пользователь root (использование этой учетки не безопасно еще и потому, что все знают, что есть логин root, а вот о логине den никто не знает).
  2. Мы создали обычного пользователя и предоставили ему возможность использовать команду sudo для административных задач.
  3. Мы разрешили вход по SSH только указанному пользователю и только с указанного IP-адреса.

Теперь ваш SSH стал более защищенным и степень безопасности Ubuntu Server возросла.

Двухфакторная аутентификация

Безопасности Ubuntu Server никогда много не бывает. Был бы у нас физический сервер, можно было подключить к нему сканер отпечатка пальца. Но в случае с виртуальным можно настроить двухфакторную аутентификацию. Заодно вы получите бонусом уведомления на телефон, когда кто-то логинится.

Для организации двухфакторной аутентификации можно использовать модуль pam-google-authenticator. Одноименный пакет есть во всех современных дистрибутивах. После установки пакета нужно отредактировать файл /etc/pam.d/sshd, добавив в него строку:

auth required pam_google_authenticator.so no_increment_hotp

Параметр no_increment_hotp запрещает счетчику неудачных попыток авторизации увеличиваться.

Настроим сам модуль:

google-authenticator

В ходе настройки будет сгенерирована ссылка на QR-код для привязки телефона (этот код нужно отсканировать с помощью приложения Google Authenticator), секретный ключ для ввода в телефоне вручную, один текущий код доступа и пять резервных.

Самое главное — это код для ввода в телефон, например:

Your new secret key is: XVZG4UXU4D6SY2DM

Именно этот код и нужно будет ввести в приложении Google Authenticator на вашем телефоне.

Защищаем shared-память

Разделяемая память может быть использована при атаке против запущенного сервиса, поэтому нужно уделить ей внимание. Откройте ваш файл /etc/fstab:

sudo nano /etc/fstab

В конец файла добавьте строку:

tmpfs /run/shm tmpfs defaults,noexec,nosuid 0 0

Сохраните и закройте файл. Чтобы изменения вступили в силу, перезапустите сервер командой reboot.

Защищаем сетевой уровень

Протокол IP имеет одну очень интересную особенность — маршрутизацию источника (Source Routing), позволяющую указать, через какие хопы должен пройти пакет и ответ на него, то есть предоставляет злоумышленнику указать перечень устройств в пути пакета. Само собой, это отрицательным образом сказывается на безопасности Ubuntu Server. Отдельно функция не является уязвимостью, но  может быть использована. злоумышленниками. К счастью, предотвратить IP Source Routing в Ubuntu очень просто. Для этого отройте файл /etc/sysctl.conf и добавьте/раскомментируйте следующие строки:

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0
# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

Сохраните и закройте файл, после этого введите команду:

sudo sysctl -p

Предотвращаем IP-спуфинг

О том, что такое IP-спуфинг, думаю, говорить не стоит. Предотвратить его, повысив уровень безопасности Ubuntu Server, тоже довольно просто. Откройте файл /etc/host.conf. По умолчанию он выглядит примерно так:

# The «order» line is only used by old versions of the C library.
order hosts,bind
multi on

Вместо multi on добавьте строку nospoof on:

# The «order» line is only used by old versions of the C library.
order bind,hosts
nospoof on

Сохраните файл. Все. Больше никакого спуфинга. Приведенными выше рекомендациями настройки безопасности Ubuntu Server не ограничиваются, но они помогут обезопасить сервера от наиболее распространенных видов хакерских атак.

Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent