NFS серверы и firewalld

16

Я не нашел документ об этом, так что давайте начнем.

На хосте CentOS 7.1 я прошел HOW-TO linuxconfig , включая firewall-cmdзаписи, и у меня есть экспортируемая файловая система.

[root@<server> ~]# firewall-cmd --list-all
internal (default, active)
  interfaces: enp5s0
  sources: 192.168.10.0/24
  services: dhcpv6-client ipp-client mdns ssh
  ports: 2049/tcp
  masquerade: no
  forward-ports: 
  rich rules: 

[root@<server> ~]# showmount -e localhost
Export list for localhost:
/export/home/<user> *.localdomain

Однако, если я showmountот клиента, у меня все еще есть проблема.

[root@<client> ~]# showmount -e <server>.localdomain
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

Теперь, как я могу быть уверен, что это проблема с брандмауэром? Легко. Выключите брандмауэр. Сторона сервера:

[root@<server> ~]# systemctl stop firewalld

И на стороне клиента:

[root@<client> ~]# showmount -e <server>.localdomain
Export list for <server>.localdomain:
/export/home/<server> *.localdomain

Перезапустите firewalld. Сторона сервера:

[root@<server> ~]# systemctl start firewalld

И на стороне клиента:

[root@<client> ~]# showmount -e <server>.localdomain
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

Итак, давайте отправимся в город, адаптировав команды iptables с сервера NFS RHEL 6, КАК ...

[root@ ~]# firewall-cmd \
>  --add-port=111/tcp \
>  --add-port=111/udp \
>  --add-port=892/tcp \
>  --add-port=892/udp \
>  --add-port=875/tcp \
>  --add-port=875/udp \
>  --add-port=662/tcp \
>  --add-port=662/udp \
>  --add-port=32769/udp \
>  --add-port=32803/tcp
success

[root@<server> ~]# firewall-cmd \
>  --add-port=111/tcp \
>  --add-port=111/udp \
>  --add-port=892/tcp \
>  --add-port=892/udp \
>  --add-port=875/tcp \
>  --add-port=875/udp \
>  --add-port=662/tcp \
>  --add-port=662/udp \
>  --add-port=32769/udp \
>  --add-port=32803/tcp \
>  --permanent
success

[root@<server> ~]# firewall-cmd --list-all
internal (default, active)
  interfaces: enp5s0
  sources: 192.168.0.0/24
  services: dhcpv6-client ipp-client mdns ssh
  ports: 32803/tcp 662/udp 662/tcp 111/udp 875/udp 32769/udp 875/tcp 892/udp 2049/tcp 892/tcp 111/tcp
  masquerade: no
  forward-ports: 
  rich rules: 

На этот раз я получаю немного другое сообщение об ошибке от клиента:

[root@<client> ~]# showmount -e <server>.localdomain
rpc mount export: RPC: Unable to receive; errno = No route to host

Итак, я знаю, что я на правильном пути. Сказав это, почему я не могу найти полное руководство по этому вопросу в любом месте? Я не мог быть первым человеком, который должен был понять это!

Какие firewall-cmdзаписи я пропускаю?

О, еще одно замечание. Мои /etc/sysconfig/nfsфайлы на клиенте CentOS 6 и сервере CentOS 7 пока не изменены. Я бы предпочел не менять (и поддерживать!) Их, если это вообще возможно.

Давит
источник

Ответы:

40

Этого должно быть достаточно:

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload
Том
источник
Не достаточно в моем случае. У меня есть два NFS-сервера, первый транслируется правильно и подписан его клиентами, второй, по-видимому, транслирует все нормально, но его клиент (первый сервер) не может 'showmount' (rpc mount export: RPC: Unable to receive; errno = Нет маршрута к хосту). Я вернусь сюда, если / когда я решу это.
Urhixidur
Оказывается, СЕРВЕРУ нужны три службы (nfs, mountd, rpc-bind), добавленные к его брандмауэру (не знаю, если клиенту нужны все три тоже; в моем случае все три). В моем случае это был клиент (первый NFS-сервер), но на сервере (второй NFS-сервер) отсутствовал mountd.
Urhixidur
@Urhixidur клиенту это не нужно, потому что firewalld разрешает исходящие соединения.
T0xicCode
Обратите внимание на написание rpc-bind. Хотя я включил его с помощью systemctl enable rpcbindи systemctl start rpcbind, firewall-cmd сказал мне Error: INVALID_SERVICE: rpcbind. Вскоре я понял, что в этом контексте нужна тире! Они действительно один и тот же сервис?
Qwertie
5

После настройки NFS-сервера мы должны включить и запустить три службы:

  1. NFS-server.service
  2. rpcbind.service
  3. nfs-mountd.service (необходим только запуск)

А также разрешить эти сервисы на межсетевом экране сервера:

# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-service=rpcbind
# firewall-cmd --permanent --add-service=mountd
# firewall-cmd --reload
Aditya.V
источник
4

Просто нашел это - и это работает, когда проблема заключается в том, что SELinux блокирует чтение ~ / .ssh / authorized_keys во время входа в систему! Во-первых, убедитесь, что файл ~ / .ssh / authorized_keys заполнен правильно, а его разрешения и разрешения для его папки установлены правильно. Если вы затем запустите «setenforce 0» на хосте назначения SSH и сможете войти на этот хост без ввода пароля, но не сможете сделать это после ввода «setenforce 1» на том же хосте назначения, следующее может решить вашу проблему:

setsebool -P use_nfs_home_dirs 1

ссылка: https://cassjohnston.wordpress.com/2015/06/12/selinux-nfs-home-directories/

JamesM
источник
0

Я использую nfsv4 и прекрасно работает с этими линиями, предполагая, что ваша зона "public", и вы используете порты по умолчанию 2049 и 4001

firewall-cmd --permanent --add-service=nfs --zone=public
firewall-cmd --permanent --add-service=mountd --zone=public
firewall-cmd --permanent --add-service=rpc-bind --zone=public
firewall-cmd --permanent --add-port=4001/udp --zone=public
firewall-cmd --permanent --add-port=4001/tcp --zone=public
firewall-cmd --permanent --add-port=2049/tcp --zone=public
firewall-cmd --permanent --add-port=2049/udp --zone=public
firewall-cmd --reload
elbarna
источник