서버를 무차별 대입 공격으로부터 보호하는 것은 필수입니다. 그러나 어떻게 할까요? 다행히도, Fail2Ban이 바로 당신을 보호하기 위해 곁에 있습니다. 그러나 Fail2Ban의 기본 구성은 최적의 보안을 위해 약간의 조정이 필요합니다. 걱정하지 마세요. 이 튜토리얼이 모든 것을 다룰 겁니다.
이 튜토리얼에서는 SSH 서버를 보호하여 무차별 대입 공격을 방어하는 방법을 배우게 됩니다.
준비되셨나요? SSH 서버의 보안을 최적화하려면 계속 읽어보세요!
전제 조건
이 튜토리얼은 단계별 지침으로 구성되어 있습니다. 함께 따라 하려면 다음 사항이 준비되어 있는지 확인하십시오:
- Ubuntu 및 Debian 서버 – 이 튜토리얼은 Fail2Ban을 설정하고 Fail2Ban 금지 구성을 테스트하기 위해 Ubuntu 18.04 LTS를 실행하는 서버와 Debian 10 서버를 사용합니다. Ubuntu 18.04 LTS를 설치하려면 관련된 링크를 참조하십시오.
- 루트 액세스 또는 sudo 권한이 있어야 서버에서 슈퍼 사용자로 명령을 실행할 수 있습니다.
- Fail2Ban이 설치되었습니다 우분투 또는 데비안 서버에서.
기본 방화벽 설정
Fail2Ban은 로그를 모니터링하고 특정 시간 내에 너무 많은 로그인 시도를 하는 IP 주소를 차단함으로써 서버를 보호합니다. 하지만 먼저, 악의적인 행위를 차단하기 위한 규칙을 추가할 수 있는 기본 방화벽을 설정할 것입니다.
1. 먼저, 아래의 service
명령을 실행하여 Fail2Ban을 중지하세요 (fail2ban stop
). 구성 파일을 변경할 때 Fail2Ban을 중지하여 변경 사항을 테스트하고 예상대로 작동하는지 확인할 수 있습니다.

2. apt install
명령을 실행하여 Sendmail
과 IPTables-persistent
을 설치하세요. Sendmail은 Fail2Ban이 IP 주소를 차단했을 때 당신에게 알리는 프로그램입니다. IPTables-persistent은 변경된 구성 설정을 /etc/sysconfig/iptables 파일에 저장하는 프로그램입니다.
다음 프로그램을 설치하면 방화벽 설정이 원치 않는 상황(전원 장애와 같은)에서도 유지됩니다.
이제 방화벽을 설정하기 위해 아래의 각 iptables
명령을 실행하세요. 이 명령은 출력을 생성하지 않지만 방화벽에 네 가지 규칙을 추가합니다. 이러한 규칙은 서버로의 연결을 허용하거나 차단합니다.

4. 방화벽에 설정한 내용을 요약으로 보려면 아래의 iptables
명령을 실행하세요.
아래에서 방화벽에 추가한 규칙이 강조 표시되어 있습니다.

5. 다음으로 규칙을 /etc/sysconfig/iptables-config 파일에 저장하고 Fail2Ban 서비스를 시작하려면 다음 명령을 실행하세요. iptables-config 파일에는 모든 영구적인 방화벽 규칙이 포함되어 있습니다.
Fail2Ban은 서버를 보호하기 위해 방화벽에 몇 가지 규칙을 자동으로 추가합니다.
6. 마지막으로 아래의 iptables
명령을 다시 실행하여 방화벽 규칙을 확인하세요.
아래에서 빨간색으로 강조 표시된 것은 Fail2Ban이 방화벽에 추가한 새로운 규칙입니다.

지역 Fail2Ban 구성 조정
이제 기본 방화벽이 실행 중이므로 로컬 Fail2Ban 구성 파일을 조정하여 서버를 더 안전하게 보호하는 것이 좋습니다. 이 튜토리얼은 /etc/fail2ban/jail.conf 구성 파일을 사용합니다. 이 파일에는 Fail2Ban 애플리케이션의 전역 설정을 구성하는 데 필요한 모든 옵션이 포함되어 있습니다.
아마도 SSH 서버에 대한 사용자 정의 규칙을 만들고 싶을 것입니다. 그렇다면 jail.local 파일(기존의 jail.conf 파일을 기반으로 함)을 만들어 jail.local 파일에 SSH 특정 규칙을 넣습니다. 이렇게 하면 서버에 대한 jail.conf 파일의 설정을 재정의할 수 있습니다.
1. 아래의 awk
명령어를 실행하여 다음을 수행합니다:
/etc/fail2ban/jail.conf
파일의 내용을 출력합니다 ('{ printf "# "; print; }'
).jail.conf
파일을 기반으로 한 jail.local 파일을 생성하고, 이 파일을 사용하여 jail.conf 파일의 기본 설정을 재정의할 수 있습니다./etc/fail2ban/jail.conf
파일의 내용을tee
명령어로 파이프하여 이를 로컬 파일 시스템(/etc/fail2ban/jail.local
)에 쓸 수 있습니다.

2. jail.local 파일을 생성한 후에는 아래의 ls
명령을 실행하십시오. 이 명령은 서버의 Fail2Ban 디렉토리(/etc/fail2ban
)의 내용을 나열하여 jail.local 파일이 올바르게 생성되었는지 확인합니다.
아래와 같이 새로운 jail.local 파일이 표시되면 로컬 파일이 올바르게 생성된 것입니다.

3. 선호하는 텍스트 편집기에서 /etc/fail2ban/jail.local 파일을 열고 [ssh] 섹션으로 이동하십시오.
# 기호 앞의 [sshd] 및 enabled 옵션의 주석을 해제하여 SSH를 활성화하십시오. 아래와 같이 옵션 앞의 # 기호를 삭제하여 활성화하십시오.
이 지점부터 튜토리얼의 나머지 부분까지 섹션 또는 옵션 앞의 # 기호를 제거하십시오.

4. 아래에 표시된 [DEFAULT] 섹션의 주석을 해제하십시오. 이 섹션은 Fail2Ban의 기본 설정을 구성하는 곳입니다. 이 섹션의 설정은 Fail2Ban이 관리하는 모든 jail에 적용됩니다.

5. 다음으로, bantime 섹션으로 스크롤하고, bantime을 60분으로 설정하십시오. bantime 옵션은 로그인 실패 시 IP 주소가 차단되는 시간(분)을 설정합니다.
기본 bantime 설정은 600초(10분)입니다. 이 설정을 원하는 대로 조정할 수 있지만, bantime 설정이 낮을수록 서버에 가중 부하가 발생할 수 있음을 주의해야 합니다.

6. findtime과 maxretry 옵션으로 이동하세요. findtime을 그대로 유지하고(10분), maxretry를 3으로 낮추세요.
findtime 옵션은 IP 주소가 로그인에 실패하여 금지되기 전에 허용되는 시간(분)을 설정합니다. 반면 maxretry 옵션은 IP 주소가 금지되기 전에 실패한 로그인 시도 횟수를 설정합니다.
기본 findtime 설정은 10분이고, maxretry는 5분입니다. 결과적으로, 10분 동안 5번의 로그인 실패가 발생하는 IP 주소는 금지됩니다.

7. 아래로 스크롤하여 destemail, sender, mta 옵션을 주석 해제하고 구성하세요:
- destemail – Fail2Ban이 알림을 보내는 이메일 주소를 입력하세요.
- sender – Fail2Ban이 destemail로 보내는 이메일의 “보낸 사람” 필드를 설정하세요.
- mta – 기본값(sendmail)을 그대로 유지하세요. mta 옵션은 Fail2Ban이 알림을 보내는 데 사용하는 이메일 전달 에이전트를 설정합니다.

8. 아래에 표시된 대로 동작 옵션으로 이동하여 action_mwl 옵션의 주석을 해제하십시오. 이렇게 하면 Fail2Ban이 로그워치 이메일을 보낼 수 있습니다. 로그워치 이메일을 확인하여 서버의 잠재적 보안 문제를 추가로 조사할 수 있습니다.
변경 사항을 저장하고 텍스트 편집기를 종료하십시오.

9. 이제 아래 명령을 실행하여 fail2ban
서비스를 다시 시작하십시오.
10. 마지막으로 아래 명령을 실행하여 fail2ban
서비스의 상태
를 확인하십시오. sudo service fail2ban status
Fail2Ban 서비스가 작동하는 경우 다음과 같은 출력이 표시됩니다.
Fail2Ban 서비스가 작동하는 경우 다음과 같은 출력이 표시됩니다.

귀하의 차단 구성 테스트
Fail2Ban을 구성했으므로 이제 차단 구성이 실제로 작동하는지 테스트해야 합니다. 보조 서버에서 Fail2Ban 서버로 여러 번의 실패한 SSH 로그인을 시도하고 해당 보조 서버가 차단되는지 확인하십시오.
1. 보조 서버(Debian)에 로그인하고 아래 명령을 실행하여 Fail2Ban 서버로 SSH를 실행하십시오.
이 데모는 IP가 69.28.83.134
인 fail2ban
서버로 SSH를 실행하는 Debian 10 서버(134.122.20.103)를 사용합니다.
2. 프롬프트에서 임의의 암호를 입력하고 Enter 키를 누르십시오.
첫 번째 시도에서 Fail2Ban 서버는 SSH 로그인 시도를 중지하고 아래와 같이 Permission denied 메시지를 출력합니다. 약 두 번에서 세 번 정도 더 SSH 로그인 시도를 반복하면 Fail2Ban 서버가 최종적으로 SSH 로그인 시도에 응답하지 않게 됩니다.
이 시점에서 더 이상 Permission denied 메시지가 나타나지 않고 화면이 공백으로 표시됩니다. 화면이 공백으로 표시되면 두 번째 서버(Debian)가 Fail2Ban 서버에서 차단되었음을 나타냅니다.

하지만 이미 Fail2Ban 서버에서 차단할 IP 주소 목록이 있다면 jail.local 파일을 열고 [DEFAULT] 섹션으로 이동합니다. ignoreip 옵션을 주석 해제하고 차단할 IP 주소를 설정합니다. 아래와 같이 표시됩니다.
주소는 여러 별도의 IPv4 또는 IPv6 항목 또는 쉼표로 구분된 항목이 될 수 있습니다.

3. Fail2Ban 서버(Ubuntu)에서 방화벽 규칙을 보려면 아래의 iptables
명령을 다시 실행합니다.
아래에서 확인할 수 있듯이 134.122.20.103 IP 주소에서의 SSH 로그인 시도를 거부하는 새로운 규칙이 있습니다.
또한 Fail2Ban이 브루트 포스 공격을 성공적으로 차단했을 때 Fail2Ban 서버에 sendmail이 설정되어 있다면 로그 파일이 첨부된 이메일을 받게 됩니다. 이 이메일 통지는 Fail2Ban이 브루트 포스 공격을 성공적으로 차단하고 서버를 잠재적인 피해로부터 보호했다는 것을 나타냅니다.

결론
이 튜토리얼을 통해 우분투 서버에서 Fail2Ban을 구성하는 방법을 배웠습니다. 이 시점에서 SSH 서버를 무차별 공격으로부터 보호하는 데 필요한 지식을 잘 갖추고 있어야 합니다.
이제 이 새롭게 얻은 지식을 한 단계 더 나아가 보는 게 어떨까요? 아마도 도커 호스트에서 Fail2Ban을 사용하여 모든 포트의 IP를 차단하는 것부터 시작하는 것이 좋을 것입니다?