활용하기

워드프레스 wp-admin 폴더 외부 접속 제한하기

워드프레스 wp-admin 폴더 외부 접근 차단


워드프레스를 사용하게 되면 /wp-admin 주소로 관리자 대시보드에 접근할 수 있게 됩니다.

그러나 이러한 공개적 주소를 사용하여 외부 공격자가 wp-admin 주소에 무단으로 접속하여 무차별 대입 공격(임의 패스워드 입력을 시도함으로서 관리자 권한을 취득하려는 공격) 시도를 할 수 있습니다.

따라서 관리자 페이지를 특정한 네트워크에서 접속할 수 있게 하거나 페이지 주소 자체를 변경하여 외부에서의 접근이 쉽지 않도록 예방해야 합니다.

이 포스트에서는 워드프레스 관리자 페이지를 차단하는 여러가지 방법에 대해 기술하였습니다.

 

 

플러그인 사용

워드프레스 플러그인을 사용하면 wp-admin 접속을 직접적으로 하지 못하도록 방지할 수 있습니다.

대표적으로 Hide My WP 플러그인이 있습니다. wp-admin 디렉토리와 wp-login.php 파일에 대한 접근 경로를 변경할 수 있는 이점이 있습니다.

 

 

서버에서 직접 수정 (HTTPD)

HTTPD(Apache 2)를 사용하여 웹 서비스를 구동 중인 경우 .htaccess 파일을 수정하여 쉽게 액세스 설정을 변경할 수 있습니다.

.htaccess 파일은 HTTPD 루트 디렉토리(최상단)에 위치해야 하며 워드프레스 파일 중 wp-config.php 또는 wp-login.php 파일이 존재하는 위치에 파일을 생성해주시면 됩니다.

(동일한 .htaccess 파일에 하단의 내용을 모두 추가할 것입니다.)

 

먼저 .htaccess 파일을 직접적으로 접근하지 못하도록 방지하는 내용입니다.

<FilesMatch "(\.htaccess)">
Order deny,allow
Deny from all
</FilesMatch>

 

다음으로 데이터베이스 접속 정보 등이 포함되어 있는 wp-config.php 파일에 대해 접근하지 못하도록 방지하는 내용입니다.

<files wp-config.php>
order allow,deny
deny from all
</files>

 

이제 wp-login.php 파일에 대해 특정 IP에서만 접근할 수 있도록 지정합니다. Allow from [IP Address] 와 같은 형식으로 지정 가능합니다.

<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 192.168.###.###
</Files>

 

모든 과정이 완료되었다면 HTTPD 서비스를 재기동합니다. 다음 명령어를 입력합니다.

# RedHat 계열 / CentOS
[root@localhost ~]# service httpd restart

# Debian 계열 / Ubuntu
[root@localhost ~]# service apache2 restart

 

 

서버에서 직접 수정 (Nginx)

이번에는 Nginx를 사용 중인 웹 서버에서 설정할 수 있는 방법입니다.

Server 블록 안쪽에 location 블록을 새로 추가합니다. 해당 블록에는 wp-admin 디렉토리와 wp-login.php 페이지가 주소에 포함되어 있을 경우 특정 IP 주소에 대해서만 접근할 수 있도록 구성되어 있습니다.

http {
... (생략)
    server {
        ... (생략)
        location ~ ^/((wp-admin/)$|(wp-login\.php)) {
            try_files       $uri $uri/ /index.php?$args;
            index index.html index.htm index.php;
            allow 192.168.1.###;
            allow 192.168.2.###;
            deny all;
        }
     ... (생략)
    }
}

allow [IP Address] 형식과 같이 입력하여 접속을 허용할 호스트 주소를 입력해주시면 됩니다. 이후 이 호스트 주소가 아닌 경우 모두 접근을 거부할 수 있도록 합니다.

 

모든 과정이 완료되었다면 Nginx 서비스를 재기동합니다. 다음 명령어로 설정을 다시 로드할 수 있습니다.

[root@localhost ~]# service nginx reload

 

 

JooTC

안녕하세요. 테크놀로지에 관심이 많은 블로거입니다.

Recent Posts

[iOS] Xcode ‘You do not have required contracts to perform an operation’ 해결

Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…

2주 ago

[안드로이드] INSTALL_FAILED_INSUFFICIENT_STORAGE 해결

INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…

6개월 ago

Zalgo 텍스트와 이를 방지하는 방법

인터넷 커뮤니티 사이트에서 게시글이나 댓글에 간혹 장난을 목적으로 작성된 특이한 글자를 볼 수 있습니다. 위…

8개월 ago

리눅스 kill, killall 명령어 – 특정 프로세스 종료하기

리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…

8개월 ago

JavaScript typeof null이 ‘object’인 이유

JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…

8개월 ago

Mocha Error: Resolution method is overspecified. 해결 방법

NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…

8개월 ago