본문 바로가기
코딩일지/기타(CentOS 등)

CentOS 7 보안 설정 (Fail2Ban)

by 퇴근희망1일차 2023. 3. 5.
반응형

Table of Contents

    Introduction


    리눅스 환경의 서버를 운영하다 보면 다양한 문제를 직면하게 된다.

    폐쇄 네트워크에서 운영하는 서버들은 외부에서 서버로 접속을 시도하는 것 자체가 불가능하니 걱정이 없을 수 있다.

    하지만 외부에서 서버 접속을 허용해야 하는 경우(특히 ssh, rdp 등 원격 접속)에는 서버가 해킹당하지 않을까 걱정을 하지 않을 수 없다.

     

    Fail2Ban은 이러한 해킹에 대한 걱정을 덜어줄 수 있는 프로그램이다. 

    필자는 운영하고 있는 리눅스 서버가 여러 번 해킹 당해 암호화폐 채굴 프로그램이 설치되어 강제로 채굴 노예로 활용 당해본 적이 있어 해킹 시도가 어떤 식으로 오는지 체득한 바 있다.

     

    보통의 경우 ssh 접속을 위하여 사용되는 기본 포트(21, 22)으로 접속 시도가 발생한다.

    다양한 사용자 계정(root, 다양한 해킹당한 이력이 있는 계정들)에 대하여 비밀번호를 수 도 없이 바꿔가면서 접속 시도를 한다.

    이러다가 우연찮게 접속이 되는 계정이 하나 얻어 걸리면 해당 서버는 해커가 마음대로 할 수 있는 환경이 된다.

     

    이렇게 다양한 계정에 대하여 무작위 대입을 통해 리눅스 서버를 해킹하려는 시도를 차단 할 수 있는 프로그램이 본 포스팅에서 소개하는 Fail2Ban 프로그램이다.

     

    Fail2Ban 설치


    우분투와 CentOS의 경우 각각 다음의 명령어를 통하여 Fail2Ban을 설치할 수 있다.

     

    Ubuntu

    sudo apt-get install fail2ban

    CentOS

    sudo yum-install fail2ban

     

    Fail2Ban 환경설정


    Fail2Ban 프로그램을 설치하였다면, 적절한 환경 설정을 수행해야 한다. 설치만 했다고 만사 OK가 아닌 것.

    Fail2Ban 설정은 /etc/fail2ban/jail.conf 파일을 수정하여 수행할 수 있다.

     

    jail.conf 파일을 열어보면 다양한 옵션들이 존재할 것이다.

    필자의 경우 대부분의 옵션들은 수정하지 않고 몇 가지 옵션만 수정하여 사용하고 있는데 효과가 확실하다.

    앞서 introduction에서 간단하게 소개했다시피 Fail2Ban은 무작위 계정에 대한 반복적인 해킹시도를 차단하는 아주 효과적인 프로그램이다.

     

    Fail2Ban은 특정 IP 주소에서 어떠한 계정 로그인을 시도하는데, 설정한 횟수 이상 비밀번호가 틀릴 경우 해당 IP를 jail.conf에 설정한 시간만큼 밴을 하는 방식으로 동작한다.

     

    따라서 Fail2Ban 프로그램 설정 시 가장 중요한 것은 1. 몇 번 로그인을 실패하면 밴을 할 것인가? 2. 몇 시간 이내의 로그인 실패를 누적하여 카운팅 할 것인가? 3.얼마나 밴을 할 것인가? 라고 할 수 있다.

    이를 설정하는 방법을 순서대로 설명하도록 하겠다.

     

    1. 몇 번 로그인을 실패하면 밴을 할 것인가?

    로그인 실패 횟수에 대한 정보는 /etc/fail2ban/jail.conf 파일의 maxretry 항목을 통하여 설정할 수 있다.

    필자가 운영하고 있는 서버의 경우, 10번의 로그인 시도 실패가 있을 경우 해킹시도라고 판단하여 해당 아이피를 밴을 한다.

    이를 설정하기 위해서는 jail.conf 파일에서 하기와 같은 구문을 찾아서 기재하면 된다.

    # "maxretry" is the number of failures before a host get banned.
    maxretry = 10

     

    2. 몇 시간 이내의 로그인 실패를 누적하여 카운팅 할 것인가?

    이는 jail.conf 파일의 findtime을 통하여 설정할 수 있다. 아래와 같이 설정할 경우, 24시간 이내에 maxretry 횟수만큼 로그인 실패를 할 경우, 해당 아이피를 밴을 하는 것이다.

    # A host is banned if it has generated "maxretry" during the last "findtime"
    # seconds.
    findtime = 24h

    3. 얼마나 밴을 할 것인가?

    접속 실패가 계속하여 누적되면 fail2ban 프로그램에서 자동적으로 접속을 시도한 아이피를 밴을 한다.

    밴을 하는 시간은 bantime에 의하여 결정되는데, 외부에서 접속 시도를 계속 하는데 계속 틀리는 경우는 해킹의 경우를 제외하고는 거의 없을 것이다.

    해킹의 경우 굳이 아이피 밴을 특정 시간동안 하기 보다는 영구 밴을 하는 것이 낫기 때문에 bantime을 -1로 설정한다.

    이렇게 bantime을 -1로 입력할 경우, 영구적인 아이피 밴을 하게 되는 것이다.

    # "bantime" is the number of seconds that a host is banned.
    bantime = -1

     

    이와 같이 fail2ban 설정을 완료하였다면 fail2ban이 모니터링 할 프로그램과 포트를 명시해주어야 한다.

    Fail2ban 프로그램을 설치한 바로 직후라면 따로 모니터링 하는 프로그램과 포트가 없을 것이다.

    따라서 해킹 시도가 발생하더라도 fail2ban 프로그램은 아무런 역할을 수행하지 못 할 것이다.

     

    SSH에 대하여 fail2ban을 활성화 하고 싶다면 다음과 같이 설정하자.

    이 또한 /etc/fail2ban/jail.conf 파일에서 기재하는 것이다.

    enbled = true 항목은 기존에는 기재되어 있지 않을텐데 해당 내용을 기재하자.

    [sshd]

    # To use more aggressive sshd modes set filter parameter "mode" in jail.local:
    # normal (default), ddos, extra or aggressive (combines all).
    # See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
    #mode = normal
    enabled = true
    port = ssh
    logpath = %(sshd_log)s
    backend = %(sshd_backend)s

    참고로 vim editor에서 명령어 입력 모드에서 슬래시(/)를 입력하고 ssh를 입력하면 ssh가 포함된 문자열을 찾아주는 기능이 있다.이를 참고하면 빠르게 ssh 설정 관련된 항목을 찾을 수 있다.

     

    마무리


    글을 보고 여기까지 수정하였다면 ssh에 대한 접속 시도를 차단하는 설정이 완료된 것이다.

    이후 파일을 저장하고, fail2ban을 재시작하면 된다.

     

    CentOS의 경우 아래의 명령어를 터미널에 입력하여 fail2ban을 재시작하면 된다.

    sudo systemctl restart fail2ban

    이로써 ssh를 통한 워크스테이션 해킹시도를 자동으로 차단해주는 설정은 완료된다.

     

     

    반응형

    '코딩일지 > 기타(CentOS 등)' 카테고리의 다른 글

    깃허브 (GitHub) CLI 명령어 모음  (0) 2024.11.24

    댓글