6 votes

Interaction bizarre avec systemctl avec Haproxy sur CentOS 7

L'exécution de haproxy par systemctl est différente de l'exécution manuelle. .

  • sur le démarrage manuel, tout fonctionne.
  • en démarrant par systemctl, haproxy n'est pas capable de trouver le service qu'il proxie, et répond avec un 503.

Voici la sortie quand on démarre avec systemctl :

> sudo systemctl status  -l haproxy.service
haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled)
                Active: active (running) since Wed 2014-12-24 08:08:49 EST; 4min 59s ago
                Main PID: 20307 (haproxy)
                CGroup: /system.slice/haproxy.service
                20307 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

                Dec 24 08:08:49 localhost.localdomain systemd[1]: Starting HAProxy Load Balancer...
                Dec 24 08:08:49 localhost.localdomain systemd[1]: Started HAProxy Load Balancer.

Comme ceci, haproxy dit juste 503 pour mon backend.

Si j'arrête maintenant le service haproxy et que je le lance manuellement sur la ligne de commande, comme suit :

sudo /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

il se connecte bien à mon serveur.

J'ai installé haproxy via yum, et j'utilise une configuration extrêmement simple :

# defaults above

frontend  main *:80
    default_backend app

backend app
    option httpclose
    option forwardfor
    server web1 127.0.0.1:8001

Une idée de ce que pourrait être la différence ? J'ai essayé de l'exécuter avec ou sans démon.

Voici le journal lorsqu'il est exécuté avec systemctl :

Proxy app started.
127.0.0.1:44391 [24/Dec/2014:09:01:42.403] main app/web1 0/0/-1/-1/0 503 212 - - SC-- 0/0/0/0/3 0/0 "GET / HTTP/1.1"

Voici le journal de l'exécution manuelle :

Proxy app started.
127.0.0.1:44393 [24/Dec/2014:09:02:11.758] main app/web1 0/0/0/2/2 200 5699 - - ---- 1/1/0/0/0 0/0 "GET / HTTP/1.1"

Pour être clair, je peux effectuer avec succès un curl 127.0.0.1:8001 à la fois en tant qu'utilisateur de mon déploiement, avec sudo, et en tant qu'utilisateur de haproxy.

Modifier avec plus d'informations

J'ai essayé d'utiliser nginx comme proxy à la place, sans succès. Ce n'est donc pas haproxy qui est en cause ici. nginx dit 502 Bad Gateway et le journal dit :

2014/12/24 16:57:04 [crit] 23214#0: *1 connect() to 127.0.0.1:8001 failed (13: Permission denied) while connecting to upstream, client: 192.168.34.1, server: www.zombieclj.local, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8001/", host: "www.zombieclj.local"

Donc oui, il y a un truc de sécurité qui se passe. Je suis toujours capable de me connecter à 127.0.0.1:8001. Arrêter le pare-feu ne change rien.

8voto

Patrick Johnmeyer Points 5947

Le problème était que SELinux n'autorisait le serveur web à établir des connexions sortantes que vers un ensemble limité de ports.

Réparé en faisant :

semanage port --add --type http_port_t --proto tcp 8001

après avoir installé semanage con

yum install policycoreutils-python

Nodejs Nginx error : (13 : Permission denied) while connecting to upstream

2voto

Jacob Evans Points 7455

J'ai utilisé la fonction Audit2Allow qui se trouve sur le site Web de la Commission européenne. wiki centos

Révisez la règle :

grep haproxy /var/log/audit/audit.log | audit2allow -m haproxy

Créez un fichier de politique ( *.pp ).

grep haproxy /var/log/audit/audit.log | audit2allow -M haproxy

Maintenant, lorsque j'installe le paquet, j'inclus également le haproxy.pp et le charger dans selinux avec

semodule -i haproxy.pp

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X