IP 차단

워드프레스 60초동안 특정 ip 차단 방법

워드프레스에 특정 IP를 차단하고 싶으신가요? 본 포스트에서는 워드프레스에서 IP를 차단하는 간단하면서 효과적인 방법을 알려드립니다.

워드프레스 특정 ip 차단 방법

1. 사용된 코드에 대한 기본 설명

이 코드는 사용자가 특정 URL에 지정된 횟수 이상 접근하면 그 IP 주소를 차단하는 워드프레스 스니핏입니다.

2. 주요 설정 항목

  • MAX_ACCESS_COUNT: 차단될 접근 횟수입니다. 현재 20회로 설정되어 있습니다.
  • BLOCKED_URLS: 접근을 제어할 페이지의 URL 리스트입니다.

3. 함수의 역할

  • should_block_ip: IP를 차단해야하는지 여부를 반환합니다.
  • block_ip_with_route: 주어진 IP 주소를 차단합니다.
  • unblock_ip_with_route: 주어진 IP 주소의 차단을 해제합니다.
  • check_and_block_ip: 사용자의 IP 주소와 요청한 URL을 확인하고 필요한 경우 IP를 차단합니다.

주의사항

  • 본 코드는 서버에서 직접 IP 차단 명령을 실행하므로 권한 문제나 다른 문제가 발생할 수 있습니다. 테스트 서버에서 먼저 실행해 보는 것을 권장합니다.
  • 코드에는 “이 코드는 수정 중 에러가 발생할 경우 소스 복구 비용 10만원이 추가되므로 절대 수정하지 마시기 바랍니다!!”라는 주의사항이 있으므로 주의하여 사용하십시오.

워드프레스의 안전성과 보안을 위해 필요한 경우 IP 차단 기능을 활용하실 수 있습니다. 본 포스트가 도움이 되셨길 바랍니다.

IP 차단 소스코드

// 아래 링크를 통해 사용방법을 꼭 확인하고 사용하세요!! - 프로그래머 문호영
// https://snippets.stofarm.com/iptables

// 최상단에서 차단될 접근 횟수와 접근 제어할 페이지 리스트 설정
define('MAX_ACCESS_COUNT', 20);
define('BLOCKED_URLS', serialize(array('/', '/xmlrpc.php', '//xmlrpc.php', '/wp-admin/admin.php')));


function should_block_ip($ip) {
    $access_count = get_transient('access_count_' . $ip) ?: 0;
    if ($access_count >= MAX_ACCESS_COUNT) {
        return true;
    }
    return false;
}

function block_ip_with_route($ip) {
    $cmd = "sudo /sbin/route add -host $ip reject";
    shell_exec($cmd);
}

function unblock_ip_with_route($ip) {
    $cmd = "sudo /sbin/route del -host $ip reject";
    shell_exec($cmd);
}

function check_and_block_ip() {
    $client_ip = $_SERVER['REMOTE_ADDR'];
    $current_url = $_SERVER['REQUEST_URI'];

    $blocked_urls = unserialize(BLOCKED_URLS);

    if (in_array($current_url, $blocked_urls) || is_404()) {
        $access_count = get_transient('access_count_' . $client_ip) ?: 0;
        set_transient('access_count_' . $client_ip, ++$access_count, 60); // 1분 동안 저장

        if (should_block_ip($client_ip)) {
            block_ip_with_route($client_ip);
			header("Location: https://snippets.stofarm.com/from_iptables");
            wp_die('Your IP has been blocked.'); 
        }
    }
}

add_action('init', 'check_and_block_ip');