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

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/

Связанные статьи