워드프레스 로그인 페이지 차단의 필요성

개발

워드프레스 로그인 페이지 차단의 필요성

꽤 예전에 로그인 페이지를 특정 IP를 제외하곤 접근할 수 없도록 막는 작업을 했었는데, 집 밖에선 로그인이 까다롭단 이유로 다시 모든 IP에서 접근할 수 있도록 바꿔뒀습니다.
최근 유독 /admin/login.asp에 접근을 시도하거나 xmlrpc.php에 post 요청을 보내는 로그가 많이 보여, 이게 과연 괜찮은 걸까 싶어 블랙리스트를 만들 목적으로 로그인 실패 시 제게 메일이 오게 작업해봤습니다.

function loginFailed() {
    $ip = $_SERVER['REMOTE_ADDR'];
 
    $to = 'example@example.com';
    $subject = 'Login Failure';
    $body = 'Login failed from '.$ip;
    $headers = array('Content-Type: text/html; charset=UTF-8');
 
    wp_mail( $to, $subject, $body, $headers );
        
    wp_die( 'Good Bye Cracker' );
}
 
add_action( 'wp_login_failed', 'loginFailed' );

사용한 코드입니다. wp_login_failed란 훅을 이용해 로그인에 실패하면 메일을 보내는 간단한 방식입니다.

혹시 워드프레스 블로그를 운영하는 중이시라면 functions.php에 위 코드를 넣어보시면 흥미로운 결과가 나올 겁니다.

로그인 실패

그래 봤자 하루에 10개쯤 올까 싶었는데 1시간 반 만에 10개를 돌파했습니다.
프랑스, 러시아, 영국, 그리스 등 다양한 국가에서 로그인을 시도하더라고요.

블랙리스트를 만들면 종일 블랙리스트 IP만 추가하고 있어야겠다 싶어서 그냥 다시 모든 IP의 접근을 막고 확인된 IP에서만 접근할 수 있도록 바꿔뒀습니다.

location ^~ /wp-login {
    allow my.ip;
    deny all;
 
    include snippets/fastcgi-php.conf;
    # 등등 php 관련 설정
}

제가 사용한 코드입니다. nginx에선 위 코드를 이용하시면 됩니다.
location 블럭 내부에 php 관련 설정이 없으면 서버가 php 파일을 읽지 못하니 반드시 넣어주세요.

<FilesMatch "wp-login.php">
    Order Deny, Allow
    deny from all
    allow from 0.0.0.0
</FilesMatch>

apache2를 사용 중이시면 위 코드를 conf 파일이나 .htaccess에 추가하시면 됩니다.


간혹 접근을 막는 게 아니라 login 페이지의 주소만 변경하는 분이 계신 것 같던데, 굉장히 기초적인 프로그래밍 실력만 있어도 몇 번 포트가 열려있고, 어느 페이지가 200으로 응답하는지 파악 가능합니다. 페이지의 내용을 분석하면 로그인 페이지를 추려내는 것도 전혀 어렵지 않고요. 고로 로그인 페이지 주소 변경은 아무런 도움이 되지 않습니다.

Report an issue