워드프레스를 사용하게 되면 /wp-admin
주소로 관리자 대시보드에 접근할 수 있게 됩니다.
그러나 이러한 공개적 주소를 사용하여 외부 공격자가 wp-admin
주소에 무단으로 접속하여 무차별 대입 공격(임의 패스워드 입력을 시도함으로서 관리자 권한을 취득하려는 공격) 시도를 할 수 있습니다.
따라서 관리자 페이지를 특정한 네트워크에서 접속할 수 있게 하거나 페이지 주소 자체를 변경하여 외부에서의 접근이 쉽지 않도록 예방해야 합니다.
이 포스트에서는 워드프레스 관리자 페이지를 차단하는 여러가지 방법에 대해 기술하였습니다.
워드프레스 플러그인을 사용하면 wp-admin
접속을 직접적으로 하지 못하도록 방지할 수 있습니다.
대표적으로 Hide My WP 플러그인이 있습니다. wp-admin
디렉토리와 wp-login.php
파일에 대한 접근 경로를 변경할 수 있는 이점이 있습니다.
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를 사용 중인 웹 서버에서 설정할 수 있는 방법입니다.
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
Xcode에서 iOS 애플리케이션을 빌드(Archive)하고 App Store Connect에 앱을 업로드하는 도중, 아래와 같은 에러가 발생하면서 더…
INSTALL_FAILED_INSUFFICIENT_STORAGE 문제 안드로이드 스튜디오에서 에뮬레이터를 실행하고 개발중인 애플리케이션을 실행하려 하면 로그 창에 아래와 같이 표시되면서…
리눅스 명령어 - kill, killall 리눅스 kill 명령어는 특정 프로세스를 종료해주는 명령어입니다. 백그라운드에서 실행되고 있는…
JavaScript는 역사가 긴 스크립트 프로그래밍 언어입니다. 세월이 흐르면서 많은 자바스크립트 표준이 만들어졌고, 현재는 많은 문법적…
NodeJS 테스트 프레임워크인 Mocha는 비동기 테스트를 지원합니다. 간혹 특정 테스트 스크립트를 작성하고 실행하면 아래와 같이…