
SentryPeer v4.0.5
Honeypot SIP distribuído que detecta e compartilha dados de fraude em ataques VoIP. Coleta IPs de atores maliciosos e números de telefone via rede ponto a ponto, com integração REST API e WebHook para inteligência de ameaças em tempo real.
Proteja seus servidores SIP de agentes mal-intencionados
Agradecimentos especiais à Deutsche Telekom Security GmbH por nos patrocinar! Muito gentil!
Por que não nos dar uma estrela e nos seguir no Twitter!
Índice
- Introdução
- Visão Geral
- Funcionalidades
- Palestras
- Adoção
- Design
- Docker
- Instalação
- Executando o SentryPeer
- WebHook
- API RESTful
- Syslog e Fail2ban
- Formato de Log JSON
- Opções de Linha de Comando
- Endereço Multicast IPv6
- Licença
- Contribuindo
- Site do Projeto
- Marca Registrada
- Perguntas, Relatórios de Bugs, Solicitações de Recursos
- Agradecimentos Especiais
- Patrocínio
Introdução
O SentryPeer® é uma ferramenta de detecção de fraude. Ela permite que agentes mal-intencionados tentem fazer chamadas telefônicas e salva o endereço IP de onde vieram e o número que tentaram chamar. Esses detalhes podem então ser usados para gerar notificações na rede do provedor de serviços e, na próxima vez que um usuário/cliente tentar chamar um número coletado, você pode agir da maneira que achar melhor.
Por exemplo:
Digamos que você esteja executando seu próprio PABX VoIP no local. O que o SentryPeer permitirá que você faça neste contexto é consultar a lista de números de telefone (usando a API RESTful) quando seus usuários estiverem fazendo chamadas de saída. Se houver uma correspondência, você receberá um aviso de que potencialmente um dispositivo dentro de sua rede está tentando ligar para números de telefone de sondagem conhecidos que podem ter sido:
- Números coletados por nós SentryPeer que você mesmo está executando
- Números vistos por outros nós SentryPeer que foram replicados para o seu nó através da rede ponto a ponto
Isso permitiria que você gerasse uma notificação de seus sistemas de monitoramento antes de acumular chamadas caras ou algo pior acontecer.
O que levaria a esse cenário?
- Potencial fraude de correio de voz. Isso pode acontecer se você permitir ligar para um número de entrada (seu DID/DDI) para acessar seu sistema de correio de voz e, em seguida, solicitar um PIN. Este PIN é fraco e o sistema de correio de voz permite que você pressione '*' para retornar a chamada do identificador de chamadas que deixou um correio de voz. O atacante deixou um correio de voz, e então adivinha seu PIN e retorna a chamada. O CLI é um número conhecido que o SentryPeer já viu. Você pode alertar sobre isso.
- Um dispositivo foi sequestrado e/ou um softphone ou similar está usando as credenciais que roubaram da interface gráfica do telefone e está tentando se registrar em seu sistema e fazer chamadas para um número visto pelo SentryPeer.
- Um usuário inocente está ligando para um número de phishing ou número caro conhecido, etc., que o SentryPeer já viu antes.
Tradicionalmente, esses dados são enviados para um local central, então você não possui os dados que coletou. Este projeto é todo sobre compartilhamento ponto a ponto desses dados. O usuário possuir os dados e vários feeds relacionados a provedores de serviços/provedores de rede é a parte chave para mim. Estou cansado de todos os serviços por aí que mantêm e vendem esses dados. Se você os coletou, deve ter a opção de mantê-los e/ou optar por compartilhá-los com outros membros da comunidade SentryPeer por meio de métodos ponto a ponto.
Visão Geral
Nó SentryPeer
Aqui estamos usando Diagramas de Sequência Mermaid para mostrar o fluxo de dados de um nó SentryPeer para o 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 para 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 o SentryPeer Node e a SentryPeerHQ API```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 com seus próprios 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 o código é Software Livre e de Código Aberto
- RÁPIDO
- Utilizador possui os seus dados
- Utilizador pode submeter os seus próprios dados se quiser (é necessário ativar o modo p2p -
-p) - Utilizador obtém dados de outros utilizadores APENAS SE optar por submeter os seus dados ao conjunto
- Nó de Tabela Hash Distribuída (DHT) embutido usando OpenDHT (opção cli
-p) - Compartilhamento Ponto a Ponto de bad_actors coletados usando OpenDHT (desativado por predefinição)
- Replicação de dados ponto a ponto para receber bad_actors coletados usando OpenDHT (desativado por predefinição)
- Definir o seu próprio nó de bootstrap DHT (opção cli
-b) - Multithread
- Transporte UDP
- Transporte TCP
- Transporte TLS
- Registo em JSON para um ficheiro
- O modo SIP pode ser desativado. Isto permite executar o SentryPeer em modo API ou apenas modo DHT, etc., ou seja, não como honeypot, mas como um nó na comunidade SentryPeer ou apenas para servir dados replicados
- O modo responsivo SIP pode ser ativado para coletar dados – flag cli / env
- Cópia local de dados para acesso rápido – flag de localização da base de dados cli / env
- API local para acesso rápido – flag cli / env
- WebHook para POST do json do bad actor para uma localização central – flag cli / env
- Integração com SentryPeerHQ através de token portador OAuth2
- API de consulta para endereços IP de bad actors
- API de consulta para IPSET de bad actors
- API de consulta para um endereço IP específico de um bad actor
- API de consulta para números de telefone tentados por bad actors
- API de consulta para um número de telefone tentado por um bad actor
- Suporte Fail2Ban via
syslogconforme pedido de funcionalidade - Base de dados local sqlite – funcionalidade / flag cli
- Analíticas – opt-in
- SDKs/bibliotecas para acesso externo – CGRateS para começar ou a nossa própria firewall com nftables
- Tamanho pequeno do binário para uso em IoT
- Multiplataforma
- Opções de firewall para usar dados distribuídos em tempo real
- Contentor no Docker Hub para a versão mais recente
- Agente BGP para peer para blackholing de endereços IP coletados (semelhante ao Team Cymru Bogon Router Server Project)
- Agente SIP para retornar 404 ou destino predefinido para redirecionamentos SIP
Apresentações
- ClueCon Weekly 2023 – https://www.youtube.com/watch?v=iuN_MtVfT6g
- UKNOF49 2022 (slides da apresentação) – 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/
Adoção
- Kali Linux
- Deutsche Telekom T-Pot – The All In One Honeypot Platform a partir da v22
Design
Comecei isto porque queria fazer programação de rede em C já que todos os projetos que uso diariamente são em C, como PostgreSQL, OpenLDAP, FreeSWITCH, OpenSIPS, Asterisk etc. Veja Episode 414: Jens Gustedt on Modern C para saber por que C é uma boa escolha. Para os interessados, veja a minha lista completa de episódios de podcast (https://www.se-radio.net/team/gavin-henry/) do Software Engineering Radio
Docker
Pode executar a versão mais recente do SentryPeer com Docker. A versão mais recente está disponível no Docker Hub. Ou crie você mesmo:
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
Depois pode verificar em http://localhost:8082/ip-addresses e http://localhost:8082/health-check para ver se está a funcionar.
Variáveis de Ambiente
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
Pode definir estas variáveis no Dockerfile, no ficheiro Dockerfile.env ou no comando docker run.
Definir qualquer uma destas para 0 também ativará a funcionalidade. Não nos importa o valor que define, apenas que esteja definido.
Ficheiro de Configuração
Também pode usar um ficheiro de configuração para definir certas coisas. Principalmente a configuração TLS abaixo. A localização predefinida é ~/.config/sentrypeer/default-config.toml, mas pode alterá-la com a variável de ambiente SENTRYPEER_CONFIG_FILE ou a opção cli -g.
Configuração TLS
Para usar os seus próprios certificados, pode definir as variáveis de ambiente apropriadas, argumentos cli ou usar o ficheiro de configuração. Por exemplo:``` 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"
Se você não definir estes, um certificado para localhost será gerado automaticamente no diretório onde sentrypeer é executado, criando um arquivo `cert.pem` e um arquivo `key.pem`.
### Instalação
Pacotes Debian ou Fedora estão sempre disponíveis na página de lançamento da versão atual do SentryPeer:
https://github.com/SentryPeer/SentryPeer/releases
#### Homebrew (macOS ou Linux):
Temos um [Homebrew Tap para este projeto](https://github.com/SentryPeer/homebrew-sentrypeer) (até nos tornarmos mais populares):
brew tap sentrypeer/sentrypeer
brew install sentrypeer
#### Alpine Linux:
O SentryPeer está em [teste no Alpine Linux](https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/testing/sentrypeer), então você pode instalá-lo com o seguinte comando:
apk -U add --no-cache -X https://dl-cdn.alpinelinux.org/alpine/edge/testing sentrypeer
#### Pacote Ubuntu
Você pode instalar o SentryPeer a partir do [nosso PPD Ubuntu](https://launchpad.net/~gavinhenry/+archive/ubuntu/sentrypeer) que atualmente é 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 pode ser adicionado manualmente ao seu sistema copiando as linhas abaixo e adicionando-as às fontes de software do seu sistema:
deb https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
deb-src https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
Em seguida, você pode instalar o SentryPeer:
sudo apt-get install sentrypeer
#### Compilando a partir do código-fonte
Você tem duas opções para instalação a partir do código-fonte: CMake ou autotools. O autotools é recomendado no momento. Um lançamento é uma compilação autotools.
Se você é um usuário Fedora, pode instalar isto via [Fedora copr](https://copr.fedorainfracloud.org/coprs/):
[https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/](https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/)
Se você vai compilar a partir deste repositório, precisará ter o seguinte instalado:
- `git`, `autoconf`, `automake` e `autoconf-archive` (Debian/Ubuntu)
- `libtool`, `rustc` e `cargo` (Fedora)
- `libosip2-dev` (Debian/Ubuntu) ou `libosip2-devel` (Fedora)
- `libsqlite3-dev` (Debian/Ubuntu) ou `sqlite-devel` (Fedora)
- `uuid-dev` (Debian/Ubuntu) ou `libuuid-devel` (Fedora)
- `libmicrohttpd-dev` (Debian/Ubuntu) ou `libmicrohttpd-devel` (Fedora)
- `libjansson-dev` (Debian/Ubuntu) ou `jansson-devel` (Fedora)
- `libpcre2-dev` (Debian/Ubuntu) ou `pcre2-devel` (Fedora)
- `libcurl-dev` (Debian/Ubuntu) ou `libcurl-devel` (Fedora)
- `libcmocka-dev` (Debian/Ubuntu) ou `libcmocka-devel` (Fedora) - para testes unitários
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
então (make check é altamente recomendado):
./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
### Executando o SentryPeer
Uma vez compilado, você pode executá-lo assim para iniciar em **modo debug**, **responder** a sondas SIP, habilitar a **API RESTful**, habilitar WebHooks e habilitar o log via syslog ([use um pacote](https://github.com/SentryPeer/SentryPeer/releases) se quiser [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
quando você receber uma solicitação de sonda, poderá ver algo como o seguinte no 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
Você pode ver os dados no banco de dados sqlite3 chamado sentrypeer.db usando sqlitebrowser ou a ferramenta de linha de comando sqlite3.
Aqui está uma captura de tela do banco de dados aberto usando sqlitebrowser (é grande, então vou apenas linkar para a imagem):
sqlitebrowser explorando o sentrypeer.db
WebHook
Existe um WebHook para enviar (POST) um payload no Formato de Log JSON para o SentryPeerHQ ou
para seu próprio endpoint WebHook. O WebHook não está habilitado por padrão. Você pode configurar a URL do WebHook via -w ou definir
a variável de ambiente SENTRYPEER_WEBHOOK_URL.
Se estiver usando o SentryPeer SaaS você precisa obter seu client id e client secret no
Dashboard e definir as variáveis de ambiente SENTRYPEER_OAUTH2_CLIENT_ID e SENTRYPEER_OAUTH2_CLIENT_SECRET ou usar as flags -i e -c.
API RESTful
A API RESTful está completa para os casos de uso atuais. Por favor, clique no botão Watch para ser notificado quando mais coisas forem lançadas :-)
Endpoint /health-check
Consulte a API para ver se está ativa:```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
Listar todos os endereços IP que foram vistos pelo 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}
Consulta um único endereço 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 os números chamados que foram vistos pelo 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 um número de telefone que um ator malicioso tentou chamar com prefixo + 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 e Fail2ban
Com `sentrypeer -s`, você analisa o syslog e usa o Fail2Ban para bloquear o endereço IP do ator 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 Log JSON
Com sentrypeer -j, você pode produzir um arquivo de log JSON do endereço IP do ator malicioso e do número de telefone que ele tentou chamar, além de outros metadados (defina um local personalizado para o arquivo de log com -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"
}
### Opções de Linha de Comando```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
Endereço Multicast IPv6
O projeto possui um endereço multicast IPv6 da IANA para enviar mensagens entre os peers do SentryPeer.
Endereços: FF0X:0:0:0:0:0:0:172
Descrição: SentryPeer
Contato: Gavin Henry <ghenry at sentrypeer.org>
Data de Registro: 2022-01-26
Consulte http://www.iana.org/assignments/ipv6-multicast-addresses
O endereço de escopo variável atribuído — que também pode ser listado como "FF0X::172" para abreviar — o "X" denota qualquer escopo possível.
Licença
Ótima leitura - Como escolher uma licença para seu próprio trabalho
Este trabalho é dual-licenciado sob GPL 2.0 e GPL 3.0.
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Contribuindo
Veja CONTRIBUTING
Site do Projeto
Marca Registrada
SENTRYPEER é uma marca registrada de Gavin Henry
Perguntas, Relatórios de Bugs, Solicitações de Funcionalidades
Novas issues podem ser abertas em:
https://github.com/SentryPeer/SentryPeer/issues
Não tem problema abrir uma issue para fazer uma pergunta.
Agradecimentos Especiais
Agradecimentos especiais para:
- Deutsche Telekom Security GmbH por nos patrocinar!
- psanders do projeto Routr por dicas sobre como reformular este arquivo README.md.
- Fly.io por creditar a conta SentryPeer por hospedar o aplicativo web SentryPeer HQ em sua infraestrutura
- AppSignal pelo patrocínio de monitoramento de desempenho de aplicações no aplicativo web SentryPeer HQ
- David Miller pelo design do tema da GUI Web do SentryPeer e logotipo. Muito gentil da sua parte!
- @garymiller pela solicitação de funcionalidade de syslog e Fail2ban conforme Integração Fail2ban via syslog #6
- @joejag pelo Pull Request para o início de receitas Terraform para lançar o SentryPeer em diferentes provedores de nuvem #12
Patrocínio
Agradecimentos especiais para Deutsche Telekom Security GmbH por nos patrocinar! Muito gentil!