fail2ban으로 Linux 서버를 보호하는 방법

0
491
Ubuntu 스타일의 Linux 랩톱에서 실행되는 양식화 된 터미널 창입니다.
Fatmawati Achmad Zaenuri / Shutterstock

fail2ban, Linux 컴퓨터는 연결 실패가 너무 많은 IP 주소를 자동으로 차단합니다. 자체 규제 보안입니다! 사용 방법을 알려 드리겠습니다.

보안 보안 보안

Windsor 공작부 인 Wallis Simpson은 한때 “너무 부자이거나 너무 얇을 수는 없습니다.”라고 유명하게 말했습니다. 우리는 현대적이고 상호 연결된 세상을 위해 이것을 업데이트했습니다. 너무 조심하거나 너무 안전 할 수는 없습니다.

컴퓨터가 SSH (Secure Shell) 연결과 같은 들어오는 연결 요청을 수락하거나 웹 또는 이메일 서버로 작동하는 경우 무차별 대입 공격 및 암호 추측으로부터 컴퓨터를 보호해야합니다.

이렇게하려면 계정에 로그인하지 못하는 연결 요청을 모니터링해야합니다. 짧은 기간 내에 반복적으로 인증에 실패하면 추가 시도를 금지해야합니다.

이를 실제로 달성 할 수있는 유일한 방법은 전체 프로세스를 자동화하는 것입니다. 약간의 간단한 구성으로 fail2ban 모니터링, 차단 및 차단 해제를 관리합니다.

fail2ban Linux 방화벽과 통합 iptables. 방화벽에 규칙을 추가하여 의심스러운 IP 주소에 대한 금지를 시행합니다. 이 설명을 깔끔하게 유지하기 위해 iptables 빈 규칙 세트로.

물론 보안이 염려된다면 잘 채워진 규칙 세트로 구성된 방화벽이있을 것입니다. fail2ban 자체 규칙 만 추가하고 제거합니다. 일반 방화벽 기능은 그대로 유지됩니다.

다음 명령을 사용하여 빈 규칙 세트를 볼 수 있습니다.

sudo iptables -L

터미널 창에서 sudo iptables -L.

관련 : Linux 방화벽 인 iptables 초보자 가이드

fail2ban 설치

설치 중 fail2ban 이 기사를 연구하는 데 사용한 모든 배포판에서 간단합니다. Ubuntu 20.04에서 명령은 다음과 같습니다.

sudo apt-get install fail2ban

sudo apt-get install fail2ban in a terminal window.

Fedora 32에서 다음을 입력합니다.

sudo dnf install fail2ban

sudo dnf는 터미널 창에 fail2ban을 설치합니다.

Manjaro 20.0.1에서는 pacman:

sudo pacman -Sy fail2ban

sudo pacman -Sy fail2ban in a terminal window.

fail2ban 구성

그만큼 fail2ban 설치에는 jail.conf라는 기본 구성 파일이 포함되어 있습니다. 이 파일은 다음과 같은 경우 덮어 씁니다. fail2ban 이 파일을 사용자 지정하면 변경 사항이 손실됩니다.

대신 jail.conf 파일을 jail.local이라는 파일에 복사합니다. 구성 변경 사항을 jail.local에 저장하면 업그레이드 후에도 유지됩니다. 두 파일 모두 자동으로 읽습니다. fail2ban.

다음은 파일을 복사하는 방법입니다.

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local in a terminal window.

이제 좋아하는 편집기에서 파일을 엽니 다. 우리는 사용할 것입니다 gedit:

sudo gedit /etc/fail2ban/jail.local

파일에서 두 섹션을 찾습니다. [DEFAULT] 과 [sshd]. 하지만 실제 섹션을 찾아야합니다. 이러한 레이블은 해당 레이블을 설명하는 섹션의 상단 근처에도 표시되지만 우리가 원하는 것은 아닙니다.

/etc/fail2ban/jail.local이 gedit 창에서 열립니다.

당신은 [DEFAULT] 40 행 근처에있는 섹션입니다. 많은 주석과 설명이있는 긴 섹션입니다.

/etc/fail2ban/jail.local이 gedit 창에서 열리고 89 행으로 스크롤되었습니다.

90 번 줄까지 아래로 스크롤하면 알아야 할 다음 네 가지 설정이 있습니다.

  • ignoreip : 절대 금지되지 않는 IP 주소의 화이트리스트. 영구 탈옥 카드가 있습니다. 로컬 호스트 IP 주소 (127.0.0.1)는 기본적으로 해당 IPv6 (::1). 금지해서는 안되는 다른 IP 주소가있는 경우이 목록에 추가하고 각 주소 사이에 공백을 두십시오.
  • 금지 시간 : IP 주소가 금지 된 기간 ( “m”은 분을 나타냄). “m”또는 “h”(시간)없이 값을 입력하면 초로 처리됩니다. -1 값은 IP 주소를 영구적으로 금지합니다. 자신을 영구적으로 잠그지 않도록주의하십시오.
  • 발견 시간 : 너무 많은 연결 시도 실패로 인해 IP 주소가 금지되는 시간입니다.
  • maxretry : “실패한 시도가 너무 많음”에 대한 값입니다.

동일한 IP 주소에서 연결하면 maxretry 내에서 실패한 연결 시도 findtime 기간 동안 그들은 금지됩니다 bantime. 유일한 예외는 ignoreip 명부.

fail2ban IP 주소를 일정 기간 동안 감옥에 넣습니다. fail2ban 다양한 감옥을 지원하며 각각은 단일 연결 유형에 적용되는 설정을 보유합니다. 이를 통해 다양한 연결 유형에 대해 다른 설정을 가질 수 있습니다. 또는 가질 수 있습니다 fail2ban 선택한 연결 유형 집합 만 모니터링합니다.

당신은 그것을 [DEFAULT] 섹션 이름이지만 우리가 살펴본 설정이 기본값입니다. 이제 SSH 감옥에 대한 설정을 살펴 보겠습니다.

관련 : gedit를 사용하여 Linux에서 그래픽으로 텍스트 파일을 편집하는 방법

감옥 구성

감옥을 사용하면 연결 유형을 안팎으로 이동할 수 있습니다. fail2ban's 모니터링. 기본 설정이 감옥에 적용하려는 설정과 일치하지 않으면 다음에 대한 특정 값을 설정할 수 있습니다. bantime, findtime, 및 maxretry.

약 280 행까지 아래로 스크롤하면 [sshd] 부분.

/etc/fail2ban/jail.local이 gedit 창에서 열리고 280 행으로 스크롤되었습니다.

여기서 SSH 연결 감옥에 대한 값을 설정할 수 있습니다. 이 감옥을 감시 및 금지에 포함 시키려면 다음 줄을 입력해야합니다.

enabled = true

다음 줄도 입력합니다.

maxretry = 3

기본 설정은 5이지만 SSH 연결에 더주의를 기울이고 싶습니다. 3 개로 줄인 다음 파일을 저장하고 닫았습니다.

이 감옥을 다음에 추가했습니다. fail2ban's 모니터링하고 기본 설정 중 하나를 덮어 씁니다. 감옥은 기본 설정과 감옥 별 설정의 조합을 사용할 수 있습니다.

fail2ban 활성화

지금까지 우리는 fail2ban 구성했습니다. 이제 자동 시작 서비스로 실행되도록 설정해야합니다. 그런 다음 예상대로 작동하는지 테스트해야합니다.

사용하려면 fail2ban 서비스로, 우리는 systemctl 명령:

sudo systemctl enable fail2ban

또한 서비스를 시작하는데도 사용합니다.

sudo systemctl start fail2ban

sudo systemctl은 터미널 창에서 fail2ban을 활성화합니다.

우리는 다음을 사용하여 서비스 상태를 확인할 수 있습니다. systemctl, 너무 :

sudo systemctl status fail2ban.service

sudo systemctl status fail2ban.service in a terminal window.

모든 것이 좋아 보입니다. 녹색 표시등이있어 모든 것이 정상입니다.

보자 fail2ban 동의합니다 :

sudo fail2ban-client status

터미널 창에서 sudo fail2ban-client 상태.

이것은 우리가 설정 한 내용을 반영합니다. 우리는 하나의 감옥을 활성화했습니다. [sshd]. 이전 명령에 감옥 이름을 포함하면 더 자세히 살펴볼 수 있습니다.

sudo fail2ban-client status sshd

sudo fail2ban-client status sshd in a terminal window.

여기에는 실패 횟수와 금지 된 IP 주소가 나열됩니다. 물론 현재 모든 통계는 0입니다.

감옥 테스트

다른 컴퓨터에서 테스트 머신에 SSH 연결을 요청하고 의도적으로 비밀번호를 잘못 입력합니다. 각 연결 시도에서 암호를 올바르게 얻기 위해 세 번의 시도가 있습니다.

그만큼 maxretry 세 번의 암호 시도 실패가 아니라 세 번의 연결 시도 실패 후에 값이 트리거됩니다. 따라서 연결 시도에 실패하려면 잘못된 암호를 세 번 입력해야합니다.

그런 다음 다시 연결을 시도하고 암호를 다시 세 번 잘못 입력합니다. 세 번째 연결 요청의 첫 번째 잘못된 암호 시도가 트리거되어야합니다. fail2ban.

ssh dave@ubtuntu20-04.local은 많은 실패한 암호 시도가있는 터미널 창에서.

세 번째 연결 요청에서 첫 번째 잘못된 암호 이후에 원격 시스템에서 응답을받지 못합니다. 우리는 어떤 설명도 얻지 못합니다. 우리는 차가운 어깨를 얻습니다.

명령 프롬프트로 돌아가려면 Ctrl + C를 눌러야합니다. 한 번 더 시도하면 다른 응답을 받게됩니다.

ssh dave@ubuntu20-04.local

연결이 거부 된 응답이있는 터미널 창에서 ssh dave@ubuntu20-04.local.

이전에는 오류 메시지가 “Permission denied”였습니다. 이번에는 연결이 완전히 거부되었습니다. 우리는 그라 타가 아닌 페르소나입니다. 우리는 금지되었습니다.

자세한 내용을 살펴 보겠습니다. [sshd] 다시 감옥 :

sudo fail2ban-client status sshd

sudo fail2ban-client status sshd in a terminal window.

세 번의 실패가 있었고 하나의 IP 주소 (192.168.4.25)가 금지되었습니다.

앞서 언급했듯이 fail2ban 방화벽 규칙 세트에 규칙을 추가하여 차단을 시행합니다. 규칙 세트를 다시 살펴 보겠습니다 (이전에 비어 있었음).

sudo iptables -L

터미널 창에서 sudo iptables -L.

INPUT 정책에 규칙이 추가되어 SSH 트래픽을 f2b-sshd 체인. 의 규칙 f2b-sshd 체인은 192.168.4.25의 SSH 연결을 거부합니다. 기본 설정을 변경하지 않았습니다. bantime, 따라서 10 분 안에 해당 IP 주소가 차단 해제되고 새로운 연결 요청을 할 수 있습니다.

더 긴 차단 기간 (예 : 몇 시간)을 설정했지만 IP 주소가 다른 연결 요청을 더 빨리 할 수 ​​있도록하려면 일찍 가석방 할 수 있습니다.

이를 위해 다음을 입력합니다.

sudo fail2ban-client set sshd unbanip 192.168.5.25

sudo fail2ban-client set sshd unbanip 192.168.5.25 in a terminal window.

원격 컴퓨터에서 다른 SSH 연결 요청을하고 올바른 암호를 입력하면 연결이 허용됩니다.

ssh dave@ubuntu20-04.local

터미널 창에서 ssh dave@ubuntu20-04.local.

간단하고 효과적

일반적으로 단순할수록 좋습니다. fail2ban 까다로운 문제에 대한 우아한 해결책입니다. 구성이 거의 필요하지 않으며 사용자 또는 컴퓨터에 운영 오버 헤드가 거의 발생하지 않습니다.