찾다
시스템 튜토리얼리눅스Fail2Ban을 사용하여 무차별 대입 공격으로부터 서버를 보호하는 방법

Fail2Ban을 사용하여 무차별 대입 공격으로부터 서버를 보호하는 방법

Apr 27, 2024 am 08:34 AM
mysqllinuxpythoncentosapachenginxaccess리눅스 튜토리얼레드햇리눅스 시스템리눅스 명령리눅스 인증빨간 모자 리눅스리눅스 비디오

Linux 관리자의 중요한 임무는 불법적인 공격이나 접근으로부터 서버를 보호하는 것입니다. 기본적으로 Linux 시스템에는 iptables, UFW(Uncomplicated Firewall), CSF(ConfigServer Security Firewall) 등과 같이 잘 구성된 방화벽이 함께 제공되어 다양한 공격을 방지할 수 있습니다.

如何使用 Fail2Ban 保护服务器免受暴力攻击

인터넷에 연결된 모든 기계는 악의적인 공격의 잠재적인 대상입니다. 서버에 대한 무단 액세스를 완화하는 데 사용할 수 있는 Fail2Ban이라는 도구가 있습니다.

Fail2Ban이 무엇인가요?

Fail2Ban[1]은 무차별 공격으로부터 서버를 보호하는 침입 방지 소프트웨어입니다. Python 프로그래밍 언어로 작성되었습니다. Fail2Ban은 인증 로그 파일을 기반으로 작동하며 기본적으로 /var/log/auth.log, /var/log/apache/access.log 등과 같은 모든 인증 로그 파일을 검사하고 악성을 차단합니다. 너무 많은 비밀번호 실패 등 IP에 플래그를 지정하여 취약점 및 기타 징후를 찾습니다.

보통 Fail2Ban은 특정 기간 동안 IP 주소를 거부하는 방화벽 규칙을 업데이트하는 데 사용됩니다. 또한 이메일 알림도 보냅니다. Fail2Ban은 ssh, apache, nginx, squid, names, mysql, nagios 등과 같은 다양한 서비스에 대한 많은 필터를 제공합니다.

Fail2Ban은 허위 인증 시도 속도를 줄일 수 있지만 취약한 인증의 위험을 제거할 수는 없습니다. 이는 서버가 무차별 대입 공격을 방지하기 위해 사용하는 보안 조치 중 하나일 뿐입니다.

Linux에 Fail2Ban을 설치하는 방법

Fail2Ban은 이미 대부분의 Linux 배포판에 패키지되어 있으므로 배포판의 패키지 관리자를 사용하여 설치하면 됩니다.

Debian/Ubuntu의 경우 APT-GET 명령 [2] 또는 APT 명령 [3]을 사용하여 설치하세요.

으아악

Fedora의 경우 DNF 명령[4]을 사용하여 설치하세요.

으아악

CentOS/RHEL의 경우 EPEL 라이브러리 [5] 또는 RPMForge [6] 라이브러리를 활성화하고 YUM 명령 [7]을 사용하여 설치합니다.

으아악

Arch Linux의 경우 Pacman 명령[8]을 사용하여 설치하세요.

으아악

openSUSE의 경우 Zypper 명령 [9]을 사용하여 설치하세요.

으아악
Fail2Ban
구성 방법

默认情况下,Fail2Ban 将所有配置文件保存在 /etc/fail2ban/ 目录中。 主配置文件是 jail.conf,它包含一组预定义的过滤器。 所以,不要编辑该文件,这是不可取的,因为只要有新的更新,配置就会重置为默认值。

只需在同一目录下创建一个名为 jail.local 的新配置文件,并根据您的意愿进行修改。

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

默认情况下,大多数选项都已经配置的很完美了,如果要启用对任何特定 IP 的访问,则可以将 IP 地址添加到 ignoreip 区域,对于多个 IP 的情况,用空格隔开 IP 地址。

配置文件中的 DEFAULT 部分包含 Fail2Ban 遵循的基本规则集,您可以根据自己的意愿调整任何参数。

# nano /etc/fail2ban/jail.local

[DEFAULT]
ignoreip = 127.0.0.1/8 192.168.1.100/24
bantime = 600
findtime = 600
maxretry = 3
destemail = 2daygeek@gmail.com
  • ignoreip:本部分允许我们列出 IP 地址列表,Fail2Ban 不会禁止与列表中的地址匹配的主机
  • bantime:主机被禁止的秒数
  • findtime:如果在最近 findtime 秒期间已经发生了 maxretry 次重试,则主机会被禁止
  • maxretry:是主机被禁止之前的失败次数
如何配置服务

Fail2Ban 带有一组预定义的过滤器,用于各种服务,如 ssh、apache、nginx、squid、named、mysql、nagios 等。 我们不希望对配置文件进行任何更改,只需在服务区域中添加 enabled = true 这一行就可以启用任何服务。 禁用服务时将 true 改为 false 即可。

# SSH servers
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
  • enabled: 确定服务是打开还是关闭。
  • port:指明特定的服务。 如果使用默认端口,则服务名称可以放在这里。 如果使用非传统端口,则应该是端口号。
  • logpath:提供服务日志的位置
  • backend:指定用于获取文件修改的后端。
重启 Fail2Ban

进行更改后,重新启动 Fail2Ban 才能生效。

[For SysVinit Systems]
# service fail2ban restart

[For systemd Systems]
# systemctl restart fail2ban.service
验证 Fail2Ban iptables 规则

你可以使用下面的命令来确认是否在防火墙中成功添加了Fail2Ban iptables 规则。

# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
f2b-apache-auth tcp -- anywhere anywhere multiport dports http,https
f2b-sshd tcp -- anywhere anywhere multiport dports 1234
ACCEPT tcp -- anywhere anywhere tcp dpt:1234

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain f2b-apache-auth (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere

Chain f2b-sshd (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
如何测试 Fail2Ban

我做了一些失败的尝试来测试这个。 为了证实这一点,我要验证 /var/log/fail2ban.log 文件。

2017-11-05 14:43:22,901 fail2ban.server [7141]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.6
2017-11-05 14:43:22,987 fail2ban.database [7141]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
2017-11-05 14:43:22,996 fail2ban.database [7141]: WARNING New database created. Version '2'
2017-11-05 14:43:22,998 fail2ban.jail [7141]: INFO Creating new jail 'sshd'
2017-11-05 14:43:23,002 fail2ban.jail [7141]: INFO Jail 'sshd' uses poller {}
2017-11-05 14:43:23,019 fail2ban.jail [7141]: INFO Initiated 'polling' backend
2017-11-05 14:43:23,019 fail2ban.filter [7141]: INFO Set maxRetry = 5
2017-11-05 14:43:23,020 fail2ban.filter [7141]: INFO Set jail log file encoding to UTF-8
2017-11-05 14:43:23,020 fail2ban.filter [7141]: INFO Added logfile = /var/log/auth.log
2017-11-05 14:43:23,021 fail2ban.actions [7141]: INFO Set banTime = 600
2017-11-05 14:43:23,021 fail2ban.filter [7141]: INFO Set findtime = 600
2017-11-05 14:43:23,022 fail2ban.filter [7141]: INFO Set maxlines = 10
2017-11-05 14:43:23,070 fail2ban.server [7141]: INFO Jail sshd is not a JournalFilter instance
2017-11-05 14:43:23,081 fail2ban.jail [7141]: INFO Jail 'sshd' started
2017-11-05 14:43:23,763 fail2ban.filter [7141]: INFO [sshd] Found 103.5.134.167
2017-11-05 14:43:23,763 fail2ban.filter [7141]: INFO [sshd] Found 103.5.134.167
2017-11-05 14:43:23,764 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170
2017-11-05 14:43:23,764 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170
2017-11-05 14:43:23,765 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170
2017-11-05 14:43:23,765 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170
2017-11-05 15:19:06,192 fail2ban.server [7141]: INFO Stopping all jails
2017-11-05 15:19:06,874 fail2ban.jail [7141]: INFO Jail 'sshd' stopped
2017-11-05 15:19:06,879 fail2ban.server [7141]: INFO Exiting Fail2ban
2017-11-05 15:19:07,123 fail2ban.server [8528]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.6
2017-11-05 15:19:07,123 fail2ban.database [8528]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
2017-11-05 15:19:07,126 fail2ban.jail [8528]: INFO Creating new jail 'sshd'
2017-11-05 15:19:07,129 fail2ban.jail [8528]: INFO Jail 'sshd' uses poller {}
2017-11-05 15:19:07,141 fail2ban.jail [8528]: INFO Initiated 'polling' backend
2017-11-05 15:19:07,142 fail2ban.actions [8528]: INFO Set banTime = 60
2017-11-05 15:19:07,142 fail2ban.filter [8528]: INFO Set findtime = 60
2017-11-05 15:19:07,142 fail2ban.filter [8528]: INFO Set jail log file encoding to UTF-8
2017-11-05 15:19:07,143 fail2ban.filter [8528]: INFO Set maxRetry = 3
2017-11-05 15:19:07,144 fail2ban.filter [8528]: INFO Added logfile = /var/log/auth.log
2017-11-05 15:19:07,144 fail2ban.filter [8528]: INFO Set maxlines = 10
2017-11-05 15:19:07,189 fail2ban.server [8528]: INFO Jail sshd is not a JournalFilter instance
2017-11-05 15:19:07,195 fail2ban.jail [8528]: INFO Jail 'sshd' started
2017-11-05 15:20:03,263 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167
2017-11-05 15:20:05,267 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167
2017-11-05 15:20:12,276 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167
2017-11-05 15:20:12,380 fail2ban.actions [8528]: NOTICE [sshd] Ban 103.5.134.167
2017-11-05 15:21:12,659 fail2ban.actions [8528]: NOTICE [sshd] Unban 103.5.134.167

要查看启用的监狱列表,请运行以下命令。

# fail2ban-client status
Status
|- Number of jail:  2
`- Jail list:   apache-auth, sshd

通过运行以下命令来获取禁止的 IP 地址。

# fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log
| |- Currently failed: 1
| `- Total failed: 3
`- action
 |- Currently banned: 1
 | `- IP list: 192.168.1.115
 `- Total banned: 1

要从 Fail2Ban 中删除禁止的 IP 地址,请运行以下命令。

# fail2ban-client set ssh unbanip 192.168.1.115

위 내용은 Fail2Ban을 사용하여 무차별 대입 공격으로부터 서버를 보호하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 Linux就该这么学에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Linux 보안을 위해 방화구 및 UFW를 관리하는 방법Linux 보안을 위해 방화구 및 UFW를 관리하는 방법May 12, 2025 am 10:56 AM

Linux 시스템은 무단 네트워크 액세스를 방지하기 위해 방화벽에 의존합니다. 이 소프트웨어 장벽은 사전 정의 된 규칙에 따라 데이터 패킷을 허용 또는 차단하는 네트워크 트래픽을 제어합니다. 주로 네트워크 계층에서 작동하면 관리합니다

Linux 시스템이 데스크톱 또는 노트북인지 확인하는 방법Linux 시스템이 데스크톱 또는 노트북인지 확인하는 방법May 12, 2025 am 10:48 AM

Linux 시스템이 데스크탑인지 랩톱인지 결정하는 것은 시스템 최적화에 중요합니다. 이 안내서는 시스템 유형을 식별하기위한 간단한 명령을 간략하게 설명합니다. hostnamectl 명령 :이 명령은 시스템의 섀시를 확인하는 간결한 방법을 제공합니다.

Linux에서 TCP/IP 연결을 늘리는 방법Linux에서 TCP/IP 연결을 늘리는 방법May 12, 2025 am 10:23 AM

Linux 서버의 TCP/IP 연결 수를 조정하기위한 안내서 Linux 시스템은 종종 서버 및 네트워크 응용 프로그램에서 사용됩니다. 관리자는 종종 TCP/IP 연결 수가 상한에 도달하여 사용자 연결 오류에 도달한다는 문제에 직면합니다. 이 기사에서는 Linux 시스템에서 최대 TCP/IP 연결 수를 개선하는 방법을 안내합니다. TCP/IP 연결 번호 이해 TCP/IP (전송 제어 프로토콜/인터넷 프로토콜)는 인터넷의 기본 통신 프로토콜입니다. 각 TCP 연결에는 시스템 리소스가 필요합니다. 활성 연결이 너무 많으면 시스템이 새로운 연결을 거부하거나 속도를 늦출 수 있습니다. 허용되는 최대 연결 수를 늘리면 서버 성능을 향상시키고 동시 사용자를 처리 할 수 ​​있습니다. 현재 Linux 연결 제한 수를 확인하십시오 설정 설정

Linux 터미널에서 SVG를 PNG로 변환하는 방법Linux 터미널에서 SVG를 PNG로 변환하는 방법May 12, 2025 am 10:21 AM

SVG (확장 가능한 벡터 그래픽) 파일은 품질 손실없이 방출 가능성으로 인해 로고 및 일러스트레이션에 이상적입니다. 그러나 PNG (Portable Network Graphics) 형식은 종종 웹 사이트 및 응용 프로그램과 더 나은 호환성을 제공합니다. 이 안내서 d

LiveCode를 사용하여 자신의 Android 및 iOS 앱을 만드는 방법LiveCode를 사용하여 자신의 Android 및 iOS 앱을 만드는 방법May 12, 2025 am 10:10 AM

LiveCode : 교차 플랫폼 개발 혁명 1993 년에 데뷔 한 프로그래밍 언어 인 LiveCode는 모든 사람을위한 앱 개발을 단순화합니다. 높은 수준의 영어와 같은 구문 및 동적 타이핑은 강력한 응용 프로그램을 쉽게 만들 수 있습니다.

Linux 터미널에서 USB 장치를 재설정하는 방법Linux 터미널에서 USB 장치를 재설정하는 방법May 12, 2025 am 10:07 AM

이 안내서는 Linux 명령 줄을 통해 오작동하는 USB 장치를 재설정하기위한 단계별 프로세스를 제공합니다. 이러한 명령을 사용하여 응답하지 않거나 연결 해제 된 USB 드라이브 문제 해결이 단순화됩니다. 1 단계 : USB 장치 식별 첫째, i

Linux에서 임시 정적 IP 주소를 설정하는 방법Linux에서 임시 정적 IP 주소를 설정하는 방법May 12, 2025 am 10:06 AM

Linux에서 정적 IP 주소를 일시적으로 설정하는 것은 네트워크 문제 해결 또는 특정 세션 구성에 매우 중요합니다. 이 안내서는 명령 줄 도구를 사용하여이를 달성하는 방법에 대해 자세히 설명합니다.

51 파워 사용자를위한 알려진 Linux 명령51 파워 사용자를위한 알려진 Linux 명령May 12, 2025 am 09:51 AM

Linux는 사용자가 시스템과 효율적으로 상호 작용할 수있는 강력한 명령 줄 도구 세트로 유명합니다. 많은 Linux 사용자가 LS, CD 또는 GREP와 같은 일반적인 명령에 익숙하지만 생산성을 단순화하고 향상시킬 수있는 덜 알려져 있지만 매우 유용한 명령 및 바로 가기가 거의 없습니다. "덜 알려진 Linux 명령"에 관한 최신 5 개의 기사를 50 개가 넘는 명령과 함께 공유하게되어 기쁩니다. 당신은 또한 좋아할 수도 있습니다 : 11 개의 거의 알려지지 않은 실제 Linux 명령-1 부 거의 알려지지 않은 Linux 명령-Part 2 거의 알려지지 않은 Linux 명령-파트 3 거의 알려지지 않은 유효한 Linux 명령

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는