◀️ Настройка Jenkins за обратным прокси-сервером Nginx и SSL шифрованием Let’s Encrypt — Information Security Squad
◀️  Настройка Jenkins за обратным прокси-сервером Nginx и SSL шифрованием Let’s Encrypt

Вопрос: Как я могу разместить Jenkins за обратным прокси-сервером Nginx и SSL-сертификатом Let Encrypt ?

Jenkins — это мощный сервер автоматизации с открытым исходным кодом, созданный для автоматизации повторяющихся задач и ускорения непрерывной интеграции и доставки приложений.

В этом кратком руководстве будет рассказано, как настроить Nginx для работы в качестве обратного прокси-сервера для сервера Jenkins.

Предполагается, что у вас есть работающий сервер Jenkins, но наши руководства могут помочь в настройке Jenkins Server.

Шаг 1: Установите Nginx

Вам нужно начать с установки веб-сервера Nginx на свой дистрибутив Linux.

Вот команды для установки Nginx в распространенных дистрибутивах Linux.

# CentOS / RHEL
$ sudo yum -y install nginx vim

# Fedora
$ sudo dnf -y install nginx vim

# Ubuntu / Debian
$ sudo apt-get -y install nginx vim

Шаг 2: Установите инструмент Cerbot

Далее идет установка инструмента Certbot, который используется для получения SSL-сертификата Let Encrypt.

Загрузите и установите средство командной строки certbot-auto.

curl -sL https://dl.eff.org/certbot-auto | sudo tee /usr/local/bin/certbot-auto

Дайте скрипту бит выполнения.

sudo chmod +x /usr/local/bin/certbot-auto

Проверьте, работает ли:

$ certbot-auto --version
certbot 0.33.1

Когда вас попросят подтвердить установку зависимостей, ответьте «yes».

Dependencies Resolved

===========================================================================
 Package              Arch      Version                   Repository  Size
===========================================================================
Installing:
 augeas-libs          x86_64    1.4.0-6.el7_6.1           updates    355 k
 libffi-devel         x86_64    3.0.13-18.el7             base        23 k
 mod_ssl              x86_64    1:2.4.6-88.el7.centos     base       112 k
 python-devel         x86_64    2.7.5-76.el7              base       398 k
 python-tools         x86_64    2.7.5-76.el7              base       856 k
 python-virtualenv    noarch    15.1.0-2.el7              base       1.7 M
 python2-pip          noarch    8.1.2-8.el7               epel       1.7 M
 redhat-rpm-config    noarch    9.1.0-87.el7.centos       base        81 k
Installing for dependencies:
 dwz                  x86_64    0.11-3.el7                base        99 k
 libXft               x86_64    2.3.2-2.el7               base        58 k
 libXrender           x86_64    0.9.10-1.el7              base        26 k
 perl-srpm-macros     noarch    1-8.el7                   base       4.6 k
 tcl                  x86_64    1:8.5.13-8.el7            base       1.9 M
 tix                  x86_64    1:8.4.3-12.el7            base       254 k
 tk                   x86_64    1:8.5.13-6.el7            base       1.4 M
 tkinter              x86_64    2.7.5-76.el7              base       326 k
 zip                  x86_64    3.0-11.el7                base       260 k

Transaction Summary
===========================================================================
Install  8 Packages (+9 Dependent packages)

Total download size: 9.5 M
Installed size: 26 M
Is this ok [y/d/N]: y

Шаг 4: Запрос SSL-сертификата Let’s Encrypt

Вам нужен работающий DNS для домена или субдомена, используемого сервером Jenkins. В своей демонстрации я использую jenkins.itsecforu.ru

Вам также нужно открыть порт 80, чтобы получить сертификат, но только если у вас есть активный брандмауэр.

# CentOS 7
$ sudo firewall-cmd --add-service={http,https} --permanent
$ sudo firewall-cmd --reload

# Ubuntu / Debian
$ sudo ufw allow proto tcp from any to any port 80,443
$ sudo ufw status

Как только это будет сделано, получите сертификат Let Encrypt:

export DOMAIN="jenkins.example.com"
export ALERTS_EMAIL="webmaster@example.com"
sudo systemctl stop nginx
sudo /usr/local/bin/certbot-auto certonly --standalone -d $DOMAIN --preferred-challenges http --agree-tos -n -m $ALERTS_EMAIL --keep-until-expiring

Пример вывода:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
 Plugins selected: Authenticator standalone, Installer None
 Obtaining a new certificate
 Performing the following challenges:
 http-01 challenge for jenkins.itsecforu.ru
 Waiting for verification…
 Cleaning up challenges
 IMPORTANT NOTES:
 Congratulations! Your certificate and chain have been saved at:
 /etc/letsencrypt/live/jenkins.itsecforu.ru/fullchain.pem
 Your key file has been saved at:
 /etc/letsencrypt/live/jenkins.itsecforu.ru/privkey.pem
 Your cert will expire on 2019-07-08. To obtain a new or tweaked
 version of this certificate in the future, simply run certbot-auto
 again. To non-interactively renew all of your certificates, run
 "certbot-auto renew"
 Your account credentials have been saved in your Certbot
 configuration directory at /etc/letsencrypt. You should make a
 secure backup of this folder now. This configuration directory will
 also contain certificates and private keys obtained by Certbot so
 making regular backups of this folder is ideal.
 If you like Certbot, please consider supporting our work by:
 Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 Donating to EFF:                    https://eff.org/donate-le

Шаг 5: Настройте Nginx

Создайте файл конфигурации Nginx для Jenkins.

sudo vim /etc/nginx/conf.d/jenkins.conf

Вставьте содержимое ниже в файл.

################################################
# Jenkins Proxy configuration with SSL
#################################################
upstream jenkins {
  server 127.0.0.1:8080 fail_timeout=0;
}
 
server {
  listen 80;
  server_name jenkins.example.com;
  return 301 https://$host$request_uri;
}
 
server {
  listen 443 ssl;
  server_name jenkins.example.com;
 
  ssl_certificate /etc/letsencrypt/live/jenkins.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/jenkins.example.com/privkey.pem;
 
  location / {
    proxy_set_header        Host $host:$server_port;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_redirect http:// https://;
    proxy_pass              http://jenkins;
    # Required for new HTTP-based CLI
    proxy_http_version 1.1;
    proxy_request_buffering off;
    proxy_buffering off; # Required for HTTP-based CLI to work over SSL
    # workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651
    add_header 'X-SSH-Endpoint' 'jenkins.example.com:50022' always;
  }
}

Замените все  example.com своим правильным доменным именем. Когда закончите, проверьте конфигурацию nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если конфигурация выглядит нормально, запустите nginx и установите его для запуска при загрузке.

sudo systemctl restart nginx
sudo systemctl enable nginx

Шаг 6: Доступ к веб-интерфейсу Jenkins

Получите доступ к веб-интерфейсу Jenkins по адресу http://jenkins.example.com.

Панель управления Jenkins должна отображаться после входа в систему.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *