본문 바로가기
컴소니/리눅스

[fail2ban] 리눅스 서버 SSH 보안 강화

by 금소니 2022. 5. 10.
반응형

#215

1. SSH를 통한 리눅스 서버 접근

리눅스 서버를 운영하고 계시다면 보안상의 이유로 SSH를 이용하여 대부분 접근하고 계실 겁니다.

(텔넷의 경우 평문 통신을 하여 계정정보가 유출될 수 있음)

SSH 공개키 방식을 통하여 접근하시는 경우도 있지만 많은 분들께서 ID/PW 방식을 이용하여 접근하고 계실 것으로 예상됩니다.

저 또한 ID/PW 방식으로 이용하고 있는데요.

그러다보니 보니 계정정보 관리가 그만큼 중요합니다.

하지만 보통 기본 계정을 유지하고 있는 경우도 있고 패스워드를 쉽게 설정하여 사용하는 경우도 있습니다.

이 경우 사전공격 혹은 무작위 공격에 취약할 수 있습니다.

 

이번 포스팅은 완벽한 방어는 아니지만 위의 취약점을 예방할 수 있는 도구에 대해 알아보도록 하겠습니다.

 

2. 기본적인 SSH 보안

사실 도구가 없더라도 기본적인 SSH 설정을 통하여 보안관리를 할 수 있습니다.

 

1) 로그인 시도 횟수 제한

설정 경로 : /etc/ssh/sshd_config

여기 값에 따라 로그인 시도 횟수를 제한할 수 있습니다.

 

2) 사용자 제어

설정 경로 : /etc/ssh/sshd_config

먼저 위의 설정을 통하여 루트 로그인을 제한할 수 있습니다.

주석을 제거하고 no로 변경하시면 됩니다.

 

사용자와 IP의 경우에는 AllowUsers라는 설정을 통해 접근을 제한할 수 있습니다.

위와 같이 ID만 입력하거나 IP, 혹은 ID에 IP까지 제한할 수 있습니다.

 

3) 계정 패스워드 길이 설정

설정 경로 : /etc/login.defs

이 경로에는 패스워드 관련하여 설정할 수 있는 내용들이 정말 많이 있습니다.

그 중에서도 가장 중요한 부분이 이 길이입니다.

길이가 길수록 무작위 대입 공격이나 사전공격에 있어서 대비할 수 있기때문에 설정하셔서 사용하는게 좋습니다.

 

이 밖에도 많은 설정을 통하여 보안을 강화할 수 있습니다.

 

3. fail2ban이란?

그럼 본격적으로 fail2ban에 대해서 알아보도록 하겠습니다.

이전에 포스팅한 wail2ban의 조상쯤되는 도구로써 리눅스에서 SSH를 통해 무작위 로그인할 경우 IP를 ban시켜줍니다.

따라서 패스워드를 지속적으로 무작위 입력하는 공격에 대하여 방어를 해주는 역할을 합니다.

 

4. fail2ban 공식사이트

 

Fail2ban

Since spammers were way too much active on this wiki, user account creation has been disabled. Please, ask on the mailing-lists if you require a new user account. Thank you for your understanding and sorry about that. To experiment with this wiki try Sandb

www.fail2ban.org

5. fail2ban 설치하기

설치환경

OS : CentOS7

 

1) epel 저장소 추가하기

공식사이트에서 제공하는 epel 저장소가 있어 먼저 추가해야 합니다.

OS 별로 추가하는 방법이 있으니 잘 확인하시기 바랍니다.

 

Extra Packages for Enterprise Linux (EPEL) :: Fedora Docs

The EPEL project strives to provide packages with both high quality and stability. However, EPEL is maintained by a community of people who generally volunteer their time and no commercial support is provided. It is the nature of such a project that packag

docs.fedoraproject.org

2) yum을 이용하여 fail2ban 설치하기

그리고 나서 fail2ban을 yum을 이용해 설치해주시면 됩니다.

3) fail2ban 실행하기

fail2ban을 설치하면 자동으로 서비스에 등록되어 systemctl 명령을 통해 실행할 수 있습니다.

설치하는데 있어서 크게 어렵지는 않죠?

 

6. fail2ban 설정하기

fail2ban 설정과 관련된 내용은 공식사이트의 메뉴얼에 자세하게 나와있습니다.

 

MANUAL 0 8 - Fail2ban

Introduction The problem Brute-force break-in attempts are quite frequent against an SSH server and other password protected internet-services (such as ftp,pop,...). Automated scripts try multiple combinations of username/password (brute-force, dictionary

www.fail2ban.org

디렉토리 구성은 위와 같으며 설정과 관련되있는 중요한 파일은 fail2ban과 jail파일입니다.

fail2ban은 데몬과 관련되어 있는 설정으로써 실제 동작에 대한 설정은 jail파일을 보시면 됩니다.

그리고 local 파일의 경우 별도로 존재하지 않지만 작성할 경우 conf파일을 덮어쓰기하여 동일하게 설정하여 사용할 수 있다고 되어있습니다.

 

그러면 본격적으로 설정해보도록 하겠습니다.

 

1) jail.conf 설정 확인하기

상단에 가장 기본적인 샘플이 작성되어 있습니다.

[DEFAULT]로 하고 아래에 설정 내용을 그리고 [sshd]로 어떤 데몬을 사용할지 작성하는 것으로 보여집니다.

지금의 경우 차단시간을 1시간으로 해놓은 것 같네요.

 

이 밖에도 아래로 내렸을 때 bantime에 대한 추가옵션,

예외 IP처리(ignoreip)

시도횟수에 대한 제한시간(findtime)

시도횟수 제한(maxretry)

메일링

SSH뿐만 아니라 다른 서비스들까지 설정할 수 있었습니다.

2) jail.local을 통해 설정하기

그럼 jail.conf를 참고하여 jail.local을 작성해보도록 하겠습니다.

최초에 jail.local파일은 존재하지 않아 생성해주셔야 합니다.

 

그럼 저는 아래와 같은 조건으로 설정해보도록 하겠습니다.

테스트를 위해 예외처리 IP의 경우 로컬만 넣어주고 진행하도록 하겠습니다.

1) IP 예외처리 : 로컬

2) 차단 시간 : 30분

3) 시도횟수 제한시간 : 10분

4) 시도횟수 : 5번

그리고 나서 서비스를 재시작합니다.

7. fail2ban 테스트해보기

테스트 환경

1) fail2ban이 설치된 서버 IP : 192.168.128.130

2) SSH 접근을 시도하려는 IP : 192.168.128.135

 

제가 설정한대로라면 10분 안에 5번 패스워드가 틀릴 경우 30분동안 접근이 차단될 것입니다.

 

시도해보도록 하겠습니다.

 

접근 시도하려는 서버에서 패스워드를 일부로 틀렸을 때 connection refused가 뜨면서 더 이상 접근이 시도되지 않았습니다.

fail2ban이 설치된 서버에서 확인한 결과 로그인이 실패한 서버의 IP가 fail2ban에 등록되었고 더 이상 로그인이 불가능한 상황입니다.

(fail2ban 상황을 확인하는 명령어는 fail2ban-client status sshd입니다.)

그럼 반대로 ban당한 IP를 삭제하는 방법도 알아야 겠지요?

삭제하는 명령어는 다음과 같습니다.

# fail2ban-client set sshd unbanip [IP]

그럼 ban당한 IP가 삭제된 것을 보실 수 있습니다.

 

이와 같이 활용하여 외부에서 어떠한 IP가 SSH를 통하여 악의적인 의도를 가지고 접근했는지 확인할 수 있고 필요한경우 메일링을 통하여 메일을 수신하실 수도 있습니다.

 

리눅스에 구성되어있는 설정을 이용해서도 충분히 SSH 보안 관리를 할 수 있지만 이러한 좋은 도구들을 활용하여 보안을 편안하게 신경쓸 수 있다면 서버를 운영하는데 큰 도움이 될 것으로 생각됩니다.

반응형

댓글