Статья подготовлена для студентов курса «Безопасность Linux» в образовательном проекте OTUS.
Чтобы обеспечить повышенный уровень безопасности системы, зачастую можно не прибегать к дорогостоящим специализированным средствам защиты. Добиться этого можно за счет грамотного конфигурирования уже имеющихся штатных механизмов защиты. Рассмотрим действия, которые может выполнить любой системный администратор, чтобы обезопасить Linux-систему.
№ 1. Избегайте использования FTP, Telnet и Rlogin/Rsh
В большинстве вариантов конфигурации сетей можно в той же самой сети с помощью сниффера пакетов (packet sniffer) перехватывать имена пользователей, пароли, команды FTP/Telnet/RSH и пересылаемые файлы. Общим решением проблемы является использование OpenSSH, SFTP или FTPS (FTP поверх SSL), которые добавляют к FTP либо SSL, либо шифрование TLS. Для того, чтобы удалить NIS, rsh и другие устаревшие сервисы, наберите следующую команду:
№ 2. Минимизируйте количество установленных приложений для минимизации числа уязвимостей
Вам действительно нужны все виды установленных веб-сервисов? Избегайте устанавливать ненужные приложения с тем, чтобы избежать уязвимостей, имеющихся в этих приложениях. Воспользуйтесь менеджером пакетов RPM, таким как as yum, либо apt-get and/or dpkg to review для просмотра всего набора установленных в системе программ. Удалите все ненужные пакеты.
или
№ 3. Один сетевой сервис на каждую систему или экземпляр виртуальной машины
Запускайте различные сетевые сервисы на отдельных серверах или отдельных экземплярах виртуальной машины. Это снизит количество сервисов, которые могут подвергнуться опасности. Например, если атакующий успешно попадает внутрь сервиса Apache , он также сможет получить доступ ко всему серверу, в том числе и к другим сервисам, таким как MySQL, почтовый сервер и т. п.
№ 4. Поддерживайте ядро Linux и программы в обновлённом состоянии
Применение всех патчей безопасности является важной частью работы по поддержанию сервера Linux. В Linux есть все необходимые средства для поддержания вашей системы всегда в обновлённом состоянии и для легкого перехода к следующим версиям. Все обновления, касающиеся безопасности, должны изучаться и устанавливаться сразу, как для этого появится возможность. Для того, чтобы установить все обновления, касающиеся безопасности, опять воспользуйтесь менеджером пакетов RPM, таким как yum или apt-get и/или dpkg:
или
Вы можете сконфигурировать Red hat/CentOS/Fedora Linux так, что yum будет посылать вам по e-mail напоминание о том, что есть обновление. Другая возможность – выполнять все обновления, относящиеся к безопасности, как задания для cron. Под Debian/Ubuntu Linux вы можете использовать apticron для отсылки напоминаний, касающихся безопасности.
№ 5: Используйте расширения Linux, повышающие безопасность
Linux поставляется с различными патчами по безопасности, которые можно использовать с тем, чтобы защитится от неверно работающих или подвергнувшихся атаке программ. Если можно, то используйте SELinux и другие расширения Linux, повышающие безопасность, в которых уже есть средства ограничения при работе с сетью и другие программы. Например, в SELinux имеется большое количество политик безопасности, которые реализованы в ядре SELinux.
№ 6. Политика пользовательских паролей и сильные пароли
Используйте команды useradd/usermod для того, чтобы создавать и работать с регистрационными записями пользователей. Удостоверьтесь в том, что вы используете политику применения хороших и сильных паролей. Например, длина хорошего пароля должна быть не менее 8 символов и в нём должны присутствовать прописные и строчные буквы, цифры, специальные символы и т. п. Самое главное – подобрать пароль, который вы можете запомнить. Используйте такие инструментальные средства, как John the ripper для поиска на вашем сервере слабых пользовательских паролей. Используйте pam_cracklib.so для того, чтобы проверять устойчивость пароля против его подбора по словарю.
№ 7. Запретите прямой доступ в систему с правами root
Никогда не входите в систему как пользователь root. Для выполнения команд уровня root, если это потребуется, вам следует пользоваться командой sudo. Команда sudo существенно повышает безопасность системы и не требует раздавать пароль root другим пользователям и администраторам. Команда sudo также предоставляет простые средства для аудита и отслеживания событий.
№ 8. Защитите сервер от физического доступа к нему
Вы должны защитить консоли Linux-серверов от физического доступа к системе. Сконфигурируйте BIOS и запретите загружаться с таких внешних устройств, как DVDs/CDs/USB. Установите пароль BIOS и пароль загрузки grub с тем, чтобы защитить эти настройки. Все системные блоки должны быть сосредоточены в специально отведённом для этого помещении и персонал, прежде чем получить доступ к вашему серверу, должен пройти в службе безопасности определенную проверку.
№ 9. Отключите ненужные сервисы
Отключите все ненужные сервисы и демоны (сервисы, запускающиеся в фоновом режиме). Вам нужно будет удалить все ненужные сервисы, запускаемые при старте системы. Для того, чтобы получить список всех сервисов, запускаемых на уровне запуска 3 (run level # 3) во время загрузки системы, наберите следующую команду:
Чтобы отключить сервис, введите:
№ 10. Удалите X Window
X Window на сервере не нужен. Так что, нет необходимости запускать X Window на вашем специализированном почтовом или веб-сервере (Apache). Для того, чтобы повысить безопасность и улучшить работоспособность системы, вы можете отключить и удалить X Window. Отредактируйте файл /etc/inittab и установите уровень запуска (run level) равным 3. Наконец, удалите систему X Window, для этого введите следующую команду:
№ 11. Сконфигурируйте Iptables и используйте TCPWrapper-ы
Iptables является пользовательским приложением, которое позволит вам сконфигурировать брандмауэр (Netfilter), имеющийся в ядре Linux. Используйте брандмауэр для фильтрации и пропуска только нужного трафика. Также используйте TTCPWrapper-ы – кросс-хостинговые сетевые системы ACL (листы контроля доступа), применяемые для фильтрации доступа из сети в Интернет. С помощью Iptables вы сможете предотвратить многие атаки вида denial of service.
№ 12. Обезопасьте доступ к файлу ядра Linux /etc/sysctl.conf
Для конфигурирования параметров ядра во время его работы используется файл /etc/sysctl.conf. Linux во время загрузки использует настройки, считываемые из файла /etc/sysctl.conf. Пример файла /etc/sysctl.conf:
№ 13. Используйте различные дисковые разделы
Размещение файлов операционной системы отдельно от пользовательских файлов может, как результат, улучшить работу системы и повысить её безопасность. Удостоверьтесь в том, что следующие файловые системы смонтированы на отдельных разделах диска:
Создайте отдельные разделы для корневых директорий серверов Apache и FTP. Отредактируйте файл /etc/fstab и не забудьте добавить следующее конфигурационные параметры:
– noexec – не разрешается исполнять бинарные файлы (предотвращается исполнение бинарных файлов, но разрешается исполнять скрипты);
– nodev – не разрешается указывать посимвольные и специальные устройства (предотвращается использование файлов устройств, таких как zero, sda и т. д);
– nosuid – не разрешается иметь доступ для SUID/SGID (предотвращается изменение битов идентификатора пользователя и идентификатора группы).
Пример монтирования /etc/fstab раздела /dev/sda5 (корневой директорий сервера ftp), для которого ограничен пользовательский доступ:
№ 14. Отключите IPv6
Версия 6 протокола Интернет (IPv6), которая заменяет версию 4 (IPv4), представляет собой новый слой организации протокола TCP/IP, что даёт массу преимуществ. В настоящее время нет хороших инструментальных средств, с помощью которых можно было бы проверить безопасность системы, работающей через сеть по протоколу IPv6. В большинстве дистрибутивов Linux протокол IPv6 по умолчанию включен. Взломщики могут воспользоваться и перенаправить трафик по IPv6, поскольку большинство администраторов не осуществляют его мониторинг. Если конфигурация сети не требует использования протокола IPv6, то отключите его, в противном случае сконфигурируйте брандмауэр Linux для работы с IPv6.
№ 15. Уберите все ненужные бинарные файлы SUID и SGID
Если установлены права доступа SUID/SGID и файл, согласно SUID/SGID, исполняемый, то его можно использовать неправильно, что может быть причиной неверной работы системы или проблем с безопасностью. Любой локальный или удалённый пользователь может использовать такой файл. Поэтому нужно знать обо всех таких файлах. Используйте команду find следующим образом:
Вам нужно изучить каждое сообщение о таком файле.
№ 16. Используйте централизованный сервис идентификации
Без централизованной системы авторизации идентификационные данные о пользователе могут стать противоречивыми, и это может привести к устареванию полномочий и появлению забытых регистрационных записей, которые следует удалять в первую очередь. Централизованная служба аутентификации позволит вам осуществлять под Linux/UNIX централизованное обслуживание всех регистрационных записей и идентификационные данных. Вы сможете обеспечивать синхронизацию идентификационных данных между серверами. Не используйте для централизованной идентификации сервис NIS. Используйте OpenLDAP для клиентов и серверов.
№ 17. Протоколирование и аудит
Для того, чтобы собирать сведения о попытках взлома системы и проникновения в неё, вам нужно настроить протоколирование и аудит. По умолчанию системный журнал syslog сохраняет свои данные в директории /var/log/. Полезно также все разузнать о неверном конфигурировании программ, которое могут открыть вашу систему для различных атак. № 17.1. Использование Logwatch/Logcheck для отслеживания подозрительных записей в системном журнале. Читайте свои журналы с помощью logwatch или logcheck. Эти инструменты облегчат вам анализ журналов. Вы будете получать по почте подробные отчеты о необычных записях, обнаруженных в системном журнале syslog. Пример отчета по syslog:
№ 18. Обеспечьте безопасность сервера OpenSSH
Для удалённого доступа в систему и удалённой передачи файлов рекомендуется использовать протокол SSH. Однако протокол ssh открыт для многих атак.
№ 19. Установите и используйте систему обнаружения вторжений
Система обнаружения сетевого вторжения (network intrusion detection system – NIDS) – это система обнаружения вторжения, которая с помощью мониторинга сетевого трафика пытается зафиксировать злонамеренную активность, такую как атаки вида denial of service (отказ в обслуживании), сканирование портов и даже попытки проникновения в компьютер.
Хороший практический подход – прежде, чем система будет подключена к сети в режиме эксплуатации, развернуть любую интегрированную программную систему проверки. Если возможно, то прежде, чем система будет подключена какой-либо сети, установите пакет AIDE. AIDE является кросс-хостинговой системой обнаружения вторжения (host-based intrusion detection system – HIDS). Она может осуществлять мониторинг и анализ процессов, происходящих внутри самих компьютерных систем.
Snort является программой, предназначенной для обнаружения вторжений, которая может выполнять протоколирование на уровне сетевых пакетов и в режиме реального времени делать анализ трафика в IP-сетях.
№ 20. Защитите файлы, директории и почтовые ящики
В Linux предлагаются различные варианты защиты против несанкционированного доступа к данным. Использование прав доступа к файлу и методика MAC (Mandatory Access Control – принудительное управление доступом) предотвращают несанкционированный доступ к данным. Однако права доступа, устанавливаемые Linux, бесполезны, если атакующий имеет физический доступ к компьютеру и может перенести жёсткий диск компьютера на другую систему с тем, чтобы скопировать и проанализировать интересующие его данные. Вы можете легко защитить Linux-файлы и дисковые разделы с помощью специальных инструментальных средств.