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

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

보안 보안 보안

윈저 공작 부인, 월리스 심슨, “당신은 결코 너무 부자이거나 너무 마른 사람이 될 수 없습니다”라는 유명한 말을 한 적이 있습니다. 우리는 현대적이고 상호 연결된 세상을 위해 이것을 업데이트했습니다. 너무 조심하거나 너무 안전할 수는 없습니다.

컴퓨터가 다음과 같은 들어오는 연결 요청을 수락하는 경우 보안 쉘 (SSH) 연결 또는 웹 또는 이메일 서버 역할을 하는 경우 무차별 대입 공격 및 암호 추측자로부터 보호해야 합니다.

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

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

fail2ban은 다음과 통합됩니다. 리눅스 방화벽 iptables. 방화벽에 규칙을 추가하여 의심되는 IP 주소에 대한 금지를 시행합니다. 이 설명을 깔끔하게 유지하기 위해 빈 규칙 집합과 함께 iptables를 사용하고 있습니다.

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

다음 명령을 사용하여 빈 규칙 집합을 볼 수 있습니다.

sudo iptables -L

fail2ban 설치

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

sudo apt-get install fail2ban

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

sudo dnf install fail2ban

Manjaro 20.0.1에서는 pacman을 사용했습니다.

sudo pacman -Sy fail2ban

fail2ban 구성

fail2ban 설치에는 jail.conf라는 기본 구성 파일이 포함되어 있습니다. 이 파일은 fail2ban이 업그레이드될 때 덮어쓰여지므로 이 파일을 사용자 정의하면 변경 사항이 손실됩니다.

  SteamOS로 Linux 기반 Steam 콘솔을 만드는 방법

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

파일을 복사하는 방법은 다음과 같습니다.

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

이제 즐겨찾는 편집기에서 파일을 엽니다. 우리는 gedit를 사용할 것입니다:

sudo gedit /etc/fail2ban/jail.local

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

당신은 찾을 것이다 [DEFAULT] 섹션은 40행쯤에 있습니다. 많은 주석과 설명이 있는 긴 섹션입니다.

90행까지 아래로 스크롤하면 알아야 할 다음 네 가지 설정을 찾을 수 있습니다.

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

동일한 IP 주소의 연결이 findtime 기간 내에 maxretry 연결 시도에 실패하면 bantime 기간 동안 차단됩니다. 유일한 예외는 ignoreip 목록의 IP 주소입니다.

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

에서 짐작하셨을 것입니다. [DEFAULT] 섹션 이름이지만 지금까지 살펴본 설정은 기본값입니다. 이제 SSH 감옥에 대한 설정을 살펴보겠습니다.

  Linux 설치를 다른 하드 드라이브로 전송하는 방법

감옥 구성

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

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

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

enabled = true

다음 줄도 입력합니다.

maxretry = 3

기본 설정은 5이지만 SSH 연결에 더 주의하고 싶습니다. 우리는 그것을 3으로 떨어 뜨린 다음 파일을 저장하고 닫았습니다.

이 감옥을 fail2ban의 모니터링에 추가하고 기본 설정 중 하나를 무시했습니다. 감옥은 기본 설정과 감옥 관련 설정을 조합하여 사용할 수 있습니다.

fail2ban 활성화

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

fail2ban을 서비스로 활성화하려면 다음을 사용합니다. systemctl 명령:

sudo systemctl enable fail2ban

우리는 또한 그것을 사용하여 서비스를 시작합니다:

sudo systemctl start fail2ban

systemctl을 사용하여 서비스 상태도 확인할 수 있습니다.

sudo systemctl status fail2ban.service

모든 것이 좋아 보입니다. 우리는 녹색 신호를 받았으므로 모든 것이 정상입니다.

fail2ban이 동의하는지 봅시다:

sudo fail2ban-client status

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

sudo fail2ban-client status sshd

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

감옥 테스트

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

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

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

  시도해 볼 4가지 최고의 아치 Linux 파생 제품

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

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

ssh [email protected]

이전에는 오류 메시지가 “사용 권한이 거부되었습니다.”였습니다. 이번에는 연결이 완전히 거부되었습니다. 우리는 사람이 아닌 사람입니다. 우리는 금지되었습니다.

의 세부사항을 살펴보자. [sshd] 다시 감옥:

sudo fail2ban-client status sshd

3번의 실패가 있었고, 1개의 IP 주소(192.168.4.25)가 차단되었습니다.

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

sudo iptables -L

SSH 트래픽을 f2b-sshd 체인으로 보내는 규칙이 INPUT 정책에 추가되었습니다. f2b-sshd 체인의 규칙은 192.168.4.25의 SSH 연결을 거부합니다. 우리는 bantime에 대한 기본 설정을 변경하지 않았으므로 10분 안에 해당 IP 주소가 금지 해제되고 새로운 연결 요청을 할 수 있습니다.

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

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

sudo fail2ban-client set sshd unbanip 192.168.5.25

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

ssh [email protected]

간단하고 효과적인

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