여기에서는 워드프레스 보안을 강화하기 위해 무작위적인 워드프레스 로그인 시도를 막을 수 있는 워드프레스 로그인 주소 변경 방벙 5가지에 대해서 살펴보고 가장 나은방법이 무엇인지 살펴봤습니다.
CMS를 적용한 사이트 중 워드프레스 사이트가 30%에 달한다는 통계가 있을 정도로 워드프레스 사이트가 많기 때문에 그만큼 워드프레스를 타겟으로 한 해커들의 공격도 많습니다.
이러한 해커들의 공격에 대비해 Fail2Ban을 이용해 무작위적인 ID와 비밀번호를 대입해 워드프레스 로그인을 시도하는 ip들을 Block하는 기능을 추가했습니다.
그렇지만 해킹 시도가 너무 많았습니다. 단 2일만에 블락한 ip가 400개가 넘어가면서 이러다가는 서버가 감당하지 못할 수준으로 증가하는 것이 아닌가하는 걱정도 들었습니다.
그래서 추가로 워드프레스 로그인 주소를 변경해 해커들이 무작위적인 ID와 비밀번호 대입을 기반으로 로그인 시도를 무력화 할 수 있는 방법으로 로그인 주소를 변경하기로 했습니다.
일반적인 워드프레스 로그인 방식
일반적으로 워드프레스 로그인을 위해서는 아래와 같이 login, admin 또는 wp-admin.php, wp-login.php 등을 이용해 로그인 페이지에 접근합니다.
- /login/
- /admin/
- /wp-login.php
- /wp-admin.php
이런 명령을 사용하면 워드프레스는 자동으로 /wp-login.php 파일을 이용해서 로그인 페이지를 띄워줍니다. 해커는 이런 명령을 사용해 로그인 페이지를 띄우고 ID와 비밀번호를 무작위로 대입하면서 로그인을 시도합니다.
그렇기 때문에 이런 해킹 시도를 막으려면 wp-login.php 파일 또는 위치를 변경해야 합니다.
워드프레스 로그인 주소 변경 방법으로는 시도해 볼 수 있는 방법은 약 다섯가지 정도 있는데요.
- 로그인 주소 변경 플러그인 사용
- 로그인 전문 플러그인 사용
- wp-login.php 파일 변경
- 로그인 주소 rewrite 방법
- 사용자 정의 필터 추가
그렇지만 이러한 방법중에서 회원 관리가 필요하지 않다면 로그인 주소 변경 플러그이 가장 안정적으로 사용할 수 있으며, 만약 회원관리를 해야 한다면 wp-login.php를 사용 중지 시킨 후 로그인 전문 플러그인으로 로그인토록 하는 방법이 좋아 보입니다.
고르인 점눔 플러그인에 대해서는 나중에 별로 포스팅으로 정리해 보겠습니다.
그 외 다른 방법들은 제대로 작동하지 않거나 워드펜스와 같은 보안 플러그인과 충돌이 나기 때문에 상요하지 않는 것이 좋겠습니다.
플러그인 사용 워드프레스 로그인 주소 변경
워드프레스 로그인 주소 변경 플러그인은 여러가지가 있습니다.
- 보안 플러그인 중에서는 iThemes Security 플러그인에서 로그인 주소 변경 기능을 제공합니다.
워드펜스(Wordfence), https://sucuri.net/ 또는 iThemes Security와 같은 보안 플러그인을 사용한다면 로그인 주소 변경 기능이 있는 iThemes Security 플러그인을 고민해 볼 만합니다.
이런 보안 플러그인들도 제대로 사용하려면 유료 버젼을 사용해야 하는데요. 연간 사용료가 상당히 높습니다. - 가볍고 필요한 기능만 제공하기 때문에 인기높은 WPS Hide Login
- 워드프레스 로그인을 비롯한 폴더 접근 방어 등 많은 다양한 기능을 제공하는 Hide My WP 플러그인
이 플러그인은 유료와 무료 플러그인이 있는데 더 다양한 기능을 사용하기 위해서는 유료 버젼(29$)를 사용해야 합니다. - 워드프레스 로그인 2단계 인증, 로그인 주소 변경, 멀웨어 진단 등 보안 플러그인 못지 않은 다양한 기능을 제공하는 Defender WordPress Security, Malware Detection, and Firewall
이외에도 다양한 플러그인이 있는데요. 각자가 지향하는 사이트 보안 정책에 맞추어 적절한 플러그인을 사용하면 좋을 것 같습니다.
저는 사이트 보안은 가능하면 서버단에서 처리하는 것을 원칙으로하고, 서버단에서 처리하기 쉽지 않는 경우에만 플러그인을 사용하는 것이 가장 빠르고 안전하게 사용할 수 있다고 보고 있습니다.
가장 가벼운 WPS Hide Login 플러그인
그렇기 때문에 대부분 플러그인 기능이 겹치기 때문에 워드프레스 로그인 주소 변경에만 포커싱하고 있어 아주 가벼운 WPS Hide Login 플러그인을 사용했습니다.
이 WPS Hide Login 플러그인 설치 및 세팅은 아주 단순하기 때문에 굳이 복잡한 설명은 필요하지 않을 것 같습니다. 플러그인 설치 후 setting에서 아래 이미지처럼 사용하고 싶은 로그인 주소를 입력하면 됩니다.
이 플러그인을 사용하면 주기적으로 로그인 주소를 변경시켜 해커의 무작위적인 로그인 시도를 조금 더 효과적으로 막을 수 있을 것입니다.
메뉴얼 변경 방법
플러그인을 사용하지 않고 워드프레스 로그인 주소 변경 방법은 굉장히 무식하지만 wp-login.php 파일을 다른 이름으로 변경하는 것입니다.
뭐 그냥 파일 이름만 변경하면 되는 것은 아니고 이 파일에 포함된 일부 내용을 변경해야 합니다.
수작업으로 워드프레스 로그인 주소 변경을 위해서는 SFTP를 사용하는 것이 좋습니다.
wp-login.php 백업
먼저 wp-login.php 파일을 백업 받습니다. 이는 문제가 생길 시 되돌리기 위해서죠.
SFTP로 접속했다면 간단히 wp-login.php 파일을 다운로드 받아 백업하면 될 것 같습니다.
wp-login.php 이름 변경
그 다음으로는 wp-login.php 파일 이름을 변경합니다.
예를들어 new-login.php로 변경한다고 하죠.. 그러면 앞으로 “도메인 주소/wp-login“을 입력해 로그인 페이지를 띄워 로그인 할 수 있습니다.
신규 파일, new-login.php 편집
이름을 new-login.php로 변경한 파일을 열어서 편집을 시작합니다. 편집이라고해서 엄청난 변경이 이루어지는 지는 것은 아니구요.
로그인 파일이 wp-login.php에서 new-login.php로 변경되었기 때문에 새로운 로그인 파일에서 이 변경내용이 반영되도록 해주면 됩니다.
즉 wp-login.php이란 단어를 찾아서 new-login.php으로 대체해 주면 됩니다. 이는 편집기의 찾기 – 바꾸기 기능으로 간단히 처리할 수 있습니다.
아래는 서브라임 편집기에서 편집 모습니다. 참고로..
이렇게 변경 후 저장하면 모든 것이 끝납니다. 다시 한번 정리하자면 워드프레스 메인에 wp-login.php 파일을 다른 이름으로 변경하고 파일 내용 중 wp-login.php 단어를 새로 변경한 파일 이름으로 변경하면 됩니다.
- 이제 도메인주소/new-login을 입력해 로그인 화면을 띄울 수 있습니다.
- /wp-login.php, /wp-admin, admin 입력 시 404에러 메세지를 내면서 로그인 할 수 없습니다.
이 방법의 단점
이 방법은 플러그인 사용을 하지않겠다는 관점에서 시도할 수는 있지만 여러가지 한계를 가지고 있기 때문에 권장되지는 않습니다.
- 이 방법은 워드펜스에서는 충동을 일으킵니다.
워드펜스에는 로그인 주소 변경 기능이 없기 때문에 이 방법을 사용했는데 어느 순간 사이트에 문제가 생기면서 사용할 수 없게 되었습니다.
그리고 워드프레스 코어에 이상한 파일이 생겼기 때문에 워드펜스와 같은 보안 플러그인은 의심스러운 파일로 분류하고 계속 경고를 날립니다. - 워드프레스가 업그레이드되면 다시 wp-login.php 파일이 생깁니다.
이 경우 다시 이 파일을 지워주어야 하기 때문에 자동 관리가 어렵습니다.
기타 방법
플러그인을 사용하지 않고 워드프레스 파일 자체를 변경하지 않고 웹서버나 워드프레스 사용자 정의 필터를 이용해 제어하는 방법도 있다고 합니다.
인터넷에서 여러가지 방법이 소개되고 있는데 저의 경우 제대로 작동하지는 않았습니다. 저는 웹서버로 NGINX 사용하고 있습니다.
웹서버에서 rewrite 하는 방법
간단하게 Apache나 NGINX와 같은 웹서버에서 rewrite하는 방법이 있습니다.
그러나 이 방법은 NGINX에서는 제대로 작동하지 않습니다. Apache에서도 근본적으로 wp-login.php를 직접 사용해 로그인하는 것을 막을 수는 없다고 합니다.
아파치에서는 아래와 같은 코드를 사용합니다.
RewriteRule ^new-login$ http://www.yoursite.com/wp-login.php [NC,L]
Code language: PHP (php)
NGINX에서는 아래와 같은 코드를 시도할 수는 있지만 저의 경우는 작동하지는 않았습니다.
location ~* /new-login/ {
rewrite ^/new-login/(.*) /wp-admin/$1 last;
}
Code language: PHP (php)
웹서버 rewrite + 워드프레스의 사용자 정의 필터 추가
음 아래와 같은 웹서버 rewrite + 워드프레스 사용자 정의 필터 추가 방법이 소개되고는 있지만 최근 워드프레스 버젼에서는 작동하지 않습니다.
먼저 웹서버에서 rewrite 아래와 같은 명령을 사용합니다.
아파치의 경우는 아래 명령을 사용합니다.
RewriteRule ^new-login(.*) wp-login.php?%{QUERY_STRING}
Code language: PHP (php)
NGINX에서는 아래와 같은 명령으로 rewriet 명령을 줄 수 있습니다.
location ~* /signin/ {
rewrite ^/signin/(.*) /wp-login/$1 last;
}
Code language: PHP (php)
그리고 워드프레스 mu-plugin 또는 child theme의 functions.php에 아래와 같은 코그를 추가합니다.
add_filter( 'login_url', 'my_login_page', 10, 2 );
function my_login_page( $login_url, $redirect ) {
return str_replace("wp-login.php","new-login",$login_url);
}
add_action( 'login_form', 'replace_login_submit_form',1);
function replace_login_submit_form() {
$your_content = ob_get_contents();
$your_content = str_replace("wp-login.php","new-login",$your_content);
ob_get_clean();
echo $your_content;
}
Code language: PHP (php)
워드프레스의 사용자 정의 필터 추가 방법 2
또는 아래와 같는 워드프레스 사용자 정의 필터를 추가해 시도할 수 있습니다. 마찬가지로 저는 작동하지 않았습니다.
참고로 이 코드는 mu-plugin 또는 child theme의 functions.php에 추가하는 방법입니다.
add_action('init','custom_login');
function custom_login(){
global $pagenow;
if( 'wp-login.php' == $pagenow && $_GET['action']!="logout") {
wp_redirect('http://YOURSITE.com/URL');
exit();
}
}
Code language: PHP (php)
[참고] wp-login 사용 금지 방법
wp-login.php 사용 자체를 금지하는 방법입니다.
회원제 사이트 또는 쇼핑몰을 운영하다보면 워드프레스 기본 로그인 기능을 사용하지 않고 전용 로그인 기능을 사용하게 됩니다. 그럴 경우는 워드프레스 기본 로그인 기능 자체를 사용하지 않아도 됩니다.
먼저 웹서버가 NGINX인 경우 아래와 같은 코드를 적용합니다.
location ~* (wp-login)\.php$ {
deny all;
access_log off;
}
Code language: PHP (php)
웹서버가 아파치인 경우 아래와 같은 코드를 적용합니다.
<Files ~ "^wp-login.php">
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>
Code language: PHP (php)
새롭게 뉴스레터를 시작했습니다.
1️⃣ 주식 등 투자 정보 : 기업 분석, IB 투자의견 등 투자 관련 내용
..... 테슬라 실적 및 IB들의의 테슬라 투자의견
2️⃣ 사례 및 트렌드 : 사례연구와 트렌드 관련 괜찮은 내용
.....유튜브와 경쟁대신 구독 전환한 비디오 플래폼 비메오 사례