sudo dnf install epel-release -y
sudo dnf makecache # 저장소 정보 업데이트
EPEL(Extra Packages for Enterprise Linux) 저장소는 Red Hat 계열 배포판에서 추가적인 패키지를 제공한다.
EPEL을 설치하거나, 활성화하여 필요한 패키지들을 설치할 수 있다. (비활성화시 아래의 패키지들 설치 오류발생)
1-2. Fail2Ban 설치 및 서비스 시작
sudo dnf install fail2ban -y
fail2ban-client -V # 버전 확인 1.0.2
sudo systemctl start fail2ban # Fail2Ban 서비스 시작
sudo systemctl enable fail2ban # Fail2Ban 서비스 부팅 시 자동 시작 설정
Fail2Ban은 서버의 로그 파일을 지속적으로 감시하고, 특정한 패턴(SSH 로그인 실패 5회)을 발견하면 공격자 IP를 자동으로 차단해주는 보안 도구
부팅시 자동시작 설정 완료
1-3. Devekionebt Tools 설치
sudo dnf groupinstall "Development Tools" -y
Development Tools 는 C/C++같은 언어로 만들어진 소스코드 기반의 프로그램을 컴파일할 수 있도록 필요한 도구들을 한 번에 설치해주는 메타 패키지 그룹
포함된 대표 패키지들은 다음과 같다
gcc : GNU C 컴파일러
make : Makefile 기반 자동 빌드 도구
autoconf : 소스 빌드를 위한 설정 생성 도구
automake : GNU 표준 Makefile 생성기
binutils : 바이너리 처리 툴 모음(ld, objdump)
libtool : 공유 라이브러리 관리 도구
gdb : 디버거
1-4. whois 설치
sudo yum install whois
which whois # 설치 확인
1-5. msmtp 설치
sudo dnf install msmtp -y
msmtp --version # 버전 확인 1.8.10
2. msmtp 설정
2-1. msmtprc 파일 추가
vi ~/.msmtprc # 아래와 같이 파일 생성
account default
host smtp.gmail.com
port 587
from your_email@gmail.com
auth on
user your_email@gmail.com
password xxxxxxxxxxxxxxxxxxx
tls on
tls_starttls on
logfile ~/.msmtp.log
account default : "default" 라는 이름의 계정을 정의
host stmp.gmail.com : Gmail 의 SMTP 서버 주소, Gmail을 통해 메일을 보내기 위해 반드시 이 주소 사용
port 587 : SMTP 서버의 포트 번호, 587번 포트는 STARTTLS 를 사용하는 암호화된 메일 전송에 사용
from your_email@gmail.com : 보낸 사람 이메일 주소
auth on : 인증을 활성화, Gmail SMTP 서버는 인증 없는 발송을 허용하지 않으므로 필수
user your_email@gmail.com : 받는 사람 이메일 주소
password xxxxxxxxxxxxxxxxxxx : 앱 비밀번호 설정
이 방법은 GNOME-Keyring 방식과 plain password 방식이 있다.
GNOME-Keyring 방식은 다른 파일에 적혀있 앱 비밀번호를 가져오도록 해주나, 서버에서 설치는 리소스 낭비가 된다.
따라서, 서버에서는 plain password + chmod 600 방식을 사용하는 것이 일반적으로 더 좋다.
보안을 더 높이고 싶다면 pass 또는 gpg-agent 연동을 고려
tls on : TLS 암호화 사용을 활성화, 보안 강화를 위해 필수
tls_starttls on : STARTTLS 명령으로 암호화 세션을 시작, 포트 587을 쓸 때 꼭 필요한 설정
logfile ~/.msmtp.log : msmtp가 메일을 보낼 때 생기는 로그를 기록할 파일 경로
2-2. msmtprc 파일 권한 수정
chmod 600 ~/.msmtprc
앱 비밀번호를 평문 그대로 파일에 저장을 했으므로 소유자(root)만 r, w 가 가능하도록 설정
3. Fail2Ban 설정
3-1. jail.local 파일 추가
vi /etc/fail2ban/jail.local # 파일에 아래 내용 수정
[DEFAULT]
destemail = youremail@gmail.com
sender = youremail@gmail.com
mta = mail
action = %(action_mwl)s
#action = %(action_)s
#action = %(action_iptables)s
bantime = 240
findtime = 300
maxretry = 5
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 5
destemail = your_email@gmail.com : 메일 수신자 주소
sender = your_email@gmail.com : 메일 발송자 주소
mta = msmtp : 메일 전송 에이전트 설정
action = %(action_)s : 액션을 설정
메일을 보내고, 로그파일과 차단된 IP 주소도 포함해서 메일을 보내도록 하는 설정
이메일로 로그내용, 차단된 IP 주소, 메일 제목/본문 을 받게 된다
bantime = 300 : 차단 시간을 설정 (테스트를 위해 300초)
findtime = 300 : 실패 시도 기간 설정(300초 동안 몇 번 실패했는지 체크)
maxretry = 5 : 최대 재시도 횟수(5번 실패시 해당 IP 차단)
[sshd] enabled = true : SSH 관련 jail을 활성화하는 설정, true로 설정되면 SSH 로그인 시도가 실패할 때, Fail2Ban 이 해당 IP 차단하고 메일 전송
3-2. mail-whois-lines.conf 파일 추가
vi /etc/fail2ban/action.d/mail-whois-lines.conf # 아래 내용 수정
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = printf '📛 경고: SSH 접속 차단 발생\n\n다음 IP 주소가 SSH 로그인 시도를 %(maxretry)s회 이상 실패하여 Fail2Ban에
의해 차단되었습니다.\n\n🔹 차단된 IP 주소 : <ip>\n🔹 차단된 서비스 : <name>\n🔹 감지 시간 : $(date)\n🔹 허용 실패 횟
수 : %(maxretry)s회\n🔹 차단 시간 : %(bantime)s초\n\n🔎 WHOIS 정보:\n\n$(/usr/bin/whois <ip>)\n\n-- Fail2Ban 알림 시>스템' | msmtp --from=yourmail@gmail.com -t yourmail@gmail.com@gmail.com -a default --subject="[Fail2Ban Alert] <name>: banned <ip>"
actionunban =
jail.conf 파일에서
action = %(action_mwl)s 로 설정을 하였으므로 action 파일이 필요하다.
그 파일이 mail-whois-lines.conf 이다.
3-3. sendmail → msmtp가 되도록 심볼릭 링크 생성
mv /usr/sbin/sendmail /usr/sbin/sendmail.backup # 기존의 sendmail 백업 만들어두기
ln -s /usr/bin/msmtp /usr/sbin/sendmail # sendmail -> msmtp가 되도록 링크
ls -l /usr/sbin/sendmail # 확인
다음과 같이 결과가 나오면 된다
4. 테스트
4-1. Fail2Ban 재시작 및 로그 실시간 확인
sudo systemctl restart fail2ban # 재시작
sudo systemctl status fail2ban # 상태 확인 running 이면 OK
systemctl status fail2ban 확인
4-2. 실패 유도 테스트(칼리에서 진행)
ssh wronguser@your_server_ip
칼리 리눅스에서 SSH 로그인 5회 이상 실패 → Connection refused 된 것을 확인할 수 있다.
4-2. 차단 확인
fail2ban-client status sshd
로키 리눅스에서 칼리 리눅스 IP(172.16.10.200)가 차단된 것을 확인할 수 있다.