Eu tenho o Apache hospedando alguns arquivos para todo mundo ver e seguro com HTTPS. Eu também tenho um host OpenVPN. Como algumas redes bloqueiam portas de saída (como 1194), usei o recurso port-share
dentro do OpenVPN para ter uma rota de tráfego HTTP através do OpenVPN e para o Apache. Ao fazer isso, ainda posso hospedar meu site na porta 443 e, ao mesmo tempo, estar conectado a uma VPN pela (quase) sempre aberta porta 443.
O Apache simplesmente tem sua porta HTTPS alterada para a porta 4443, e o OpenVPN decidirá qual tráfego será enviado de 443 para 4443 por conta própria.
No entanto, meu servidor Apache usa um certificado Let's Encrypt e o Certbot para renovação automática. Pelo que posso dizer, esse compartilhamento de porta está causando alguns problemas e o Certbot não pode ser renovado automaticamente. Ele vai cuspir esse erro se ele tentar, enquanto o compartilhamento de porta:
Attempting to renew cert (maxattax.com) from /etc/letsencrypt/renewal/maxattax.com.conf produced an unexpected error: Failed authorization procedure. maxattax.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Error getting validation data, www.maxattax.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Error getting validation data. Skipping.
Se eu alterar a configuração para fazer o Apache rodar na porta 443 em vez de 4443 e desligar o OpenVPN, o Certbot é capaz de renovar novamente.
Minha pergunta é: como posso manter o OpenVPN na porta 443, o Apache HTTPS na porta 443 e ainda permitir que o Certbot renove automaticamente?
Partes relevantes de /etc/openvpn/server.conf
:
port 443
proto tcp
port-share localhost 4443
Conteúdo de /etc/apache2/ports.conf
:
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf
Listen 80
# Modified to port 4443 for OpenVPN passthrough
<IfModule ssl_module>
Listen 4443
</IfModule>
<IfModule mod_gnutls.c>
Listen 4443
</IfModule>
Conteúdo de /etc/apache2/sites-enabled/000-default-le-ssl.conf
:
<IfModule mod_ssl.c>
<VirtualHost *:4443>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
#SSLCertificateFile /etc/letsencrypt/live/maxattax.com/fullchain.pem
#SSLCertificateKeyFile /etc/letsencrypt/live/maxattax.com/privkey.pem
SSLCertificateKeyFile /etc/letsencrypt/live/maxattax.com/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/maxattax.com/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/maxattax.com/fullchain.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ServerName maxattax.com
ServerAlias www.maxattax.com
</VirtualHost>
</IfModule>
PS: maxattax.com
não é meu domínio real