VPN을 통해 ssh를 접속하지 않는 이상 서버를 공개망에서 사용하게 될 경우 ssh 접속은 외부에 노출될 수 밖에 없습니다.
대부분 해외에서 지속적으로 ssh 로그인을 시도하면서 무작위 비밀번호를 대입합니다.
journactl -f 명령어를 실행시킨 후 모니터링을 진행하면 brute force 형태의 ssh접근시도를 볼 수 있습니다.
59.63.188.32(중국) 서버에서 포트를 바꾸어가며 접속시도하는 것을 확인할 수 있습니다.
이러한 경우에 보안을 더 강화하기 위해 사용하는것이 fail2ban입니다. fail2ban은 지정한 시간내에 지정한 횟수만큼 실패 하면 ban 시간만큼 접속을 차단하는 것이다.
fail2ban은 파이썬 프로그래밍 언어로 되어있으며, 주로 로그 파일들을 기반으로 모니터링합니다.
1. fail2ban 설치
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm →저장소를 설치합니다.
# yum install -y fail2ban fail2ban-systemd
redhat 계열에서 접근로그파일은 /var/log/secure 입니다. cent 7 이전에는 secure 로그파일에 의존하여 동작했으나 cen t7 부터는 systemd에서 통합적으로 관리합니다.
로그파일이 없으면 fail2ban동작불가하기 때문에 fail2ban-systemd를 같이 설치진행합니다
# rm -f /etc/fail2ban/jail.d/00-firewalld.conf→ fail2ban-firewalld 패키지가 필수로 설치됩니다, firewalld가 아닌 iptables 사용 할 예정이므로 해당 파일을 삭제합니다
# systemctl enable fail2ban → fail2ban 자동실행되도록 설정합니다.
# systemctl start fail2ban →fail2ban 서비스를 실행합니다.
# chkconfig fail2ban on →재부팅 후에도 자동 실행될 수 있도록 설정합니다.
2. fail2ban 설정 디렉터리
# /etc/fail2ban → fail2ban 설치 시 기본적으로 설정되는 디렉터리 입니다.
# /etc/fail2ban/filter.d → 접속 로그파일 분석 시 filter.d에 있는 서비스 필터를 사용합니다, sshd.conf 파일의 경우 sshd서비스 로그필터 파일입니다.
# /etc/fail2ban/action.d → 계정 접속 실패시 사용할 수 있는 action 파일들이 위치해 있습니다.
# /etc/fail2ban/jail.d → fail2ban 사용자 설정 넣을 수 있는 디렉터리입니다, fail2ban 실행시 jail.d 디렉터리에 있는 모든파일들에 있는 설정파일 적용
관련패키지 설치 시 셋팅파일 생성됩니다.
fail2ban-firewalld 설치 → 00-firewalld.conf 파일 생성
fail2ban-systemd 설치 → 00-systemd.conf 파일 생성
# /etc/fail2ban/jail.conf → 기본설정파일입니다, 사용자 설정이 jail.d 디렉터리에 존재할 경우 그 사용자 설정이 기본설정보다 우선 적용됩니다.
# /etc/fail2ban/fail2ban.conf → fail2ban 로그 파일 설정파일입니다. (로그레벨, 로그타겟 등등)
3. fail2ban 파일 설정
# /etc/fail2ban/jail.conf
→기본설정파일입니다. 이 파일에 직접 설정 할 경우 업데이트시 초기화되기 때문에 jail.conf 파일을 직접 수정하지 않고 새로 생성한 설정파일에서 생성하는 것을 권유드립니다. yum update 진행하더라도 설정한 파일이 덮어씌워지지 않음
설정내역은 아래와 같은 순서로 덮어 쓰여집니다.
/etc/fail2ban/jail.conf→ /etc/fail2ban/jail.d/*.conf→ /etc/fail2ban/jail.local→ /etc/fail2ban/jail.d/*.local
# vi /etc/fail2ban/jail.d/local.conf
bandtime : 인증실패 시 차단할 시간, -1로 셋팅 시 영구차단, 영구차단을 하거나 차단시간을 많이 줄 경우 재부팅 시 ip차단 리스트를 읽어오기 때문에 시간이 많이 소요됩니다.
maxretry : 차단되기 전까지 인증시도를 위한 허용횟수입니다.
findtime : 입력한 시간 내에 허용횟수를 초과하여 실패시 차단하게 됩니다.
ignoreip : 관리자 IP, 여기에 입력한 아이피는 차단되지 않습니다.
bandaction : IP차단방법, /etc/fail2ban/action.d에 있는 action을 입력할 수 있습니다. firewalld사용시 firewallcmd-new입력 / iptables 사용 시 iptables-multiport 입력합니다.
action : IP차단 시 알림메일을 설정합니다
%(action_mw)s – IP차단 시 알림메일 전송 + whois로 정보를 포함한 결과 첨부
%(action_)s – 알림메일 전송받지 않음
%(action_mwl)s – 차단시 whois 정보와 관련 로그를 첨부하여 메일 전송 (yum install whois로 설치 진행)
mta : 메일 발송할 서비스 설정입니다. 기본은 sendmail입니다.
destmail : 메일 수신자, 다중 수신자 지원하지 않습니다.
sender : 메일 발신자
[서비스] + enabled=true : 차단할 서비스
port : 다중 포트 설정 시 , (콤마)로 구분합니다. (ex. port = ssh, 1234)
4. fail2ban 설정 확인
# fail2ban-client status sshd → fail2ban 상태 확인
→현재 banned 된 IP는 2개, 총 banned 된 IP는 3개입니다.
# awk ‘($(NF-1) = /Ban/){print $NF}’ /var/log/fail2ban.log | sort | uniq -c | sort -n→ 차단된 IP목록 확인
→총 3개의 IP가 차단된 것으로 확인됩니다.
# iptables -nL
→iptables 룰에 2개의 IP가 차단된 것으로 확인됩니다.
차단 된 두 IP의 서버를 확인해보니 이스라엘과 중국에서 시도한 부분을 확인 할 수 있습니다.