웹사이트 검색

CentOS 7에서 Fail2Ban으로 SSH를 보호하는 방법


소개

SSH를 통해 서버에 연결하는 것은 매우 안전할 수 있지만 SSH 데몬 자체는 제대로 작동하려면 인터넷에 노출되어야 하는 서비스입니다. 여기에는 약간의 내재적 위험이 따르며 잠재적 공격자에게 공격 벡터를 제공합니다.

네트워크에 노출된 모든 서비스는 이러한 방식으로 잠재적인 대상이 됩니다. 이러한 서비스에 대한 애플리케이션 로그에 주의를 기울이면 사용자와 봇 모두에 의한 무차별 대입 공격을 나타내는 반복적이고 체계적인 로그인 시도를 자주 볼 수 있습니다.

Fail2ban이라는 서비스는 미리 정의된 실패한 로그인 시도 횟수에 따라 iptables 방화벽 구성을 자동으로 변경하는 규칙을 생성하여 이 문제를 완화할 수 있습니다. 이렇게 하면 서버가 사용자의 개입 없이 불법 액세스 시도에 응답할 수 있습니다.

이 가이드에서는 CentOS 7 서버에서 Fail2ban을 설치하고 사용하는 방법에 대해 설명합니다.

CentOS 7에 Fail2ban 설치

Fail2ban은 공식 CentOS 패키지 저장소에서 사용할 수 없지만 EPEL 프로젝트용으로 패키지되어 있습니다. Extra Packages for Enterprise Linux를 나타내는 EPEL은 CentOS에서 사용할 수 있는 릴리스 패키지와 함께 설치할 수 있습니다.

  1. sudo yum install epel-release

계속할지 묻는 메시지가 표시되면 y를 누른 다음 Enter를 누릅니다.

yum prompt
Transaction Summary ============================================================================ Install 1 Package Total download size: 14 k Installed size: 24 k Is this ok [y/d/N]: y

이제 fail2ban 패키지를 설치할 수 있어야 합니다.

  1. sudo yum install fail2ban

계속할지 묻는 메시지가 표시되면 다시 y를 누르고 Enter를 누릅니다.

설치가 완료되면 systemctl을 사용하여 fail2ban 서비스를 활성화합니다.

  1. sudo systemctl enable fail2ban

로컬 설정 구성

Fail2ban 서비스는 구성 파일을 /etc/fail2ban 디렉토리에 보관합니다. 거기에서 jail.conf라는 기본값이 있는 파일을 찾을 수 있습니다. 패키지 업그레이드로 이 파일을 덮어쓸 수 있으므로 내부에서 편집하면 안 됩니다. 대신 jail.local이라는 새 파일을 작성합니다. jail.local에 정의된 값은 jail.conf의 값보다 우선합니다.

jail.conf에는 [DEFAULT] 섹션과 개별 서비스에 대한 섹션이 있습니다. jail.local은 이러한 값을 재정의할 수 있습니다. 또한 /etc/fail2ban/jail.d/의 파일을 사용하여 이 두 파일의 설정을 재정의할 수 있습니다. 파일은 다음 순서로 적용됩니다.

  1. <코드>/etc/fail2ban/jail.conf
  2. /etc/fail2ban/jail.d/*.conf, 알파벳순
  3. <코드>/etc/fail2ban/jail.local
  4. /etc/fail2ban/jail.d/*.local, 알파벳순

모든 파일에는 먼저 실행되는 [DEFAULT] 섹션이 포함될 수 있으며 개별 감옥에 대한 섹션도 포함될 수 있습니다. 지정된 매개변수에 대해 설정된 마지막 vavalue가 우선합니다.

jail.local의 매우 간단한 버전을 작성하는 것으로 시작하겠습니다. nano(또는 선택한 편집기)를 사용하여 새 파일을 엽니다.

  1. sudo nano /etc/fail2ban/jail.local

다음을 붙여넣습니다.

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true

이것은 세 가지 설정을 재정의합니다. 모든 서비스에 대해 새로운 기본 bantime을 설정하고, 방화벽 구성에 iptables를 사용하고 있는지 확인하고, sshd 를 활성화합니다. 감옥.

종료하고 새 파일을 저장합니다(nano에서 Ctrl-X를 눌러 종료, y를 눌러 저장, Enter를 눌러 파일 이름 확인). 이제 systemctl을 사용하여 fail2ban 서비스를 다시 시작할 수 있습니다.

  1. sudo systemctl restart fail2ban

systemctl 명령은 출력 없이 완료되어야 합니다. 서비스가 실행 중인지 확인하기 위해 fail2ban-client를 사용할 수 있습니다.

  1. sudo fail2ban-client status
Output
Status |- Number of jail: 1 `- Jail list: sshd

특정 감옥에 대한 자세한 정보를 얻을 수도 있습니다.

  1. sudo fail2ban-client status sshd

사용 가능한 설정 살펴보기

위에서 정의한 jail.local 버전은 좋은 시작이지만 여러 가지 다른 설정을 조정해야 할 수도 있습니다. jail.conf를 열고 몇 가지 기본값을 살펴보겠습니다. 이러한 값을 변경하기로 결정한 경우 해당 값을 jail.local의 해당 섹션에 복사하고 내부에서 수정하는 대신 조정해야 한다는 점을 기억하세요.

  1. sudo nano /etc/fail2ban/jail.conf

모든 감옥에 대한 기본 설정

먼저 [DEFAULT] 섹션을 스크롤합니다.

ignoreip = 127.0.0.1/8

ignoreip 매개변수에 값을 추가하여 Fail2ban이 무시하는 소스 주소를 조정할 수 있습니다. 현재 로컬 시스템에서 오는 트래픽을 금지하지 않도록 구성되어 있습니다. 공백으로 구분하여 매개변수 끝에 추가하여 무시할 추가 주소를 포함할 수 있습니다.

bantime = 600

bantime 매개변수는 클라이언트가 올바르게 인증하지 못한 경우 차단되는 시간을 설정합니다. 이것은 초 단위로 측정됩니다. 기본적으로 이 값은 600초 또는 10분으로 설정됩니다.

findtime = 600
maxretry = 3

주목해야 할 다음 두 매개변수는 findtimemaxretry입니다. 이들은 클라이언트가 금지되어야 하는 조건을 설정하기 위해 함께 작동합니다.

maxretry 변수는 금지되기 전에 클라이언트가 findtime에 정의된 시간 창 내에서 인증해야 하는 시도 횟수를 설정합니다. 기본 설정으로 Fail2ban은 10분 동안 3번 로그인 시도에 실패한 클라이언트를 차단합니다.

destemail = root@localhost
sendername = Fail2Ban
mta = sendmail

이메일 알림을 구성하려면 destemail, sendernamemta 설정을 재정의해야 할 수 있습니다. destemail 매개변수는 금지 메시지를 수신해야 하는 이메일 주소를 설정합니다. sendername은 이메일의 "보낸 사람\ 필드 값을 설정합니다. mta 매개변수는 메일을 보내는 데 사용할 메일 서비스를 구성합니다.

action = $(action_)s

이 매개변수는 Fail2ban이 차단을 시작하려고 할 때 취하는 조치를 구성합니다. action_ 값은 파일에서 이 매개변수 바로 전에 정의됩니다. 기본 동작은 차단 시간이 경과할 때까지 위반 호스트의 트래픽을 거부하도록 방화벽을 구성하는 것입니다.

이메일 알림을 구성하려면 이 값을 action_에서 action_mw로 재정의할 수 있습니다. 이메일에 관련 로그 라인을 포함시키려면 action_mwl로 변경할 수 있습니다. 메일 알림을 사용하도록 선택한 경우 적절한 메일 설정이 구성되어 있는지 확인하고 싶을 것입니다.

개인 감옥 설정

[DEFAULT] 이후에 다양한 서비스에 대한 개별 감옥을 구성하는 섹션이 나타납니다. 여기에는 일반적으로 금지할 포트와 악의적인 액세스 시도를 모니터링하기 위한 로그 경로가 포함됩니다. 예를 들어 jail.local에서 이미 활성화한 SSH 감옥의 설정은 다음과 같습니다.

[sshd]

port    = ssh
logpath = %(sshd_log)s

이 경우 ssh는 표준 SSH 포트에 대해 미리 정의된 변수이고 %(sshd_log)s는 Fail2ban의 표준 구성에 정의된 값을 사용합니다(이는 jail.conf 다른 운영 체제 간에 이식 가능).

발생할 수 있는 또 다른 설정은 로그의 한 줄이 인증 실패를 나타내는지 여부를 결정하는 데 사용되는 필터입니다.

filter 값은 실제로 .conf 확장자가 제거된 /etc/fail2ban/filter.d 디렉토리에 있는 파일에 대한 참조입니다. . 이 파일에는 로그의 행이 잘못된지 여부를 판별하는 정규 표현식이 포함되어 있습니다. 이 가이드에서는 이 파일을 자세히 다루지 않을 것입니다. 상당히 복잡하고 미리 정의된 설정이 적절한 줄과 잘 일치하기 때문입니다.

그러나 해당 디렉토리를 살펴보면 어떤 종류의 필터를 사용할 수 있는지 확인할 수 있습니다.

  1. ls /etc/fail2ban/filter.d

사용 중인 서비스와 관련이 있는 것으로 보이는 파일이 보이면 텍스트 편집기로 파일을 열어야 합니다. 대부분의 파일에는 상당히 잘 설명되어 있으며 스크립트가 보호하도록 설계된 조건 유형을 알 수 있어야 합니다. 이러한 필터의 대부분은 원하는 경우 jail.local에서 활성화할 수 있는 jail.conf에 적절한(비활성화) 섹션이 있습니다.

예를 들어, 우리가 Nginx를 사용하여 웹사이트를 제공하고 있다고 가정하고 우리 사이트의 암호로 보호된 부분이 로그인 시도로 인해 꽝 닫히고 있다는 것을 알게 됩니다. Fail2ban에게 nginx-http-auth.conf 파일을 사용하여 /var/log/nginx/error.log 파일 내에서 이 조건을 확인하도록 지시할 수 있습니다.

이것은 실제로 /etc/fail2ban/jail.conf 파일의 [nginx-http-auth] 섹션에 이미 설정되어 있습니다. nginx-http-auth 감옥에 대한 enabled 매개변수를 jail.local에 추가하기만 하면 됩니다.

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

[sshd]
enabled = true

[nginx-http-auth]
enabled = true

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

  1. sudo systemctl restart fail2ban

Fail2ban 로그 및 방화벽 구성 모니터링

Fail2ban과 같은 서비스가 의도한 대로 작동하는지 아는 것이 중요합니다. systemctl을 사용하여 시작하여 서비스 상태를 확인합니다.

  1. sudo systemctl status fail2ban

여기에서 문제가 있는 것 같으면 마지막 부팅 이후 fail2ban 장치에 대한 로그를 확인하여 문제를 해결할 수 있습니다.

  1. sudo journalctl -b -u fail2ban

다음으로 fail2ban-client를 사용하여 fail2ban-server 또는 개별 감옥의 전체 상태를 쿼리합니다.

  1. sudo fail2ban-client status
  2. sudo fail2ban-client status jail_name

최근 작업 기록을 보려면 Fail2ban의 로그를 따르십시오(Ctrl-C를 눌러 종료).

  1. sudo tail -F /var/log/fail2ban.log

iptables에 대해 구성된 현재 규칙을 나열합니다.

  1. sudo iptables -L

각 규칙을 활성화하는 데 필요한 명령을 반영하는 형식으로 iptables 규칙을 표시합니다.

  1. sudo iptables -S

결론

이제 서비스에 대한 몇 가지 기본 금지 정책을 구성할 수 있습니다. Fail2ban은 설정이 매우 쉽고 인증을 사용하는 모든 종류의 서비스를 보호하는 좋은 방법입니다.

Fail2ban 작동 방식에 대해 자세히 알아보려면 fail2ban 규칙 및 파일 작동 방식에 대한 자습서를 확인하십시오.