Назад | Перейти на главную страницу

rpcbind - действительно ли нет способа привязать TCP-порты к определенному интерфейсу / можно ли запускать nfs без rpcbind?

Мы хотели бы отойти от sshfs к nfs.

Последнее, что нас сдерживает, - это то, что rpcbind (который, как я полагаю, требуется для nfs работать) не позволяет указать TCP (не UDP) IP-адрес, к которому он привязан.

Здесь -h флаг, но это только для портов UDP, которые он открывает. это не влияет на порты TCP, они все еще открываются 0.0.0.0:...

Кто-нибудь знает, как мы можем обезопасить rpcbind не открывая его нашему общедоступному интерфейсу?

Или даже лучше, есть ли способ использовать nfs без rpcbind?

Спасибо!

Rpcbind требуется для сопоставления службы RPC с сетевым (чтение TCP или UDP) адресом и портом. NFS версий 2 и 3 требует подключения дополнительной службы, чтобы клиенты могли получить начальный дескриптор файла. Хотя nfs имеет хорошо известный номер порта 2049, mountd - нет. IOW, если вы хотите использовать NFSv3, вам также нужно будет запустить rpcbind (ну, вероятно, есть некоторые параметры монтирования, чтобы определить, где запущен mound). В отличие от v3, NFSv4 требует только один порт 2049 и вообще не требует монтирования. Это делает возможной установку NFS без rpcbind. Просто имейте в виду, что некоторые (старые) клиенты все еще могут пытаться разговаривать с rpcbind даже для v4.

Теперь о rpcbind. Почему ты хочешь его защитить? Если он недоступен для клиентов, они не могут подключиться? Единственная причина для защиты - ограничить количество клиентов, которые могут выполнять обновления. Но это уже сделано, поскольку rpcbind использует сокет домена unix и запрещает любому удаленному клиенту выполнять обновления. Даже на локальном хосте для этого нужно иметь root-доступ. Если вы хотите защитить себя только от некоторых клиентов, то iptables - ваш друг (или какой-либо брандмауэр вашей ОС):

# iptables -A INPUT -s 10.1.2.0/24 -p tcp --dport 111 -j ACCEPT
# iptables -A INPUT -s 10.1.3.0/24 -p udp --dport 111 -j ACCEPT
# iptables -A INPUT -p tcp --dport 111 -j DROP
# iptables -A INPUT -p udp --dport 111 -j DROP

Тем, кто ищет ответ в 2019 году, не нужно добавлять правила брандмауэра.

rpcbind берет -h IP вариант. Достаточно добавить в /etc/sysconfig/rpcbind (Red Hat, Fedora, SLES, openSUSE) или /etc/default/rpcbind (Debian, Ubuntu).

Больше не нужно настраивать правила брандмауэра. В недавнем дистрибутиве Linux, в котором доступен /etc/hosts.deny/allow, вы можете просто сделать следующее:

echo "portmap: 10.0.0.0/16" >> /etc/hosts.allow
echo "rpcbind: 10.0.0.0/16" >> /etc/hosts.allow
echo "portmap: ALL" >> /etc/hosts.deny
echo "rpcbind: ALL" >> /etc/hosts.deny

(Предполагая, что 10.0.0.0/16 - ваша частная сеть).

В последних версиях NFS используется rpcbind, но в более старых версиях используется карта портов, поэтому это будет зависеть от вашей ОС.

Поиск служебного порта встроен в протокол RPC, поэтому вам придется сделать что-то довольно экзотическое, чтобы избежать rpcbind при работе NFS.

Вы можете заблокировать соединения с определенных адресов или интерфейсов с помощью iptables; с tcpwrappers (/etc/hosts.allow, /etc/hosts.deny); или - для любителей приключений - с SELinux.

tcpwrappers доступен изначально, если "ldd / sbin / rpcbind" показывает ссылку на libwrap, в противном случае вам нужно будет подавить обычный запуск и вместо этого запустить его из inetd / xinetd через tcpd. Я сам этого не пробовал.