SSH(Secure Shell)는 원격 서버에 안전하게 접속하는 데 필수적인 프로토콜입니다. 하지만 그만큼 공격자들의 주요 공격 대상이기도 합니다. 특히, 무작위 대입 공격(Brute-force attack)을 통해 비밀번호를 알아내려는 시도가 끊임없이 발생합니다. Fail2Ban은 이러한 공격 시도를 자동으로 감지하고 차단하여 서버 보안을 크게 강화할 수 있는 강력한 도구입니다.
Fail2Ban이란 무엇일까요?
Fail2Ban은 로그 파일을 분석하여 악의적인 행위를 감지하고, 미리 정의된 규칙에 따라 방화벽을 통해 해당 IP 주소를 차단하는 프로그램입니다. SSH뿐만 아니라 FTP, 웹 서버 등 다양한 서비스에 대한 공격을 방어할 수 있습니다. Fail2Ban의 핵심은 ‘필터(filter)’와 ‘제일(jail)’이라는 개념입니다.
- 필터(Filter): 로그 파일에서 특정 패턴(예: 잘못된 비밀번호 시도)을 찾아내는 역할을 합니다. 정규 표현식을 사용하여 정의됩니다.
- 제일(Jail): 필터를 적용하고, 차단 규칙을 정의하는 단위입니다. 각 서비스(SSH, FTP 등)에 대해 별도의 제일을 설정할 수 있습니다.
Fail2Ban, 왜 중요할까요?
SSH 브루트포스 공격은 서버 자원을 소모시키고, 성공할 경우 서버 전체를 위험에 빠뜨릴 수 있습니다. Fail2Ban을 사용하면 다음과 같은 이점을 얻을 수 있습니다.
- 자동화된 방어: 공격 시도를 자동으로 감지하고 차단하여 관리자의 개입 없이도 서버를 보호합니다.
- 리소스 절약: 공격 시도를 조기에 차단하여 서버 자원 낭비를 줄입니다.
- 보안 강화: 성공적인 공격 가능성을 낮추고, 서버의 전반적인 보안 수준을 향상시킵니다.
Fail2Ban 설치 및 설정 방법
Fail2Ban 설치 및 설정은 비교적 간단합니다. 대부분의 리눅스 배포판에서 패키지 관리자를 통해 설치할 수 있습니다.
1. Fail2Ban 설치
터미널을 열고 다음 명령어를 실행합니다 (배포판에 따라 명령어는 다를 수 있습니다).
- Debian/Ubuntu:
sudo apt update && sudo apt install fail2ban - CentOS/RHEL:
sudo yum install epel-release && sudo yum install fail2ban - Fedora:
sudo dnf install fail2ban
2. 설정 파일 복사 및 수정
Fail2Ban 설정 파일은 /etc/fail2ban/jail.conf에 있습니다. 이 파일을 직접 수정하는 대신, jail.local 파일을 만들어 설정을 덮어쓰는 것이 좋습니다. 이렇게 하면 Fail2Ban 업데이트 시 설정이 초기화되는 것을 방지할 수 있습니다.
다음 명령어를 실행하여 jail.local 파일을 생성합니다.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
이제 jail.local 파일을 편집기로 엽니다.
sudo nano /etc/fail2ban/jail.local
jail.local 파일에서 SSH 관련 설정을 찾아 수정합니다. 기본적인 설정은 다음과 같습니다.
[sshd]
enabled = true
port = ssh
logpath = %(ssh_log)s
backend = auto
bantime = 600
findtime = 60
maxretry = 3
각 설정 항목의 의미는 다음과 같습니다.
- enabled: 해당 제일을 활성화할지 여부를 결정합니다.
true로 설정하면 활성화됩니다. - port: SSH 서비스가 사용하는 포트 번호입니다. 기본값은
ssh이며, 22번 포트를 의미합니다. 포트 번호를 변경했다면 해당 번호로 수정해야 합니다. - logpath: SSH 로그 파일의 경로입니다. 대부분의 시스템에서
%(ssh_log)s는/var/log/auth.log또는/var/log/secure로 해석됩니다. - backend: 로그 파일을 감시하는 백엔드입니다.
auto로 설정하면 Fail2Ban이 자동으로 최적의 백엔드를 선택합니다. - bantime: 차단 시간(초)입니다. 위 설정에서는 600초(10분) 동안 차단됩니다.
- findtime: 공격 시도를 감지하는 시간 창(초)입니다. 위 설정에서는 60초 동안의 시도를 감시합니다.
- maxretry: 차단하기 전에 허용되는 최대 시도 횟수입니다. 위 설정에서는 3번의 시도 실패 후 차단됩니다.
필요에 따라 bantime, findtime, maxretry 값을 조정할 수 있습니다. 예를 들어, 차단 시간을 늘리거나, 허용되는 시도 횟수를 줄일 수 있습니다.
3. Fail2Ban 서비스 재시작
설정 파일을 수정한 후에는 Fail2Ban 서비스를 재시작해야 변경 사항이 적용됩니다.
sudo systemctl restart fail2ban
4. Fail2Ban 상태 확인
Fail2Ban이 제대로 작동하는지 확인하려면 다음 명령어를 사용합니다.
sudo fail2ban-client status sshd
이 명령어는 sshd 제일의 상태를 보여줍니다. 현재 차단된 IP 주소 목록도 확인할 수 있습니다.
Fail2Ban 고급 설정
Fail2Ban은 다양한 고급 설정을 제공하여 더욱 강력하게 서버를 보호할 수 있습니다. 몇 가지 유용한 고급 설정에 대해 알아보겠습니다.
1. 화이트리스트 설정
특정 IP 주소는 Fail2Ban에 의해 차단되지 않도록 화이트리스트에 등록할 수 있습니다. jail.local 파일에서 ignoreip 옵션을 사용하여 화이트리스트를 설정합니다.
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 your.ip.address
위 설정은 127.0.0.1/8, ::1, your.ip.address를 화이트리스트에 추가합니다. 여러 IP 주소를 추가하려면 공백으로 구분합니다.
2. 액션 설정
Fail2Ban은 차단 외에 다양한 액션을 수행할 수 있습니다. 예를 들어, 차단된 IP 주소에 대한 정보를 이메일로 알릴 수 있습니다. jail.local 파일에서 action 옵션을 사용하여 액션을 설정합니다.
[sshd]
enabled = true
port = ssh
logpath = %(ssh_log)s
backend = auto
bantime = 600
findtime = 60
maxretry = 3
action = %(action_mwl)s
위 설정에서 %(action_mwl)s는 기본적으로 차단, 메일 알림, 로그 기록을 수행하는 액션을 의미합니다. 더 자세한 액션 설정은 /etc/fail2ban/action.d/ 디렉토리에 있는 파일을 참고할 수 있습니다.
메일 알림을 사용하려면 /etc/fail2ban/action.d/sendmail-whois-lines.conf 파일을 수정하여 메일 서버 정보를 설정해야 합니다.
3. 사용자 정의 필터 생성
Fail2Ban은 기본적으로 제공하는 필터 외에 사용자 정의 필터를 생성할 수 있습니다. 사용자 정의 필터를 사용하면 특정 공격 패턴에 대한 방어를 강화할 수 있습니다. 사용자 정의 필터는 /etc/fail2ban/filter.d/ 디렉토리에 저장됩니다.
예를 들어, 특정 문자열이 포함된 로그를 감지하는 필터를 만들 수 있습니다.
[Definition]
failregex = .특정 문자열.
ignoreregex =
위 필터는 로그에 “특정 문자열”이 포함된 경우 공격으로 간주합니다. failregex는 감지할 패턴을 정의하는 정규 표현식입니다. ignoreregex는 무시할 패턴을 정의합니다.
사용자 정의 필터를 생성한 후에는 jail.local 파일에서 해당 필터를 사용하도록 설정해야 합니다.
[my-custom-jail]
enabled = true
port = ssh
logpath = /var/log/mylogfile.log
filter = my-custom-filter
bantime = 3600
findtime = 60
maxretry = 5
위 설정은 my-custom-filter라는 이름의 사용자 정의 필터를 my-custom-jail이라는 제일에 적용합니다.
실생활 활용 팁과 조언
- SSH 포트 변경: SSH의 기본 포트인 22번 포트를 다른 포트로 변경하면 브루트포스 공격 시도를 크게 줄일 수 있습니다.
- 키 기반 인증 사용: 비밀번호 대신 SSH 키 기반 인증을 사용하면 브루트포스 공격을 원천적으로 차단할 수 있습니다.
- 정기적인 로그 감사: Fail2Ban 로그를 정기적으로 감사하여 오탐 또는 새로운 공격 패턴을 파악합니다.
- Fail2Ban 업데이트: Fail2Ban을 최신 버전으로 유지하여 알려진 보안 취약점을 해결합니다.
- 방화벽과 함께 사용: Fail2Ban은 방화벽과 함께 사용하면 더욱 강력한 보안 효과를 얻을 수 있습니다.
SSH 브루트포스 공격, Fail2Ban에 대한 흔한 오해와 사실 관계
- 오해: Fail2Ban은 모든 공격을 막을 수 있다.
- 사실: Fail2Ban은 브루트포스 공격과 같은 특정 유형의 공격에 효과적이지만, 모든 공격을 막을 수는 없습니다.
- 오해: Fail2Ban 설정은 한 번 설정하면 변경할 필요가 없다.
- 사실: 공격 패턴은 끊임없이 변화하므로, Fail2Ban 설정도 주기적으로 검토하고 조정해야 합니다.
- 오해: Fail2Ban은 서버 성능에 큰 영향을 미친다.
- 사실: Fail2Ban은 경량화된 프로그램이므로, 일반적인 환경에서는 서버 성능에 큰 영향을 미치지 않습니다.
비용 효율적인 활용 방법
Fail2Ban은 오픈 소스 소프트웨어이므로, 무료로 사용할 수 있습니다. 서버 보안을 강화하는 데 비용 효율적인 솔루션입니다. 기본적인 설정만으로도 상당한 수준의 보안 효과를 얻을 수 있으며, 고급 설정을 통해 더욱 강력한 방어를 구축할 수 있습니다.
Q: Fail2Ban이 차단한 IP 주소를 확인하는 방법은 무엇인가요?
A: sudo fail2ban-client status sshd 명령어를 사용하여 sshd 제일의 상태를 확인하면 차단된 IP 주소 목록을 볼 수 있습니다.
Q: Fail2Ban이 차단한 IP 주소를 해제하는 방법은 무엇인가요?
A: sudo fail2ban-client set sshd unbanip [IP 주소] 명령어를 사용하여 특정 IP 주소의 차단을 해제할 수 있습니다.