SSH Honeypot + CrowdSec
If you like this project, consider supporting me on Buy Me a Coffee ☕️
SSH Honeypot + CrowdSec Sysadmin Cheatsheet
Context: This guide covers deploying a Cowrie SSH honeypot on port 22 while moving the real SSH service to a non-standard port. Cowrie emulates a vulnerable SSH server, logging attacker commands and credentials. Combined with CrowdSec, attacking IPs are automatically banned via firewall rules and optionally shared with the community blocklist. / Руководство по развёртыванию SSH-ловушки Cowrie на порту 22 с переносом реального SSH на нестандартный порт. Cowrie эмулирует уязвимый SSH-сервер, логируя команды и пароли атакующих. В связке с CrowdSec атакующие IP автоматически банятся. Role: Security Engineer / Sysadmin See also: CrowdSec, SSH Keys
📚 Table of Contents / Содержание
- Overview
- Install Docker
- Move Real SSH to Port 2222
- Install Cowrie Honeypot
- Save Honeypot Logs
- Install CrowdSec
- Install Cowrie Parser
- Community Integration
- Web Dashboard
- Verify Detection & Firewall
- Cowrie Log Analysis Script
- Documentation Links
1. Overview
Goal / Цель:
- Real SSH runs on port 2222 / Реальный SSH работает на порту 2222
- Port 22 becomes a Cowrie honeypot / Порт 22 становится ловушкой Cowrie
- CrowdSec automatically bans attacking IPs / CrowdSec автоматически банит атакующие IP
- Logs saved and optionally sent to CrowdSec community blocklist / Логи сохраняются и отправляются в CrowdSec
- Optional web dashboard and GeoIP visualization / Опциональная веб-панель и визуализация GeoIP
Architecture / Архитектура
Internet
|
v
Port 22 ---> Cowrie Honeypot ---> Logs & GeoIP Dashboard
|
v
CrowdSec detection
|
v
Firewall ban & optional Community feed
Real admin access:
Port 2222 ---> OpenSSH
2. Install Docker
sudo apt update # Update packages / Обновить пакеты
sudo apt install -y docker.io # Install Docker / Установить Docker
sudo systemctl enable --now docker # Enable & start / Включить и запустить
docker --version # Verify install / Проверить установку
3. Move Real SSH to Port 2222
[!CAUTION] Open firewall for the new SSH port before disconnecting from the current session! Откройте порт в файрволе до отключения от текущей сессии!
Edit SSH Config / Редактирование конфига SSH
/etc/ssh/sshd_config
Port 2222
Apply Changes / Применить изменения
sudo ufw allow 2222/tcp # Open firewall / Открыть файрвол
sudo systemctl restart ssh # Restart SSH / Перезапустить SSH
ssh <USER>@<HOST> -p 2222 # Test login / Тестовый вход
4. Install Cowrie Honeypot
docker pull cowrie/cowrie # Pull image / Скачать образ
docker run -d --name cowrie \
-p 22:2222 \
--restart unless-stopped \
cowrie/cowrie # Run on port 22 / Запустить на порту 22
docker ps # Check container / Проверить контейнер
5. Save Honeypot Logs
# Run with persistent logs / Запуск с постоянными логами
docker run -d --name cowrie \
-p 22:2222 \
-v /opt/cowrie/log:/cowrie/var/log/cowrie \
--restart unless-stopped \
cowrie/cowrie
ls /opt/cowrie/log # Access logs / Доступ к логам
6. Install CrowdSec
curl -s https://install.crowdsec.net | sudo sh # Add repo / Добавить репозиторий
sudo apt install -y crowdsec # Install CrowdSec / Установить CrowdSec
sudo apt install -y crowdsec-firewall-bouncer-iptables # Install bouncer / Установить bouncer
sudo systemctl status crowdsec # Check status / Проверить статус
7. Install Cowrie Parser
sudo cscli collections install crowdsecurity/cowrie # Install collection / Установить коллекцию
sudo systemctl restart crowdsec # Restart CrowdSec / Перезапустить CrowdSec
8. Community Integration
sudo cscli hub update # Update hub / Обновить хаб
sudo cscli hub install crowdsecurity/lapi # Install LAPI / Установить LAPI
9. Web Dashboard
docker run -d -p 8080:8080 \
--name cowrie-web \
--link cowrie:db \
cowrie/cowrie-web # Start dashboard / Запустить панель
Access / Доступ: http://<HOST>:8080
[!TIP] Use Python script or Kibana to parse
/opt/cowrie/log/cowrie.jsonand plot IPs on a GeoIP map. Используйте Python-скрипт или Kibana для парсинга логов и отображения IP на карте.
10. Verify Detection & Firewall
sudo cscli decisions list # Active bans / Активные баны
sudo cscli alerts list # Alert history / История алертов
sudo cscli metrics # CrowdSec metrics / Метрики CrowdSec
sudo iptables -L -n # Firewall rules / Правила файрвола
sudo cscli bouncers list # Registered bouncers / Зарегистрированные bouncer'ы
Useful Commands / Полезные команды
sudo cscli alerts list -o human # Top attackers / Топ атакующих
sudo cscli decisions delete --ip <IP> # Unban IP / Разбанить IP
sudo cscli scenarios list # List scenarios / Список сценариев
11. Cowrie Log Analysis Script
watch_cowrie_commands.py
#!/usr/bin/env python3
"""Watch Cowrie Honeypot Commands.
Reads Cowrie logs and prints top commands entered by attacking IPs.
Скрипт читает логи Cowrie и выводит топ команд атакующих IP.
"""
import json
from pathlib import Path
from collections import Counter
log_dir = Path("/opt/cowrie/log") # Path to Cowrie logs / Путь к логам
commands = Counter()
for log_file in log_dir.glob("cowrie.json*"):
with log_file.open() as f:
for line in f:
try:
evt = json.loads(line)
if evt.get("eventid") == "cowrie.command.input":
ip = evt.get("src_ip", "")
cmd = evt.get("input", "").strip()
commands[(ip, cmd)] += 1
except json.JSONDecodeError:
continue
print("\nTop 10 commands by attacking IPs:\n")
for (ip, cmd), count in commands.most_common(10):
print(f"{ip}: {cmd} ({count} times)")
12. Documentation Links
- Cowrie SSH Honeypot GitHub
- Cowrie Documentation
- CrowdSec Documentation
- CrowdSec Cowrie Collection
- Docker Documentation