데몬 특정 포트 열기

데몬 특정 포트 열기

임시 포트 범위 내에서 임의의 포트를 사용하는 경우 특정 데몬에 대한 방화벽 인바운드 규칙을 어떻게 설정할 수 있습니까? Windows에는 사용자 정의 규칙 마법사가 있습니다. 데몬별 인바운드 규칙 트래픽을 허용하는 데 사용할 수 있는 유사한 기능이 LINUX 및 UNIX에 있습니까? 감사해요.

답변1

내 Debian Linux 10에는 iptables다음 모듈이 제공됩니다 owner.

root@avalon:~# iptables -m owner --help |tail -n4
owner match options:
[!] --uid-owner userid[-userid]      Match local UID
[!] --gid-owner groupid[-groupid]    Match local GID
[!] --socket-exists                  Match if socket exists
root@avalon:~# 

전용 사용자로 이 서비스를 배포할 수 있으면 필요한 것을 얻을 수 있습니다.

답변2

데몬의 프로세스 ID(pid)를 알고 있으면 방화벽 규칙을 동적으로 수정하는 스크립트를 쉽게 작성할 수 있습니다. 어떤 방화벽을 사용하고 있는지, "모두 허용 거부" 또는 "모두 허용 거부" 규칙 세트인지는 밝히지 않았지만 여기에 몇 가지 아이디어를 얻고 구축할 수 있는 기본 스크립트가 있습니다.

이 스크립트는 4000에서 5000 사이의 임의 TCP 포트에서 netcat 수신기를 시작합니다.

nc -l $((RANDOM%1000+4000)) &
echo $!
sleep 2 #avoid bad way to avoid a race condition.
DYNAMICPORT=`netstat -lpdn | grep $! |  awk '{print $4}'`. 

echo $DYNAMICPORT
0.0.0.0:4078

그런 다음 $DYNAMICPORT를 사용하여 그에 따라 방화벽 규칙을 동적으로 수정할 수 있습니다.

이 프로세스가 완료되면 동적으로 추가한 모든 규칙이 제거된다는 점에 유의하세요.

이 솔루션의 문제점은 데몬이 임시 포트 범위를 사용하기 때문에 정기적으로 실행해야 한다는 것입니다.

이 해결 방법의 문제 #1: 데몬이 포트를 열거나 닫는 시간과 스크립트가 포트를 발견하는 시간 사이에 여러 가지 경쟁 조건이 발생할 수 있습니다.

문제 #2: 스크립트에서 iptables 규칙 세트를 동적으로 관리하면 문제가 발생할 수 있습니다.

문제 #3: 데몬이 포크되고 해당 포크가 포트를 여는 경우 이 스크립트는 실패합니다.

문제 #4: 데몬이 계속해서 수신 대기 포트를 열면 스크립트가 계속 실행되어야 하는데 이는 번거로운 작업입니다.

문제 #5: 더 이상 수신하지 않고 활성 상태인 수신 포트를 추적하는 것은 까다로우므로 방화벽 규칙을 삭제할 수 없습니다.

관련 정보