Pagina 1 di 1

[RISOLTO] Far ascoltare un servizio su porta privilegiata

MessaggioInviato: 11/04/2019, 11:49
da sirio81
Ciao a tutti, vorrei far girare il demone icinga2 su porta 443 (da con confondere con icingaweb2).

A tale scopo ho aggiunto/modificato il parametro
Codice: Seleziona tutto
nano /etc/icinga2/features-available/api.conf
  bind_port = 443


Ricaricando la configurazione ottengo l'errore
Codice: Seleziona tutto
critical/ApiListener: Cannot bind TCP socket for host '' on port '443'.

poichè il demone gira con l'tente non privilegiato "nagios".
Non ho altri processi che stanno tenendo occupata la porta (ss -ntpl | grep 443).

Se possibile, vorrei ottenere il risultato tramite systemd.
Ho trovato questo post che sembra fare proprio questo, ma il mio tentativo è fallito.

Non sono un esperto si systemd e per questo chiedo il vostro aiuto.

Re: Far ascoltare un servizio su porta privilegiata

MessaggioInviato: 11/04/2019, 14:27
da sirio81
Per la precisione, ho seguito il commento alla fine dell'articolo:

Codice: Seleziona tutto
cat /etc/systemd/system/icinga2.socket
[Unit]
Description=icinga2 socket

[Socket]
ListenStream=443
NoDelay=true

[Install]
RequiredBy=icinga2.service


E questi sono i risultati:

Codice: Seleziona tutto
systemctl daemon-reload
systemctl restart icinga2



systemctl status icinga2
● icinga2.service - Icinga host/service/network monitoring system
   Loaded: loaded (/lib/systemd/system/icinga2.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/icinga2.service.d
           └─limits.conf
   Active: failed (Result: exit-code) since Thu 2019-04-11 15:17:25 CEST; 5min ago
  Process: 14930 ExecStart=/usr/sbin/icinga2 daemon --close-stdio -e ${ICINGA2_ERROR_LOG} (code=exited, status=1/FAILURE)
  Process: 14912 ExecStartPre=/usr/lib/icinga2/prepare-dirs /etc/default/icinga2 (code=exited, status=0/SUCCESS)
 Main PID: 14930 (code=exited, status=1/FAILURE)



tail -f /var/log/icinga2.log

[2019-04-11 15:17:25 +0200] critical/TcpSocket: Invalid socket: Permission denied
Context:
        (0) Activating object 'api' of type 'ApiListener'

[2019-04-11 15:17:25 +0200] critical/ApiListener: Cannot bind TCP socket for host '' on port '443'.
Context:
        (0) Activating object 'api' of type 'ApiListener'

[2019-04-11 15:17:25 +0200] critical/ApiListener: Cannot add listener on host '' for port '443'.
Context:
        (0) Activating object 'api' of type 'ApiListener'



journalctl -xf
-- Logs begin at Tue 2019-03-26 09:30:26 CET. --
Apr 11 15:17:25 andrew.pbds.eu icinga2[14930]: [2019-04-11 15:17:25 +0200] critical/ApiListener: Cannot add listener on host '' for port '443'.
Apr 11 15:17:25 andrew.pbds.eu icinga2[14930]: Context:
Apr 11 15:17:25 andrew.pbds.eu icinga2[14930]:         (0) Activating object 'api' of type 'ApiListener'
Apr 11 15:17:25 andrew.pbds.eu systemd[1]: icinga2.service: Main process exited, code=exited, status=1/FAILURE
Apr 11 15:17:25 andrew.pbds.eu systemd[1]: icinga2.service: Failed with result 'exit-code'.
Apr 11 15:17:25 andrew.pbds.eu systemd[1]: Failed to start Icinga host/service/network monitoring system.
-- Subject: Unit icinga2.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- Unit icinga2.service has failed.

Re: Far ascoltare un servizio su porta privilegiata

MessaggioInviato: 14/04/2019, 8:14
da Aki
Potrebbe non essere legato a systemd, ma ad un errore del programma stesso: che versione di icinga2 stai usando ? Hai installato dal pacchetto Debian ? Hai visto questo [1] bug report ?

[1] https://github.com/Icinga/icinga2/issues/5479

Re: Far ascoltare un servizio su porta privilegiata

MessaggioInviato: 20/04/2019, 8:03
da sirio81
Versone: r2.10.4-1
Installata dai repo presi dal sito ufficiale.
Leggendo questo post: https://serverfault.com/questions/91680 ... th-systemd
oltre ad aver trovato un'altro meroto per permettere al demone di ascoltare su una porta privilegiata, mi sono reso conto che il demone stesso deve essere stato scritto per integrarsi con tale opzione di systemd: AmbientCapabilities=CAP_NET_BIND_SERVICE"

Ad ogni modo, trovo molto comodo il workaround di usare iptables per redirigere la porta.