Вопрос или проблема
Как сделать подключение NFS безопасным? Удаленный сервер находится в интернете, а не в локальной сети. У сервера нет брандмауэра, и он подключен напрямую к интернету.
У сервера нет брандмауэра
Если удаленная система не защищена (а отсутствие любой защиты брандмауэром делает это подозрительным), то неважно, что вы делаете с вашим подключением – вы не можете быть уверены в безопасности. Это особенно верно для сервера NFS, где аутентификация не связана с базовым протоколом.
Если ваши утверждения верны (что мне кажется удивительным), найдите того, кто настроил сервер таким образом, и заблокируйте их до того, как они смогут нанести еще больший вред.
Если вам нужен доступ к NFS через интернет, используйте VPN (IPSEC, SSL туннель, SSH туннель, даже pptp) и БЛОКИРУЙТЕ весь прямой доступ к интернету (кроме защищенного соединения) на сервере.
Если NFS используется в системе, пожалуйста, выполните следующие меры:
- Если возможно, разрешайте только доступ на чтение к вашим экспортируемым данным (-ro)
- Не экспортируйте корневую папку / или /etc
- Отключите NFS, если вы не хотите экспортировать какие-либо файловые системы.
- Доступ к экспорту NFS должен быть ограничен для определенных хостов
- Если присутствуют файловые системы zfs, также проверьте их атрибуты, чтобы они не были настроены для совместного использования через NFS.
- Используйте опцию -nosuid для монтирования папок, чтобы предотвратить выполнение программ setuid.
- Используйте опцию –nodev для монтирования папок, чтобы предотвратить совместное использование файлов устройств.
Вы можете использовать RPC-with-TLS для обеспечения конфиденциальности и целостности для соединения NFSv4.
На стороне сервера требуется опция экспорта xprtsec=
. Это документировано в разделе “Безопасность транспортного уровня” exports(5).
На стороне клиента требуется опция монтирования xprtsec=
. Это документировано в nfs(5) и включает опцию монтирования xprtsec=
.
И сервер, и клиент потребуют запуска и настройки tlshd
из ktls-utils с путем к сертификату TLS и соответствующим закрытым ключом. Центр сертификации, который подписал сертификат клиента, должен быть доверенным на сервере и наоборот.
Или вы можете использовать IPsec для обеспечения конфиденциальности и целостности трафика NFS между клиентом и сервером.
Другие ответы предлагают туннелирование через TLS с помощью stunnel или через SSH. Эти методы имеют недостатки, такие как проблема TCP-over-TCP, и не обязательны, так как NFS поддерживает TLS нативно.
Другой вариант – использовать Kerberos с параметрами экспорта и монтирования sec=krb5p
. Хотя это обеспечивает защиту целостности, это не обеспечивает полную конфиденциальность, так как некоторый трафик все еще передается в открытую. Он также использует симметричное шифрование, поэтому я полагаю, что нет идеальной прямой секретности и захваченный трафик может быть расшифрован, если ваши ключи Kerberos когда-либо будут раскрыты. Поэтому, вероятно, лучше использовать TLS или IPSec для защиты транспорта и полагаться на Kerberos только для аутентификации (sec=krb5
).
Я предполагаю, вы уже знаете, что sec=sys
не подходит, если только вы не доверяете клиентской машине отвечать за контроль доступа на стороне сервера.
В любом случае, вы должны предпринять дополнительные шаги для защиты сервера от DoS-атак (например, настроить брандмауэр для отброса пакетов, если они поступают от источников, которые вы не ожидаете).
Есть хорошая статья на linuxjournal Шифрование NFSv4 с Stunnel TLS, которая объясняет, как использовать stunnel для защиты трафика NFSv4.
Вдохновленная этой публикацией рабочая группа NFS IETF разрабатывала RPC-over-TLS протокол, который призван добавить нативную поддержку TLS в протокол NFS (и любой другой протокол на основе ONC/Sun RPC).
Это зависит от того, какую версию NFS вы используете. Некоторые из вышеизложенных ответов, вероятно, соответствуют тому, что вам нужно сделать для версий до NFSv4.
- NFSv3+ настройте соединение через ssh с помощью TCP wrappers, который, как утверждается, полон неожиданностей
- Укрепите свой сетевой брандмауэр NFSv*
- Откройте порты для TCP, UDP и rpcbind. порты по умолчанию и настройка rcpbind могут отличаться в зависимости от версии NFS
По словам Кристофера Негуса Linux Bible, обеспечение безопасности NFSv4, наряду с вышеупомянутыми решениями, лучше всего достигается с использованием интеграции Kerberos, которая позволяет настроить доступ на основе пользователей. Это позволяет осуществлять более точный контроль над тем, какие корневые пользователи
- Настройка ssh через TCP (может работать для более старых версий NFS. https://web.archive.org/web/20130526012838/http://dag.wieers.com/blog/tunneling-nfs4-over-ssh
.
Ответ или решение
Сетевой файловый сервис (NFS) является популярным выбором для обмена файлами в UNIX/похожих на UNIX системах. Тем не менее, стандартная реализация NFS была разработана для использования в защищенных локальных сетях, что делает их уязвимыми, когда они функционируют в менее безопасных средах, таких как интернет. Вопрос, как сделать подключение NFS более защищенным, особенно актуален в ситуации, описанной пользователем, где удаленный сервер подключен непосредственно к интернету без использования межсетевого экрана.
Теория: Для обеспечения безопасности NFS следует учитывать несколько ключевых аспектов. Во-первых, необходимо обеспечить безопасность передачи данных. Протокол NFS сам по себе не обеспечивает надежной аутентификации и защиты данных на уровне сетевого подключения. Это делает данные уязвимыми для перехвата и изменения злоумышленниками. Во-вторых, без учёта политик управления доступом, злоумышленники могут получить полный доступ к важным данным. И, наконец, инфраструктура, таких как серверы и сети, должна быть гибко настроена с акцентом на минимизацию уязвимостей, таких как DoS-атаки.
Пример: Давайте рассмотрим возможные меры безопасности, которые можно и необходимо применить:
-
Передача данных через SSH-туннель: Это один из наиболее простых способов защищенной передачи файлов с использованием NFS. В SSH-туннеле данные шифруются на клиенте и расшифровываются на сервере, что делает перехват данных на их пути между клиентом и сервером чрезвычайно сложным.
-
Использование VPN: Виртуальные частные сети (VPN), такие как IPsec, SSL или PPTP, предлагают дополнительные уровни безопасности, защищая передачу данных через безопасные каналы. В этой конфигурации весь сетевой трафик, включая NFS, проходит через зашифрованный канал.
-
Настройка TLS: NFS, начиная с версии 4.2, поддерживает передачу данных с использованием TLS для обеспечения конфиденциальности и целостности. Это значит, что теперь напрямую можно использовать расширенные методы шифрования, такие как RPC-over-TLS, которые была предложена IETF.
-
Авторизация через Kerberos: Включение аутентификации с помощью Kerberos позволяет обеспечить аутентификацию на базе пользователей, что добавляет уровень контроля доступа и ответственности. Это делает NFS безопаснее, позволяя управлять более детальной авторизацией на основе учётных данных пользователей.
-
Защита на уровне экспорта: Необходимо убедиться, что NFS экспортируется с учетом всех возможных ограничений, таких как read-only доступ, исключение экспорта корневой файловой системы или системных директорий, использование опций
-nosuid
и-nodev
, а также ограничения по хостам. -
Файрволы и другие сетевые защиты: Хотя ресурсы сервера изначально не защищены файрволами, необходимо внедрить решения для фильтрации и ограничения соединений. Например, iptables может быть использован для ограничения доступа к NFS-трафику и предотвращения несанкционированных подключений.
Применение: Внедрение вышеперечисленных мер существенно повысит безопасность NFS-соединения, даже в небезопасной интернет-среде. На практике, следует начать с анализа текущей инфраструктуры и конфигурации сервера, уделяя внимание основным уязвимостям. Затем можно этапами внедрять технологии шифрования и аутентификации. Например, валидность сертификатов TLS должна быть проверена на обоих концах соединения: сервер должен доверять корневому сертификату клиента, и наоборот. Также полезно ограничить сетевой трафик посредством тщательной настройки IPTables или другого файервола и предусмотреть защиту от DoS-атак, что существенно усилит общую защиту системы.
Важно отметить, что настройка защищенного NFS требует комплексного подхода, включающего как технологические, так и административные меры. Все участники процесса от администраторов до пользователей должны быть осведомлены о рисках и мерах безопасности, чтобы поддерживать систему в актуальном и безопасном состоянии, способном защитить данные даже в глобальной сетевой среде.