December 29, 2025

루트 없는 포트 80/443 사용하기 방법: 방화벽으로

유닉스는 루트만 1024이한 포트를 사용할 수 있어요. 근데 인터넷 듣기 위험해요: 이 프러그램이 보안 취약 있으면 나쁜 넘들이 루트 권한을 받을 수 있어요. 그래서 비루트로 1024이한 포트를 사용한 방법 필요해요.

잘 아는 방법은:

  • `setuid`과 `setgid`로 포트 바인딩 하기 후에 일반 사용자 바꼬기 보텅 권한 해제해요.

  • 자근 유틸리티 privbind는 모든 프로그램 1024이한 포트를 사용 권한으로 비루트로 시작해요.

  • 리눅스의 CAP_NET_BIND_SERVICE capability 프로그램에게 권한을 해요.

  • Docker 아니면 다른 컨테이너는 포트과 사용자 옵션이 있어요.

피밀
Figure 1. 피밀

이 브러그 글이 방화벽로 해결할게요. 방화벽의 규칙은 라우팅로 1024이한 포트가 다른 보통 포트에 바꿔요. 제가 iptable 사용해요. 근데 nftables로도 또 할 수 있을 것 같아요.

iptable 교직이 prerouting에 포트를 바꿔요:

HTTP_SRC=80
HTTP_DEST=8080
sudo iptables -t nat -I PREROUTING -p tcp  -i eth0  --dport $HTTP_SRC -j REDIRECT --to-ports $HTTP_DEST

끝!!! 이 쉬운 규칙이 포트 80에서 포트 8080에게 보낼 거예요. 그리고 이 규직이 아직 Linux-시각에 추가해야 돼요. 벌써 다른 방화벽 규직 있으면 저기에 추가하세요. 아니면 제가 자근 oneshot systemd 서비스 했어요.

Tags: 한국어 Unix Linux