우리 환경의 여러 Linux 서버에서 lsof -i 출력을 보고 rpcbind가 TCP 및 UDP 프로토콜에서 일반적으로 사용되는 포트 111을 열었지만 뚜렷한 이유 없이 포트 873 UDP도 열었음을 발견했습니다. 이는 포트 873이 rsyncd에 할당되어 있고 정책에 따라 rsync가 ssh 전송을 사용하도록 요구하기 때문에 보안 플래그가 발생합니다(rsyncd는 암호화를 수행하지 않고 신뢰 관계를 통해서만 인증함).
일반적으로 RPC 프로세스가 의심되면 어떤 서비스가 실제로 포트를 열고 있는지 확인하기 위해 rpcinfo -p를 살펴봅니다. 그러나 이러한 서버에서는 portmapper에 대해 포트 111만 표시되고 status 및 nlockmgr에 대해 높은 번호의 포트만 표시되지만 포트 873은 표시되지 않습니다.
나는 많은 버그 보고서를 보았습니다(RHEL 포함:https://bugzilla.redhat.com/show_bug.cgi?id=103401그리고 커널:https://patchwork.kernel.org/patch/10153769/) 범인은 glibc의 findresvport() 함수라고 말하지만 엄청난 혼란을 일으키지 않고는 해당 함수를 변경할 수 있는 방법이 없습니다. 세 가지 다른 솔루션이 있습니다.
- RHEL은 rpcbind가 시작되기 전에 이러한 포트를 사전 할당하는 portreserve라는 데몬을 제공합니다. 이는 보안상의 이유로 원하지 않는 포트가 열려 있음을 보장하므로 도움이 되지 않습니다.
- 데비안과 그 후손은 /etc/bindresvport.blacklist에 구성 파일을 구현합니다. 이는 문서화되지 않은 것처럼 보이고 배포판에 의해 밟히기 쉽다는 점을 제외하면 우리의 목적에 이상적입니다.
- 배포판의 nfs-utils 패키지 업스트림은 /etc/services를 따르며 등록된 포트에 바인딩되지 않습니다.
하지만 내가 확인하고 싶은 것은 rpcbind가 처음에 추가 포트를 여는 이유는 무엇이며, 이러한 일이 발생하지 않도록 하려면 어떻게 해야 합니까? 지금까지 확인한 모든 내용에 따르면 포트가 시작 시 무작위로 할당되고 서버를 다시 시작하면 다른 포트로 푸시되는 것으로 표시되지만 그렇게 하는 방법은 아닙니다.
답변1
실제로 이 문제는 Debian 10 또는 RHEL 8이 아닌 Debian 9 또는 RHEL 7 이전 버전에서만 발생합니다. 무작위 권한이 있는 UDP 포트 바인딩을 초래하는 기능은 rpcbind 1.2.5(0.2.3 및 0.2 이후 버전)에서 비활성화되었습니다. 4.
데비안 10.1+부터 시작/usr/share/doc/rpcbind/README.Debian
:
버전 1.2.5부터 업스트림은 보안상의 이유로 기본적으로 원격 호출 기능을 끄고 이를 활성화하기 위해 빌드 시 구성 플래그를 추가했습니다.
이 기능을 사용하면 rpcbind가 임의의 수신 대기 포트를 열게 됩니다.. 원격 호출이 꺼지면 rpcbind는 브로드캐스트 쿼리 수신을 중지하여 NIS 시스템과 같이 이 기능에 의존하는 시스템에 손상을 입힙니다.
Debian 시스템에서는 명령줄 매개변수 "r"을 사용하여 런타임에 원격 호출을 켤 수 있습니다. 자세한 내용은 rpcbind(8)를 참조하십시오.
Debian 9에서 업그레이드를 확인(강제)할 수 있습니다.rpcbind
Debian 10까지의 버전은 바인딩된 포트의 추가 권한을 잃기에 충분합니다. -r
데비안에서 제공하는 새로운 옵션을 사용하세요데비안 패치(주로 재컴파일 --enable-rmtcalls
및 런타임 옵션 추가) 바인딩된 UDP 포트에 더 이상 권한이 부여되지 않는 한 기능을 "복원"합니다.
이 원격 통화 기능을 사용하는 것은 rpcinfo -b
(또는코디)는 모든 LAN의 포트 매퍼에 브로드캐스트 쿼리를 보냅니다. 예를 들어, 다음이 발견되었습니다.원격 프로시저 호출 프로그램100005 버전 3(NFSv3용)산):
rpcinfo -b 100005 3
그러면 브로드캐스트가 포트 111/UDP로 전송되고 응답 portmapper는 추가 바인딩된 UDP 포트를 소스로 사용합니다(일반적인 방화벽 비우호적 접근 방식에서는 다음과 같습니다).TFTP). 이 포트가 없으면 응답하지 않지만 직접 유니캐스트 쿼리는 평소처럼 포트 111/UDP에서 직접 응답할 수 있습니다.