dDos 공격
제일 아까운 기술 중 하나라고 보는 dDos 공격 기술은 좋은 의미로는 서버를 해킹까지하여 지식의 과시라고 볼 수 있지만
실제로 지금 시대에서 상대의 서버를 공격한다는 것은 악의적인 측면만 보더라도 너무 나쁜 행위이다.
dDos 공격을 막기 위해 해야할 부분은 방화벽 부분인데 대부분 iptable을 이용하여 아이피를 차단하는 경우가 많다.
나 역시 따로 방화벽 장비를 구성하지않다보니 AWS 유료서비스보다는 단순 무식한 route 명령어로 ip를 차단하는 방법을 주로 사용한다.
이 방법은 서버를 직접 운영할 경우에 route명령어를 apache 계정으로 실행 할 수 있을때 가능하다.
아파치 권한을 우선 visudo 설정에 넣는다
www-data 계정이라면
www-data ALL=(ALL) NOPASSWD: /sbin/route
apache 계정이라면
apache ALL=(ALL) NOPASSWD: /sbin/route
이렇게 입력한다.
그리고 워드프레스에서 명령어를 아래처럼 넣으면 된다.
$cmd = “sudo /sbin/route add -host $ip reject”;
shell_exec($cmd);
워드프레스 스니핏 자동화
이를 워드프레스에서 스니핏을 이용하여 자동화시키는 방법은 아래와같다
// 아래 링크를 통해 사용방법을 꼭 확인하고 사용하세요!! - 프로그래머 문호영
// 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');
이 코드를 이용할 경우 1분동안 20회 공격이 들어오면 자동으로 IP가 차단되게 된다.
목차