nfs 포트고정시키기(방화벽 사용을 위함)

  • 등록 2017.07.12 11:47:33
크게보기

출처는 http://www.ysy2080.com/uribury/1170


NFS?
NFS는 Network File System의 약어로 다른 호스트에 있는 파일 시스템의 일부를 자신의 디렉토리처럼 사용할 수 있도록 해주는 것이다. 즉 하나의 서버에 디스크를 집중 관리하고 그것을 공유하여 나머지 시스템들이 사용할 수 있게 해주는 것이다.

1) nfs설정을 시작하기전에 nfs패키지들이 설치되어있는지 확인해보자

rpm -qa portmap

rpm -qa nfs-utils

대부분 설치되어있으며, 설치가 안되어있을경우 간단히 yum install portmap nfs-utils

2)portmap과 nfs를 시작한다
/etc/init.d/portmap start
/etc/init.d/nfs start
※반드시 portmap부터 시작 후 nfs를 시작해야 된다
nfs부터 시작 할 경우
NFS 쿼터를 시작 중: 서비스를 등록할 수 없습니다: RPC: 받을 수 없음; errno = 연결이 거부됨
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp 에러메시지 출력됨


3) NFS 서버의 공유 목록을 관리하는 파일은 /etc/exports 파일이다. 이 파일을 편집하여 공유 목록을 관리하게 된다.

설정형식 : 공유디렉토리                     접근할 호스트(옵션)

ex) /backup   121.156.48.157(rw,all_squash)
/backup디렉토리를 클라이언트(121.156.48.157) IP에서 접급할 수 있다

설정옵션
rw : 읽기, 쓰기 가능
ro : 읽기만 가능
secure : 클라이언트 마운트 요청시 포트를 1024 이하로 한다.
noaccess : 엑세스 거부
root_squach : 클라이언트의 root가 서버의 root 권한을 획득하는 것을 막는다.
no_root_squash : 클라이언트의 root와 root를 동일하게 한다.
sync : 파일 시스템이 변경되면 즉시 동기화 한다.
all_squach : root를 제외하고 서버와 클라이언트의 사용자를 동일한 권한으로 설정 한다.
no_all_squach : root를 제외하고 서버와 클라이언트의 사용자들을 하나의 권한을 가지도록 설정한다.

부팅시 자동으로 올라오도록 설정
chkconfig --level 3 nfs on
chkconfig --level 3 portmap on

exportfs 명령어를 이용하여 /etc/exports 파일에 설정한 공유 목록이 정상적으로 공유가 되는지 확인
[root@ns etc]# exportfs -v
/backup         121.156.48.157(rw,wdelay,root_squash,all_squash,no_subtree_check,anonuid=65534,anongid=65534)

4) nfs포트는 portmap(111)과 rpc.nfs(2049)를 제외하고서는 모두 랜덤방식으로 포트가 변경되기때문에 방화벽을 사용 할 경우 포트를 고정시켜주어야 한다. (참골치아프다 --'')

현재포트를 확인하려면 rpcinfo -p로 확인 할 수있다. 랜덤으로 되어있을텐데 귀찮게 뭐하러 확인하나;;;

portmap(111) rpc.nfs(2049)를 제외한 나머지 포트는 고정시키자
rpc.statd 4000
rpc.lockd 4001
rpc.mountd 4002
rpc.rquotad 4003
포트번호는 상관없으나 대부분이렇게 고정하므로 나역시도...

rpc.statd포트를 4000번으로 고정
/etc/init.d/nfslock에서 74번줄을 변경
  # See if we have an HA-callout program specified
  [ -n "$STATD_HA_CALLOUT" ]
    && STATDARG="$STATDARG -H $STATD_HA_CALLOUT"
  daemon rpc.statd -p 4000  <---이 부분

/etc/sysconfig/nfs 파일에서(없으면 생성 할 것!!) rpc.lock과 rpc.mountd포트를 등록한다
LOCKD_TCPPORT=4001
LOCKD_UDPPORT=4001
MOUNTD_PORT=4002


/etc/services에서 4003포트를 rquotad로 변경
ex)
rquotad 4003/tcp          # rpc.rquotad tcp port
rquotad 4003/udp          # rpc.rquotad udp port

nfs를 다시시작하여 적용되었는지 확인 (netstat는 길어서 생략)
[root@ns etc]# rpcinfo -p
   프로그램 버전 원형   포트
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp   4000  status
    100024    1   tcp   4000  status
    100011    1   udp   4003  rquotad
    100011    2   udp   4003  rquotad
    100011    1   tcp    615  rquotad
    100011    2   tcp    615  rquotad
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp   4001  nlockmgr
    100021    3   udp   4001  nlockmgr
    100021    4   udp   4001  nlockmgr
    100021    1   tcp   4001  nlockmgr
    100021    3   tcp   4001  nlockmgr
    100021    4   tcp   4001  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100005    1   udp   4002  mountd
    100005    1   tcp   4002  mountd
    100005    2   udp   4002  mountd
    100005    2   tcp   4002  mountd
    100005    3   udp   4002  mountd
    100005    3   tcp   4002  mountd

그렇다면 이제 iptables에 4000 ~ 4004번까지 tcp,udp를 등록해주자

-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 4000:4004 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 4000:4004 -j ACCEPT

등록을 마쳤으면 당연히 방화벽재시작

5) 드디어 설정은 끝났다 알고나면 설정도 별건아닌거 같다 (뭐든지 알고나면 별거 아니라는...)
※클라이언트서버도 portmap을 실행시켜주어라!!

mount -t nfs 222.122.13.146:/backup /home/ysy2080/nfs

Filesystem            Size  Used Avail Use% Mounted on
/dev/hda2             2.0G  624M  1.3G  34% /
/dev/hda1              99M   36M   59M  38% /boot
tmpfs                 252M     0  252M   0% /dev/shm
/dev/hda9              12G  1.2G  9.5G  11% /home
/dev/hda8             996M   34M  911M   4% /tmp
/dev/hda7             7.6G  2.5G  4.8G  34% /usr
/dev/hda6             7.6G  2.0G  5.3G  27% /usr/local
/dev/hda5             7.6G  1.1G  6.2G  15% /var

222.122.13.146:/backup
                      147G  3.6G  136G   3% /home/ysy2080/nfs

드디어 성공!!

※ mount시 error

mount: mount to NFS server '222.122.13.146' failed: RPC Error: Program not registered.

2시간만에 구글링으로 알아냈다....;;;

hosts.allow hosts.deny파일이 604이상이 되야된다;;;



NFS 주요 데몬
rpc.mountd
* NFS 마운트 데몬이다.
* /etc/exports 설정에 따라 클라이언트의 마운트 요청을 처리한다.
rpc.nfsd
* 클라이언트가 rpc.mountd에 접속이 유지되면, rpc.nfsd를 사용하여 클라이언트의 요구에 따라 처리한다.
* /etc/exports 설정에 따라 클라이언트는 다양한 작업을 할 수 있다.
rpc.lockd
* 파일 잠금과 관련된 데몬으로 현재 사용 중인 파일을 다른 사람이 사용할 수 없게 잠그는 역할을 한다.
rpc.startd
* 파일 잠금과 해제의 역할을 한다.
 
Portmap
 RPC(Remote Procedure Call) ㅍ로그램을 port(tcp/udp)에 매핑시켜주는 데몬이다.
NFS를 사용하려면 꼭 필요한 데몬이다.
 RPC를 사용하는 프로그램(NFS)이 시작되면 portmap은 서비스를 제공할 port를 portmap에 등록시킨다.
portmap은 Time Service를 필요로 한다.
   (Time Service는 xinetd 데몬에 포함되어 있다.)
portmap이 자신의 운영체제에 설치되어 있는지 확인하자.
노랑배 kosthb@gmail.com
Copyright @2011 mediaon Corp. All rights reserved.

사이트에 관련하여 연락은 메일로 주세요. kosthb골뱅이gmail.com Copyright 2011 mediaon. All rights reserved.