Приведенные в этой статье пять простых способов позволят перевести безопасность Ubuntu Server 16.04 на новый уровень.
По умолчанию на платформе xelent.cloud для входа на сервер подразумевается использовать учетные данные пользователя root. С точки зрения удобства — это отлично, вы сразу получаете максимальные права доступа, что позволяет комфортно настроить собственный сервер. Но постоянно работать, используя учетные данные суперпользователя — плохая идея. Хотя бы потому, что можно даже ненароком снести всю систему по неосторожности, я уже не говорю о возможности взлома учетной записи.
Отключать или нет учетную запись root — каждый решает сам. Мы же попытаемся повысить безопасность Ubuntu Server 16.04, ограничив доступ по сервису ssh. Первым делом создайте обычную учетную запись, которую вы будете использовать для текущих задач администрирования (чтобы не использовать учетку root):
adduser den
Рис. 1. Создание учетной записи обычного пользователя
Далее нужно предоставить созданному пользователю использовать команду sudo. Можно добавить его в группу admin, а можно командой visudo отредактировать файл sudoers и предоставить привилегии использования команды sudo конкретно этому пользователю. Какой способ лучше — решать вам, а вот системы на xelent.cloud уже настроены на использование нормального редактора по умолчанию — вместо архаичного vi, поэтому использовать visudo очень удобно. Просто добавьте строчку в ваш sudoers:
den ALL=(ALL:ALL) ALL
Данная строчка разрешает выполнение всех команд от имени пользователя root. Если нужно разрешить выполнение только определенных команд, обратитесь к документации по sudoers.
Рис. 2. Команда visudo
После этого нужно сохранить файл (Ctrl + O) и выйти из редактора (Ctrl + X). Если вы используете для входа на сервер не команду ssh в Linux, а
Рис. 3. Используем новые учетные данные для входа
После входа вы можете работать, как обычный пользователь, а можете выполнять команды от имени пользователя root, используя команду sudo. Еще раз повторимся, что для улучшения безопасности Ubuntu Server лучше взаимодействовать с системой основную часть времени через учетку простого юзера. Чтобы получить полноценную сессию root, введите команду:
sudo bash
Этим вы запустите командный интерпретатор с правами root, то есть получите
Рис. 4. Полноценная
Теперь приступим к настройке sshd. Откройте /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
Добавьте в конец файла строку:
AllowUsers den@192.168.1.100.
Вместо den укажите имя созданного вами пользователя, а вместо указанного
Затем найдите директиву PermitRootLogin и смените значение yes на no, чтобы запретить вход, как пользователь root. Сразу после нее добавьте строку MaxAuthTries 3, что ограничивает число попыток входа тремя. После этого все попытки входа в систему блокируются. По умолчанию для этой директивы используется значение 6, так что у злоумышленника будет на 3 попытки меньше подобрать ваш пароль.
Итак, ssh мы защитили (почти):
Теперь ваш SSH стал более защищенным и степень безопасности Ubuntu Server возросла.
Безопасности Ubuntu Server никогда много не бывает. Был бы у нас физический сервер, можно было подключить к нему сканер отпечатка пальца. Но в случае с виртуальным можно настроить двухфакторную аутентификацию. Заодно вы получите бонусом уведомления на телефон, когда
Для организации двухфакторной аутентификации можно использовать модуль
auth required pam_google_authenticator.so no_increment_hotp
Параметр no_increment_hotp запрещает счетчику неудачных попыток авторизации увеличиваться.
Настроим сам модуль:
В ходе настройки будет сгенерирована ссылка на
Самое главное — это код для ввода в телефон, например:
Your new secret key is: XVZG4UXU4D6SY2DM
Именно этот код и нужно будет ввести в приложении Google Authenticator на вашем телефоне.
Разделяемая память может быть использована при атаке против запущенного сервиса, поэтому нужно уделить ей внимание. Откройте ваш файл /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
О том, что такое
# 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 не ограничиваются, но они помогут обезопасить сервера от наиболее распространенных видов хакерских атак.