[AWS] 무작위 로그인 시도 막기 위한 Fail2ban 설치

주형(Jureamer)·2022년 6월 19일
0

개요


회사 AWS EC2가 외부에서 SSH를 통해 접속이 가능하다보니 무차별 대입 공격시도가 지속적으로 일어났습니다.

무차별 대입공격(Brute Force Attack)
특정한 암호를 풀기 위해 가능한 모든 값을 대입하는 것을 의미한다. 대부분의 암호화 방식은 이론적으로 무차별 대입 공격에 대해 안전하지 못하며, 충분한 시간이 존재한다면 암호화된 정보를 해독할 수 있다. 
로그인 시도에 대한 로그는 /var/log/auth.log에서 확인이 가능합니다.

로그인 시도 에러 로그를 확인하는 방법은 아래와 같습니다.

# 패스워드 로그인 시도를 하는 경우
grep "Failed password" /var/log/auth.log

# 공개키 로그인 시도를 하는 경우
grep "Invalid user" /var/user/auth.log
Jun 19 20:40:11 ip-xxxxxxxxxxx sshd[541272]: Invalid user country from 42.200.66.164 port 43254
Jun 19 20:55:43 ip-xxxxxxxxxxx sshd[541337]: Invalid user oracle from 142.93.65.9 port 40484
Jun 19 20:59:11 ip-xxxxxxxxxxx sshd[541357]: Invalid user admin from 36.3.215.118 port 52440
Jun 19 21:34:56 ip-xxxxxxxxxxx sshd[541502]: Invalid user nexus from 144.126.143.21 port 58622
Jun 19 21:37:29 ip-xxxxxxxxxxx sshd[541505]: Invalid user rd from 159.65.138.77 port 40438

최근에 프로젝트로 쓰던 AWS 계정이 털리거나 EC2 서버가 털려서 요금이 몇 천 ~ 억대가 나왔다는 글을 몇 개 본 뒤로 우리 서버도 조치를 취해야 될 것 같아 조치할 방법을 찾아봤습니다.

멀티 팩터 인증, 루트 로그인 접근 금지, 비밀번호 로그인 금지, 키페어 로그인 설정 등을 해주고 난 뒤 또 관련한 프로그램중 Fail2Ban이 가장 많이 쓰이고 있는 것 같아 설치를 진행했고 이 과정을 소개 하고자 합니다.


Fail2Ban이란?

Fail2Ban이란 무작위 대입 공격을 방어하는 프로그램입니다. 특정 시간 안에 정해진 횟수를 초과하는 IP에 대해 일정한 시간동안 그 주소를 차단하도록 하는 프로그램입니다.

하지만 Fail2Ban은 잘못된 인증 시도의 비율을 줄일 수 있지만 취약한 인증 방법을 사용하는 데 따르는 위험을 완전히 없애지 못하기 때문에 진정으로 서비스를 보호하려면 반드시 2단계 인증이나 공개키/개인키 인증 매커니즘 둘 중 하나를 사용하도록 설정해야합니다.

Fail2Ban 설치 방법

우분투의 경우 아래의 명령어를 통해 설치할 수 있습니다.

sudo apt install fail2ban

Fail2Ban 설정 방법

이후 설정 파일을 만들어 줘야하는데 기존 설정 파일인 jail.conf는 추후 업데이트 시에 초기화되므로 개인화 설정파일인 jail.local을 만들어 복사해서 사용하도록 합니다.

cp /ettc/fail2ban/jail.conf /etc/fail2ban/jail.local

vi /etc/fail2ban/jail.local

이후 fail2ban이 제대로 설정됐는 지 확인 해 볼수 있습니다.

sudo fail2ban-client status

Status
|- Number of jail:  1
`- Jail list: sshd

Fail2Ban 설정 값

1. ignoreip

  • 해당 ip, ip 대역은 로그인 실패시에도 fail2ban에서 차단하지 않고 무시되며 공백이나, 로 구분지어 작성합니다. 
  • default : localhost (127.0.0.1)
    ex) localhost + 192.168.17.x 대역은 무시 
ignoreip = 127.0.0.1/8 192.168.17.0/24

2. findtime, maxretry

  • 차단 조건입니다.
  • findtime(지정한 시간(초단위)) 내에 maxtry 설정 횟수만큼 인증 실패 시 차단됩니다.
findtime = 600 // 10분 안에
maxretry = 5 // 5회 실패 시 차단 됨

3. bantime

  • 지정 조건(findtime, maxretry)에 따라 인증 실패한 클라이 언트를 차단할 시간을 설정합니다.
  • 단위는 초 단위입니다.
    bantime = 3600 (1시간)

4. 메일 알림 설정

  • destemail : 메일수신자(다중 수신지원 안함)
  • sender : 메일 송신자
  • mta : 메일 전송 프로그램
  • action : 차단시 whois 정보와 관련 로그를 첨부하여 메일 전송 기능 추가 가능

ex) action_mw : 메일을 전송하고 whois 로 IP 정보를 조회한 결과를 첨부

action = %(action_mw)s

ex) action_mwl : 메일을 전송하고 whois 로 IP 정보를 조회한 결과와 관련된 로그를 첨부

action = %(action_mwl)s

Fail2Ban 설정 적용하기

설정 변경 후 아래 명령어를 통해 fail2ban을 다시 시작해줍니다.
재시작 후 정상적으로 작동되는 지 확인할 수 있습니다.

# fail2ban 재시작
sudo systemctl reload fail2ban

# 작동 여부 확인
sudo fail2ban-client status

# 차단 현황 확인하기
sudo fail2ban-client status sshd

이상으로 기본적인 설정으로 Fail2Ban을 사용할 수 있습니다.
하지만 앞서 말했듯이 Fail2Ban은 Brute Force의 완벽한 차단책은 아니라
다른 보안 설정과 겸해야 효과적으로 대응할 수 있습니다.

저도 Fail2Ban을 좀 더 사용 해 보면서 경험치를 쌓은 후 다시 글로 다뤄볼 생각입니다.

참고


profile
작게라도 꾸준히 성장하는게 목표입니다.

0개의 댓글