Ubuntu 에 fail2ban 을 설치하여 보안을 강화하기.

HYEONG HWAN, MUN/ 5월 9, 2015/ 미분류/ 4 comments

#이 글은 Ubuntu 운영체제 기준으로 작성되었습니다.

CentOS 사용자는 다음의 글을 참조하세요 : http://crybit.com/steps-to-install-fail2ban/

 

이 곳에서는 fail2ban 이라는 프로그램을 사용하여 서버를 보호하는 방법을 적도록 하겠다.

fail2ban 이란 지정한 시간내에 지정한 횟수만큼 실패 하면 ban 시간만큼 접속을 차단하는 것이다.

여러명이서 같이 쓰는 서버에 좋다. 주로 웹호스팅 서버. 방화벽을 세팅하기 귀찮을때에도 이것을 사용한다.


fail2ban 은 로그기반 프로그램이기 때문에 로그가 쌓이는 시점으로 계산됩니다.

이것 때문에 발생하는 fail2ban maxretry별 최대 로그인 시도가능 횟수.

1 => 1번

2 => 7번

3=> 13번

4=> 19번

5=> 25번

6=>31번

n=> 6*(n-1) + 1

SSH의 경우 로그인이 실패(fail)하면 재시도(retry) 5회 하도록 해 줍니다.  재시도는 카운트 되지 않습니다.

SFTP의 경우 로그인이 실패(fail)하면 retry 안하고 바로 연결을 끊기 때문에 로그인 최대 시도횟수가 의도한대로 동작합니다.


방화벽 확인

#iptables -L

스크린샷 2015-03-29 오전 1.37.29

아마 이렇게 되어 있을 것이다.

Fail2ban 설치

#apt-get install fail2ban

설치 후 방화벽 확인

#iptables -L

스크린샷 2015-03-29 오전 1.40.18

fail2ban 이라는 항목이 추가되었으며 패킷을 컨트롤 할 수 있게된다.

아무것도 설정하지 않으면 패키지 기본값이 적용된다.

ssh 연결에 대해서 최근 10분간 6회이상 비밀번호가 틀리면,  ban조건이 충족한 때로부터 10분동안 ssh 접속차단(drop)된다.

아무것도 설정안해도 충분히 보호가 되지만 몇가지 설정을 해보도록하자.

fail2ban 환경설정

jail(감옥) 파일을 수정한다.

#vi /etc/fail2ban/jail.conf

스크린샷 2015-03-29 오전 1.48.57
상단의 [DEFAULT] 항목을 보자.

ignoreip 에는 ban 이 절대 되지 않을 아이피를 적는다. (123.234.123.234/32 형태로 적는다. 추가시 스페이스바로 구분.)

bantime 은 접속을 차단할 시간이다. 600은 10분을 의미한다.

findtime 은 통계를 찾을 시간이다.

maxretryfail 횟수이다.

스크린샷 2015-03-29 오전 1.57.16

maxretry 항목을 당신의 요구사항에 맞게 변경하자.

원래 3이었는데 6으로 재정의(override) 된다. 6이면 충분하다. 비밀번호 틀리기도 어렵다.

ssh 의 경우 로그인의 성공이나 실패여부를 모두 /var/log/auth.log 에 저장한다.

위의 경우

1) 고객의 ssh 신규접속

2) fail2ban 프로그램이 /var/log/auth.log 파일을 읽어서 최근 600초(10분)동안 6회이상 실패한 기록이 있으면

3) 600초 동안 연결차단

* 라엘이의 설정예제

신뢰된 아이피 및 ban 시간만 변경함.

스크린샷 2015-03-29 오전 2.12.39

* 라엘이의 실 서버 적용예제

아래와 같이 무차별로그인 시도한 사람은 일정기간 ban 될 것이다.

#iptables -L

스크린샷 2015-03-29 오후 12.53.34

 

설정파일 적용을 위해서 Fail2ban 재시작

#service fail2ban restart

 

fail2ban 이 reload 되거나 restart 될 때에 벤 목록이 초기화 된다.

혹시라도 실수로 자신의 아이피가 ban 되었다면 서버 재부팅을 해서 목록을 초기화 하도록 하자.

로그는 삭제되지 않으니 단번에 로그인을 하여야 할 것이다.

4 Comments

  1. 메일 질문에 대한 회신 너무 감사합니다.
    cron 작업이 해킹인줄 알고 걱정을 너무 했네요…
    참…마지막 부분에 service fail2ban restart 빠진거 아닌가요??? ^^;;

    도움 주셔서 감사합니다. ^^

    1. 감사합니다. 해당 내용 추가하였습니다.

  2. 라엘님 ignoreip 뒤에 /32는 어떤건가요..?

    1. IP 범위를 지정하는 것입니다. (Subnet mask)
      /32 의 뜻은 앞의 아이피 하나만 지정하는 것입니다.

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*