Vous développe ou configure les proxys Nginx pour Apache Tomcat sur Ubuntu en 5 minutes avec https et pare-feu



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 / { # try_files $uri $uri/ =404; include proxy_params; proxy_pass http://tomcat/; } 

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?

Source: https://habr.com/ru/post/fr434010/


All Articles