개발노트

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

Webmin 보안 설정: 외부 차단과 OTP 적용 Webmin 해킹 방어: 접속 제한부터 2단계 인증까지

# Webmin # Apache # 리버스프록시 # OTP # 서버보안

Server 2026.01.08 1일 전 25 회 읽음


외부에서 서버를 급하게 접속하여 재시작이나 상태 확인을 위해 webmin을 사용하고 있습니다. 그렇지만 외부의 공격이나 접근에 대해 안전할 수 없기에 로그인 아이디 및 비밀번호 확인 후에 OTP를 추가하여 안정성을 높이는 방법입니다.


편리함과 보안 사이, 도메인 연결의 시작

서버를 관리하다 보면 터미널 앞에만 앉아 있을 수는 없는 노릇입니다. 때로는 이동 중에 모바일로 급하게 상태를 확인하거나 설정을 변경해야 할 순간이 찾아오기 때문입니다. 이러한 필요에 의해 Webmin을 도메인(aaa.abc.kr)으로 연결하려는 시도가 시작된 것으로 보입니다.

하지만 7603번과 같은 관리자용 포트를 외부에 그대로 노출하는 것은 보안상 부담스러운 일입니다. 누구나 포트 번호만 알면 접속을 시도할 수 있기 때문입니다. 이를 해결하기 위해 방화벽에서 해당 포트는 닫아두고, 웹 서버인 아파치(Apache)가 대신 요청을 받아 내부로 전달해 주는 '리버스 프록시' 방식을 선택한 것은 매우 합리적인 결정으로 해석됩니다.

이 방식은 겉으로는 일반적인 웹사이트(443 포트)처럼 보이지만, 실제로는 내부의 Webmin과 안전하게 통신하게 해 줍니다. 아파치 설정 파일에 아래와 같은 내용을 추가함으로써, 도메인 접속은 허용하되 직접적인 포트 접근은 차단하는 구조가 완성됩니다.

<VirtualHost *:443>
    ServerName aaa.abc.kr

    SSLEngine on
    SSLProxyEngine on
    ProxyRequests Off
    ProxyPreserveHost On

    # 아래 두 줄이 핵심입니다 (중간에 엔터 치면 안 됨)
    ProxyPass / https://localhost:7777/
    ProxyPassReverse / https://localhost:7777/
</VirtualHost>



내부의 문지기를 설득하는 과정

외부에서의 길은 닦였으나, Webmin 자체의 보안 정책이 낯선 방문자를 경계하는 상황이 발생하기도 합니다. 특히 모바일 환경에서는 접속할 때마다 IP 주소가 바뀌기 마련인데, Webmin이 특정 IP만 허용하도록 설정되어 있다면 'Access Denied'라는 메시지와 마주하게 됩니다. 이 경우, IP 접근 제어 목록을 수정하여 유연함을 더해줄 필요가 있습니다.

/etc/webmin/miniserv.conf 파일 수정
allow=127.0.0.1 (주석 처리하거나 삭제)

또한, 도메인을 통해 우회 접속을 시도할 때 Webmin은 이를 비정상적인 접근으로 오인하여 보안 경고를 띄우기도 합니다. 이는 서버가 요청의 출처를 신뢰하지 못해 발생하는 현상으로 보입니다. 설정 파일에 해당 도메인을 신뢰할 수 있는 목록(Trusted Referrers)으로 등록해 줌으로써, 비로소 경고창 없이 매끄러운 접속이 가능해집니다.


/etc/webmin/config 파일 수정
referers=webmin.goz.kr 



마지막 안전장치, 2단계 인증의 적용

접속이 원활해졌다는 것은 반대로 말하면, 아이디와 비밀번호만 알면 누구든 관리자 권한을 가질 수 있다는 의미이기도 합니다. 로그인 페이지가 외부에 노출된 상태에서는 무차별 대입 공격(Brute Force)에 대한 우려가 남을 수밖에 없습니다. 이에 대한 가장 확실한 대안으로 OTP(One Time Password) 도입이 검토되었습니다.

Webmin에서 Google Authenticator와 같은 표준 OTP를 사용하기 위해서는 서버 내부에 QR코드를 생성하고 인증을 처리할 수 있는 기반 도구들이 필요합니다. 리눅스 배포판에 따라 기본 저장소에 해당 모듈이 없는 경우가 있어, EPEL 저장소를 추가하거나 CPAN을 통해 직접 빌드하는 과정이 수반되기도 합니다.

dnf install epel-release -y 
dnf install perl-Authen-OATH -y 
dnf install qrencode -y 



철통 같은 보안의 완성

필요한 도구들이 모두 갖춰지면 Webmin 설정 메뉴에 비로소 '등록(Enroll)' 버튼이 모습을 드러냅니다. 스마트폰 앱으로 화면에 뜬 QR코드를 스캔하고, 생성된 여섯 자리 숫자를 입력하여 검증을 마치는 순간, 서버는 아이디와 비밀번호 외에도 사용자가 소유한 기기의 인증을 요구하게 됩니다.


관리의 유연함과 보안의 견고함

이제 언제 어디서든 모바일로 편리하게 서버를 제어할 수 있으면서도, 해커가 비밀번호를 알아낸다 한들 OTP 없이는 절대 접근할 수 없는 환경이 구축되었습니다. 물리적인 포트 차단에서 시작해 논리적인 인증 강화로 이어진 이 과정은, 편의성과 보안이라는 두 마리 토끼를 모두 잡은 모범적인 사례로 남을 듯합니다.

문의답변