
SentryPeer v4.0.5
Распределенный SIP-хонейпот, который обнаруживает и обменивается данными о мошеннических VoIP-атаках. Собирает IP-адреса злоумышленников и телефонные номера через пиринговую сеть, с интеграцией REST API и WebHook для аналитики угроз в реальном времени.
Защитите свои SIP-серверы от злоумышленников
Особая благодарность Deutsche Telekom Security GmbH за спонсорство! Очень любезно!
Почему бы не поставить нам звезду и не подписаться на нас в Twitter!
Содержание
- Введение
- Обзор
- Особенности
- Доклады
- Внедрение
- Дизайн
- Docker
- Установка
- Запуск SentryPeer
- WebHook
- RESTful API
- Syslog и Fail2ban
- Формат JSON логов
- Параметры командной строки
- Многоадресный адрес IPv6
- Лицензия
- Участие
- Веб-сайт проекта
- Товарный знак
- Вопросы, отчеты об ошибках, запросы функций
- Особая благодарность
- Спонсорство
Введение
SentryPeer® — это инструмент для обнаружения мошенничества. Он позволяет злоумышленникам пытаться совершать телефонные звонки и сохраняет IP-адрес, с которого они звонили, и номер, на который они пытались позвонить. Эти данные затем можно использовать для отправки уведомлений в сеть поставщика услуг, и в следующий раз, когда пользователь/клиент попытается позвонить на собранный номер, вы можете действовать по своему усмотрению.
Например:
Допустим, вы запускаете собственную VoIP АТС на месте. Что SentryPeer позволит вам сделать в этом контексте — это заглянуть в список телефонных номеров (используя RESTful API), когда ваши пользователи совершают исходящие звонки. Если найдется совпадение, вы получите предупреждение о том, что потенциально устройство в вашей сети пытается вызвать известные проверочные телефонные номера, которые либо:
- Номера, собранные узлами SentryPeer, которые вы запускаете сами
- Номера, замеченные другими узлами SentryPeer, которые были реплицированы на ваш узел через одноранговую сеть
Это позволит вам сгенерировать уведомление из ваших систем мониторинга до того, как вы накопите дорогостоящие звонки или произойдет что-то более серьезное.
Что может привести к такому сценарию?
- Возможное мошенничество с голосовой почтой. Это может произойти, если вы разрешаете звонок на входящий номер (ваш DID/DDI) для доступа к системе голосовой почты, а затем запрашиваете PIN-код. Этот PIN-код слабый, и система голосовой почты позволяет нажать '*', чтобы перезвонить на номер вызывающего абонента, оставившего голосовое сообщение. Злоумышленник оставил голосовое сообщение, а затем угадывает ваш PIN-код и перезванивает на него. CLI — это известный номер, который SentryPeer уже видел. Вы можете установить оповещение по нему.
- Устройство было взломано и/или программный телефон или подобное использует учетные данные, украденные из GUI телефона, и пытается зарегистрироваться в вашей системе и совершить звонки на номер, замеченный SentryPeer.
- Невинный пользователь звонит на фишинговый номер или известный дорогостоящий номер и т.п., который SentryPeer уже видел ранее.
Традиционно эти данные отправляются в центральное место, поэтому вы не являетесь владельцем собранных данных. Этот проект полностью посвящен одноранговому обмену этими данными. Пользователь, владеющий данными и различными каналами данных, связанными с провайдерами услуг и сетей, — это ключевой момент для меня. Меня тошнит от всех этих сервисов, которые хранят и продают данные. Если вы их собрали, у вас должен быть выбор: оставить их себе и/или согласиться поделиться ими с другими членами сообщества SentryPeer через p2p-методы.
Обзор
Узел SentryPeer
Здесь мы используем Mermaid Sequence diagrams для отображения потока данных от узла SentryPeer к 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 to 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@
Использование SentryPeer Node и 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
#### Интеграция с вашими собственными системами```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
🚧 Возможности
- Весь код Free/Libre and Open Source Software
- БЫСТРО
- Пользователь владеет своими данными
- Пользователь может отправлять свои данные, если хочет (нужно включить p2p режим -
-p) - Пользователь получает данные других пользователей ТОЛЬКО ЕСЛИ они соглашаются отправлять свои данные в общий пул
- Встроенный узел распределённой хеш-таблицы (DHT) с использованием OpenDHT (опция cli
-p) - Одноранговый обмен собранными bad_actors с использованием OpenDHT (по умолчанию выключено)
- Репликация данных по принципу Peer to Peer для получения собранных bad_actors с использованием OpenDHT (по умолчанию выключено)
- Установка собственного bootstrap-узла DHT (опция cli
-b) - Многопоточность
- Транспорт UDP
- Транспорт TCP
- Транспорт TLS
- Логирование в JSON в файл
- Режим SIP можно отключить. Это позволяет запускать SentryPeer только в режиме API или DHT и т.д., т.е. не как honeypot, а как узел сообщества SentryPeer или просто для обслуживания реплицированных данных
- Ответный режим SIP можно включить для сбора данных - флаг cli / переменная окружения
- Локальная копия данных для быстрого доступа - флаг местоположения БД cli / переменная окружения
- Локальный API для быстрого доступа - флаг cli / переменная окружения
- WebHook для отправки JSON о bad actor'ах POST-запросом в центральное расположение - флаг cli / переменная окружения
- Интеграция с SentryPeerHQ через OAuth2 bearer token
- API запросов для IP-адресов bad actor'ов
- API запросов для IPSET bad actor'ов
- API запросов для конкретного IP-адреса bad actor'а
- API запросов для номеров телефонов, на которые пытались звонить bad actor'ы
- API запросов для номера телефона, на который пытался позвонить bad actor
- Поддержка Fail2Ban через
syslogпо запросу функции - Локальная база данных sqlite - функция / флаг cli
- Аналитика - по согласию
- SDK/библиотеки для внешнего доступа - для начала CGRateS или собственный файрвол с nftables
- Небольшой размер бинарного файла для использования в IoT
- Кроссплатформенность
- Опции файрвола для использования распределённых данных в реальном времени
- Контейнер на Docker Hub для последней сборки
- BGP-агент для пиринга с целью блокировки собранных IP-адресов (похож на Team Cymru Bogon Router Server Project)
- SIP-агент для возврата 404 или назначения по умолчанию для SIP-перенаправлений
Доклады
- ClueCon Weekly 2023 - https://www.youtube.com/watch?v=iuN_MtVfT6g
- UKNOF49 2022 (слайды презентации) - 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/
Принятие
- Kali Linux
- Deutsche Telekom T-Pot - The All In One Honeypot Platform v22 и новее
Дизайн
Я начал этот проект, потому что хотел заняться сетевым программированием на C, так как все проекты, которые я ежедневно использую, написаны на C, такие как PostgreSQL, OpenLDAP, FreeSWITCH, OpenSIPS, Asterisk и другие. Смотрите Episode 414: Jens Gustedt on Modern C, чтобы узнать, почему C является хорошим выбором. Для заинтересованных - полный список моих подкастов (https://www.se-radio.net/team/gavin-henry/) на Software Engineering Radio
Docker
Вы можете запустить последнюю версию SentryPeer с помощью Docker. Последняя версия доступна на Docker Hub. Или соберите сами:
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
Затем вы можете проверить по адресу http://localhost:8082/ip-addresses и http://localhost:8082/health-check, работает ли он.
Переменные окружения
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
Установите их либо в Dockerfile, либо в файле Dockerfile.env, либо в команде docker run.
Установка любого из этих параметров в 0 также включит функцию. Нам всё равно, на что вы их устанавливаете, важно только то, что они установлены.
Файл конфигурации
Вы также можете использовать файл конфигурации для установки некоторых параметров. В основном это конфигурация TLS, приведённая ниже. Расположение по умолчанию - ~/.config/sentrypeer/default-config.toml, но его можно изменить с помощью переменной окружения SENTRYPEER_CONFIG_FILE или опции cli -g.
Конфигурация TLS
Чтобы использовать собственные сертификаты, вы можете установить соответствующие переменные окружения, аргументы cli или использовать файл конфигурации. Например:``` 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"
Если вы не зададите их, сертификат для localhost будет автоматически сгенерирован в каталоге, из которого запущен sentrypeer, с созданием файлов `cert.pem` и `key.pem`.
### Установка
Пакеты для Debian или Fedora всегда доступны на странице релизов текущей версии SentryPeer:
https://github.com/SentryPeer/SentryPeer/releases
#### Homebrew (macOS или Linux):
У нас есть [Homebrew Tap для этого проекта](https://github.com/SentryPeer/homebrew-sentrypeer) (пока мы не станем более популярными):
brew tap sentrypeer/sentrypeer
brew install sentrypeer
#### Alpine Linux:
SentryPeer находится в [тестировании на Alpine Linux](https://gitlab.alpinelinux.org/alpine/aports/-/tree/master/testing/sentrypeer), поэтому вы можете установить его с помощью следующей команды:
apk -U add --no-cache -X https://dl-cdn.alpinelinux.org/alpine/edge/testing sentrypeer
#### Пакет Ubuntu
Вы можете установить SentryPeer из [нашего PPA для Ubuntu](https://launchpad.net/~gavinhenry/+archive/ubuntu/sentrypeer), который в настоящее время предназначен для Ubuntu 20 LTS (Focal Fossa):
sudo apt install software-properties-common
sudo add-apt-repository ppa:gavinhenry/sentrypeer
sudo apt-get update
Этот PPA можно добавить в вашу систему вручную, скопировав строки ниже и добавив их в источники программного обеспечения вашей системы:
deb https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
deb-src https://ppa.launchpadcontent.net/gavinhenry/sentrypeer/ubuntu focal main
Затем вы можете установить SentryPeer:
sudo apt-get install sentrypeer
#### Сборка из исходного кода
У вас есть два варианта установки из исходного кода: CMake или autotools. В настоящее время рекомендуется autotools. Релиз — это сборка autotools.
Если вы пользователь Fedora, вы можете установить это через [Fedora copr](https://copr.fedorainfracloud.org/coprs/):
[https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/](https://copr.fedorainfracloud.org/coprs/ghenry/SentryPeer/)
Если вы собираетесь собирать из этого репозитория, вам необходимо установить следующее:
- `git`, `autoconf`, `automake` и `autoconf-archive` (Debian/Ubuntu)
- `libtool`, `rustc` и `cargo` (Fedora)
- `libosip2-dev` (Debian/Ubuntu) или `libosip2-devel` (Fedora)
- `libsqlite3-dev` (Debian/Ubuntu) или `sqlite-devel` (Fedora)
- `uuid-dev` (Debian/Ubuntu) или `libuuid-devel` (Fedora)
- `libmicrohttpd-dev` (Debian/Ubuntu) или `libmicrohttpd-devel` (Fedora)
- `libjansson-dev` (Debian/Ubuntu) или `jansson-devel` (Fedora)
- `libpcre2-dev` (Debian/Ubuntu) или `pcre2-devel` (Fedora)
- `libcurl-dev` (Debian/Ubuntu) или `libcurl-devel` (Fedora)
- `libcmocka-dev` (Debian/Ubuntu) или `libcmocka-devel` (Fedora) — для модульных тестов
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
затем (настоятельно рекомендуется выполнить 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
### Запуск SentryPeer
После сборки вы можете запустить следующим образом, чтобы запустить в **режиме отладки**, **отвечать** на SIP-зонды, включить **RESTful API**, включить WebHooks и ведение журнала через syslog ([используйте пакет](https://github.com/SentryPeer/SentryPeer/releases), если хотите [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
когда вы получите запрос зонда, вы увидите что-то вроде следующего в терминале:```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
Вы можете просмотреть данные в базе данных sqlite3 под названием sentrypeer.db, используя sqlitebrowser или инструмент командной строки sqlite3.
Вот скриншот базы данных, открытой с помощью sqlitebrowser (он большой, поэтому я просто дам ссылку на изображение):
sqlitebrowser exploring the sentrypeer.db
WebHook
Существует WebHook для отправки POST-запроса с полезной нагрузкой в формате JSON Log Format на SentryPeerHQ или вашу собственную конечную точку WebHook. WebHook не включен по умолчанию. Вы можете настроить URL WebHook с помощью флага -w или установить переменную окружения SENTRYPEER_WEBHOOK_URL.
Если вы используете SentryPeer SaaS, вам необходимо получить свой идентификатор клиента и секрет клиента из панели управления и установить переменные окружения SENTRYPEER_OAUTH2_CLIENT_ID и SENTRYPEER_OAUTH2_CLIENT_SECRET или использовать флаги -i и -c.
RESTful API
RESTful API завершен для текущих сценариев использования. Пожалуйста, нажмите кнопку Watch, чтобы получать уведомления о выходе новых функций :-)
Endpoint /health-check
Запросите API, чтобы проверить, работает ли он:```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
Вывести список всех IP-адресов, которые были замечены 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"
}
...
]
}
Конечная точка /ip-addresses/{ip-address}
Запрос одного 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" }
#### Конечная точка /numbers
Вывести список всех вызываемых номеров, которые были замечены 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"
},
....
Конечная точка /numbers/{phone-number}
Запрос номера телефона, на который пытался позвонить злоумышленник, с необязательным префиксом +:```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 и Fail2ban
С помощью `sentrypeer -s` вы анализируете системный журнал и используете Fail2Ban для блокировки IP-адреса злоумышленника:```syslog
Nov 30 21:32:16 localhost.localdomain sentrypeer[303741]: Source IP: 144.21.55.36, Method: OPTIONS, Agent: sipsak 0.9.7
Формат JSON-лога
С помощью sentrypeer -j вы можете создать JSON-файл журнала, содержащий IP-адрес злоумышленника и номер телефона, по которому он пытался позвонить,
а также другие метаданные (укажите собственное расположение файла журнала с помощью -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"
}
### Параметры командной строки```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
IPv6 Многоадресный адрес
Проект имеет IANA IPv6 многоадресный адрес для отправки сообщений между узлами SentryPeer.
Addresses: FF0X:0:0:0:0:0:0:172
Description: SentryPeer
Contact: Gavin Henry <ghenry at sentrypeer.org>
Registration Date: 2022-01-26
См. http://www.iana.org/assignments/ipv6-multicast-addresses
Назначенный адрес с переменной областью действия — который можно сокращенно записать как "FF0X::172" — "X" обозначает любую возможную область.
Лицензия
Отличное чтение - Как выбрать лицензию для своей работы
Эта работа имеет двойную лицензию: GPL 2.0 и GPL 3.0.
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
Участие
См. CONTRIBUTING
Веб-сайт проекта
Товарный знак
SENTRYPEER является зарегистрированным товарным знаком Гэвина Генри
Вопросы, сообщения об ошибках, запросы функций
Новые вопросы можно задавать на:
https://github.com/SentryPeer/SentryPeer/issues
Можно создать issue, чтобы задать вопрос.
Особая благодарность
Особая благодарность:
- Deutsche Telekom Security GmbH за спонсорство!
- psanders из проекта Routr за советы по переработке этого файла README.md.
- Fly.io за предоставление кредита аккаунту SentryPeer для хостинга веб-приложения SentryPeer HQ на их инфраструктуре
- AppSignal за спонсорство мониторинга производительности приложений в веб-приложении SentryPeer HQ
- David Miller за дизайн темы веб-интерфейса и логотипа SentryPeer. Очень любезно с вашей стороны!
- @garymiller за запрос функции syslog и Fail2ban в соответствии с Интеграция Fail2ban через syslog #6
- @joejag за Pull Request для начала Рецептов Terraform для запуска SentryPeer на различных облачных провайдерах #12
Спонсорство
Особая благодарность Deutsche Telekom Security GmbH за спонсорство! Очень любезно!