VPN을 통해 ssh를 접속하지 않는 이상 서버를 공개망에서 사용하게 될 경우 ssh 접속은 외부에 노출될 수 밖에 없다.
대부분 해외에서 지속적으로 ssh 로그인을 시도하는데 무작위 비밀번호를 대입한다.
journactl -f 명령어를 실행시킨 후 모니터링을 진행하면 brute force* 형태의 ssh접근시도를 볼 수 있다.
이러한 경우에 보안을 더 강화하기 위해 사용하는것이 fail2ban이다.
fai2ban은 파이썬 프로그래밍 언어로 되어있으며, 주로 로그 파일들을 기반으로 모니터링한다.
* brute force attack (무차별 대입공격) 특정한 암호를 풀기 위해 가능한 모든 값을 대입하는 것을 의미한다. 대부분의 암호화 방식은 이론적으로 무차별 대입 공격에 대해 안전하지 못하며, 충분한 시간이 존재한다면 암호화된 정보를 해독할 수 있다. 하지만 대부분의 경우 모든 계산을 마치려면 실용적이지 못한 비용이나 시간을 소요하게 되어, 공격을 방지하게 한다. 암호의 '취약점'이라는 의미에는 무차별 대입 공격보다 더 빠른 공격 방법이 존재한다는 것을 의미한다. (위키디피아) |
작업환경
CentOS 7.5
* 작업 전 외부 접속시도 확인
# journalctl -f \\ syslog 데몬을 대체한 실시간 로그 확인 |
-> 59.63.188.32 (중국) 서버에서 포트를 바꾸어가며 접속을 시도하는 것을 확인할 수 있음
# ls /var/log/secure | xargs grep -E "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" -o | sort | uniq \\ ssh 로그인을 시도한 IP 확인 |
# last -f /var/log/btmp | more \\ 로그인 실패한 IP 확인 |
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 이었음, 이전에는 secure 로그파일에 의존하여 동작했으나 cent7 부터는 systemd에서 통합관리, 로그파일이 없으면 fail2ban동작불가, 때문에 fail2ban-systemd를 설치 # rpm -e epel-release \\ 저장소에서 fail2ban만 설치 후 바로 저장소 삭제 # rm -f /etc/fail2ban/jail.d/00-firewalld.conf \\ fail2ban-firewalld 패키지가 필수로 설치, iptables 사용 시 해당 파일 삭제 # systemctl enable fail2ban \\ fail2ban 자동실행 # systemctl start fail2ban # chkconfig fail2ban on |
2. 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 파일 설정
# vi /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 |
3-1. local.conf 파일설정
# vi /etc/fail2ban/jail.d/local.conf
# systemctl restart fail2ban |
ex) 사용예제
3-2. log 레벨 조정
# vi /var/log/fail2ban.log \\ fail2ban 로그 파일 위치 # vi /etc/fail2ban/fail2ban.d/local.conf \\ 로그 레벨 설정
|
4. fail2ban 설정 확인
# fail2ban-client status sshd \\ fail2ban 상태 확인 # awk '($(NF-1) = /Ban/){print $NF}' /var/log/fail2ban.log | sort | uniq -c | sort -n \\ 차단된 IP목록 확인 |
→ 현재 banned 된 IP는 2개, 총 banned 된 IP는 3개
→ 총 3개의 IP가 차단된 것으로 확인
→ iptables에 2개의 IP차단
'서버 & 시스템 > Linux' 카테고리의 다른 글
apahce 최적화 튜닝 (0) | 2018.08.30 |
---|---|
mysql 5.6이 메모리를 90%까지 사용하는 경우 (0) | 2018.08.30 |
CentOS 5 저장소 변경 (0) | 2018.07.17 |
curl 설치 및 http2 적용 (0) | 2018.04.17 |
각종 서비스 포트번호 확인 (0) | 2018.03.27 |