Не удается смонтировать клиент NFS за брандмауэром
У меня есть система Ubuntu 11.10 с брандмауэром iptables. После закрепления портов для mountd, lockd и statd, а затем их открытия в iptables я могу без проблем выставлять общие ресурсы NFS через брандмауэр.
У меня проблема с подключением общего ресурса с другого NFS-сервера, который я не могу контролировать. Если я отключу брандмауэр, я могу смонтировать общий ресурс. Я также могу смонтировать другие общие папки NFS без отключения брандмауэра.
Итак, это приводит меня к двум вопросам:
- Почему брандмауэр мешает клиенту NFS монтировать одни серверы, а другие - нет?
- Может ли клиент указать порты для использования при монтировании NFS?
Полная конфигурация и информация об ошибках:
Сервер NFSv3 в соответствии с nfsstat
, Когда я делаю гору:
# mount -t nfs -v 192.168.80.48:/location /mnt/tmp
mount.nfs: timeout set for Fri Mar 23 09:13:00 2012
mount.nfs: trying text-based options 'vers=4,addr=192.168.80.48,clientaddr=192.168.40.173'
mount.nfs: mount(2): No such file or directory
mount.nfs: trying text-based options 'addr=192.168.80.48'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 192.168.80.48 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 192.168.80.48 prog 100005 vers 3 prot UDP port 678
mount.nfs: portmap query retrying: RPC: Timed out
mount.nfs: prog 100005, trying vers=3, prot=6
mount.nfs: trying 192.168.80.48 prog 100005 vers 3 prot TCP port 681
mount.nfs: portmap query failed: RPC: Remote system error - Connection timed out
Я вижу отбрасываемые пакеты:
Rejected packets: SRC=192.168.80.48 DST=192.168.40.173 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=681 DPT=40325 WINDOW=5792 RES=0x00 ACK SYN URGP=0
Rejected packets: SRC=192.168.80.48 DST=192.168.40.173 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=681 DPT=47419 WINDOW=5792 RES=0x00 ACK SYN URGP=0
Rejected packets: SRC=192.168.80.48 DST=192.168.40.173 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=681 DPT=41238 WINDOW=5792 RES=0x00 ACK SYN URGP=0
showmount
терпит неудачу таким же образом. От многословия mount
печатает, похоже, что portmap - это проблема, но я ее открыл.
# rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 32765 status
100024 1 tcp 32765 status
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049
100227 3 tcp 2049
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049
100227 3 udp 2049
100021 1 udp 4002 nlockmgr
100021 3 udp 4002 nlockmgr
100021 4 udp 4002 nlockmgr
100021 1 tcp 4001 nlockmgr
100021 3 tcp 4001 nlockmgr
100021 4 tcp 4001 nlockmgr
100005 1 udp 32767 mountd
100005 1 tcp 32767 mountd
100005 2 udp 32767 mountd
100005 2 tcp 32767 mountd
100005 3 udp 32767 mountd
100005 3 tcp 32767 mountd
# cat /etc/services
sunrpc 111/tcp portmapper # RPC 4.0 portmapper
sunrpc 111/udp portmapper
nfs 2049/tcp # Network File System
nfs 2049/udp # Network File System
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:sunrpc
ACCEPT tcp -- anywhere anywhere tcp dpt:ntp
ACCEPT tcp -- anywhere anywhere tcp dpt:netbios-ns
ACCEPT tcp -- anywhere anywhere tcp dpt:netbios-dgm
ACCEPT tcp -- anywhere anywhere tcp dpt:netbios-ssn
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:microsoft-ds
ACCEPT tcp -- anywhere anywhere tcp dpt:nfs
ACCEPT tcp -- anywhere anywhere tcp dpt:sunrpc
ACCEPT tcp -- anywhere anywhere tcp dpt:3260
ACCEPT tcp -- anywhere anywhere tcp dpt:32765
ACCEPT tcp -- anywhere anywhere tcp dpt:32766
ACCEPT tcp -- anywhere anywhere tcp dpt:32767
ACCEPT tcp -- anywhere anywhere tcp dpt:4001
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:sunrpc
ACCEPT udp -- anywhere anywhere udp dpt:ntp
ACCEPT udp -- anywhere anywhere udp dpt:netbios-ns
ACCEPT udp -- anywhere anywhere udp dpt:netbios-dgm
ACCEPT udp -- anywhere anywhere udp dpt:netbios-ssn
ACCEPT udp -- anywhere anywhere udp dpt:https
ACCEPT udp -- anywhere anywhere udp dpt:microsoft-ds
ACCEPT udp -- anywhere anywhere udp dpt:nfs
ACCEPT udp -- anywhere anywhere udp dpt:4002
ACCEPT udp -- anywhere anywhere udp dpt:32765
ACCEPT udp -- anywhere anywhere udp dpt:32766
ACCEPT udp -- anywhere anywhere udp dpt:32767
ACCEPT tcp -- anywhere anywhere tcp spt:domain
ACCEPT udp -- anywhere anywhere udp spt:domain
ACCEPT tcp -- anywhere anywhere tcp spt:sunrpc
ACCEPT udp -- anywhere anywhere udp spt:sunrpc
ACCEPT tcp -- anywhere anywhere tcp spt:netbios-ssn
ACCEPT udp -- anywhere anywhere udp spt:netbios-ssn
ACCEPT tcp -- anywhere anywhere tcp spt:https
ACCEPT udp -- anywhere anywhere udp spt:https
ACCEPT tcp -- anywhere anywhere tcp spt:microsoft-ds
ACCEPT udp -- anywhere anywhere udp spt:microsoft-ds
ACCEPT tcp -- anywhere anywhere tcp spt:submission
ACCEPT udp -- anywhere anywhere udp spt:submission
ACCEPT tcp -- anywhere anywhere tcp spt:nfs
ACCEPT udp -- anywhere anywhere udp spt:nfs
1 ответ
Есть настройки в sysctl
это определяет диапазоны портов NFS, доступных для соединений.
sunrpc.max_resvport = 1023
sunrpc.min_resvport = 650
Эти настройки определяют самый высокий и самый низкий порты, которые будут использоваться для установления соединений RPC (NFS)
Вы можете открыть эти порты или определить другой диапазон в зависимости от вашей системы. Вы получите отказ, если он попытается использовать порт, заблокированный брандмауэром или другой службой, использующей этот порт.
Редактировать:
Вы также можете увеличить / уменьшить этот диапазон. У меня есть сервер с 460 монтированными NFS в fstab
и он потерпит неудачу после 372 или около того. И когда я вручную монтировал один из неисправных, он монтировал его, но отключал один из рабочих монтирований. Я увеличил этот диапазон на 150, и все они смонтированы. Это не лучший способ сделать это. automounter
приходит на ум но работает.
Для внесения изменений вы отредактируете свой /etc/sysctl.conf
добавить строку вроде:
sunrpc.min_resvport = 900
Чтобы сделать изменение постоянным, если вам нужно изменить их. Помните, что если вы превысите 1024, то это "непривилегированные" порты, и обычные пользователи системы будут иметь к ним доступ по сравнению с - 1024.
Изменить 2:
В вашей команде монтирования NFS вы можете добавить следующее.
proto=tcp
- заставляет монтирование использовать TCP / IP
public
- обход portmapper
полностью и связывается с сервером NFS через порт 2049, если не указано иное
Так, mount nfs.test.com:/export /test
становится
mount -o proto=tcp ,public nfs.test.com:/export /test
РЕДАКТИРОВАТЬ 3
ОК - поехали!!! root@pressyrluck # ./nowhammies > /dev/please
Эта информация была lifted
copied
swiped
borrowed
от Sourceforge NFS
Некоторые из демонов, участвующих в обмене данными через nfs, уже связаны с портом. portmap всегда находится на порте 111 tcp и udp. nfsd всегда находится на порте 2049 TCP и UDP (однако, начиная с ядра 2.4.17, NFS через TCP считается экспериментальным и не предназначен для использования на производственных машинах).
Другие демоны, statd, mountd, lockd и rquotad, обычно перемещаются к первому доступному порту, о котором им сообщает портмейпер.
Чтобы заставить statd связываться с конкретным портом, используйте параметр -p portnum. Чтобы заставить statd отвечать на определенный порт, дополнительно используйте параметр -o portnum при его запуске.
Чтобы принудительно подключить mountd к определенному порту, используйте параметр -p portnum.
Например, чтобы иметь широковещательную рассылку statd порта 32765 и прослушивание порта 32766 и mountd listen для порта 32767, введите:
# statd -p 32765 -o 32766
# mountd -p 3276
lockd запускается ядром, когда это необходимо. Поэтому вам нужно передать параметры модуля (если он у вас собран как модуль) или параметры ядра, чтобы заставить lockd прослушивать и отвечать только на определенных портах.
Если вы используете загружаемые модули и хотите указать эти параметры в своем файле /etc/modules.conf, добавьте в файл следующую строку:
options lockd nlm_udpport=32768 nlm_tcpport=32768
Ради этого обсуждения давайте опишем сеть и настроим брандмауэр для защиты нашего сервера NFS. Наш сервер NFS - 192.168.0.42, наш клиент - только 192.168.0.45. Как и в приведенном выше примере, statd был запущен так, что он связывается только с портом 32765 для входящих запросов и должен отвечать на порт 32766. mountd принудительно связывается с портом 32767. Параметры модуля lockd установлены на связывание с 32768. nfsd конечно, на порту 2049, а portmapper на порту 111.
Мы не используем квоты.
iptables -A INPUT -f -j ACCEPT -s 192.168.0.45
iptables -A INPUT -s 192.168.0.45 -d 0/0 32765:32768 -p 6 -j ACCEPT
iptables -A INPUT -s 192.168.0.45 -d 0/0 32765:32768 -p 17 -j ACCEPT
iptables -A INPUT -s 192.168.0.45 -d 0/0 2049 -p 17 -j ACCEPT
iptables -A INPUT -s 192.168.0.45 -d 0/0 2049 -p 6 -j ACCEPT
iptables -A INPUT -s 192.168.0.45 -d 0/0 111 -p 6 -j ACCEPT
iptables -A INPUT -s 192.168.0.45 -d 0/0 111 -p 17 -j ACCEPT
iptables -A INPUT -s 0/0 -d 0/0 -p 6 -j DENY --syn --log-level 5
iptables -A INPUT -s 0/0 -d 0/0 -p 17 -j DENY --log-level 5
Первая строка говорит, что нужно принять все фрагменты пакета (кроме первого фрагмента пакета, который будет рассматриваться как обычный пакет). Теоретически, ни один пакет не пройдет до тех пор, пока он не будет повторно собран, и он не будет повторно собран, пока не будет пропущен первый фрагмент пакета. Конечно, существуют атаки, которые могут быть вызваны перегрузкой компьютера фрагментами пакета. Но NFS не будет работать правильно, если вы не пропустите фрагменты. См. Раздел 7 "Устранение неисправностей" для получения подробной информации.
Другие линии разрешают определенные соединения от любого порта на нашем клиентском хосте к определенным портам, которые мы сделали доступными на нашем сервере. Это означает, что если, скажем, 192.158.0.46 попытается связаться с NFS-сервером, он не сможет смонтировать или посмотреть, какие монтирования доступны.
С новыми возможностями закрепления портов, очевидно, намного проще контролировать, какие хосты могут монтировать ваши NFS-ресурсы. Стоит отметить, что NFS не является зашифрованным протоколом, и любой человек в той же физической сети может прослушивать трафик и собирать информацию, передаваемую назад и вперед.