NFS и Firewall в Slackware

D3viL аватар

Погода нас не радует -- холодно. А холодно потому что зима :)
Поэтому Пермские сатанисты, линуксойды и члены НГЦ сидят дома строят коварные планы по захвату вселенной, порабощению человечества и занимаются другой ерундой, различного рода.

Вот и я в очередной раз обновил систему и мне пришлось снова пробрасывать NFS через фаервол и заново перечитывать маны.
Чтобы избежать такой участи в следующий раз, я напишу здесь небольшое, пошаговое руководство, даже не руководство а заметочку.

UPD: Всё написание заняло у меня примерно месяц :)

Как мы знаем portmaper назначает для rpcbind и mountd порты случайным образом, это осложняет "проброс" NFS через фаервол.
Но, не стоит отчаиваться :) Порты можно указать и вручную.

Для этого выполним команду rpcinfo -p и посмотрим, на какие порты настроены наши утилиты.


user@gate:~$ sudo rpcinfo -p
Password:
   прог-ма верс прото   порт
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp    865  status
    100024    1   tcp    865  status
    100011    1   udp    863  rquotad
    100011    2   udp    863  rquotad
    100011    1   tcp    863  rquotad
    100011    2   tcp    863  rquotad
    100003    2   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100021    1   udp  32770  nlockmgr
    100021    3   udp  32770  nlockmgr
    100021    1   tcp  42639  nlockmgr
    100021    3   tcp  42639  nlockmgr
    100005    1   udp    861  mountd
    100005    1   tcp    861  mountd
    100005    2   udp    861  mountd
    100005    2   tcp    861  mountd
    100005    3   udp    861  mountd
    100005    3   tcp    861  mountd

Затем добавим их в /etc/services, чтобы потом не запутаться при чтении логов.


user@gate:~$ grep NFS /etc/services
mountd          861/udp                 # NFS mountd
mountd          861/udp                 # NFS mountd
rquotad         863/udp                 # NFS rquotad
rquotad         863/tcp                 # NFS rquotad
status          865/udp                 # NFS status (listen)
status          865/tcp                 # NFS status (listen)
status          866/udp                 # NFS status (send)
status          866/tcp                 # NFS status (send)
nfsd            2049/tcp   nfs          # NFS server daemon
nfsd            2049/udp   nfs          # NFS server daemon
lockd           4045/udp   # NFS lock daemon/manager

После подготовки исправим /etc/rc.d/rc.nfsd

Назначим постоянный порт для quota daemon:


  if [ -x /usr/sbin/rpc.rquotad ]; then
    echo "  /usr/sbin/rpc.rquotad -p 863"
    /usr/sbin/rpc.rquotad -p 863
  fi

И для mount daemon:


  if [ -x /usr/sbin/rpc.mountd ]; then
    echo "  /usr/sbin/rpc.mountd -p 861"
    /usr/sbin/rpc.mountd -p 861
  fi

Далее правим /etc/rc.d/rc.rpc должно быть так :) :


 if ! ps axc | grep -q rpc.statd ; then
   echo "Starting RPC NSM (Network Status Monitor):  /sbin/rpc.statd -p 865 -o 866"
   /sbin/rpc.statd -p 865 -o 866
 fi

и в /etc/modprobe.conf добавляем строчку:


options lockd nlm_udpport=4045 nlm_tcpport=4045

Затем правим скрипт фаервола у меня это /etc/rc.d/rc.firewall.
Необходимо открыть UDP и TCP: 861, 863, 2049 порты, на локальный интерфейс.

Обновляем цепочки в фаерволе и рестартуем демоны.

Готово :)