
Je ne suis pas administrateur, mais il y a parfois des tâches plus faciles (et plus intéressantes) à résoudre que de déléguer à quelqu'un.
Parfois, nous devons «élever» le conteneur de servlet (le plus souvent Apache Tomcat) et configurer le proxy pour lui, la terminaison ssl (ou simplement https) et tout couvrir avec un pare-feu (en ne laissant que ssh et http / https).
Il s'est avéré que la semaine dernière, j'ai résolu ce problème à trois reprises (lorsque les étoiles sont devenues, et avant cela - il y a deux ans) et cette expérience s'est transformée en ce petit opus.
Donc, étant donné le serveur Ubuntu 18.04 ou 16.04 (vous n'aurez probablement pas de problèmes avec les versions antérieures 14.04 ou plus). Si vous ne possédez pas de serveur Ubuntu, vous pouvez rapidement le «récupérer», par exemple, vers
Digital Ocean (mon lien de référence). Après avoir écrit l'article, j'ai remarqué que DO pour les nouveaux comptes donne 100 $ pour 60 jours à essayer, si vous indiquez un prêt.
DNS
Pour un schéma simple pour obtenir un certificat https gratuit de Let's Encrypt, nous devons avoir accès au serveur DNS. Nous y écrivons l'adresse IP de notre serveur Ubuntu avec le nom, disons, xyz. Disons, pour être sûr, que vous avez mydomain.com, c'est-à-dire Le nom DNS de notre serveur sera xyz.mydomain.com
L'installation
Installez Apache Tomcat (j'utiliserai la version 8)
apt install tomcat8
Et maintenant Nginx
apt install nginx-core
Personnalisation
Nginx
Configurer Nginx précédemment enregistré dans le nom du serveur DNS (fichier
/ etc / nginx / sites-available / default )
server_name xyz.mydomain.com;
Nous enregistrons le lien vers Apache Tomcat installé (si vous n’avez rien changé, il «vit» sur le port 8080). Nous devons ajouter le bloc
amont au bloc
serveur .
upstream tomcat { server 127.0.0.1:8080 fail_timeout=0; } server { ...
Apportez des modifications au bloc d'
emplacement et redirigez tout le trafic vers Apache Tomcat
server { ... location / {
Nous vérifions que tout est entré correctement
service nginx configtest
et redémarrez nginx
service nginx restart
Apache tomcat
En principe, cette partie est facultative, et si cela n'a pas d'importance pour vous que les adresses IP réelles, les ports, le schéma pour lequel la demande est envoyée (je parle de https) et le serveur demandé soient envoyés à tomcat, cette étape peut être omise. Cependant, dans certains cas, cette étape est requise (par exemple, pour Java Web Start aka JNLP technology).
Ajoutez au fichier
/etc/tomcat8/server.xml dans le bloc
<Host /> .
<Host> ... <Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" remoteIpProxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto" /> </Host>
Redémarrez Tomcat
service tomcat8 restart
Certificat HTTP
Un certificat https avec vérification via http nous aidera à obtenir le bot certbot, ou plutôt sa modification pour nginx'a - python-certbot-nginx
Sur Ubuntu 18.04, pour installer certbot, lancez simplement
apt install python-certbot-nginx
Pour Ubuntu 16.04 - vous devez bricoler avec l'ajout de référentiels, etc. (voir le
guide détaillé pour le lien ).
Nous lançons
certbot --nginx
Dans le processus, spécifiez votre e-mail, acceptez le contrat de licence, ne nous autorisez pas à «fouiller» nos données avec Let's Encrypt, confirmez le nom DNS auquel le certificat sera émis, acceptez que le bot lui-même «configure» nginx.
Voila :)
Au cas où, nous vérifions que le renouvellement du certificat se passera sans problème (le certificat est délivré pour 90 jours et ensuite il peut être prolongé indéfiniment pour la même période).
certbot renew --dry-run
Et pour la paranoïa interne, on vérifie que le fichier cron est en place
ls -al /etc/cron.d/certbot
Pare-feu
Nous arrêtons et faisons une sauvegarde (instantané) de la machine virtuelle.
ufw allow ssh ufw allow http ufw allow https ufw default allow outgoing ufw default deny incoming ufw show added
Priez!
ufw enable ufw status
Nous vérifions que tout s'est bien passé - le site est accessible via https, le trafic http est redirigé et les ports autres que ceux listés ci-dessus et ssh sont bien fermés.
PS J'espère sincèrement que ce texte pourra être utile à quelqu'un et je me ferai un plaisir de faire des critiques constructives.
PPS Ou peut-être que le ALL-know all me dira le remplacement de certbot pour Windows? Vous devez obtenir le certificat initial (idéalement, le mettre à jour selon le calendrier, ou en général l'éclat chic) J'ai configuré moi-même nginx. Oui, je comprends que vous pouvez probablement prendre l'outil pour encrypta + IIS et l'utiliser dans mon script, mais tout à coup il y a un "idéal" prêt à l'emploi?