실제로 iptables 규칙이 지워지지 않으면 원격 NFS 공유를 마운트하려는 시도가 시간 초과로 인해 실패합니다. iptables 규칙을 재설정한 후 NFS 원격 서버를 올바르게 마운트할 수 있습니다.
원격 NFS 서버에 대한 액세스를 허용하는 iptables 규칙은 무엇입니까?
저는 rw,_netdev,mountproto=tcp
설치 옵션으로 사용하고 있습니다.
답변1
NFSv4를 사용하는 경우 허용해야 하는 유일한 포트는 2049/TCP(또는 양쪽 끝에서 지원되고 이를 사용하도록 선택한 경우 SCTP)입니다.
따라서 클라이언트의 iptables 규칙은 다음과 같습니다.
-A INPUT -s <NAS_SERVER_IP_ADDR>/32 -p tcp --sport 2049 -j ACCEPT
-A OUTPUT -d <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 2049 -j ACCEPT
NFSv3 이하를 사용하는 경우 추가 포트 수를 허용해야 합니다.
- 포트 111(
portmapper
또는rpcbind
), TCP 및/또는 UDP. - NFS 파일 잠금 서비스용 포트(
lockd
또는 )nlockmgr
, 일반적으로 4045이지만 다를 수 있음 - NFS 상태/복구 서비스에 사용되는 포트(
rpc.statd
) - NFS 마운트 데몬용 포트(
rpc.mountd
)
마지막 세 가지의 문제점은 과거에는 이러한 포트 번호가 일반적으로 동적으로 할당되었으며 포트 111의 portmapper
/ 서비스를 rpcbind
사용하여 해당 포트를 찾았다는 것입니다. 이로 인해 방화벽 설정이 어려워지므로 최신 Linux 시스템에서는 이러한 서비스에 대해 고정된 포트 번호를 구성할 수 있습니다.이들 중 대부분은 NFS 서버 측에서 구성이 필요합니다., 그러나 rpc.statd
NFS 클라이언트와 서버 모두에 있어야 합니다.
Linux에서 파일 잠금 서비스는 일반적으로 lockd
커널 모듈에 의해 처리되므로 해당 포트 구성은 커널 모듈 옵션의 형태를 취합니다. 배포판에 더 구체적인 구성 방법이 아직 포함되어 있지 않은 경우 언제든지 파일을 만들고 /etc/modprobe.d/nfs-options.conf
다음 줄을 입력할 수 있습니다.
options lockd nlm_udpport=4045 nlm_tcpport=4045
(적어도 HP-UX 11.31 및 Solaris에서는 NFS 잠금을 위해 기본적으로 포트 4045를 사용하므로 이것이 포트 번호 4045로 표준화해야 하는 또 다른 이유입니다.)
NFS 설치가 서버 또는 클라이언트 재시작을 정상적으로 처리하도록 하려면 rpc.statd
NFSv3 또는 NFSv2 설정을 허용하는 것이 중요합니다 . 배포판에서 데몬을 시작하는 방법을 이해하고 이를 수행하는 더 구체적인 방법이 없는 경우 데몬을 시작하는 데 사용되는 명령줄 -p 4046
에 추가하여 고정된 포트 번호를 사용하도록 하십시오.rpc.statd
rpc.mountd
NFSv3 또는 NFSv2의 또 다른 중요한 서비스입니다. -p 4047
배포판에 NFS 서비스를 구성하는 더 구체적인 방법이 없으면 데몬을 시작하는 명령줄에 추가하여 고정 포트를 사용하도록 데몬을 구성 할 수도 있습니다 . 마운트 옵션을 이미 지정했으므로 mountproto=tcp
UDP 사례를 재정의할 필요가 없습니다.
RedHat은 모든 NFS 포트 설정을 /etc/sysconfig/network
RHEL 및 관련 배포판으로 중앙 집중화합니다. 다음 행을 다음에 추가하기만 하면 이러한 모든 설정을 얻을 수 있습니다 /etc/sysconfig/network
.
LOCKD_TCPPORT=4045
LOCKD_UDPPORT=4045
STATD_PORT=4046
MOUNTD_PORT=4047
Debian 및 관련 제품에서는 rpc.statd
변수를 설정하여 파일에 포트를 지정할 수 있습니다./etc/default/nfs-common
STATDOPTS
STATDOPTS="-p 4046"
rpc.mountd
마찬가지로 RPCMOUNTDOPTS
다음 변수를 설정하여 포트 번호를 구성 할 수 있습니다 /etc/default/nfs-kernel-server
.
RPCMOUNTDOPTS="-p 4047"
이러한 구성 후에 필요한 NFS 클라이언트 iptables 규칙은 다음과 같습니다.
-A INPUT -s <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 111 -j ACCEPT # incoming portmapper requests
-A INPUT -s <NAS_SERVER_IP_ADDR>/32 -p tcp --sport 2049 -j ACCEPT # incoming NFS protocol
-A INPUT -s <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 4046 -j ACCEPT # for reboot detection and file lock recovery
-A OUTPUT -d <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 111 -j ACCEPT # outgoing portmapper requests
-A OUTPUT -d <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 2049 -j ACCEPT # main NFS port
-A OUTPUT -d <NAS_SERVER_IP_ADDR>/32 -p tcp --dport 4045:4047 -j ACCEPT # lockd, statd, mountd
보시다시피 NFSv4는 NFSv3 및 이전 버전보다 방화벽을 더 쉽게 통과합니다.
실제로 NFSv2의 고유한 파일 크기 제한은 2GB이므로 현대적인 용도로 사용하기에는 너무 작으므로 사용하지 않는 것이 좋습니다.
답변2
해결책은 파일에 2줄을 추가하는 것입니다 /etc/iptables.rules
.
해당 섹션 바로 아래 ICMP
:
#### NAS [IN,OUT]
-A INPUT -i eth0 -s NAS_SERVER_IP_ADDR/32 -j ACCEPT
-A OUTPUT -o eth0 -d NAS_SERVER_IP_ADDR/32 -j ACCEPT