Fail2Ban으로 워드프레스 해킹 방지하기

Updated on 2020-06-27 by

근래들에 멀웨어 감염되는 등 사이트에 심각한 문제가 발생했길래 서버 보안 및 사이트 보안에 대해 추가 조치를 하고 있습니다. 이중 워드프레스 로그인 시도를 제한해 워드프레스 해킹 방지하는 Fail2Ban 사용법에 대해서 알아보겠습니다.

Fail2Ban은 로그를 분석해 의심스러운 사이트 접근을 막는 방법으로 SSH, Apache, Nginx, FTP 등의 의심스러운 접근을 차단할 수 있습니다. 또한 워드프레스 로그인 실패 로그 기록을 기반으로 워드프레스 관리자 로그인 시도 등을 막을 수도 있습니다.

Fail2Ban에 대한 소개나 사용법에 대한 소개 자료는 많이 있지만 이중에서 워드프레스 해킹 방지 방법에 대해서는 조금 낮선 것 같아서 이번 사이트 보안 대책 수립하면서 자세하게 확인해 보았습니다.

워드프레스 로그인 감시용 Fail2Ban 필터 정의

Fail2Ban에서 워드프레스 관리자 로그인으로 워드프레스 해킹하려는 시도를 막기 위해서는 우선 워드프레스 로그인 실패를 모니터링할 수 있는 필터를 추가합니다.

Fail2Ban 필터는 /etc/fail2ban/filter.d 폴더에 존재하는데요. Fail2Ban에는 워드프레스 로그인 시도를 모니터링할 필터가 없기 때문에 수작업으로 만들어 줍니다.

필터 이름은 구분하기 적당하게 지으면 되는데요. 설명 자료등에서 wordpress를 많이 사용하고 있기 때문에 저도 wordpress 이름을 사용해 wordpress.conf 파일에 필터 옵션을 추가했습니다.

nano /etc/fail2ban/filter.d/wordpress.conf

wordpress 필터에는 다음과 같은 내용이 들어갑니다.

[Definition] failregex = ^<HOST> .* "(GET|POST) /wp-login.php ^<HOST> .* "(GET|POST) /xmlrpc.php

워드프레스 로그인 감시 옵션

그 다음에는 위에서 정의한 Fail2Ban 필터를 기반으로 워드프레스 로그인을 감시하고 조치할 옵션을 정의합니다.

이는 /etc/fail2ban/jail.d 폴더 내 적절한 이름 + .conf 형식으로 로그인 감시 옵션을 추가합니다. 별도 파일을 만들지 않고 local.conf와 같은 파일안에 모든 종류 옵션을 추가해도 좋을 것입니다.

nano /etc/fail2ban/jail.d/local.conf

여기에 아래와 같은 내용을 주가합니다. 하루 24시간동안 3번 로그인 실패하면 IP를 영구 금지시키는 다소 엄격한 조건을 설정했습니다.

[wordpress] enabled = true port = http,https filter = wordpress action = iptables-multiport[name=wordpress, port="http,https", protocol=tcp], %(action_mw)s logpath = /var/log/nginx/access.log maxretry = 3 findtime = 86400 bantime = -1

위 내용을 항목별로 해석해 보죠.

  1. enabled = true : 워드프레스를 모니터링하라는 옵션, 반드시 true로 설정되어야 모니터링을 시작함
  2. port = http,https : SSL이 적용된 443 포트나 일반 80 포트로 들어와서 시도되는 행동들을 모니터링
  3. filter = wordpress : 사용할 필터
  4. action = iptables-multiport : 문제를 감지 시 어떻게 할지는 iptables-multiport에서 정의한 대로 조치
  5. logpath = /var/log/nginx/access.log : Fail2B이 참조해야하는 로그 파일
  6. maxretry = 3 : 3번 이상 시도해서도 실패 시 조치를 취함
  7. findtime = 86400 : 로그인 실패등이 일어났는지 확인할 시간, 86400은 1일로 로그를 검색해 조치 여부 판단
  8. bantime = -1 : 조치를 지속하는 시간, -1은 무기한 금지

검색 봇 조치

구글 등의 검색 엔진의 봇들이 사이트를 돌아다니다 파일들을 테스트하면서 잘못해 구글 봇 ip가 블락될 가능성도 있기 때문에 robots.txt에 아래 내용을 추가해 줍니다.

User-agent: * Disallow: /wp-login.php Disallow: /xmlrpc.php

결과

위와같이 Fail2Ban에 wordpress 옵션을 추가한 1일 후 아래처럼 264개 ip가 블럭당했음을 볼 수 있습니다.

# fail2ban-client status wordpress Status for the jail: wordpress |- Filter | |- Currently failed: 87 | |- Total failed: 2282 | `- File list: /var/log/nginx/access.log `- Actions |- Currently banned: 264 |- Total banned: 264 `- Banned IP list: 139.59.43.196 162.241.29.139 167.71.139.8 178.116.22.137 178.128.82.148 178.135.93.158 212.116.102.246 213.5.78.240 45.55.135.88 159.89.110.45 51.15.180.70 70.113.11.186 67.205.161.59 62.210.88.90 165.22.191.129 49.145.70.15 107.179.19.68 134.122.120.74 139.99.121.6 142.4.22.236 178.62.33.222 159.203.36.107 213.149.103.132 128.199.158.182 103.83.36.101 166.62.80.109

저의 경우 SSL 공격은 많지 않은데요. 아마 포트를 22번이 아닌 별도의 포트를 사용하기 때문이 아닐까 싶습니다. 워드프레스 로그인을 통한 공격이 굉장히 많다는 점에 놀랬습니다.

한때는 보안 플러그인 워드펜스(wordfence)를 같이 사용했는데요. 워드펜스에서 막는 것보다 Fail2Ban에서 막는 것이 훨씬 더 많더군요. 워드프레스 로그인 보안 관련해서는 Fail3Ban을 활용하는 것이 훨씬 낫다는 생각을 했습니다.

[참고] 이메일로 받아보기

Fail2Ban에서는 사이트 공격으로 IP가 블락되면 이를 이메일로 알려주라고 설정할 수 있습니다.

이를 위해서는 두가지 조치가 필요합니다. 하나는 어떤 이벤트가 발생 시 이메일로 알려다오라고 설정하는 것이고, Fail2Ban에게 이메일 주소를 알려주어야겠죠.

물론 서버에서 외부로 메일을 보낼 수 있는 상태가 되어 있어야 합니다. 이는 구글 지메일 이용 우분투 메일 서버 구축하기라는 포스팅을 참조해 보시기 바랍니다.

먼저 action에서 %(action_mw)s를 추가하는 것인데요. [DEFAULT] 섹션에서 추가할 수도 있고 [wordpress]와 같은 특정 필터를 커스텀 정의하는 섹션에서 추가할 수도 있습니다.

마찬가지로 메일 주소를 destemail과 sender로 나누어 이메일 주소를 세팅해 줄 수 있습니다. 아래는 제가 세팅한 모습니다.

[DEFAULT] ignoreip = ***.***.***.*** ***.***.***.*** ***.***.***.*** bantime = -1 findtime = 86400 maxretry = 5 action = %(action_mw)s # Mail destemail = *****@gmail.com sender = YYYYY@gmail.com

그러면 IP가 블럭되었을 때마다 아래와 같은 이메일을 받을 수 있습니다. 이메일을 받으면 별도 조치는 할 수는 없지만 경각심을 가질 수 있겠죠.

Fail2Ban IP 블락 후 이메일 알람

서울에 생긴 Vultr 서버 100$ 프로모션 안내

안녕하세요?
새로운 사이트 구축을 위한 신규 서버를 고민하신다면 , 서울 리젼이 생겨 더욱 빨라진 Vultr 서버를 Vultr 100$ 프로모션으로 이용해 보세요.

아래 프로모션 코드 링크를 통해 Vultr에서 서버 구축 후 1달 이상 사용 및 $25이상 결제 時 추가 100$을 주는 프로모션을 진행 中입니다.

아래 이미지를 클릭해 등록할 수 있습니다.

Vultr는 서울에도 리젼이 있어 매우 빠르고, 아마존 웹 서비스(AWS)보다 성능이 높으며 가장 가성비가 뛰어납니다.

거기다 사용자 UI도 좋고, 15개까지 스냅샷을 무료로 제공하기 때문에 관리하기 좋습니다. 그리고 지금 100$ 프로모션처럼 가격적인 메리트도 있습니다.

저는 2016년부터 Vultr 서버를 사용했는데요. 지금까지 잘 사용해 오고 있습니다. 아래 사용기도 참고해 보세요.

도쿄 리젼과 비교해 본 Vultr 서울 리젼 사용기

가성비가 뛰어난 Vultr 가상서버호스팅(클라우드호스팅,VPS) 사용기

Vultr 가상서버호스팅의 새상품 High Frequency 사용기

가상 서버를 운영하고픈 勇者에게 전하는 가상 서버 운영 입문 노하우 – Vultr 가상서버호스팅(VPS)를 중심으로

해외 가상서버호스팅(VPS)이 국내 호스팅보다 빠르다? – 아이비호스팅과 해외 가상서버호스팅 VULTR간 비교

사이트 운영을 위한 안내 – 웹서버 세팅에서 워드프레스 설치까지(우분투 17.10, NGINX 1.13.6, Marian DB 10.2, PHP7.2)

워드프레스 최적화를 위한 18개월간의 고민, 그 노하우를 담다.

20년간 FGCG 마케팅과 전자제품 상품기획 경험을 기반으로 다양한 분야의 마케팅 및 경영 사례 분석에 관심을 가지고 있습니다. 아울러 IT 등 트렌드 분석과 빠르게 변화하는 뉴스에서 얻을 수 있는 인사이트를 분석해 나누고 싶습니다. 개인적으로 사진에 관심에 많아 소소한 일상의 따뜻함을 담고 있습니다.

0 Comments
Inline Feedbacks
View all comments