π Fail2Ban: ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π° Π·Π°ΡΠΈΡΠ° Π½Π° SSH Π΄ΠΎΡΡΡΠΏΠ° ΠΎΡ brute-force Π°ΡΠ°ΠΊΠΈ

Π Π΄Π½Π΅ΡΠ½Π°ΡΠ° Π΄ΠΈΠ³ΠΈΡΠ°Π»Π½Π° ΡΡΠ΅Π΄Π°, ΠΊΠΎΠ³Π°ΡΠΎ Π΄ΠΎΡΠΈ Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΡΠ΅ ΡΡΡΠ²ΡΡΠΈ ΡΠ° ΡΠ΅ΡΡΠΎ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ, Π·Π°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏ ΡΡΠ΅Π· SSH Π΅ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° Π±ΠΎΡΠ±Π° Ρ Π½Π΅ΠΎΡΠΎΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΎΠΏΠΈΡΠΈ Π·Π° Π²Π»ΠΈΠ·Π°Π½Π΅ Π΅ Fail2Ban β ΠΈΠ½ΡΠ΅Π»ΠΈΠ³Π΅Π½ΡΠ½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡΠ° Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ IP Π°Π΄ΡΠ΅ΡΠΈ.
Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅:
- ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ Fail2Ban?
- ΠΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅?
- ΠΠ°ΠΊ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ Π·Π°ΡΠΈΡΠ° Π·Π° SSH?
- ΠΠ°ΠΊ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ ΠΈ Π±Π°Π½Π½Π°ΡΠΈΡΠ΅ IP Π°Π΄ΡΠ΅ΡΠΈ?
- Π Π°Π·ΡΠΈΡΠ΅Π½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΡΡΠ²Π΅ΡΠΈ Π·Π° ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠ° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ.
π§ ΠΠ°ΠΊΠ²ΠΎ Π΅ Fail2Ban?
Fail2Ban Π΅ Python-Π±Π°Π·ΠΈΡΠ°Π½ Π΄Π΅ΠΌΠΎΠ½, ΠΊΠΎΠΉΡΠΎ ΡΠ»Π΅Π΄ΠΈ Π»ΠΎΠ³ΠΎΠ²ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ΅ΠΌΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈ Π·Π°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡ β Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΡΠ΅Π· iptables ΠΈΠ»ΠΈ firewalld, Π·Π° Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ° IP Π°Π΄ΡΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΡΠ° ΠΎΠΏΠΈΡΠ°Π»ΠΈ Π΄Π° ΡΠ΅ Π»ΠΎΠ³Π½Π°Ρ Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ.
ΠΠ°ΠΉ-ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π·Π°ΡΠΈΡΠ° Π½Π°:
- SSH
- FTP
- Mail ΡΡΡΠ²ΡΡΠΈ
- Web login ΡΠΎΡΠΌΠΈ (ΡΡΠ΅Π· custom ΡΠΈΠ»ΡΡΠΈ)
π§° ΠΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° Fail2Ban
β Debian / Ubuntu:
sudo apt update
sudo apt install fail2ban -y
β CentOS / RHEL / AlmaLinux / Rocky:
sudo dnf install epel-release -y
sudo dnf install fail2ban -y
Π‘Π»Π΅Π΄ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ°, ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΌΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ°:
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΠ°ΡΡΡΠ°:
sudo systemctl status fail2ban
βοΈ ΠΡΠ½ΠΎΠ²Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Fail2Ban Π·Π° SSH
ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Fail2Ban ΠΈΠ΄Π²Π° Ρ Π³ΠΎΡΠΎΠ² βjailβ Π·Π° SSH. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ Π²:
/etc/fail2ban/
ΠΠΈΠΊΠΎΠ³Π° Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ jail.conf
β Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° ΡΡΠ·Π΄Π°ΠΉΡΠ΅ Π»ΠΎΠΊΠ°Π»Π΅Π½ ΡΠ°ΠΉΠ»:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
ΠΡΠ²ΠΎΡΠ΅ΡΠ΅ Π³ΠΎ Π·Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡ:
sudo nano /etc/fail2ban/jail.local
ΠΡΠΊΡΠΈΠΉΡΠ΅ ΡΠ΅ΠΊΡΠΈΡΡΠ° [sshd]
ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ Ρ:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
maxretry = 5
bantime = 1h
findtime = 10m
ΠΠ±ΡΡΠ½Π΅Π½ΠΈΠ΅:
enabled = true
β Π°ΠΊΡΠΈΠ²ΠΈΡΠ° jaila Π·Π° SSHport = ssh
β ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ ΠΏΠΎΡΡ (ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ ΡΠΌΠ΅Π½ΠΈΡΠ΅ Π°ΠΊΠΎ ΡΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ° Π½Π° SSH)maxretry = 5
β ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π° 5 Π³ΡΠ΅ΡΠ½ΠΈ ΠΎΠΏΠΈΡΠ°bantime = 1h
β Π±Π°Π½Π²Π° IP-ΡΠΎ Π·Π° 1 ΡΠ°Ρfindtime = 10m
β Π·Π°ΡΠΈΡΠ° ΠΎΠΏΠΈΡΠΈΡΠ΅ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° 10 ΠΌΠΈΠ½ΡΡΠΈ
π« ΠΡΠΈΠΌΠ΅Ρ ΠΎΡ ΡΠ΅Π°Π»Π½Π° Π°ΡΠ°ΠΊΠ° Π² Π»ΠΎΠ³Π°
sshd[2418]: Failed password for root from 185.254.XX.XX port 47122 ssh2
Fail2Ban ΡΠ΅ Π·Π°ΡΠ΅ΡΠ΅ ΡΠΎΠ²Π° ΠΈ ΡΠ»Π΅Π΄ 5 ΡΠ°ΠΊΠΈΠ²Π° ΠΎΠΏΠΈΡΠ° β ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ° IP Π°Π΄ΡΠ΅ΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ.
π ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π½Π½Π°ΡΠΈ IP Π°Π΄ΡΠ΅ΡΠΈ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΡΠ°ΡΡΡ Π½Π° jail:
sudo fail2ban-client status
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ jail:
sudo fail2ban-client status sshd
Π©Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 7
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 2
|- Total banned: 5
`- Banned IP list: 185.254.XX.XX 91.92.XX.XX
Π Π°Π·Π±Π»ΠΎΠΊΠΈΡΠ°Π½Π΅ Π½Π° IP:
sudo fail2ban-client set sshd unbanip 185.254.XX.XX
π Π Π°Π·ΡΠΈΡΠ΅Π½Π° Π·Π°ΡΠΈΡΠ°
ΠΡΠΎΠΌΡΠ½Π° Π½Π° bantime
Π½Π° ΠΏΠΎ-Π΄ΡΠ»ΡΠ³ ΠΏΠ΅ΡΠΈΠΎΠ΄
bantime = 24h
ΠΠΎΡΡΠΎΡΠ½Π΅Π½ Π±Π°Π½:
bantime = -1
(ΠΠΠΠΠΠΠΠ: ΠΠΎΠΆΠ΅ Π΄Π° Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠ΅ Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, Π°ΠΊΠΎ Π½Π΅ Π²Π½ΠΈΠΌΠ°Π²Π°ΡΠ΅.)
π ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Ρ fail2ban-client ΠΈ logwatch
Fail2Ban ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° CLI ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³:
sudo fail2ban-client status
sudo fail2ban-client status sshd
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π΄Π½Π΅Π²Π΅Π½ ΠΎΡΡΠ΅Ρ ΡΡΠ΅Π· ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΊΠ°ΡΠΎ logwatch
.
π§ͺ Π’Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° Π·Π°ΡΠΈΡΠ°ΡΠ°
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠΈΠΌΡΠ»ΠΈΡΠ°ΡΠ΅ Π³ΡΠ΅ΡΠ½ΠΈ Π²Ρ ΠΎΠ΄ΠΎΠ²Π΅ ΠΎΡ Π΄ΡΡΠ³ IP Π°Π΄ΡΠ΅Ρ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅:
ssh wronguser@your-server-ip
Π‘Π»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΠΏΠΈΡΠ° (ΡΠΏΠΎΡΠ΅Π΄ maxretry) IP-ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π±Π»ΠΎΠΊΠΈΡΠ°Π½ΠΎ.
π§ ΠΠΎΠ»Π΅Π·Π½ΠΈ ΡΡΠ²Π΅ΡΠΈ
- ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΠΉ Fail2Ban Ρ firewall (UFW ΠΈΠ»ΠΈ nftables) Π·Π° ΠΎΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ SSH ΠΏΠΎΡΡ.
- ΠΠ΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉ root Π΄ΠΎΡΡΡΠΏ:
PermitRootLogin no
- Π Π°Π·ΡΠ΅ΡΠΈ ΡΠ°ΠΌΠΎ ΠΊΠ»ΡΡΠΎΠ²Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ:
PasswordAuthentication no
- Π‘Π»ΠΎΠΆΠΈ Fail2Ban Π·Π° Π΄ΡΡΠ³ΠΈ ΡΡΠ»ΡΠ³ΠΈ (nginx, dovecot, postfix ΠΈ Ρ.Π½.)
π ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Fail2Ban Π΅ ΠΌΠΎΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ Π΄Π° ΡΠΏΠ°ΡΠΈ ΡΡΡΠ²ΡΡΠ° Π²ΠΈ ΠΎΡ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎΡΠΎ Π±ΠΎΠΌΠ±Π°ΡΠ΄ΠΈΡΠ°Π½Π΅ Ρ brute-force Π°ΡΠ°ΠΊΠΈ. ΠΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ° ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΌΡ ΠΎΡΠ½Π΅ΠΌΠ° ΡΠ°ΠΌΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΌΠΈΠ½ΡΡΠΈ, Π½ΠΎ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°, ΠΊΠΎΡΡΠΎ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°, Π΅ Π±Π΅Π·ΡΠ΅Π½Π½Π°. ΠΠ°Π΅Π΄Π½ΠΎ Ρ Π΄ΡΡΠ³ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π° SSH Π·Π°ΡΠΈΡΠ° β ΠΊΠ°ΡΠΎ ΠΊΠ»ΡΡΠΎΠ²Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎ IP ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ β Fail2Ban Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° Π²ΡΠ΅ΠΊΠΈ Linux Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠΈΠΌ Π²ΠΈ Π·Π° ΠΏΡΠΎΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ°! ΠΠΊΠΎ Π½Π°ΠΌΠ΅ΡΠΈΡ ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° ΠΏΠΎΠ»Π΅Π·Π½Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄Π°ΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π±ΡΡΠΎΠ½ΠΈΡΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ: π° Donate βοΈ ΠΠ°ΡΠ΅ΡΠ΅ Ρ PayPalDonate π³ ΠΠ°ΡΠ΅ΡΠ΅ Ρ Revolut