вторник, 23 июля 2019 г.

Публикация ИБ на веб-сервере Apache 2.4 с самоподписанными сертификатами

Secure Apache2 HTTPS Websites with Let’s Encrypt Free SSL/TLS Certificates on Ubuntu 16.04 | 18.04
Настройка Apache для 1С 

Имеем локальный сервер с именем http и установленной samba
в локальной сети резолвиться http

192.168.0.111 ip в локальной сети
10.10.10.101 ip в сети vpn
X.X.X.X ip в сети интернет (проброшен 443 порт)

$ sudo dpkg -i 1c-enterprise83-ws_8.3.13-1690_amd64.deb
$ sudo apt-get install apache2 -y

Создаем директорию для vrd-файла:
$ sudo mkdir -p /var/www/ib/demo

А также файл конфигурации Apache:
$ sudo touch /etc/apache2/conf-available/demo.conf

Переходим в каталог со утилитой публикации веб-клиента:
$ cd /opt/1C/v8.3/x86_64/

Запускаем утилиту:
$ sudo ./webinst -apache24 -wsdir demo -dir '/var/www/ib/demo' -connstr 'Srvr="test";Ref="demo";' -confPath /etc/apache2/conf-available/demo.conf


Где /var/www/ib/demo - директория где будет создан vrd-файл, demo - имя ИБ, test - адрес сервера 1С:Предпрятие, а /etc/apache2/conf-available/demo.conf - путь до конфигурационного файла Apache.

 Подключаем конфигурацию:
$ sudo a2enconf demo

 Перезагрузка Apache:
$ sudo service apache2 reload
# systemctl restart apache2

Смотрим:
http://test/demo или https://test/demo

========================
$ sudo apt install gnutls-bin
$ sudo mkdir /etc/cert/
$ sudo -i
# cd /etc/cert

Генерация CA

# certtool --generate-privkey --outfile ca-key.pem
# cat << _EOF_ >ca.tmpl
cn = "VPN CA"
organization = "Big Corp"
serial = 1
expiration_days = -1
ca
signing_key
cert_signing_key
crl_signing_key
_EOF_

# certtool --generate-self-signed --load-privkey ca-key.pem \
           --template ca.tmpl --outfile ca-cert.pem
 

Генерация сертификата локального сервера

В следующем примере создается ключ сервера и пара сертификатов.


# certtool --generate-privkey --outfile server-key.pem
# cat << _EOF_ >server.tmpl
cn = "VPN server"
dns_name = "http"
ip_address = "192.168.0.111"
ip_address = "10.10.10.101"
ip_address = "X.X.X.X" 
organization = "MyCompany"
expiration_days = -1
signing_key
encryption_key #only if the generated key is an RSA one
tls_www_server
_EOF_

# sudo nano server.tmpl

cn = "VPN server"
dns_name = "http"
ip_address = "192.168.0.111"
ip_address = "10.10.10.101"
organization = "MyCompany"
expiration_days = -1
signing_key
encryption_key #only if the generated key is an RSA one
tls_www_server
  
# certtool --generate-certificate --load-privkey server-key.pem \
           --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem \
           --template server.tmpl --outfile server-cert.pem 



$ sudo mkdir  /var/www/html/http/
$ sudo chown -R www-data:www-data /var/www/html/http/
$ sudo chmod -R 755 /var/www/html/http/
$ sudo a2enmod rewrite
$ sudo a2enmod ssl
$ sudo a2enmod headers
$ sudo openssl dhparam -out /etc/cert/dhparam.pem 2048
$ sudo nano /etc/apache2/sites-available/http.conf


<VirtualHost *:80>
  ServerName http
  Redirect permanent / https://http/
</VirtualHost>


<VirtualHost *:443>
  ServerName http
  DocumentRoot /var/www/html/http

  Protocols h2 http:/1.1

 <If "%{HTTP_HOST} == '192.168.0.111'">    Redirect permanent / https://http/
 </If>


  ErrorLog ${APACHE_LOG_DIR}/http-error.log
  CustomLog ${APACHE_LOG_DIR}/http-access.log combined
  SSLEngine On
  SSLCertificateFile /etc/cert/server-cert.pem
  SSLCertificateKeyFile /etc/cert/server-key.pem
  SSLOpenSSLConfCmd DHParameters "/etc/cert/dhparam.pem"
  SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
  SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
  SSLCompression off
  SSLUseStapling on

  <Directory /var/www/html/http/>
       Options FollowSymlinks
       AllowOverride All
       Require all granted
  </Directory>

  <Directory /var/www/html/http/>
       RewriteEngine on
       RewriteBase /
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteRule ^(.*) index.php [PT,L]
  </Directory>
</VirtualHost>


Сохранить.

$ sudo nano /etc/apache2/mods-available/ssl.conf
 Добавить после <IfModule mod_ssl.c> :

<IfModule mod_ssl.c>
        # Set the location of the SSL OCSP Stapling Cache
         SSLStaplingCache shmcb:/tmp/stapling_cache(128000)

Сохранить.



$ sudo nano /var/www/html/http/.htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^192\.168\.0\.111
RewriteRule (.*) https://http/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^10\.10\.10\.101
RewriteRule (.*) https://10.10.10.101/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^X\.X\.X\.X
RewriteRule (.*) https://X.X.X.X/$1 [R=301,L]

Сохранть.

$ sudo chown -R www-data:www-data /var/www/html/http/
$ sudo chmod -R 755 /var/www/html/http/
 
$ sudo a2dissite 000-default.conf
$ sudo a2ensite http.conf
$ sudo service apache2 reload
$ sudo systemctl restart apache2

https://http/demo

Для windows скачать /etc/cert/ca-sert.pem переименовать в ca-sert.crt
 
Установка корневого сертификата в браузере Mozilla Firefox  

Для IE,  Google Chrome и других браузеров ca-sert.crt установить в Доверенные корневые центры сертификации




Настройка ufw для ограничения доступа по vpn
$ sudo sed -i 's|IPV6=yes|IPV6=no|' /etc/default/ufw
$ sudo ufw reset
$ sudo ufw status
$ sudo ufw enable
$ sudo ufw default deny incoming
$ sudo ufw default deny outgoing
$ sudo ufw default deny forward
$ ip a
... enp0s3 ...
$ sudo ufw allow out on enp0s3
$ sudo ufw allow in onenp0s3
$ sudo ufw allow out on tun0 to any port 22
$ sudo ufw allow in on tun0 to any port 22
$ sudo ufw allow out on tun0 to any port 443
$ sudo ufw allow in on tun0 to any port 443
$ sudo ufw disable && sudo ufw enable
$ sudo ufw status





Таким образом локальная сеть без ограничений, по tun0 открыт ssh, а доступ к нему по сертификату.

Удаление правил:
# ufw status numbered
.........
# ufw delete 2

.

Комментариев нет:

Отправить комментарий