워드프레스에 특정 IP를 차단하고 싶으신가요? 본 포스트에서는 워드프레스에서 IP를 차단하는 간단하면서 효과적인 방법을 알려드립니다.
Table of Contents
워드프레스 특정 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');