Action unknown: copypageplugin__copy

Fail2ban

Fail2ban — программа для автоматической защиты серверов Linux и Unix-подобных систем от взлома методом подбора пароля и других видов несанкционированного доступа. Она отслеживает подозрительную активность в логах сервисов (чаще всего SSH, но не только) и реагирует на повторяющиеся ошибки входа.

$ sudo apt install fail2ban
$ sudo systemctl status fail2ban
$ sudo fail2ban-client status
Status
|- Number of jail:	1
`- Jail list:	sshd

Есть только один jail — sshd — которsq отвечает за мониторинг журналов SSH-сервера на предмет неудачного входа в систему и настройку правил брандмауэра для блокировки дальнейших попыток.

$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	0
|  `- Journal matches:	_SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
   |- Currently banned:	0
   |- Total banned:	0
   `- Banned IP list:

В стандартной конфигурации fail2ban защитит SSH-сервер и заблокирует злоумышленника на 10 минут после 5 неудачных попыток входа в систему в течение 10 минут. Файл конфигурации по умолчанию можно найти в /etc/fail2ban/jail.conf.

$ sudo nft list ruleset | grep -A5 -B5 "77.238.249.136\|fail2ban"
# Warning: table ip nat is managed by iptables-nft, do not touch!
 
	chain DOCKER-USER {
	}
 
	chain f2b-sshd {
		ip saddr 77.238.249.136 counter packets 0 bytes 0 reject
		counter packets 0 bytes 0 return
	}
 
	chain INPUT {
		type filter hook input priority filter; policy accept;
# Warning: table ip filter is managed by iptables-nft, do not touch!
# Warning: table ip6 nat is managed by iptables-nft, do not touch!
Chain DOCKER-USER (1 references)
target     prot opt source               destination
 
Chain f2b-sshd (1 references)
target     prot opt source               destination
REJECT     all  --  77.238.249.136       0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
$ # 1. Проверить актуальное правило (должен быть порт 2234)
sudo nft list table inet f2b-table
 
# 2. Проверить счётчики после 30 секунд ожидания
echo "Текущие счётчики:"
sudo nft list table inet f2b-table | grep -A1 -B1 "counter packets"
 
# 3. Проверить статус Fail2Ban
echo -e "\nСтатус Fail2Ban:"
sudo fail2ban-client status sshd
 
# 4. Проверить порт в конфигурации sshd
echo -e "\nПорт SSH в конфиге:"
sudo grep -E "^Port|#Port" /etc/ssh/sshd_config
 
# 5. Проверить логи Fail2Ban за последние 5 минут
echo -e "\nЛоги Fail2Ban:"
sudo journalctl -u fail2ban --since "5 minutes ago" | grep -E "Found|Ban|77.238"
table inet f2b-table {
	set addr-set-SSH {
		type ipv4_addr
	}
 
	chain f2b-chain {
		type filter hook input priority filter - 1; policy accept;
		tcp dport 22 ip saddr @addr-set-SSH reject with icmp port-unreachable
	}
}
Текущие счётчики:
 
Статус Fail2Ban:
Status for the jail: sshd
|- Filter
|  |- Currently failed:	1
|  |- Total failed:	18
|  `- Journal matches:	_SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
   |- Currently banned:	0
   |- Total banned:	2
   `- Banned IP list:
 
Порт SSH в конфиге:
Port 2234
 
Логи Fail2Ban:
# Разблокировать и повторно заблокировать IP
sudo fail2ban-client set sshd unbanip 77.238.249.136
sudo fail2ban-client set sshd banip 77.238.249.136
 
# Проверить, что правило создано с правильным портом
sudo nft list table inet f2b-table
 
# Тестовое подключение (с другого сервера если есть)
# или подождать пока бот снова попытается подключиться
 
# Проверить счётчики через 1 минуту
sleep 60
echo "Счётчики после 1 минуты:"
sudo nft list table inet f2b-table | grep -B2 -A2 "counter packets"
# 1. Удалить старое правило с портом 22
sudo nft delete rule inet f2b-table f2b-chain tcp dport 22 ip saddr @addr-set-SSH reject with icmp port-unreachable
 
# 2. Добавить IP в набор адресов
sudo nft add element inet f2b-table addr-set-SSH { 77.238.249.136 }
 
# 3. Добавить новое правило с портом 2234
sudo nft add rule inet f2b-table f2b-chain tcp dport 2234 ip saddr @addr-set-SSH reject with icmp port-unreachable
 
# 4. Проверить результат
sudo nft list table inet f2b-table
# 1. Убедиться, что конфиг с портом 2234 существует и правильный
sudo tee /etc/fail2ban/jail.d/ssh-port-2234.conf << 'EOF'
[sshd]
port = 2234
action = nftables-multiport[name=SSH, port="2234", protocol=tcp]
maxretry = 5
findtime = 10m
bantime = 1h
EOF
 
# 2. Перезапустить Fail2Ban
sudo systemctl restart fail2ban
 
# 3. Принудительно обновить блокировку
sudo fail2ban-client set sshd unbanip 77.238.249.136
sudo fail2ban-client set sshd banip 77.238.249.136
 
# 4. Проверить статус
sudo fail2ban-client status sshd
# Сбросить счётчики
sudo nft reset counters table inet f2b-table
 
# Подождать 30 секунд (пока бот пытается подключиться)
echo "Наблюдаем за счётчиками 30 секунд..."
sleep 30
 
# Проверить счётчики
sudo nft list table inet f2b-table | grep -A1 -B1 "counter packets"
echo "=== 1. Проверка nftables ==="
sudo nft list table inet f2b-table
 
echo -e "\n=== 2. Проверка Fail2Ban ==="
sudo fail2ban-client status sshd
 
echo -e "\n=== 3. Проверка порта SSH ==="
sudo ss -tlnp | grep sshd
 
echo -e "\n=== 4. Проверка логов (последние 10 записей) ==="
sudo tail -10 /var/log/fail2ban.log | grep -E "sshd|77.238"