PMM2: Scrapear exporter mediante proxy Socks


Prometheus permite scrapear exporters mediante un proxy Socks, esto puede resultar útil en diferentes escenarios, por ejemplo cuando se trata de un entorno muy restringido en el que no se permite el acceso directo desde el servidor PMM, otro caso podría ser cuando no nos interesa que que el servidor final conozca la ip de nuestro servidor PMM por alguna razón, el servidor Socks estaría enmascarando la ip de nuestro servidor PMM.

Existen multitud de proxys socks pero en esta ocasión utilizaremos Srelay ya que es muy fácil de instalar y no precisa de configuración alguna.

Compilamos e instalamos Srelay:

git clone https://git.code.sf.net/p/socks-relay/srelay socks-relay-srelay
cd socks-relay-srelay
./configure
make
cp srelay /usr/local/bin/

Lo arrancamos:

srelay

Comprobamos que esté funcionando y que esté a la escucha:

ps aux|grep srelay
nobody   20373  0.0  0.0 527204  1756 ?        Ssl  11:32   0:00 srelay

netstat -nputa|grep LISTEN|grep srelay
tcp        0      0 0.0.0.0:1080            0.0.0.0:*               LISTEN      12653/srelay        
tcp6       0      0 :::1080                 :::*                    LISTEN      12653/srelay        

Configuramos reglas de firewall para no dejar el servidor Socks abierto:

iptables -I INPUT 1 -p tcp --dport 1080 -j DROP
iptables -I INPUT 1 -s PMM_SERVER_IP -p tcp --dport 1080 -j ACCEPT

Guardamos las reglas y le indicamos que las cargue en el arranque:

/etc/init.d/iptables save
rc-update add iptables default

Demonizamos el proceso:

vi /etc/local.d/srelay.start
/usr/local/bin/srelay

Asignamos los permisos necesarios:

chmod 700 /etc/local.d/srelay.start

La configuración de Prometheus para monitorizar un php-fpm a través de un proxy Socks quedaría así.

vi prometheusConf/prometheus.base.yml
scrape_configs:
- job_name: fpm-status
  scrape_interval: 1m
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  static_configs:
  - targets:
    - SERVER:8080
  basic_auth:
    username: admin
    password: PASSWORD
  proxy_url: socks5://SRELAY_SERVER_IP:1080

Ahora los scrapes de PMM pasarán a través de nuestro servidor Socks para acceder a las métricas del exporter, podemos comprobar en el servidor php-fpm como las peticiones provienen del servidor Socks:

 tcpdump -ni eth0 port 8080
06:48:17.337735 IP SRELAY_SERVER_IP.56866 > SERVER.8080: Flags [P.], seq 4290895866:4290896151, ack 2322227802, win 501, options [nop,nop,TS val 1415235347 ecr 4174654489], length 285: HTTP: GET /metrics HTTP/1.1
06:48:17.337772 IP SERVER.8080 > SRELAY_SERVER_IP.56866: Flags [.], ack 285, win 505, options [nop,nop,TS val 4174714400 ecr 1415235347], length 0
06:48:17.341789 IP SERVER.8080 > SRELAY_SERVER_IP.56866: Flags [P.], seq 1:696, ack 285, win 505, options [nop,nop,TS val 4174714404 ecr 1415235347], length 695: HTTP: HTTP/1.1 200 OK
06:48:17.341870 IP SRELAY_SERVER_IP.56866 > SERVER.8080: Flags [.], ack 696, win 501, options [nop,nop,TS val 1415235351 ecr 4174714404], length 0
Si te ha gustado el artículo puedes invitarme a un redbull aquí.
Si tienes cualquier pregunta siempre puedes enviarme un Email o escribir en el grupo de Telegram de AlfaExploit.
Autor: kr0m -- 12/09/2020 02:10:38 -- Categoria: Monitoring