
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 الذي أتوا منه والرقم الذي حاولوا الاتصال به. يمكن بعد ذلك استخدام هذه التفاصيل لرفع الإشعارات في شبكة مزود الخدمة، وفي المرة التالية التي يحاول فيها مستخدم/عميل الاتصال برقم تم جمعه، يمكنك التصرف بالطريقة التي تراها مناسبة.
على سبيل المثال:
لنفترض أنك تدير PBX VoIP خاص بك في الموقع. ما سيمكنك SentryPeer من فعله في هذا السياق، هو الاطلاع على قائمة أرقام الهواتف (باستخدام RESTful API) عندما يقوم المستخدمون بإجراء مكالمات صادرة. إذا حصلت على تطابق، ستحصل على تنبيه بأن جهازًا داخل شبكتك ربما يحاول الاتصال بأرقام هواتف معروفة للفحص والتي إما:
- أرقام تم جمعها بواسطة عقد SentryPeer التي تديرها بنفسك
- أرقام شوهدت بواسطة عقد SentryPeer أخرى وتم نسخها إلى عقدتك عبر شبكة الند للند
وهذا سيمكنك من إنشاء إشعار من أنظمة المراقبة الخاصة بك قبل أن تتراكم عليك مكالمات باهظة الثمن أو يحدث شيء أسوأ.
ما الذي قد يؤدي إلى هذا السيناريو؟
- احتمالية احتيال البريد الصوتي. يمكن أن يحدث هذا إذا سمحت بالاتصال برقم وارد (DID/DDI الخاص بك) للوصول إلى نظام البريد الصوتي الخاص بك، ثم طلب PIN. إذا كان PIN ضعيفًا ويسمح لك نظام البريد الصوتي بالضغط على '*' لمعاودة الاتصال بـ Caller ID الذي ترك رسالة صوتية. المهاجم ترك رسالة صوتية، ثم خمن PIN الخاص بك واتصل بها. CLI هو رقم معروف شوهد بواسطة SentryPeer. يمكنك التنبيه عليه.
- تم اختراق جهاز و/أو استخدام برنامج هاتف ناعم أو ما شابه باستخدام بيانات الاعتماد التي سرقوها من واجهة المستخدم الرسومية للهاتف ويحاول التسجيل في نظامك وإجراء مكالمات إلى رقم شوهد بواسطة SentryPeer.
- مستخدم بريء يتصل برقم تصيد أو رقم باهظ الثمن معروف وما إلى ذلك، وقد شوهد من قبل بواسطة SentryPeer.
تقليديًا، يتم شحن هذه البيانات إلى مكان مركزي، لذلك لا تملك البيانات التي جمعتها. يدور هذا المشروع حول مشاركة البيانات من نظير إلى نظير. المستخدم الذي يمتلك البيانات ومختلف خلاصات مزود الخدمة / مزود الشبكة المتعلقة بالبيانات هي الجزء الأساسي بالنسبة لي. أنا سئمت من جميع الخدمات الموجودة التي تحتفظ بها وتبيعها. إذا قمت بجمعها، يجب أن يكون لديك الخيار للاحتفاظ بها و/أو الاشتراك في مشاركتها مع أعضاء مجتمع SentryPeer الآخرين عبر طرق الند للند.
نظرة عامة
عقدة SentryPeer
هنا نستخدم مخططات تسلسل Mermaid لعرض تدفق البيانات من عقدة 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 إلى 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
🚧 الميزات
- جميع الكود برمجيات حرة/مفتوحة المصدر
- سريع
- المستخدم يملك بياناته
- يمكن للمستخدم تقديم بياناته الخاصة إذا أراد (يحتاج تفعيل وضع الند للند -
-p) - يحصل المستخدم على بيانات المستخدمين الآخرين فقط إذا وافقوا على تقديم بياناتهم إلى المجموعة
- عقدة جدول تجزئة موزع (DHT) مضمنة باستخدام OpenDHT (خيار سطر الأوامر
-p) - مشاركة الند للند للجهات الفاعلة الضارة التي تم جمعها باستخدام OpenDHT (معطل افتراضياً)
- تكرار بيانات الند للند لاستقبال الجهات الفاعلة الضارة التي تم جمعها باستخدام OpenDHT (معطل افتراضياً)
- تعيين عقدة التشغيل الأولي DHT الخاصة بك (خيار سطر الأوامر
-b) - متعدد الخيوط
- بروتوكول نقل UDP
- بروتوكول نقل TCP
- بروتوكول نقل TLS
- تسجيل بتنسيق JSON في ملف
- يمكن تعطيل وضع SIP. يتيح لك ذلك تشغيل SentryPeer في وضع API أو وضع DHT فقط، إلخ. أي ليس كوعاء عسل (honeypot)، بل كعقدة في مجتمع SentryPeer أو لخدمة البيانات المكررة فقط
- يمكن تفعيل وضع الاستجابة SIP لجمع البيانات - خيار سطر الأوامر / علامة بيئية
- نسخة محلية من البيانات للوصول السريع - خيار سطر الأوامر / علامة بيئية
- واجهة برمجة تطبيقات API محلية للوصول السريع - خيار سطر الأوامر / علامة بيئية
- WebHook لإرسال بيانات الجهات الفاعلة الضارة بصيغة JSON إلى موقع مركزي - خيار سطر الأوامر / علامة بيئية
- التكامل مع SentryPeerHQ عبر رمز OAuth2 الحامل (bearer token)
- واجهة برمجة تطبيقات استعلام عن عناوين IP للجهات الفاعلة الضارة
- واجهة برمجة تطبيقات استعلام عن IPSET للجهات الفاعلة الضارة
- واجهة برمجة تطبيقات استعلام عن عنوان IP معين لجهة فاعلة ضارة
- واجهة برمجة تطبيقات استعلام عن أرقام الهواتف التي حاولت الجهات الفاعلة الضارة الاتصال بها
- واجهة برمجة تطبيقات استعلام عن رقم هاتف معين حاولت جهة فاعلة ضارة الاتصال به
- دعم Fail2Ban عبر
syslogوفقاً لـ طلب الميزة - قاعدة بيانات sqlite محلية - ميزة / علامة سطر أوامر
- تحليلات Analytics - اختياري
- حزم تطوير/مكتبات للوصول الخارجي - CGRateS للبدء أو جدار الحماية الخاص بنا مع nftables
- حجم ثنائي صغير لاستخدام إنترنت الأشياء IoT
- متعدد المنصات
- خيارات جدار الحماية لاستخدام البيانات الموزعة في الوقت الفعلي
- حاوية على Docker Hub لأحدث بناء
- عميل BGP للاتصال به لاستبعاد عناوين IP المجمعة (على غرار مشروع خادم التوجيه البوغي Team Cymru)
- عميل SIP لإرجاع 404 أو وجهة افتراضية لإعادة توجيه SIP
محادثات Talks
- 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/
التبني Adoption
- Kali Linux
- دويتشه تيليكوم T-Pot - منصة أوعية العسل الشاملة من الإصدار v22 فصاعداً
التصميم Design
بدأت هذا لأنني أردت القيام ببرمجة شبكات بلغة C حيث أن جميع المشاريع التي أستخدمها يومياً مكتوبة بلغة C مثل PostgreSQL، و[OpenLDAP] (https://www.openldap.org/)، وFreeSWITCH، و[OpenSIPS] (https://opensips.org/)، وAsterisk إلخ. انظر الحلقة 414: Jens Gustedt في حديث عن 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.
متغيرات البيئة Environment Variables
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 سيؤدي أيضاً إلى تفعيل الميزة. نحن لا نهتم بالقيمة التي تحددها، فقط أن يتم تعيينها.
ملف الإعدادات Configuration File
يمكنك أيضاً استخدام ملف إعدادات لتعيين بعض الأشياء. خاصة إعدادات TLS أدناه. الموقع الافتراضي هو ~/.config/sentrypeer/default-config.toml، ولكن يمكن تغييره باستخدام متغير البيئة SENTRYPEER_CONFIG_FILE أو خيار سطر الأوامر -g.
إعدادات TLS Configuration
لاستخدام شهاداتك الخاصة، يمكنك إما تعيين متغيرات البيئة المناسبة، أو وسيطات سطر الأوامر، أو استخدام ملف الإعدادات. على سبيل المثال:``` 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 من [PPD الخاص بنا على 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 يستكشف ملف sentrypeer.db
WebHook
يوجد WebHook لإرسال حمولة تنسيق سجل JSON إلى 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 ليتم إعلامك عند إصدار المزيد من الميزات :-)
نقطة النهاية /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" }
#### نقطة النهاية /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" }
#### Endpoint /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`، تقوم بتحليل syslog واستخدام Fail2Ban لحظر IP address الخاص بالجهة الخبيثة:```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
يحتوي المشروع على عنوان إرسال متعدد IPv6 من IANA لغرض إرسال الرسائل بين أقران SentryPeer.
العناوين: FF0X:0:0:0:0:0:0:172
الوصف: SentryPeer
جهة الاتصال: Gavin Henry <ghenry at sentrypeer.org>
تاريخ التسجيل: 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
المساهمة
انظر المساهمة
موقع المشروع
العلامة التجارية
SENTRYPEER هي علامة تجارية مسجلة لـ Gavin Henry
الأسئلة، تقارير الأخطاء، طلبات الميزات
يمكن تقديم مشكلات جديدة على:
https://github.com/SentryPeer/SentryPeer/issues
من المقبول رفع مشكلة لطرح سؤال.
شكر خاص
شكر خاص لـ:
- 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 لـ طلب السحب لبدء وصفات Terraform لتشغيل SentryPeer على مزودي سحابة مختلفين #12
الرعاية
شكر خاص لـ Deutsche Telekom Security GmbH لرعايتنا! لطف كبير منهم!