Самостоятельное администрирование сервера Linux – это отличная возможность ознакомиться со всеми его функциями и научиться продуктивно использовать всю его мощность и гибкость. Тем не менее, как и при работе с любым подключенным к сети компьютером, администраторы сервера Linux должны принять определенные меры предосторожности, чтобы надежно защитить машину.
Существует множество дискуссий о вопросах безопасности Linux, и, конечно, огромное количество мнений относительно того, какой уровень безопасности сервера Linux является достаточным и как его обеспечить.
В данном случае нужно решить самостоятельно, что именно необходимо для защиты отдельно взятого сервера. Нужно сознавать все риски и уступки, чтобы оптимально уравновесить такие важные аспекты, как удобство использования и безопасность сервера.
Данная статья поможет сориентироваться в общих понятиях и наиболее распространенных мерах безопасности, которые необходимо принять в серверной среде Linux. Конечно, она не приводит полный список таких мер, не охватывает всех рекомендуемых конфигураций, но предоставляет ссылки на наиболее надежные ресурсы и объясняет, почему тот или иной элемент важен для системы.
Блокирование доступа с помощью фаервола
Одна из наиболее простых мер защиты сервера, которую стоит принять всем пользователям – активация и настройка фаервола. Фаерволы выступают в качестве барьера между общим сетевым трафиком и отдельным сервреом. Они отслеживают входящий и исходящий трафик и решают, нужно ли пропустить ту или иную информацию.
Это делается путем проверки трафика набором правил, установленных пользователем. Как правило, для работы сервисов сервер использует только несколько конкретных сетевых портов. Остальные порты не используются, потому они должны быть надежно защищены фаерволом, который будет отказывать в доступе всем данным, поступающим на эти порты.
Это позволяет отбросить все неизвестные данные и даже установить условия использования сервисов в некоторых случаях. Разумные правила фаервола обеспечивают хорошую основу для защиты сервера.
Есть довольно много доступных фаерволов. Некоторые из наиболее популярных вариантов рассмотрены ниже.
UFW
UFW расшифровывается как «Uncomplicated Firewall» («незамысловатый фаервол»). Его цель – надежно защитить сервер без использования сложного синтаксиса и лишних дополнений.
Как и большая часть фаерволов Linux, UFW, на самом деле, является фронт-эндом для управления фаерволом NetFilter, который входит в состав ядра Linux. UFW достаточно прост, потому отлично подходит для пользователей, которые не очень хорошо знакомы с другими фаерволами Linux.
Читайте также: Настройка фаервола с помощью UFW на облачных серверах Ubuntu и Debian
IPTables
Вероятно, наиболее широко известный фаервол Linux – это IPTables. IPTables – еще один компонент, который используется для управления входящим в состав ядра Linux фаерволом NetFilter. Он существует уже давно и неоднократно подвергался проверкам для обеспечения его надежности. Для создания ограничений трафика IPv6 существует версия IPTables под названием ip6tables.
Пользователям, управляющим серверами Linux, достаточно часто приходится сталкиваться с конфигурациями IPTables. Сначала синтаксис кажется сложным для понимания; тем не менее, для работы этого невероятно мощного инструмента можно установить набор достаточно гибких правил.
Читайте также:
NFTables
Долгое время IPTables считался стандартным фаерволом среды Linux, но недавно в ядро Linux был добавлен новый фаервол под названием NFTables. Разработанный создателями IPTables, данный фаервол должен в конечном счете заменить IPTables.
NFTables использует более простой синтаксис, чем его предшественник IPTables, а также объединяет поддержку IPv4 и IPv6 в одном инструменте. Пока что ядро большинства версий Linux не достаточно ново для внедрения NFTables, но скоро это будет очень распространенным явлением, потому стоит заранее ознакомиться с его использованием.
Безопасное удаленное подключение к системе с помощью SSH
Для управления сервером, к которому нет локального доступа, нужно будет использовать удаленное подключение. Стандартный и достаточно безопасный способ сделать это в системе Linux – использовать протокол SSH, что значит «Secure Shell» (безопасная оболочка).
SSH позволяет выполнить сквозное шифрование, передать незашифрованный трафик по защищенному соединению, использовать X-forwarding (графический интерфейс пользователя по сетевому соединению), и многое другое. В принципе, если нет возможности установить локальное подключение или использовать внеполосное управление, SSH становится главным способом взаимодействия администратора с машиной.
Сам протокол очень безопасен, поскольку подвергался обширным исследованиям и проверкам кода; тем не менее, выбор конфигураций может как повысить, так и значительно снизить уровень безопасности сервиса. Ниже приведено несколько вариантов использования протокола.
Пароль vs вход в систему при помощи SSH-ключей
SSH предоставляет удобную в использовании модель аутентификации, которая позволяет войти в систему при помощи ряда различных методов. Наиболее популярные среди них – вход в систему с помощью паролей и SSH-ключей.
Вход с помощью пароля используется чаще всего, но он менее безопасен, так как позволяет потенциальному злоумышленнику подбирать пароли до тех пор, пока не будет найдена правильная комбинация. Этот вид атаки называется «прямой подбор», и при помощи современных инструментов его можно легко автоматизировть.
Метод входа с SSH-ключами подразумевает создание надежной пары ключей для аутентификации. Открытый ключ используется для идентификации пользователя. Он может быть общедоступным, так как не используется для чего-либо, кроме идентификации пользователя; войти в систему можно только с соответствующим ему закрытым ключом. Закрытый ключ должен храниться в секрете и используется для подтверждения соответствующего открытого ключа.
В целом, открытый ключ можно разместить на сервере, что позволит входить в систему, используя соответствующий закрытый ключ. Такие ключи настолько сложны, что их невозможно подобрать. Более того, для данных ключей можно дополнительно активировать длинный фразовый пароль, что усилит их защиту.
Читайте также:
- Использование SSH для подключения к удаленному серверу Ubuntu
- Как настроить SSH-ключи
- Устранение неполадок SSH: как и когда искать ошибки?
Блокировка вредоносных IP-адресов с помощью fail2ban
Одним из действий, которое поможет обеспечить общую безопасность конфигураций SS, является внедрение fail2ban. Fail2ban – это сервис, который отслеживает журналы регистрации входа, чтобы определить, является ли удаленная система разрешенным пользователем, а затем временно запрещает трафик от соответствующего IP-адреса.
Разумная политика fail2ban позволит отметить машины, чьи частые попытки войти в систему постоянно терпят неудачу, и добавить правила фаервола, блокирующие трафик от таких машин в течение определенного периода времени. Это простой способ отразить атаку методом подбора, поскольку заблокированному злоумышленнику придется сделать довольно длительный перерыв в подборе. Как правило, этого достаточно, чтобы предотвратить дальнейшие попытки подбора.
Читайте также:
- Защита SSH с помощью fail2ban в Ubuntu 14.04
- Как защитить SSH с помощью fail2ban на Debian 7
- Защита SSH с помощью fail2ban в CentOS 7
Внедрение IDS для обнаружения вторжений на сервер
Разработка стратегии обнаружения несанкционированного использования сервера – один из важнейших аспектов повышения безопасности системы. Нужно не только продумать предупредительные меры, но и проверить, работают ли они.
Система обнаружения вторжений, также известная как IDS, заносит в каталог конфигурации и сведения о файле в заведомо исправном состоянии. Затем она сравнивает записанные данные с целью обнаружить измененные файлы или конфигурации.
Существует довольно много систем обнаружения вторжений, и некоторые из них рассмотрены ниже.
Tripwire
Tripwire – одна из наиболее известных IDS.
Tripwire компилирует базу данных системных файлов и защищает свои конфигурационные и исполняемые файлы при помощи набора ключей. После установки подходящих конфигураций и определения исключений Tripwire будет сообщать о любых изменениях, внесенных в отслеживаемые файлы.
Данную систему очень просто подстроить в соответствии с потребностями сервера. Tripwire можно запускать при помощи cron, а также активировать отправку электронных уведомлений в случае необычной деятельности.
Читайте также: Использование Tripwire для обнаружения вторжений на сервер Ubuntu
Aide
Aide – еще один вариант IDS. Подобно Tripwire, Aide работает путем создания базы данных и сравнения текущего состояния системы с сохраненными ранее заведомо исправными значениями. При возникновении несоответствий система может уведомить администратора о проблеме.
В целом, Aide и Tripwire предлагают подобные решения проблемы вторжения на сервер.
Читайте также: Установка Aide на VPS
Psad
Инструмент Psad работает иначе, чем инструменты, перечисленные выше. Вместо того, чтобы мониторить системные файлы, он отслеживает журналы фаервола, пытаясь обнаружить вредоносную активность.
Если, например, пользователь пытается проверить сервер на наличие уязвимостей при помощи сканирования портов, Psad может обнаружить эту деятельность и динамически изменить правила фаервола для блокировки этого пользователя. Этот инструмент может регистрировать различные уровни угроз и основывать свое решение на серьезности проблемы. Также он может извещать администратора о проблемах по электронной почте.
Читайте также: Использование PSAD для обнаружения попыток взлома VPS на Ubuntu
Bro
Еще один вариант IDS – это система Bro. На самом деле Bro – это механизм мониторинга сети, который может быть использован в качестве сетевого IDS или же для других целей, таких как сбор общей статистики использования, изучение проблем или обнаружения паттернов.
Система Bro имеет два уровня. Первый уровень мониторит деятельность сервера и создает события. Второй уровень запускает созданные события согласно установленной политике, которая указывает, что нужно делать с трафиком. Эта система может создавать предупреждения, выполнять системные команды, просто регистрировать вхождение, и многое другое.
Читайте также: Установка Bro в Ubuntu 16.04
RKHunter
RKHunter работает по тем же принципам, что и многие IDS для обнаружения руткитов и распространенных вредоносных программ, хотя технически не является системой обнаружения вторжений.
Вирусы в мире Linux встречаются редко, но существует множество вредоносных программ и руткитов, которые могут поставить сервер под угрозу или открыть взломщику постоянный доступ к нему. RKHunter скачивает список известных эксплойтов, а затем сверяет систему с базой данных. Также он предупреждает администратора о настройках некоторых общих приложений, которые могут оказаться опасными для сервера.
Читайте также: Использование RkHunter для защиты от руткитов на сервере Ubuntu
Общие советы по безопасности сервера
Все описанные выше инструменты и настройки могут помочь обезопасить некоторые части системы; тем не менее, просто установить данные инструменты для обеспечения высокого уровня безопасности не достаточно. Надежная система безопасности требует определенного типа мышления и достигается за счет трудолюбия, тщательных проверок и понимания безопасности как процесса.
Ниже приведены некоторые общие правила, которые могут помочь найти правильный подход к безопасной работе с системой.
Следите за обновлениями программного обеспечения и регулярно обновляйте его
Программные уязвимости постоянно обнаруживаются почти во всем ПО, которое часто используется. Дистрибутива обычно делают хорошую работу в соответствии с последними патчами безопасности и толкая эти обновления в их хранилищах. Мейнтейнеры дистрибутивов проделывают серьезную работу, работая с последними патчами безопасности и помещая эти обновления в соответствующие репозитории.
Тем не менее, наличие в репозитории доступного обновления ПО не принесет серверу никакой пользы, если оно не будет скачано и установлено.
Хотя многие серверы выигрывают от работы с постоянными, хорошо проверенными версиями системного программного обеспечения, обновления не следует откладывать.
Большинство дистрибутивов проводят рассылку извещений об обновлениях ПО и имеют отдельные хранилища более безопасных версий, из которых ПО можно просто скачать и установить.
Будьте внимательны при загрузке программного обеспечения по неофициальным каналам
Большинство пользователей стараются работать только с программным обеспечением, доступным из официальных репозиториев их дистрибутивов, и многие дистрибутивы прдлагают подписанные пакеты. Такому ПО можно доверять, сфокусироваться нужно на программном обеспечении, полученном из неофициальных репозиториев.
В целом, пакетам дистрибутива или программному обеспечению, доступным на официальном сайте проекта, можно доверять, но имейте в виду, что если вы не проводите контрольную проверку каждой части программного обеспечения самостоятельно, появляется определенная доля риска. Чаще всего такой уровень риска считается приемлемым.
В то же время, ПО, загруженное со случайных хранилищ, созданных неизвестными организациями, является серьезной угрозой безопасности сервера. Большинство неофициальных источников программного обеспечения, вероятно, является полностью безопасным, но знайте, используя подобные программы, сервер подвергается серьезной опасности.
Постарайтесь объяснить себе, почему вы доверяете этому Побез проверки. Если вы не можете этого сделать, подумайте о том, что угроза безопасности принесет гораздо больше беспокойства, чем удобства работы.
Знайте и ограничивайте свои сервисы
Хотя основная идея работы сервера состоит, скорее, в предоставлении сервисов, к которым можно получить доступ, запущенные на машине сервисы лучше ограничить, оставив только нужные и используемые. Каждый включенный сервис нужно рассматривать как потенциальный вектор угрозы и попытаться устранить такое количество векторов, которое не повлияет на базовую функциональность сервера.
К примеру, при работе с «обезглавленным» сервером (т.е., без монитора) графические программы не используются, потому необходимо отключить и, вероятно, удалить дисплейный сервер X. Подобные меры могут быть приняты и в других областях системы. Не используете принтер? Отключите сервис «lp». Не используете сетевые папки общего доступа Windows? Отключите службу «Samba».
Используйте SFTP вместо FTP
FTP – по своей сути небезопасный протокол. Все данные отправляются в виде обычного текста, а это означает, что при мониторинге соединения между сервером и локальной машиной можно увидеть данные для входа в систему.
Существует всего несколько случаев, когда использование FTP не влечет за собой подобных последствий. При работе с анонимным открытым зеркалом загрузки только для чтения можно использовать FTP. Еще один такой случай – передача файлов между двумя компьютерами, которые защищены фаерволом со включенным NAT.
В почти всех других случаях лучше использовать безопасную альтернативу данного протокола. В комплекте с альтернативным протоколом под названием SFTP предоставляется SSH; SFTP работает аналогичным FTP образом, но при этом он защищен протоколом SSH.
Это позволяет обмениваться информацией с с сервером тем же путем, что и при использовании FTP, но все риски при этом исключены. Большинство современных FTP-клиентов также может взаимодействовать с SFTP-серверами.
Читайте также: Использование SFTP для безопасного обмена файлами с удаленным сервером
Ведите разумную политику безопасности пользователя
Существует ряд действий, которые можно выполнить, чтобы лучше защитить систему при администрировании пользователей.
К примеру, можно отключить вход как root. Поскольку root-пользователь существует только в POSIX-подобных системах, он является целью многих злоумышленников. Нужно отключить вход в систему как root после настройки доступа sudo, также можно использовать команду su.
Можно деактивировать удаленный root-вход с помощью демона SSH или же отключить локальный вход в систему, внеся ограничения в файл /etc/securetty. Также можно отключить распознавание root-оболочки, чтобы отключить root-доступ к оболочке, и настроить правила PAM, чтобы ограничить root-вход.
Еще одно полезное действие, которое можно выполнить с учетными записями пользователей – это создать уникальные учетные записи для каждого пользователя и сервиса и предоставить им минимальные для их работы привилегии. Заблокируйте все, к чему не нужно иметь доступ, и установите минимальные привилегии, не влияющие на работу пользователей/сервисов.
Это очень полезно, поскольку, если один из пользователей или сервисов был взломан, это не вызовет эффекта домино, позволяющего злоумышленнику получить доступ ко всей системе. По сути, этот принцип работает подобно водонепроницаемым дверям, которые не позволяют затопить весь корабль.
Подобным образом необходимо отключить все ненужные учетные записи пользователей. Имеются ввиду пользователи, которые больше не должны иметь доступ к системе или учетные записи которых остались после удаления программного обеспечения.
Обратите внимание на установленные привилегии
Права доступа к файлам – источник огромного риска для системы. Установление привилегий, позволяющих выполнять всю необходимую работу и при этом не наносящих вреда системе – задание не из простых.
Определение разумных настроек umask (функция, определяющая права доступа по умолчанию к новым файлам и каталогам) может занять немало времени.
Читайте также: Основы привилегий Linux и использование Umask
В целом, дважды подумайте, прежде чем устанавливать слишком свободные права на файл, особенно если он доступен в Интернете – это может привести к необратимым последствиям. Кроме того, не нужно устанавливать бит SGID или SUID, не будучи полностью уверенным в своих действиях. Также необходимо убедиться в том, что все файлы имеют владельца и группу.
Настройки привилегий будут значительно меняться в зависимости от конкретного случая, но нужно всегда стараться предоставить минимально возможные привилегии. Это одна из тем, в которых легко запутаться и относительно которых существует масса плохих советов в интернете.
Заключение
Данное руководство подробно объясняет общие понятия обеспечения безопасности сервера Linux. Хотя оно содержит множество советов касательно устранения основных уязвимостей различных областей системы, большинство решений нужно принимать самостоятельно и с оглядкой на текущее состояние сервера.
Защита сервера – это не та область, которую можно надежно настроить с первого же раза; это – своеобразный процесс, основывающийся на постоянном тестировании системы, принятии важных решений, оценке журналов и оповещений, переоценке потребностей и т.д. В этом деле важно внимание и отслеживание результатов и последствий принятых решений.