본문으로 바로가기

iptables를 통한 fail2ban 설치

category 서버 & 시스템/Linux 2018. 7. 20. 17:40
반응형


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 


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

메일 발신자


port

다중 포트 설정 시 , 로 구분 (ex. port = ssh, 1234)


[서비스] + enabled=true : 차단할 서비스 


# systemctl restart fail2ban



ex) 사용예제




3-2. log 레벨 조정

# vi /var/log/fail2ban.log \\ fail2ban 로그 파일 위치


# vi /etc/fail2ban/fail2ban.d/local.conf \\ 로그 레벨 설정

[Definition]

loglevel = WARNING





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