개발노트

고즐의 개발 및 서버 개발 노트

소스설치한 webmin 도메인을 통한 ssl 접속가능하게 하기

# Webmin # Apache # ReverseProxy # SSL # RockyLinux

Security 2026.01.08 1일 전 24 회 읽음



서버를 관리하다 보면 편리함과 보안 사이에서 꽤 긴 줄다리기를 하게 됩니다. Webmin은 훌륭한 도구이지만, 소스 설치 버전(Source Install)을 사용하면서 SSL 보안까지 챙기려다 보면 예상치 못한 난관을 마주하곤 합니다. 단순히 인증서를 입히는 문제를 넘어, 아파치(Apache)와 Webmin 사이의 미묘한 주소 체계 갈등을 조율해야 하기 때문입니다.

특히 포트 번호를 직접 노출하지 않고 도메인만으로 깔끔하게 접속하려 할 때, 브라우저가 자꾸만 내부 포트로 되돌아가는 이른바 ‘포트 납치’ 현상은 많은 관리자를 지치게 만듭니다. 여기서는 Rocky Linux 9 환경을 기준으로, 이러한 엉킴을 풀고 안전하게 접속 경로를 다듬었던 과정을 차분히 정리해 둡니다.

보안을 위해 예시 도메인은 https://www.google.com/search?q=admin.mysite.com, 내부 포트는 8899로 가정하여 서술합니다.


아파치와 Webmin의 관계 설정

가장 먼저 선행되어야 할 것은 아파치에게 문지기 역할을 맡기는 일입니다. 외부에서는 443 포트(HTTPS)로 안전하게 접근하고, 서버 내부에서는 아파치가 Webmin이 있는 포트로 데이터를 조용히 전달하는 리버스 프록시(Reverse Proxy) 방식을 취합니다. 이 과정에서 중요한 점은 Webmin이 무심코 내뱉는 내부 포트 주소까지 아파치가 다시 잡아채어 올바른 도메인으로 바꿔주어야 한다는 것입니다.


아파치 설정 파일 구성

기존의 SSL 설정 파일(보통 ssl.conf) 내부에 Webmin을 위한 가상 호스트(VirtualHost)를 추가합니다. 이때 ProxyPassReverse 설정을 이중으로 잡아주는 것이 핵심으로 보입니다. 하나는 로컬 주소를 위해, 다른 하나는 Webmin이 리다이렉트할 때 노출될 수 있는 도메인 주소를 방어하기 위함입니다.

/etc/httpd/conf.d/ssl.conf (또는 해당 vhost 파일)
<VirtualHost *:443> ServerName https://www.google.com/search?q=admin.mysite.com

# SSL 인증서 경로 (Let's Encrypt 등)
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/[admin.mysite.com/fullchain.pem](https://admin.mysite.com/fullchain.pem)
SSLCertificateKeyFile /etc/letsencrypt/live/[admin.mysite.com/privkey.pem](https://admin.mysite.com/privkey.pem)

# 프록시 설정 (외부 443 -&gt; 내부 8899)
ProxyRequests Off
ProxyPreserveHost On

# 내부로 전달
ProxyPass / http://localhost:8899/

# 반환 주소 재작성 (중요: 두 가지 경우 모두 잡아야 함)
ProxyPassReverse / http://localhost:8899/
ProxyPassReverse / [http://admin.mysite.com:8899/](http://admin.mysite.com:8899/)

# 헤더 설정
RequestHeader set X-Forwarded-Proto "https"
</VirtualHost> 



Webmin 내부 설정 다듬기

아파치가 겉에서 보안을 책임져주기 때문에, Webmin 자체는 굳이 무거운 갑옷(SSL)을 입고 있을 필요가 없습니다. 오히려 내부에서 SSL을 켜두면 아파치와의 통신에서 충돌이 발생하거나 주소가 꼬이는 원인이 됩니다. 따라서 Webmin의 자체 SSL 기능은 끄되, 자신이 프록시 뒤에 있다는 사실을 인지하도록 설정 파일을 수정해야 합니다.


miniserv.conf 수정

소스 설치된 Webmin의 설정 파일인 /etc/webmin/miniserv.conf를 열어 몇 가지 항목을 조정합니다. SSL 강제 기능을 해제하고, 실제 접속자의 IP나 도메인을 신뢰하도록 만드는 과정입니다.

/etc/webmin/miniserv.conf
port=8899 listen=8899 ssl=0 ssl_enforce=0 no_trust_ssl=0 relative_redir=1 trust_real_ip=1 referers=https://www.google.com/search?q=admin.mysite.com 


config 파일 보완

추가적으로 /etc/webmin/config 파일에도 리다이렉트 관련 설정을 명시해두면, 로그인 직후나 페이지 이동 시에 뜬금없이 내부 포트가 주소창에 나타나는 현상을 방지하는 데 도움이 됩니다.

/etc/webmin/config 하단 추가
relative_redir=1 



권한 허용과 프로세스 재시작

설정 파일만 고쳤다고 해서 바로 적용되는 것은 아닙니다. 특히 Rocky Linux와 같은 RHEL 계열 운영체제는 SELinux라는 엄격한 보안 관리자가 지켜보고 있습니다. 아파치가 네트워크를 통해 다른 포트로 접속하려 할 때, 이를 허용해주는 절차가 필요합니다.


SELinux 및 방화벽 처리

아파치의 네트워크 연결 허용
setsebool -P httpd_can_network_connect 1 

마지막으로 변경된 설정을 적용하기 위해 서비스를 재시작합니다. 소스 설치 버전의 Webmin은 systemctl 명령어가 때로는 완벽하게 동작하지 않을 수 있습니다. 가장 확실한 방법은 현재 실행 중인 프로세스를 찾아 종료한 뒤, 시작 스크립트로 다시 깨우는 것입니다.


아파치 재시작
systemctl restart httpd

Webmin 프로세스 확인 및 종료 (PID 확인 후 kill)
ps -ef | grep miniserv.pl kill -9 [PID번호]

Webmin 시작 (설치 경로에 따라 다를 수 있음)
/etc/webmin/start 

이렇게 아파치와 Webmin, 그리고 운영체제의 보안 설정까지 모두 조율하고 나면, 비로소 포트 번호 없이 깔끔한 도메인 주소로 안전하게 서버를 관리할 수 있게 됩니다. 복잡해 보였던 과정도 하나씩 떼어놓고 보면 서로의 역할을 존중하며 연결하는 일련의 흐름인 듯합니다.

문의답변