Knowledge Base
Jenkins CI/CD открыт публично
Jenkins CI/CD открыт публично — Collapse Point
Категория: Server Hardening · Риск: critical
Jenkins CI/CD открыт публично — Collapse Point
Критическая угроза
Jenkins — система сборки и деплоя — содержит **ключи ко всей инфраструктуре**: SSH-ключи деплоя, API-токены AWS/GCP/Azure, Docker Hub credentials, секреты продакшена.
Публичный Jenkins без строгой защиты = компрометация всего CI/CD пайплайна.
Почему это Collapse Point
- **RCE через Groovy Script Console** (Jenkins → Manage → Script Console)
- **Доступ к Credentials** — SSH keys, API tokens, passwords
- **Управление деплоем** — push code, modify deployment pipelines
- **Регулярные критические CVE**: CVE-2023-27898 (RCE), CVE-2024-23897 (arbitrary file read)
Jenkins compromised → All secrets exposed → Full infrastructure access
Немедленное исправление
1. Закрыть порт 8080 файрволом
# ufw
ufw deny 8080
ufw allow from 10.0.0.0/8 to any port 8080 # только VPN/LAN
ufw reload
2. Jenkins за Tailscale (рекомендуется)
# Привязать Jenkins только к Tailscale IP
# В /etc/default/jenkins или jenkinsfile:
JENKINS_ARGS="--httpListenAddress=100.x.x.x" # Tailscale IP
# Вместо: --httpListenAddress=0.0.0.0
3. Nginx reverse proxy с Basic Auth (минимальная защита)
location /jenkins/ {
auth_basic "Jenkins — Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# Создать htpasswd файл
apt install apache2-utils
htpasswd -c /etc/nginx/.htpasswd jenkins_user
4. Включить Security в самом Jenkins
// Jenkins → Manage → Security → Security Realm: Jenkins' own user database
// Authorization: Matrix-based security или Role-based Access Control плагин
5. Отключить Script Console для всех кроме admin
Jenkins → Manage → Script Console должен быть доступен **только admin-роли**.
Проверка после исправления
# Должно вернуть Connection refused или 403
curl -I http://<PUBLIC_IP>:8080/
curl -I https://example.com/jenkins/
# Из Tailscale сети — должно работать
curl -I http://100.x.x.x:8080/
Связанные статьи
- [Tailscale для приватного доступа](/kb/vpn/tailscale-admin)
- [UFW базовый файрвол](/kb/firewall/ufw-basic-server-firewall)
- [Exposed admin panels](/kb/server_hardening/exposed-admin-panels-critical)