11강 / 20강
fail2ban — 두드리는 손을 자른다
로그를 읽어 공격 IP 를 자동 차단
10강에서 비밀번호 로그인을 껐지만, 현실에선 켜 둬야 하는 서비스도 있습니다 (웹 관리자 로그인, 메일 등). 그런 곳을 위한 방어가 fail2ban 입니다.
원리는 놀랍도록 단순합니다 — 로그를 계속 읽다가, 같은 IP 가 짧은 시간에 여러 번 실패하면 방화벽에 차단 규칙을 꽂아 버립니다. 사람은 비밀번호를 열 번씩 틀리지 않으니까요.
먼저, 공격의 흔적을 봅니다
7강에서 무차별 대입을 당했다면, 그 흔적이 /var/log/auth.log 에 남습니다.
공격자를 차단하려면 먼저 그 로그를 읽을 줄 알아야 해요.
한 IP 가 몰아서 실패했다면 무차별 대입입니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
한 IP 의 실패 횟수 — 사람이라면 이렇게 많이 틀리지 않습니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
fail2ban 을 켭니다
이제 이 반복 실패를 자동으로 잘라 내게 합시다.
sshd jail 이 auth.log 를 감시하기 시작합니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
이제 공격자가 다시 무차별 대입을 시도하면 어떻게 되는지 봅시다. 관점을 🥷 공격자로 두세요.
maxretry 횟수에서 fail2ban 이 IP 를 차단합니다.
🥷 공격자
브라우저 안에서 실행 (계산용)
'Host seems down' — 실제로는 fail2ban 이 막은 것.
🥷 공격자
브라우저 안에서 실행 (계산용)
🤔 확인 문제
fail2ban 이 공격 IP 를 차단하는 방식은?
해설 fail2ban 은 로그를 읽다가 조건(maxretry/findtime)을 넘는 IP 를 찾아 iptables 에 DROP 규칙을 꽂습니다. 그러면 그 IP 는 서버에 닿지 못해요.
🤔 확인 문제
fail2ban 만으로 SSH 방어가 충분하지 않은 이유는?
해설 IP 차단은 유용하지만 공격자가 IP 를 바꾸면 다시 시작됩니다. 그래서 fail2ban 은 공개키 인증(10강) 같은 근본 방어와 겹쳐서 써야 합니다. 방어는 여러 겹으로.