
SentryPeer v4.0.5
Honeypot SIP distribuido que detecta y comparte datos de fraude en ataques VoIP. Recopila direcciones IP de actores maliciosos y números de teléfono a través de una red peer-to-peer, con integración de API REST y WebHook para inteligencia de amenazas en tiempo real.
Protege tus servidores SIP de actores maliciosos
Agradecimientos especiales a Deutsche Telekom Security GmbH por patrocinarnos! ¡Muy amable!
¿Por qué no nos das una estrella y nos sigues en Twitter!
Tabla de Contenidos
- Introducción
- Resumen
- Características
- Charlas
- Adopción
- Diseño
- Docker
- Instalación
- Ejecutar SentryPeer
- WebHook
- API RESTful
- Syslog y Fail2ban
- Formato de registro JSON
- Opciones de línea de comandos
- Dirección de multidifusión IPv6
- Licencia
- Contribuir
- Sitio web del proyecto
- Marca registrada
- Preguntas, informes de errores, solicitudes de funciones
- Agradecimientos especiales
- Patrocinio
Introducción
SentryPeer® es una herramienta de detección de fraude. Permite que los actores maliciosos intenten realizar llamadas telefónicas y guarda la dirección IP de la que provienen y el número al que intentaron llamar. Luego, esos detalles se pueden usar para generar notificaciones en la red del proveedor de servicios y la próxima vez que un usuario/cliente intente llamar a un número recopilado, puedes actuar como consideres adecuado.
Por ejemplo:
Digamos que estás ejecutando tu propia PBX VoIP en el sitio. Lo que SentryPeer te permitirá hacer en este contexto es consultar la lista de números telefónicos (usando la API RESTful) cuando tus usuarios estén realizando llamadas salientes. Si obtienes una coincidencia, recibirás una alerta de que potencialmente un dispositivo dentro de tu red está intentando llamar a números de prueba conocidos que han sido:
- Números recopilados por nodos SentryPeer que estás ejecutando tú mismo.
- Números vistos por otros nodos SentryPeer que se han replicado a tu nodo a través de la red peer to peer.
Esto te permitiría generar una notificación desde tus sistemas de monitoreo antes de acumular llamadas costosas o que ocurra algo peor.
¿Qué llevaría a este escenario?
- Potencial fraude de buzón de voz. Esto puede suceder si permites llamar a un número entrante (tu DID/DDI) para acceder a tu sistema de buzón de voz y luego solicitar un PIN. Este PIN es débil y el sistema de buzón de voz permite presionar '*' para devolver la llamada al identificador de llamadas que dejó un mensaje de voz. El atacante ha dejado un mensaje de voz, luego adivina tu PIN y lo llama de vuelta. El CLI es un número conocido que SentryPeer ha visto. Puedes alertar sobre ello.
- Un dispositivo ha sido secuestrado y/o un softphone o similar está usando las credenciales robadas de la GUI del teléfono y está intentando registrarse en tu sistema y realizar llamadas a un número visto por SentryPeer.
- Un usuario inocente está llamando a un número de phishing o un número costoso conocido, etc., que SentryPeer ha visto antes.
Tradicionalmente, estos datos se envían a un lugar central, por lo que no eres dueño de los datos que has recopilado. Este proyecto se trata de compartir datos entre pares. El usuario dueño de los datos y varias fuentes relacionadas con proveedores de servicios / redes son la clave para mí. Estoy harto de todos los servicios que los retienen y venden. Si los has recopilado, debes tener la opción de conservarlos y/o aceptar compartirlos con otros miembros de la comunidad SentryPeer mediante métodos p2p.
Resumen
Nodo SentryPeer
Aquí estamos usando diagramas de secuencia de Mermaid para mostrar el flujo de datos desde un nodo SentryPeer hacia SentryPeerHQ.```mermaid
sequenceDiagram
actor A as Attacker
participant S as SentryPeer Node
participant DS as Data Store
participant W as WebHook
Endpoint
Note over DS: sqlite/json log/syslog
(if enabled)
Note over W: if enabled
A->>S: SIP probe OPTIONS/REGISTER/etc
S->>DS: Save event
S->>W: Send event
W->>S: 200 OK
S->>A: 200 OK
A->>S: INVITE sip:00046500729221@
#### SentryPeer Node a SentryPeerHQ```mermaid
sequenceDiagram
actor A as Attacker
participant S as SentryPeer Node
participant DS as Data Store
participant HQ as SentryPeerHQ
Note over DS: sqlite/json log/syslog (if enabled)
Note over HQ: OAuth2 creds required.<br/> if using https://sentrypeer.com
A->>S: SIP probe OPTIONS/REGISTER/etc
S->>DS: Save event
S->>HQ: Send event
HQ->>S: 201 Created
S->>A: 200 OK
A->>S: INVITE sip:00046500729221@
Usando el nodo SentryPeer y la API de SentryPeerHQ```mermaid
sequenceDiagram Actor U as User participant S as SentryPeer Node/HQ API Note over S: if enabled U->>S: GET /numbers S->>U: 200 OK Return all Phone numbers seen in database
#### Integrando con tus propios sistemas```mermaid
sequenceDiagram
participant D as Device
participant P as PBX/ITSP/Carrier
participant HQ as SentryPeer Node/HQ API
participant N as NOC
Note over P: Integration with <br/>SentryPeer needed
Note over N: Consumes alerts
Note over HQ: OAuth2 creds required<br/> if using SentryPeerHQ
Note over P,HQ: API rate limiting if using SentryPeerHQ
D->>P: SIP INVITE
P->>HQ: Have you seen attackers call this number?
HQ->>P: Yes, this has been seen on SentryPeer Nodes
HQ->>N: WebHook/Email/Slack
Note over HQ,N: Only if using SentryPeerHQ
P->>D: I'm blocking this call. Sorry
🚧 Funcionalidades
- Todo el código Software Libre y de Código Abierto
- RÁPIDO
- El usuario posee sus datos
- El usuario puede enviar sus propios datos si lo desea (debe habilitar el modo p2p -
-p) - El usuario obtiene datos de otros usuarios SOLO SI acepta enviar sus datos al grupo
- Nodo de Tabla Hash Distribuida (DHT) integrado usando OpenDHT (opción cli
-p) - Compartición entre pares de bad_actors recolectados usando OpenDHT (desactivado por defecto)
- Replicación de datos entre pares para recibir bad_actors recolectados usando OpenDHT (desactivado por defecto)
- Establecer su propio nodo de arranque DHT (opción cli
-b) - Multihilo
- Transporte UDP
- Transporte TCP
- Transporte TLS
- Registro JSON en un archivo
- El modo SIP se puede desactivar. Esto permite ejecutar SentryPeer en modo API o solo DHT, etc., es decir, no como honeypot, sino como un nodo en la comunidad SentryPeer o para simplemente servir datos replicados
- El modo de respuesta SIP se puede activar para recopilar datos - indicador cli / env
- Copia local de datos para acceso rápido - indicador de ubicación de BD cli / env
- API local para acceso rápido - indicador cli / env
- WebHook para enviar JSON de bad actor a una ubicación central - indicador cli / env
- Integración con SentryPeerHQ mediante token de portador OAuth2
- API de consulta para direcciones IP de bad actors
- API de consulta para IPSET de bad actors
- API de consulta para una dirección IP específica de un bad actor
- API de consulta para números de teléfono intentados por bad actors
- API de consulta para un número de teléfono intentado por un bad actor
- Soporte de Fail2Ban mediante
syslogsegún solicitud de funcionalidad - Base de datos sqlite local - funcionalidad / indicador cli
- Analíticas - opcionales (opt in)
- SDKs/bibliotecas para acceso externo - CGRateS para empezar o nuestro propio cortafuegos con nftables
- Tamaño pequeño del binario para uso en IoT
- Multiplataforma
- Opciones de cortafuegos para usar datos distribuidos en tiempo real
- Contenedor en Docker Hub para la última versión
- Agente BGP para emparejar y realizar agujero negro de direcciones IP recolectadas (similar a Team Cymru Bogon Router Server Project)
- Agente SIP para devolver 404 o destino predeterminado para redirecciones SIP
Charlas
- ClueCon Weekly 2023 - https://www.youtube.com/watch?v=iuN_MtVfT6g
- UKNOF49 2022 (diapositivas de la presentación) - https://indico.uknof.org.uk/event/59/contributions/801/
- ClueCon Weekly 2022 - https://youtu.be/DFxGHJI_0Wg
- CommCon 2021 - https://2021.commcon.xyz/talks/sentrypeer-a-distributed-peer-to-peer-list-of-bad-ip-addresses-and-phone-numbers-collected-via-a-sip-honeypot
- TADSummit 2021 - https://blog.tadsummit.com/2021/11/17/sentrypeer/
Adopción
- Kali Linux
- Deutsche Telekom T-Pot - La plataforma de honeypot todo en uno v22 en adelante
Diseño
Empecé esto porque quería hacer programación de redes en C ya que todos los proyectos que uso a diario están en C como PostgreSQL, OpenLDAP, FreeSWITCH, OpenSIPS, Asterisk, etc. Véase Episode 414: Jens Gustedt on Modern C para entender por qué C es una buena opción. Para los interesados, vea mi lista completa de episodios de podcast (https://www.se-radio.net/team/gavin-henry/) de Software Engineering Radio
Docker
Puede ejecutar la última versión de SentryPeer con Docker. La última versión está disponible en Docker Hub. O construirlo usted mismo:
sudo docker build --no-cache -t sentrypeer .
sudo docker run -d -p 5060:5060/tcp -p 5061:5061/tcp -p 5060:5060/udp -p 8082:8082 -p 4222:4222/udp sentrypeer:latest
Luego puede verificar en http://localhost:8082/ip-addresses y http://localhost:8082/health-check para ver si está funcionando.
Variables de Entorno
ENV SENTRYPEER_CONFIG_FILE=/my/location/sentrypeer.toml
ENV SENTRYPEER_DB_FILE=/my/location/sentrypeer.db
ENV SENTRYPEER_API=1
ENV SENTRYPEER_WEBHOOK=1
ENV SENTRYPEER_WEBHOOK_URL=https://my.webhook.url/events
ENV SENTRYPEER_OAUTH2_CLIENT_ID=1234567890
ENV SENTRYPEER_OAUTH2_CLIENT_SECRET=1234567890
ENV SENTRYPEER_SIP_RESPONSIVE=1
ENV SENTRYPEER_SIP_DISABLE=1
ENV SENTRYPEER_SYSLOG=1
ENV SENTRYPEER_PEER_TO_PEER=1
ENV SENTRYPEER_BOOTSTRAP_NODE=mybootstrapnode.com
ENV SENTRYPEER_JSON_LOG=1
ENV SENTRYPEER_JSON_LOG_FILE=/my/location/sentrypeer_json.log
ENV SENTRYPEER_VERBOSE=1
ENV SENTRYPEER_DEBUG=1
ENV SENTRYPEER_CERT=/my/location/sentrypeer-crt.pem
ENV SENTRYPEER_KEY=/my/location/sentrypeer-key.pem
ENV SENTRYPEER_TLS_LISTEN_ADDRESS=0.0.0.0:5061
Establezca estas variables en el Dockerfile, en su archivo Dockerfile.env o en el comando docker run.
Establecer cualquiera de estas en 0 también habilitará la funcionalidad. No nos importa a qué valor lo establezca, solo que esté establecido.
Archivo de Configuración
También puede usar un archivo de configuración para establecer ciertos aspectos. Principalmente la configuración TLS a continuación. La ubicación predeterminada es ~/.config/sentrypeer/default-config.toml, pero puede cambiarla con la variable de entorno SENTRYPEER_CONFIG_FILE o la opción cli -g.
Configuración TLS
Para usar sus propios certificados, puede establecer las variables de entorno adecuadas, argumentos cli o usar el archivo de configuración. Por ejemplo:``` cat ~/.config/sentrypeer/default-config.toml cert = "tests/unit_tests/127.0.0.1.pem" key = "tests/unit_tests/127.0.0.1-key.pem" tls_listen_address = "0.0.0.0:5061"
Si no estableces estos, se generará automáticamente un certificado para localhost en el directorio desde el que se ejecute sentrypeer, creando un archivo `cert.pem` y un `key.pem`.
### Instalación
Los paquetes para Debian o Fedora siempre están disponibles en la página de lanzamiento de la versión actual de SentryPeer:
https://github.com/SentryPeer/SentryPeer/releases
#### Homebrew (macOS o Linux):
Tenemos un [Homebrew Tap para este proyecto](https://github.com/SentryPeer/homebrew-sentrypeer) (hasta que seamos más populares):
brew tap sentrypeer/sentrypeer
brew install sentrypeer
#### Alpine Linux:
SentryPeer está en [testing en Alpine Linux](https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/testing/sentrypeer), por lo que puedes instalarlo con el siguiente comando:
apk -U add --no-cache -X https://dl-cdn.alpinelinux.org/alpine/edge/testing sentrypeer
#### Paquete Ubuntu
Puedes instalar SentryPeer desde [nuestro PPD de Ubuntu](https://launchpad.net/~gavinhenry/+archive/ubuntu/sentrypeer) que actualmente es para Ubuntu 20 LTS (Focal Fossa):
sudo apt install software-properties-common
sudo add-apt-repository ppa:gavinhenry/sentrypeer
sudo apt-get update
Este PPA se puede agregar a tu sistema manualmente copiando las líneas siguientes y añadiéndolas a las fuentes de software de tu sistema:
deb https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
deb-src https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
Luego puedes instalar SentryPeer:
sudo apt-get install sentrypeer
#### Compilación desde el código fuente
Tienes dos opciones para la instalación desde el código fuente: CMake o autotools. Se recomienda autotools por el momento. Un lanzamiento es una compilación con autotools.
Si eres usuario de Fedora, puedes instalar esto a través de [Fedora copr](https://copr.fedorainfracloud.org/coprs/):
[https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/](https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/)
Si vas a compilar desde este repositorio, necesitarás tener instalado lo siguiente:
- `git`, `autoconf`, `automake` y `autoconf-archive` (Debian/Ubuntu)
- `libtool`, `rustc` y `cargo` (Fedora)
- `libosip2-dev` (Debian/Ubuntu) o `libosip2-devel` (Fedora)
- `libsqlite3-dev` (Debian/Ubuntu) o `sqlite-devel` (Fedora)
- `uuid-dev` (Debian/Ubuntu) o `libuuid-devel` (Fedora)
- `libmicrohttpd-dev` (Debian/Ubuntu) o `libmicrohttpd-devel` (Fedora)
- `libjansson-dev` (Debian/Ubuntu) o `jansson-devel` (Fedora)
- `libpcre2-dev` (Debian/Ubuntu) o `pcre2-devel` (Fedora)
- `libcurl-dev` (Debian/Ubuntu) o `libcurl-devel` (Fedora)
- `libcmocka-dev` (Debian/Ubuntu) o `libcmocka-devel` (Fedora) - para pruebas unitarias
Debian/Ubuntu:
sudo apt-get install git build-essential clang autoconf-archive autoconf \
automake libtool cmake libosip2-dev libsqlite3-dev libcmocka-dev uuid-dev \
libcurl4-openssl-dev libpcre2-dev libjansson-dev libmicrohttpd-dev libclang-dev
Fedora:
sudo dnf install git clang pkg-config autoconf automake autoconf-archive \
libtool libosip2-devel libsqlite3-devel libcmocka-devel libuuid-devel \
libmicrohttpd-devel jansson-devel libcurl-devel pcre2-devel cmake \
clang-libs clang
macOS:
brew install git libtool autoconf automake autoconf-archive libosip cmocka \
libmicrohttpd jansson curl pcre2 pkg-config opendht ossp-uuid cmake
Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
luego (se recomienda encarecidamente make check):
./bootstrap.sh
./configure
make
make check
make install
CMake:
cmake -S . -B build -DUNIT_TESTING=ON
cmake --build build
ctest --test-dir build
cmake --install build
### Ejecutando SentryPeer
Una vez compilado, puedes ejecutarlo así para iniciar en **modo debug**, **responder** a sondas SIP, habilitar la **API RESTful**, habilitar WebHooks y habilitar el registro en syslog ([usa un paquete](https://github.com/SentryPeer/SentryPeer/releases) si quieres [systemd](https://www.freedesktop.org/wiki/Software/systemd/)):
./sentrypeer -draps
SentryPeer node id: e5ac3a88-3d52-4e84-b70c-b2ce83992d02
Starting sentrypeer...
API mode enabled, starting http daemon...
SIP mode enabled...
Peer to Peer DHT mode enabled...
Starting peer to peer DHT mode using OpenDHT-C lib version '2.4.0'...
Configuring local address...
Creating sockets...
Binding sockets to local address...
Listening for incoming UDP connections...
SIP responsive mode enabled. Will reply to SIP probes...
Listening for incoming TCP connections...
Peer to peer DHT mode started.
DHT InfoHash for key 'bad_actors' is: 14d30143330e2e0e922ed4028a60ff96a59800ad
Bootstrapping the DHT
Waiting 5 seconds for bootstrapping to bootstrap.sentrypeer.org...
Listening for changes to the bad_actors DHT key
cuando recibes una solicitud de sonda, puedes ver algo como lo siguiente en la terminal:```bash
Received (411 bytes): OPTIONS sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 91.223.3.152:5173;branch=z9hG4bK-515761064;rport
Content-Length: 0
From: "sipvicious"<sip:[email protected]>;tag=6434396633623535313363340131363131333837383137
Accept: application/sdp
User-Agent: friendly-scanner
To: "sipvicious"<sip:[email protected]>
Contact: sip:[email protected]:5173
CSeq: 1 OPTIONS
Call-ID: 679894155883566215079442
Max-Forwards: 70
read_packet_buf size is: 1024:
read_packet_buf length is: 468:
bytes_received size is: 411:
Bad Actor is:
Event Timestamp: 2021-11-23 20:13:36.427515810
Event UUID: fac3fa20-8c2c-445b-8661-50a70fa9e873
SIP Message: OPTIONS sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP 91.223.3.152:5173;branch=z9hG4bK-515761064;rport
From: "sipvicious" <sip:[email protected]>;tag=6434396633623535313363340131363131333837383137
To: "sipvicious" <sip:[email protected]>
Call-ID: 679894155883566215079442
CSeq: 1 OPTIONS
Contact: <sip:[email protected]:5173>
Accept: application/sdp
User-agent: friendly-scanner
Max-forwards: 70
Content-Length: 0
Source IP: 193.107.216.27
Called Number: 100
SIP Method: OPTIONS
Transport Type: UDP
User Agent: friendly-scanner
Collected Method: responsive
Created by Node Id: fac3fa20-8c2c-445b-8661-50a70fa9e873
SentryPeer db file location is: sentrypeer.db
Destination IP address of UDP packet is: xx.xx.xx.xx
Puedes ver los datos en la base de datos sqlite3 llamada sentrypeer.db usando sqlitebrowser o la herramienta de línea de comandos sqlite3.
Aquí hay una captura de pantalla de la base de datos abierta con sqlitebrowser (es grande, así que solo enlazaré a la imagen):
sqlitebrowser explorando el sentrypeer.db
WebHook
Hay un WebHook para enviar por POST un payload en Formato de registro JSON a SentryPeerHQ o a tu propio endpoint WebHook. El WebHook no está habilitado por defecto. Puedes configurar la URL del WebHook mediante -w o estableciendo la variable de entorno SENTRYPEER_WEBHOOK_URL.
Si usas SentryPeer SaaS, necesitas obtener tu ID de cliente y secreto de cliente desde el Panel de control y establecer las variables de entorno SENTRYPEER_OAUTH2_CLIENT_ID y SENTRYPEER_OAUTH2_CLIENT_SECRET o usar las banderas -i y -c.
API RESTful
La API RESTful está completa para los casos de uso actuales. Por favor, haz clic en el botón Watch para recibir notificaciones cuando salgan más cosas :-)
Endpoint /health-check
Consulta la API para ver si está activa:```bash curl -v -H "Content-Type: application/json" http://localhost:8082/health-check
- Connected to localhost (127.0.0.1) port 8082 (#0)
GET /health-check HTTP/1.1 Host: localhost:8082 User-Agent: curl/7.79.1 Accept: / Content-Type: application/json
- Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Mon, 24 Apr 2022 11:16:25 GMT < Content-Type: application/json < Access-Control-Allow-Origin: * < X-Powered-By: SentryPeer < X-SentryPeer-Version: 1.4.0 < Content-Length: 81 < { "status": "OK", "message": "Hello from SentryPeer!", "version": "1.0.0" }
#### Endpoint /ip-addresses
Lista todas las direcciones IP que han sido vistas por SentryPeer:```bash
curl -v -H "Content-Type: application/json" http://localhost:8082/ip-addresses
* Connected to localhost (127.0.0.1) port 8082 (#0)
> GET /ip-addresses HTTP/1.1
> Host: localhost:8082
> User-Agent: curl/7.79.1
> Accept: */*
> Content-Type: application/json
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 24 Jan 2022 11:17:05 GMT
< Content-Type: application/json
< Access-Control-Allow-Origin: *
< X-Powered-By: SentryPeer
< X-SentryPeer-Version: 1.0.0
< Content-Length: 50175
<
{
"ip_addresses_total": 396,
"ip_addresses": [
{
"ip_address": "193.107.216.27",
"seen_last": "2022-01-11 13:30:48.703603359",
"seen_count": "1263"
},
{
"ip_address": "193.46.255.152"
"seen_last": "2022-01-11 13:28:27.348926406",
"seen_count": "3220"
}
...
]
}
Endpoint /ip-addresses/{ip-address}
Consultar una sola dirección IP:```bash curl -v -H "Content-Type: application/json" http://localhost:8082/ip-addresses/8.8.8.8
- Connected to localhost (127.0.0.1) port 8082 (#0)
GET /ip-addresses/8.8.8.8 HTTP/1.1 Host: localhost:8082 User-Agent: curl/7.79.1 Accept: / Content-Type: application/json
- Mark bundle as not supporting multiuse < HTTP/1.1 404 Not Found < Date: Mon, 24 Jan 2022 11:17:57 GMT < Content-Type: application/json < Access-Control-Allow-Origin: * < X-Powered-By: SentryPeer < X-SentryPeer-Version: 1.0.0 < Content-Length: 33 <
- Connection #0 to host localhost left intact { "message": "No bad actor found" }
#### Endpoint /numbers
Lista todos los números llamados que han sido vistos por SentryPeer:```bash
curl -v -H "Content-Type: application/json" http://localhost:8082/numbers
* Connected to localhost (127.0.0.1) port 8082 (#0)
> GET /numbers HTTP/1.1
> Host: localhost:8082
> User-Agent: curl/8.0.1
> Accept: */*
> Content-Type: application/json
< Date: Thu, 27 Jul 2023 11:10:35 GMT
< Content-Type: application/json
< Access-Control-Allow-Origin: *
< X-Powered-By: SentryPeer
< X-SentryPeer-Version: 4.0.0
< Content-Length: 31746258
{
"called_numbers_total": 244850,
"called_numbers": [
{
"called_number": "981046500729221",
"seen_last": "2023-07-27 12:06:59.388055505",
"seen_count": "451"
},
{
"called_number": "81046500729221",
"seen_last": "2023-07-27 12:05:19.206442003",
"seen_count": "453"
},
{
"called_number": "100",
"seen_last": "2023-07-27 11:59:57.679798597",
"seen_count": "17335"
},
....
Endpoint /numbers/{phone-number}
Consultar un número de teléfono al que un actor malicioso intentó llamar con el prefijo opcional +:```bash
curl -v -H "Content-Type: application/json" http://localhost:8082/numbers/8784946812410967
- Connected to localhost (127.0.0.1) port 8082 (#0)
GET /numbers/8784946812410967 HTTP/1.1 Host: localhost:8082 User-Agent: curl/7.79.1 Accept: / Content-Type: application/json
< HTTP/1.1 200 OK < Date: Mon, 24 Jan 2022 11:19:53 GMT < Content-Type: application/json < Access-Control-Allow-Origin: * < X-Powered-By: SentryPeer < X-SentryPeer-Version: 1.0.0 < Content-Length: 46 < { "phone_number_found": "8784946812410967" }
### Syslog y Fail2ban
Con `sentrypeer -s`, analizas el syslog y usas Fail2Ban para bloquear la dirección IP del actor malicioso:```syslog
Nov 30 21:32:16 localhost.localdomain sentrypeer[303741]: Source IP: 144.21.55.36, Method: OPTIONS, Agent: sipsak 0.9.7
Formato de registro JSON
Con sentrypeer -j, puede generar un archivo de registro JSON de la dirección IP del actor malicioso y el número de teléfono al que intentaron llamar, además de otros metadatos (establezca una ubicación de archivo de registro personalizada con -l):```json
{
"app_name":"sentrypeer",
"app_version":"v1.4.0",
"event_timestamp":"2022-02-22 11:19:15.848934346",
"event_uuid":"4503cc92-26cb-4b3e-bb33-69a83fa09321",
"created_by_node_id":"4503cc92-26cb-4b3e-bb33-69a83fa09321",
"collected_method":"responsive",
"transport_type":"UDP",
"source_ip":"45.134.144.128",
"destination_ip":"XX.XX.XX.XX",
"called_number":"0046812118532",
"sip_method":"OPTIONS",
"sip_user_agent":"friendly-scanner",
"sip_message":"full SIP message"
}
### Opciones de Línea de Comandos```bash
./sentrypeer -h
Protect your SIP Servers from bad actors at https://sentrypeer.com
Usage: sentrypeer [OPTIONS]
Options:
-f <DB_FILE> Set 'sentrypeer.db' location or use SENTRYPEER_DB_FILE env
-j Enable json logging or use SENTRYPEER_JSON_LOG env
-p Enable Peer to Peer mode or use SENTRYPEER_PEER_TO_PEER env
-b <BOOTSTRAP_NODE> Set Peer to Peer bootstrap node or use SENTRYPEER_BOOTSTRAP_NODE env
-i <CLIENT_ID> Set OAuth 2 client ID or use SENTRYPEER_OAUTH2_CLIENT_ID env to get a Bearer token for WebHook
-c <CLIENT_SECRET> Set OAuth 2 client secret or use SENTRYPEER_OAUTH2_CLIENT_SECRET env to get a Bearer token for WebHook
-a Enable RESTful API mode or use SENTRYPEER_API env
-w <WEBHOOK_URL> Set WebHook URL for bad actor json POSTs or use SENTRYPEER_WEBHOOK_URL env
-r Enable SIP responsive mode or use SENTRYPEER_SIP_RESPONSIVE env
-R Disable SIP mode completely or use SENTRYPEER_SIP_DISABLE env
-l <JSON_LOG_FILE> Set JSON logfile (default './sentrypeer_json.log') location or use SENTRYPEER_JSON_LOG_FILE env
-N Disable Rust powered TCP, UDP and TLS or use SENTRYPEER_TLS_DISABLE env
-t <TLS_CERT_FILE> Set TLS cert location (default './cert.pem') or use SENTRYPEER_CERT env
-k <TLS_KEY_FILE> Set TLS key location (default './key.pem') or use SENTRYPEER_KEY env
-z <TLS_LISTEN_ADDRESS> Set TLS listen address (default '0.0.0.0:5061') or use SENTRYPEER_TLS_LISTEN_ADDRESS env
-g <CONFIG_FILE> Set config file location or use SENTRYPEER_CONFIG_FILE env
-s Enable syslog logging or use SENTRYPEER_SYSLOG env
-v Enable verbose logging or use SENTRYPEER_VERBOSE env
-d Enable debug mode or use SENTRYPEER_DEBUG env
-h, --help Print help
-V, --version Print version
Dirección Multicast IPv6
El proyecto tiene una dirección multicast IPv6 de IANA con el propósito de enviar mensajes entre pares de SentryPeer.
Addresses: FF0X:0:0:0:0:0:0:172
Description: SentryPeer
Contact: Gavin Henry <ghenry at sentrypeer.org>
Registration Date: 2022-01-26
Consulte http://www.iana.org/assignments/ipv6-multicast-addresses
La dirección de alcance variable asignada (que también se puede listar como "FF0X::172" para abreviar) — la "X" denota cualquier alcance posible.
Licencia
Excelente lectura - Cómo elegir una licencia para tu propio trabajo
Este trabajo tiene doble licencia bajo GPL 2.0 y GPL 3.0.
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contribuir
Ver CONTRIBUTING
Sitio web del proyecto
Marca registrada
SENTRYPEER es una marca registrada de Gavin Henry
Preguntas, informes de errores, solicitudes de funciones
Se pueden crear nuevas incidencias en:
https://github.com/SentryPeer/SentryPeer/issues
Está bien crear una incidencia para hacer una pregunta.
Agradecimientos especiales
Agradecimientos especiales a:
- Deutsche Telekom Security GmbH por patrocinarnos!
- psanders del proyecto Routr por consejos para reelaborar este archivo README.md.
- Fly.io por acreditar la cuenta de SentryPeer por alojar la aplicación web de SentryPeer HQ en su infraestructura
- AppSignal por el patrocinio de monitoreo de rendimiento de aplicaciones en la aplicación web de SentryPeer HQ
- David Miller por el diseño del tema de la interfaz web y el logotipo de SentryPeer. ¡Muy amable de su parte!
- @garymiller por la solicitud de funcionalidad de syslog y Fail2ban según Integración de Fail2ban vía syslog #6
- @joejag por la Solicitud de extracción para el inicio de recetas de Terraform para lanzar SentryPeer en diferentes proveedores de nube #12
Patrocinio
Agradecimientos especiales a Deutsche Telekom Security GmbH por patrocinarnos. ¡Muy amable!