Self-hosting. Fail2Ban

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° доступа ΠΊ сСрвСрам ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ доступа. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° Π»ΠΎΠ³ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… систСм Ρ‚ΠΈΠΏΠ° ssh ΠΈΠ»ΠΈ рСвСрс прокси. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт бСзопасности внСшнСго сСрвСра.

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ: GitHub - fail2ban/fail2ban: Daemon to ban hosts that cause multiple authentication errors

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ docker compose Ρ„Π°ΠΉΠ»Π°

Fail2ban

version: "3.9"
 services:
  fail2ban:
    image: crazymax/fail2ban:latest
    container_name: fail2ban
    network_mode: host
    cap_add:
      - NET_ADMIN
      - NET_RAW
    environment:
      F2B_LOG_LEVEL: INFO
      F2B_LOG_TARGET: STDOUT
      F2B_DB_PURGE_AGE: 1d
    volumes:
      - /docker/fail2ban/data:/data
      - /docker/caddy/logs/access.log:/docker/caddy/logs/access.log:ro
    restart: unless-stopped

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ SSH

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 300
backend = systemd

* Π³Π΄Π΅:

  • sshd β€” Π½Π°Π·Π²Π°Π½ΠΈΠ΅ для ΠΏΡ€Π°Π²ΠΈΠ»Π°;
  • enabled позволяСт быстро Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ (true) ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ (false) ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ;
  • port β€” ΠΏΠΎΡ€Ρ‚ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ сСрвиса. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ΡΡ Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΠ»ΠΈ Ρ†ΠΈΡ„ΠΈΡ€Π½ΠΎΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅;
  • filter β€” Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ (ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ поиска), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для поиска ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий. По сути, это имя Ρ„Π°ΠΉΠ»Π° ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° /etc/fail2ban/filter.d Π±Π΅Π· .conf Π½Π° ΠΊΠΎΠ½Ρ†Π΅;
  • logpath β€” располоТСниС Π»ΠΎΠ³-Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π½Π° основС описанных ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π².
  • maxretryΒ β€” количСство дСйствий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Π΄ΠΎ Π±Π°Π½Π°.
  • findtimeΒ β€” врСмя Π² сСкундах, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ учитываСтся maxretry;

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ для Caddy

Fail2Ban

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настроСк Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ для Fail2ban Π² связкС с Caddy

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅.

#/docker/fail2ban/data/jail.d/caddy.conf

[caddy]
backend = auto
enabled = true
chain = FORWARD
protocol = tcp
port = http,https
filter = caddy-custom
maxretry = 3
bantime = 86400
findtime = 43200
logpath = /docker/caddy/logs/access.log
ignoreip = 192.168.0.0/24
# /docker/fail2ban/data/filter.d
 
[Definition]
# catch all lines that terminate with an unauthorized error
failregex = <HOST> \S+ \S+ \S+ (401)$
ignoreregex =