Ubuntu 16.04 / phpMyAdmin / 특정 IP에서만 접속 가능하게 만드는 방법

Apache 2.4에서 phpMyAdmin에 접속할 수 있는 IP 주소를 제한하려면 phpMyAdmin 디렉터리의 접근 설정에 Require ip를 사용합니다. 허용할 주소를 지정하고 설정 문법을 검사한 뒤 Apache를 다시 로드하면, 해당 설정이 적용되는 경로에 대해서만 지정된 주소의 접속이 허용됩니다.

적용 범위와 준비 사항

이 글은 Ubuntu에서 패키지로 설치한 phpMyAdmin을 Apache 2.4가 직접 제공하고, 설정에 /usr/share/phpmyadmin 디렉터리가 사용되는 경우를 예로 듭니다. 설치 방식, 가상 호스트, 별칭과 설정 파일의 위치는 환경에 따라 다릅니다. Nginx나 컨테이너, 별도의 프록시로 제공하는 구성에는 이 예제를 그대로 적용하지 마세요.

Ubuntu 16.04 LTS의 표준 보안 지원은 2021년 4월, Ubuntu Pro 지원은 2026년 5월에 종료되었습니다. 추가 Legacy 지원의 제공 조건을 확인하고, 지원되는 버전으로 이전하는 계획을 세우세요. 자세한 일정은 Ubuntu 보안 유지 관리 일정에서 확인할 수 있습니다.

설정을 잘못 적용하면 관리자도 접속하지 못할 수 있습니다. 변경 전에 서버의 콘솔이나 SSH 접속 수단을 확보하고, 허용할 관리자의 실제 접속 IP와 phpMyAdmin이 사용하는 경로를 확인하세요. 인터넷을 통해 접속할 때는 일반적으로 관리 PC의 사설 IP가 아니라 서버가 보는 공인 IP가 필요합니다. VPN, 프록시, NAT와 IPv6 사용 여부에 따라 서버가 보는 주소가 달라질 수 있습니다.

현재 Apache 설정 확인과 백업

Apache 버전과 활성 설정에서 phpMyAdmin의 별칭과 디렉터리 설정을 확인합니다. 아래 파일이 없는 경우 설치 방식에 맞는 실제 설정 파일을 찾아야 합니다. 다음 검색 결과에는 활성화되지 않은 설정도 포함될 수 있으므로 활성 설정과 가상 호스트도 함께 확인하세요.

apache2 -v
sudo apache2ctl -S
sudo grep -R -n -i phpmyadmin /etc/apache2/conf-enabled /etc/apache2/sites-enabled

패키지 설정이 /etc/apache2/conf-available/phpmyadmin.conf에 있고 해당 설정이 활성화되어 있다면 변경 전에 백업합니다. 아래 백업 파일이 이미 있다면 덮어쓰지 않도록 다른 이름을 지정하세요.

sudo cp -a /etc/apache2/conf-available/phpmyadmin.conf /etc/apache2/conf-available/phpmyadmin.conf.before-ip-restriction

텍스트 편집기로 실제 설정 파일을 열어 <Directory /usr/share/phpmyadmin> 구역을 찾습니다. 예를 들어 다음 명령으로 편집할 수 있습니다.

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

허용할 IP 주소 설정

기존 phpMyAdmin 디렉터리 구역 안의 접근 허용 규칙을 확인한 뒤, 해당 구역에 적용되는 승인 규칙을 아래와 같이 설정합니다. 아래 주소는 설명용 예시이므로 반드시 관리자의 실제 주소로 바꾸세요. 기존 구역의 PHP 처리나 다른 필요한 설정은 유지합니다.

<Directory /usr/share/phpmyadmin>
    Require ip 192.0.2.10
</Directory>

위 블록은 접근 제어 부분을 보여 주는 예시입니다. 기존 디렉터리 구역 전체를 지우고 그대로 붙여 넣지 마세요. 같은 구역에 Require all granted와 Require ip를 나란히 두면 기본적으로 어느 하나가 허용해도 접속될 수 있으므로, 기존 승인 규칙을 검토하여 의도한 제한이 실제로 적용되게 해야 합니다. 다른 Directory·Location 구역이나 인증 설정이 결과에 영향을 줄 수도 있으므로 전체 구성을 확인하세요.

주소가 여러 개라면 공백으로 나열할 수 있습니다. 예를 들어 다음 규칙은 두 주소 중 하나와 일치할 때 허용합니다. 네트워크 범위를 지정하면 그 범위 전체가 허용되므로 꼭 필요한 범위만 지정하세요. IPv6 주소와 CIDR 표기 역시 지원합니다.

Require ip 192.0.2.10 198.51.100.25

기존 글의 Order, Deny, Allow는 Apache 2.4에서 호환성을 위해 제공되는 이전 방식입니다. 새 규칙과 이전 규칙을 무작정 섞지 말고, 기존 설정과 다른 인증 조건을 검토한 뒤 현재 방식으로 정리하세요. Apache의 접근 제어 문서와 Require ip 설명서에서 주소 형식과 적용 범위를 확인할 수 있습니다.

문법 검사, 적용과 접속 확인

  1. 파일을 저장한 뒤 다음 명령으로 전체 Apache 설정의 문법을 검사합니다. Syntax OK가 표시되지 않으면 오류의 파일과 줄을 확인하고 수정합니다. 문법 검사는 접근 정책이 의도대로 작동한다는 보장은 아닙니다.
sudo apache2ctl configtest
  1. 문법 검사에 성공하면 설정을 다시 로드하고 서비스 상태를 확인합니다. 서비스 이름은 배포판에 따라 다를 수 있습니다.
sudo systemctl reload apache2
sudo systemctl status apache2
  1. 허용된 실제 네트워크에서 phpMyAdmin의 기존 주소에 접속합니다. 접근 제어를 통과하면 로그인 화면이 표시될 수 있지만, 데이터베이스 로그인은 별도로 필요합니다.
  2. 허용 목록에 없는 별도의 네트워크에서도 같은 주소를 확인합니다. 해당 Apache 규칙이 적용되고 다른 오류가 없다면 일반적으로 403 Forbidden이 표시됩니다. 허용 주소에서도 차단되거나 허용되지 않은 주소에서 화면이 열린다면 서버 로그와 실제 적용 구역, 프록시 및 IP 주소를 확인하세요.

프록시 환경과 추가 보안

리버스 프록시나 로드 밸런서 뒤에 Apache가 있으면 Apache가 실제 사용자 대신 프록시의 IP를 볼 수 있습니다. 이 상태에서 프록시 주소를 허용하면 의도보다 많은 사용자가 접근할 수 있으므로 주의하세요. 실제 클라이언트 주소를 사용하려면 신뢰할 수 있는 프록시만 명시하는 구성이 필요합니다. 임의의 클라이언트가 보낸 전달 헤더를 그대로 신뢰하지 말고 Apache mod_remoteip 문서를 확인한 후 네트워크 구성에 맞게 설정하세요.

IP 제한은 phpMyAdmin 로그인이나 데이터베이스 권한 관리를 대체하지 않습니다. HTTPS를 사용하고 계정 권한을 필요한 범위로 제한하세요. 공인 IP가 자주 바뀌는 환경이라면 무작정 넓은 주소 범위를 허용하기보다 VPN 등 접근 경로를 검토하세요.

접속 문제와 설정 되돌리기

접속이 차단되면 관리자의 현재 공인 IP, IPv4와 IPv6 경로, 설정 파일이 활성화되어 있는지, 다른 구역의 승인 규칙이 적용되는지 확인합니다. Apache 오류 로그의 위치는 설정에 따라 다르며, Ubuntu의 기본 구성에서는 /var/log/apache2/error.log를 확인할 수 있습니다. 로그에 민감한 정보가 포함될 수 있으므로 공유할 때 주의하세요.

변경을 되돌려야 한다면 백업 이후 다른 사람이 수정한 내용이 없는지 먼저 비교하고, 백업한 파일을 원래 경로에 복원한 뒤 문법 검사와 다시 로드를 수행합니다. 기존 설정으로 복원하면 이전에 허용되던 접근도 다시 허용될 수 있으므로 복원 후 접근 범위를 확인하세요.

sudo cp -a /etc/apache2/conf-available/phpmyadmin.conf.before-ip-restriction /etc/apache2/conf-available/phpmyadmin.conf
sudo apache2ctl configtest && sudo systemctl reload apache2

문법 검사에서 오류가 발생하면 다시 로드하지 말고 설정을 수정하세요. 기존에 의도한 로그인과 접근 제한이 유지되는지도 허용된 환경과 허용되지 않은 환경에서 각각 확인합니다.