
teler-waf هو وسيط HTTP مكتوب بلغة Go يحمي خدمات الويب المحلية من تهديدات OWASP Top 10، والثغرات المعروفة، والجهات الخبيثة، والبوتنتات، والزواحف غير المرغوب فيها، وهجمات القوة العمياء.
teler-waf هو حل أمني شامل لتطبيقات الويب المبنية بلغة Go. يعمل كوسيط HTTP، ويوفر واجهة سهلة الاستخدام لدمج وظائف نظام كشف التسلل (IDS) مع teler IDS في تطبيقات Go الحالية. باستخدام teler-waf، يمكنك المساعدة في الحماية من مجموعة متنوعة من الهجمات المستندة إلى الويب، مثل البرمجة النصية عبر المواقع (XSS) وحقن SQL.
تأتي الحزمة مع معالج net/http.Handler قياسي، مما يسهل دمجها في توجيه التطبيق الخاص بك. عندما يقدم العميل طلبًا إلى مسار محمي بواسطة teler-waf، يتم أولاً فحص الطلب مقابل teler IDS للكشف عن أنماط ضارة معروفة. إذا لم يتم اكتشاف أي أنماط ضارة، يتم تمرير الطلب لمزيد من المعالجة.
بالإضافة إلى توفير الحماية ضد الهجمات المستندة إلى الويب، يمكن أن يساعد teler-waf أيضًا في تحسين الأمان والنزاهة الكلية لتطبيقك. وهو قابل للتكوين بدرجة كبيرة، مما يسمح لك بتخصيصه ليناسب الاحتياجات المحددة لتطبيقك.
انظر أيضًا:
يقدم teler-waf مجموعة من الميزات القوية المصممة لتعزيز أمان تطبيقات الويب بلغة Go:
بشكل عام، يوفر teler-waf حلاً أمنيًا شاملاً لتطبيقات الويب بلغة Go، مما يساعد في الحماية من الهجمات المستندة إلى الويب وتحسين الأمان والنزاهة الكلية لتطبيقك.
المتطلبات الأساسية:
لتثبيت teler-waf في تطبيق Go الخاص بك، قم بتشغيل الأمر التالي لتنزيل وتثبيت حزمة teler-waf:```console go get github.com/teler-sh/teler-waf
## الاستخدام
> [!WARNING]
> **إشعار إهمال**: سيتم إهمال استثناءات التهديدات (`Excludes`) في الإصدار القادم (**v2**). انظر [#73](https://github.com/teler-sh/teler-waf/discussions/73) & [#64](https://github.com/teler-sh/teler-waf/issues/64).
فيما يلي مثال على كيفية استخدام teler-waf في تطبيق Go:
1. استيراد حزمة teler-waf في كود Go الخاص بك:```go
import "github.com/teler-sh/teler-waf"
New لإنشاء نسخة جديدة من النوع Teler. تأخذ هذه الدالة مجموعة متنوعة من المعاملات الاختيارية التي يمكن استخدامها لتكوين teler-waf بما يتناسب مع الاحتياجات المحددة لتطبيقك.```go
waf := teler.New()3. استخدم طريقة `Handler` من مثيل `Teler` لإنشاء معالج `net/http.Handler`. يمكن بعد ذلك استخدام هذا المعالج في توجيه HTTP لتطبيق إجراءات الأمان الخاصة بـ teler-waf على مسارات محددة.```go
handler := waf.Handler(http.HandlerFunc(yourHandlerFunc))
handler في توجيه HTTP لتطبيق إجراءات أمان teler-waf على مسارات محددة.```go
http.Handle("/path", handler)ذلك كل شيء! لقد قمت بتكوين teler-waf في تطبيق Go الخاص بك.
**الخيارات:**
للاطلاع على قائمة الخيارات المتاحة لتخصيص teler-waf، راجع بنية [`teler.Options`](https://pkg.go.dev/github.com/teler-sh/teler-waf#Options).
### أمثلة
فيما يلي مثال على كيفية تخصيص الخيارات والقواعد لـ teler-waf:```go
// main.go
package main
import (
"net/http"
"github.com/teler-sh/teler-waf"
"github.com/teler-sh/teler-waf/request"
"github.com/teler-sh/teler-waf/threat"
)
var myHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// This is the handler function for the route that we want to protect
// with teler-waf's security measures.
w.Write([]byte("hello world"))
})
var rejectHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// This is the handler function for the route that we want to be rejected
// if the teler-waf's security measures are triggered.
http.Error(w, "Sorry, your request has been denied for security reasons.", http.StatusForbidden)
})
func main() {
// Create a new instance of the Teler type using the New function
// and configure it using the Options struct.
telerMiddleware := teler.New(teler.Options{
// Exclude specific threats from being checked by the teler-waf.
Excludes: []threat.Threat{
threat.BadReferrer,
threat.BadCrawler,
},
// Specify whitelisted URIs (path & query parameters), headers,
// or IP addresses that will always be allowed by the teler-waf
// with DSL expressions.
Whitelists: []string{
`request.Headers matches "(curl|Go-http-client|okhttp)/*" && threat == BadCrawler`,
`request.URI startsWith "/wp-login.php"`,
`request.IP in ["127.0.0.1", "::1", "0.0.0.0"]`,
`request.Headers contains "authorization" && request.Method == "POST"`
},
// Specify file path or glob pattern of custom rule files.
CustomsFromRule: "/path/to/custom/rules/**/*.yaml",
// Specify custom rules for the teler-waf to follow.
Customs: []teler.Rule{
{
// Give the rule a name for easy identification.
Name: "Log4j Attack",
// Specify the logical operator to use when evaluating the rule's conditions.
Condition: "or",
// Specify the conditions that must be met for the rule to trigger.
Rules: []teler.Condition{
{
// Specify the HTTP method that the rule applies to.
Method: request.GET,
// Specify the element of the request that the rule applies to
// (e.g. URI, headers, body).
Element: request.URI,
// Specify the pattern to match against the element of the request.
Pattern: `\$\{.*:\/\/.*\/?\w+?\}`,
},
},
},
{
// Give the rule a name for easy identification.
Name: `Headers Contains "curl" String`,
// Specify the conditions that must be met for the rule to trigger.
Rules: []teler.Condition{
{
// Specify the DSL expression that the rule applies to.
DSL: `request.Headers contains "curl"`,
},
},
},
},
// Specify the file path to use for logging.
LogFile: "/tmp/teler.log",
})
// Set the rejectHandler as the handler for the telerMiddleware.
telerMiddleware.SetHandler(rejectHandler)
// Create a new handler using the handler method of the Teler instance
// and pass in the myHandler function for the route we want to protect.
app := telerMiddleware.Handler(myHandler)
// Use the app handler as the handler for the route.
http.ListenAndServe("127.0.0.1:3000", app)
}
لمزيد من الأمثلة حول كيفية استخدام teler-waf أو دمجه مع أي إطار عمل، ألقِ نظرة على دليل examples/.
[!TIP] إذا كنت ترغب في استكشاف الإعدادات والتعمق في صياغة القواعد المخصصة وتأليف تعبيرات DSL، يمكنك التدرب واكتساب خبرة عملية باستخدام ملعب teler WAF. هنا يمكنك أيضًا محاكاة طلبات مخصصة لتلبية الاحتياجات الخاصة لتطبيقك.
لتضمين قواعد مخصصة في الوسيط teler-waf، لديك خياران: Customs و CustomsFromFile. توفر هذه الخيارات مرونة لإنشاء فحوصات أمان خاصة بك أو تجاوز الفحوصات الافتراضية التي يوفرها teler-waf.
Customsيمكنك تعريف قواعد مخصصة مباشرة باستخدام خيار Customs، كما هو موضح في المثال أعلاه.
في خيار Customs، تقدم مصفوفة من بنيات teler.Rule. تمثل كل teler.Rule قاعدة مخصصة باسم فريد وشرط يحدد كيفية تقييم الشروط الفردية داخل القاعدة (or أو and). تتكون القاعدة من بنية واحدة أو أكثر من teler.Condition، كل منها يحدد شرطًا معينًا للتحقق. يمكن أن تستند الشروط إلى طريقة HTTP أو العنصر (الرؤوس، النص، URI، أو أي) ونمط regex أو تعبير DSL للمطابقة.
CustomsFromFileبدلاً من ذلك، يسمح لك خيار CustomsFromFile بتحميل القواعد المخصصة من ملفات خارجية، مما يوفر مرونة وقابلية إدارة أكبر. يمكن تعريف هذه القواعد بتنسيق YAML، حيث يحتوي كل ملف على قاعدة واحدة أو أكثر. فيما يلي مثال على بنية YAML تمثل قاعدة مخصصة:```yaml
> [!IMPORTANT]
> يُرجى ملاحظة أن `condition` و `method` و `element` هي معاملات اختيارية. القيم الافتراضية المخصصة لها هي كالتالي: `condition` مضبوط على **or**، و `method` مضبوط على **ALL**، و `element` مضبوط على **ANY**. لذلك، إذا رغبت، يمكنك ترك هذه المعاملات فارغة. المعامل `pattern` إلزامي، ما لم تحدد تعبير `dsl`. في مثل هذه الحالات، عند تقديم تعبير `dsl`، سيتجاهل teler-waf أي قيم مخصصة لـ `method` و `element`، حتى لو تم تعريفها. لرؤية بعض الأمثلة، يمكنك الرجوع إلى دليل [`tests/rules/`](https://github.com/teler-sh/teler-waf/tree/master/tests/rules/valid).
يمكنك تحديد خيار `CustomsFromFile` مع مسار الملف الفعلي أو نمط glob الذي يشير إلى موقع ملفات القواعد المخصصة لديك. على سبيل المثال:```go
// Create a new instance of the Teler middleware and
// specify custom rules with the CustomsFromFile option.
telerMiddleware := teler.New(teler.Options{
CustomsFromFile: "/path/to/custom/rules/**/*.yaml",
})
مع CustomsFromFile، يمكنك تقديم مسار الملف أو نمط glob الذي توجد به ملفات القواعد المخصصة. يمكن أن يتضمن النمط أحرف بدل لمطابقة ملفات متعددة أو دليل وأدلته الفرعية. يجب أن يحتوي كل ملف على قاعدة مخصصة واحدة أو أكثر محددة في تنسيق YAML المناسب.
باستخدام خيار Customs أو CustomsFromFile أو كليهما، يمكنك دمج قواعدك المخصصة بسلاسة في وسيط teler-waf، مما يعزز إمكانياته الأمنية لتلبية متطلباتك المحددة.
توفر تعبيرات DSL (لغة خاصة بالمجال) وسيلة قوية لتحديد الشروط المستخدمة لتقييم الطلبات الواردة في سياق القواعد المخصصة أو القوائم البيضاء. باستخدام تعبيرات DSL، يمكنك إنشاء شروط متطورة ومستهدفة بناءً على سمات مختلفة للطلبات الواردة. فيما يلي بعض الأمثلة التوضيحية لرمز تعبير DSL:
تحقق مما إذا كانت رؤوس الطلب الوارد تحتوي على "curl":```sql request.Headers contains "curl"
تحقق مما إذا كانت طريقة الطلب الواردة هي "GET":```sql
request.Method == "GET"
تحقق مما إذا كانت طريقة الطلب الواردة هي "GET" أو "POST" باستخدام التعبير العادي، عامل matches:```sql
request.Method matches "^(POS|GE)T$"
تحقق مما إذا كان عنوان IP للطلب الوارد من المضيف المحلي:```sql
request.IP in ["127.0.0.1", "::1", "0.0.0.0"]
تحقق مما إذا كان أي عنصر في الطلب يحتوي على السلسلة "foo":```console one(request.ALL, # contains "foo")
تحقق مما إذا كان نص الطلب الوارد يحتوي على "foo":```sql
request.Body contains "foo"
تحقق مما إذا كانت فئة التهديد الحالية التي يتم تحليلها هي زاحف ضار أو هجوم تخمين الدليل:```sql threat in [BadCrawler, DirectoryBruteforce]
تقدم هذه الأمثلة لمحة عن القدرات التعبيرية لتعابير DSL، مما يسمح لك بتحديد شروط معقدة بناءً على سمات الطلب المختلفة. من خلال الاستفادة من هذه التعابير، يمكنك تحديد المعايير لتقييم الطلبات الواردة وتخصيص القواعد المخصصة أو القوائم البيضاء وفقًا لذلك، مما يتيح تحكمًا دقيقًا في سلوك تطبيقك.
#### المتغيرات المتاحة
عند العمل مع تعابير DSL، لديك إمكانية الوصول إلى متغيرات متنوعة توفر معلومات قيمة حول الطلبات الواردة وفئة التهديد التي يتم تحليلها. فيما يلي وصف تفصيلي للمتغيرات المتاحة:
- **فئة التهديد**
يمكن استخدام جميع المعرفات الثابتة من نوع `threat.Threat` كمتغيرات صالحة. تمثل هذه المعرفات فئات تهديد مختلفة ذات صلة بتحليلك.
- **`request`**
يمثل المتغير `request` الطلب الوارد ويوفر الوصول إلى حقوله والقيم المقابلة لها. تتوفر المتغيرات الفرعية التالية داخل المتغير `request`:
- `request.URI`: يمثل URI للطلب الوارد، بما في ذلك المسار والاستعلامات والمعلمات والأجزاء.
- `request.Headers`: يمثل رؤوس الطلب الوارد، معروضة في عدة أسطر.
- `request.Body`: يمثل نص الطلب الوارد.
- `request.Method`: يمثل طريقة الطلب الوارد.
- `request.IP`: يمثل عنوان IP الخاص بالعميل المرتبط بالطلب الوارد.
- `request.ALL`: يمثل جميع القيم النصية من حقول الطلب المذكورة أعلاه في شريحة.
- **`threat`**
يمثل المتغير `threat` فئة التهديد التي يتم تحليلها. وهو من نوع `threat.Threat` ويسمح لك بتقييم واتخاذ القرارات بناءً على فئة التهديد المحددة المرتبطة بالطلب.
من خلال استخدام هذه المتغيرات داخل تعابير DSL الخاصة بك، يمكنك بشكل فعال الوصول إلى سمات الطلبات الواردة ومعالجتها وتقييم فئات التهديد ذات الصلة. وهذا يتيح لك إنشاء شروط قواعد مخصصة<!-- وقوائم بيضاء--> مصممة خصيصًا لحالة الاستخدام الخاصة بك.
#### الدوال المتاحة
أيضًا، لديك إمكانية الوصول إلى مجموعة متنوعة من الدوال. تشمل هذه الدوال كلاً من [الدوال المدمجة](https://expr.medv.io/docs/Language-Definition#built-in-functions) التي يوفرها حزمة expr وتلك المحددة تحديدًا داخل حزمة DSL. تستخدم الدوال الوظائف التي تقدمها حزمة `strings` المدمجة في Go. فيما يلي قائمة مفصلة بالدوال المتاحة:
- `cidr`: الحصول على جميع عناوين IP في النطاق مع CIDR معين.
- `clone`: إنشاء نسخة من سلسلة نصية.
- `containsAny`: التحقق مما إذا كانت السلسلة تحتوي على أي من السلاسل الفرعية المحددة.
- `equalFold`: مقارنة سلسلتين نصيتين بطريقة غير حساسة لحالة الأحرف.
- `hasPrefix`: التحقق مما إذا كانت السلسلة تحتوي على بادئة محددة.
- `hasSuffix`: التحقق مما إذا كانت السلسلة تحتوي على لاحقة محددة.
- `join`: ربط عدة سلاسل نصية باستخدام فاصل محدد.
- `repeat`: تكرار سلسلة نصية عددًا محددًا من المرات.
- `replace`: استبدال تكرارات سلسلة فرعية داخل سلسلة نصية.
- `replaceAll`: استبدال جميع تكرارات سلسلة فرعية داخل سلسلة نصية.
- `request`: الوصول إلى معلومات خاصة بالطلب داخل تعبير DSL.
- `threat`: الوصول إلى المعلومات المتعلقة بفئة التهديد التي يتم تحليلها.
- `title`: تحويل سلسلة نصية إلى حالة عنوان.
- `toLower`: تحويل سلسلة نصية إلى أحرف صغيرة.
- `toTitle`: تحويل سلسلة نصية إلى حالة عنوان.
- `toUpper`: تحويل سلسلة نصية إلى أحرف كبيرة.
- `toValidUTF8`: تحويل سلسلة نصية إلى سلسلة مشفرة بصيغة UTF-8 صالحة.
- `trim`: إزالة المسافات البيضاء البادئة والتالية من سلسلة نصية.
- `trimLeft`: إزالة المسافات البيضاء البادئة من سلسلة نصية.
- `trimPrefix`: إزالة بادئة محددة من سلسلة نصية.
- `trimRight`: إزالة المسافات البيضاء التالية من سلسلة نصية.
- `trimSpace`: إزالة المسافات البيضاء البادئة والتالية وضم المسافات البيضاء المتتالية داخل سلسلة نصية.
- `trimSuffix`: إزالة لاحقة محددة من سلسلة نصية.
لمزيد من التفاصيل الشاملة حول العوامل والدوال المدمجة، يرجى الرجوع إلى [توثيق Expr](https://expr.medv.io/docs/Getting-Started). حيث يوفر دليلاً شاملاً لاستخدام العوامل واستكشاف الدوال المدمجة المتاحة في تعابير DSL الخاصة بك.
### إدارة التهيئة المبسطة
للتهيئة الفعالة، من الضروري تحديد مجموعة من الإعدادات، بما في ذلك القوائم البيضاء، تعريفات القواعد المخصصة، تفضيلات التسجيل، والمعلمات الأخرى. تعمل حزمة [`option`](https://pkg.go.dev/github.com/teler-sh/teler-waf/option) على تبسيط سير عمل التهيئة هذا من خلال تمكينك من إلغاء تسلسل أو تحميل بيانات التهيئة من تنسيقات JSON و YAML بكفاءة إلى تنسيق يمكن لـ teler-waf فهمه وتطبيقه بسهولة.```go
// Load configuration from a YAML file.
opt, err := option.LoadFromYAMLFile("/path/to/teler-waf.conf.yaml")
if err != nil {
panic(err)
}
// Create a new instance of the Teler type with
// the loaded options.
telerMiddleware := teler.New(opt)
بشكل افتراضي، يقوم teler-waf بتخزين جميع الطلبات الواردة مؤقتًا لمدة 15 دقيقة ويمسحها كل 20 دقيقة لتحسين الأداء. ومع ذلك، إذا كنت لا تزال تخصيص الإعدادات لتتناسب مع متطلبات تطبيقك، يمكنك تعطيل التخزين المؤقت أثناء التطوير عن طريق ضبط خيار وضع التطوير على true. سيمنع هذا تخزين الطلبات الواردة مؤقتًا ويمكن أن يكون مفيدًا لأغراض تصحيح الأخطاء.```go
// Create a new instance of the Teler type using
// the New function & enable development mode option.
telerMiddleware := teler.New(teler.Options{
Development: true,
})
### السجلات
فيما يلي مثال على ما قد تبدو عليه سطور السجل إذا اكتشف teler-waf تهديدًا في طلب:```json
{"level":"warn","ts":1672261174.5995026,"msg":"bad crawler","id":"654b85325e1b2911258a","category":"BadCrawler","caller":"teler-waf","listen_addr":"127.0.0.1:36267","request":{"method":"GET","path":"/","ip_addr":"127.0.0.1:37702","headers":{"Accept":["*/*"],"User-Agent":["curl/7.81.0"]},"body":""}}
{"level":"warn","ts":1672261175.9567692,"msg":"directory bruteforce","id":"b29546945276ed6b1fba","category":"DirectoryBruteforce","caller":"teler-waf","listen_addr":"127.0.0.1:36267","request":{"method":"GET","path":"/.git","ip_addr":"127.0.0.1:37716","headers":{"Accept":["*/*"],"User-Agent":["X"]},"body":""}}
{"level":"warn","ts":1672261177.1487508,"msg":"Detects common comment types","id":"75412f2cc0ec1cf79efd","category":"CommonWebAttack","caller":"teler-waf","listen_addr":"127.0.0.1:36267","request":{"method":"GET","path":"/?id=1%27%20or%201%3D1%23","ip_addr":"127.0.0.1:37728","headers":{"Accept":["*/*"],"User-Agent":["X"]},"body":""}}
المعرّف هو معرف فريد يتم إنشاؤه عند رفض طلب بواسطة teler-waf. يتم تضمينه في رؤوس استجابة HTTP للطلب (X-Teler-Req-Id)، ويمكن استخدامه لاستكشاف المشكلات المتعلقة بالطلبات التي يتم إرسالها إلى الموقع.
على سبيل المثال، إذا أعاد طلب إلى موقع رمز حالة خطأ HTTP، مثل 403 Forbidden، يمكن استخدام معرف طلب teler لتحديد الطلب المحدد الذي تسبب في الخطأ والمساعدة في استكشاف المشكلة.
تُستخدم معرفات طلبات Teler بواسطة teler-waf لتتبع الطلبات المقدمة إلى تطبيق الويب الخاص به، ويمكن أن تكون مفيدة لتصحيح الأخطاء وتحليل أنماط حركة المرور على موقع ويب.
بشكل افتراضي، يستخدم teler-waf DefaultHTMLResponse كاستجابة قياسية عند رفض طلب أو حظره. ومع ذلك، يوفر teler-waf درجة عالية من التخصيص، مما يمكنك من تخصيص الاستجابة وفقًا لمتطلباتك المحددة. يمكن تحقيق التخصيص باستخدام الخيارات Status أو HTML أو HTMLFile، وكلها جزء من واجهة Response.
إليك كيفية استخدام هذه الخيارات في الكود الخاص بك:```go // Create a new instance of the Teler middleware telerMiddleware := teler.New(teler.Options{ // Customize the response for rejected requests Response: teler.Response{ Status: 403, HTML: "Your request has been denied for security reasons. Ref ID: {{ID}}.", // Alternatively, you can use HTMLFile to point to a custom HTML file HTMLFile: "/path/to/custom-403.html", }, })
بفضل هذا المستوى من التخصيص، يمكنك إنشاء ردود مخصصة وغنية بالمعلومات لعرضها عندما يقوم teler-waf بحظر أو رفض طلب. يتيح لك خيار `HTML` تحديد محتوى HTML المطلوب مباشرةً كسلسلة نصية، بينما يمكنك خيار `HTMLFile` من الإشارة إلى ملف خارجي يحتوي على رد HTML مخصص.
علاوة على ذلك، لتحسين تجربة المستخدم، يمكنك الاستفادة من العناصر النائبة في محتوى HTML الخاص بك لتوليد عناصر ديناميكية. أثناء وقت التشغيل، سيتم استبدال هذه العناصر النائبة بقيم فعلية، مما يؤدي إلى ردود أكثر صلة بالسياق. تشمل العناصر النائبة المتاحة والمدعومة ما يلي:
* `{{ID}}`: معرفات الطلب، مما يسمح بتعريف فريد لكل طلب مرفوض.
* `{{message}}`: رسائل الرفض التي توضح سبب حظر الطلب.
* `{{threat}}`: فئات التهديدات، مما يوفر رؤى حول التهديد الأمني المكتشف.
من خلال تضمين هذه العناصر النائبة، يمكنك إنشاء ردود مفصلة وشاملة تنقل بشكل فعال الأساس المنطقي وراء رفض الطلبات أو حظرها.
### Falco Sidekick
[Falco Sidekick](https://github.com/falcosecurity/falcosidekick) هي أداة تستقبل الأحداث من Falco، وهو مشروع أمني مفتوح المصدر للتشغيل في الوقت الفعلي للحاويات، وترسلها إلى قنوات إخراج مختلفة. يتيح لك إعادة توجيه التنبيهات الأمنية إلى أنظمة طرف ثالث متنوعة مثل Slack وElasticsearch وLoki وGrafana وDatadog و[المزيد](https://github.com/falcosecurity/falcosidekick#outputs). وهذا يمكّن فرق الأمن من مراقبة التهديدات والأحداث الأمنية والاستجابة لها بكفاءة في الوقت الفعلي.
من الممكن أيضًا دمج Falco Sidekick مع teler-waf. باستخدام خيار `FalcoSidekickURL`، يمكنك تكوين teler-waf لإرسال الأحداث إلى Falco Sidekick، والذي سيتلقاها ويعالجها نيابةً عنك. للقيام بذلك، ما عليك سوى إنشاء مثيل جديد من نوع `Teler` باستخدام الدالة `New` وتوفير خيار `FalcoSidekickURL` مع عنوان URL لمثيل Falco Sidekick الخاص بك. على سبيل المثال:```go
// Create a new instance of the Teler type using
// the New function & integrate Falco Sidekick.
telerMiddleware := teler.New(teler.Options{
FalcoSidekickURL: "http://localhost:2801",
})
بمجرد إعداد هذا التكامل، سيتم إرسال أي تهديدات يكتشفها teler-waf إلى Falco Sidekick، والذي يمكنه بعد ذلك اتخاذ الإجراءات المناسبة بناءً على التكوين الذي قمت بإعداده. على سبيل المثال، يمكنك إعداد Falco Sidekick لإرسال التنبيهات تلقائيًا إلى فريق الاستجابة للحوادث لديك.
يتضمن الحدث المُرسل إلى مثيل Falco Sidekick المعلومات التالية:
output: يمثل رسالة التنبيه.priority: يتم تحديد الأولوية باستمرار على أنها تحذير، وهو إشارة إلى الإلحاح المرتبط بالأحداث المتعلقة بالأمان.rule: يشير إلى القاعدة (الرسالة) المحددة التي تطابقت مع الطلب المرتبط.time: الطابع الزمني لإنشاء الحدث.teler.caller: يحدد مصدر التطبيق الذي استدعى teler-waf.teler.id: يمثل معرفًا فريدًا للطلب المرفوض.teler.threat: يحدد فئة التهديد.teler.listen_addr: يشير إلى عنوان الشبكة الذي يستمع عليه teler-waf للطلبات الواردة.
request.body: يحتوي على نص الطلب المرتبط.request.headers: يسرد الرؤوس من الطلب المرتبط.request.ip_addr: يكشف عنوان IP الخاص بالطلب المرتبط.بشكل عام، Falco Sidekick هي أداة متعددة الاستخدامات يمكنها مساعدتك في أتمتة عملية الاستجابة الأمنية وتحسين الوضع الأمني العام لديك. من خلال الاستفادة من قدراتها، يمكنك ضمان أن تطبيقاتك السحابية الأصلية آمنة ومحمية ضد التهديدات المحتملة.
يمكنك تعزيز مراقبتك الأمنية من خلال دمج سجلات teler WAF في Wazuh. للقيام بذلك، استخدم قواعد مخصصة المتاحة في دليل extras/.
أضف كتلة عنصر localfile أدناه داخل عنصر ossec_config في ملف التكوين المحلي:```xml
<ossec_config>
من خلال القيام بذلك، سيتمكن Wazuh من قراءة وتحليل سجلات teler WAF، مما يعزز حماية شبكتك ويوفر رؤى أفضل.
تستخدم حزمة teler-waf مجموعة بيانات من التهديدات لتحديد وتحليل كل طلب وارد بحثًا عن تهديدات أمنية محتملة. يتم تحديث هذه المجموعة يوميًا، مما يعني أنك ستحصل دائمًا على أحدث الموارد. يتم تخزين مجموعة البيانات في البداية في دليل ذاكرة التخزين المؤقت على مستوى المستخدم (على أنظمة Unix، تقوم بإرجاع $XDG_CACHE_HOME/teler-waf كما هو محدد بواسطة مواصفات دليل القاعدة XDG إذا لم يكن فارغًا، وإلا $HOME/.cache/teler-waf. على Darwin، تقوم بإرجاع $HOME/Library/Caches/teler-waf. على Windows، تقوم بإرجاع %LocalAppData%/teler-waf. على Plan 9، تقوم بإرجاع $home/lib/cache/teler-waf) عند التشغيل الأول. ستستخدم عمليات التشغيل اللاحقة مجموعة البيانات المخزنة مؤقتًا، بدلاً من تنزيلها مرة أخرى.
[!NOTE] يتم الحصول على مجموعات بيانات التهديدات من مستودع teler-sh/teler-resources.
ومع ذلك، قد تكون هناك حالات تريد فيها تعطيل التحديثات التلقائية لمجموعة بيانات التهديدات. على سبيل المثال، قد يكون لديك اتصال إنترنت بطيء أو محدود، أو قد تستخدم جهازًا به قيود على الوصول إلى الملفات. في هذه الحالات، يمكنك تعيين خيار يسمى NoUpdateCheck على true، مما سيمنع teler-waf من تحديث مجموعة البيانات تلقائيًا.
[!CAUTION] تمكين
InMemoryيعطى الأولوية ويضمن بقاء التحديثات التلقائية ممكّنة.```go // Create a new instance of the Teler type using the New // function & disable automatic updates to the threat dataset. telerMiddleware := teler.New(teler.Options{ NoUpdateCheck: true, })
أخيرًا، قد تكون هناك حالات يلزم فيها تحميل مجموعة بيانات التهديدات في الذاكرة بدلاً من حفظها في دليل ذاكرة التخزين المؤقت على مستوى المستخدم. يمكن أن يكون هذا مفيدًا بشكل خاص إذا كنت تشغل التطبيق أو الخدمة على صورة خالية من التوزيع (distroless) أو بيئة تشغيل، حيث قد يكون الوصول إلى الملفات محدودًا أو بطيئًا. في هذا السيناريو، يمكنك تعيين خيار يسمى **InMemory** إلى `true`، مما يؤدي إلى تحميل مجموعة بيانات التهديدات في الذاكرة للوصول الأسرع.```go
// Create a new instance of the Teler type using the
// New function & enable in-memory threat datasets store.
telerMiddleware := teler.New(teler.Options{
InMemory: true,
})
[!CAUTION] قد يستهلك هذا أيضًا موارد نظام إضافية، لذا يجدر النظر في المفاضلات قبل اتخاذ هذا القرار.
إذا اكتشفت مشكلة أمنية، فيرجى لفت انتباههم إليها فورًا، فنحن نأخذ الأمان على محمل الجد!
إذا كانت لديك معلومات حول مشكلة أمنية أو ثغرة في حزمة teler-waf هذه، و/أو كنت قادرًا على تنفيذ شيء مثل البرمجة النصية عبر المواقع (XSS) وإظهار تنبيه في موقعنا التجريبي (انظر الموارد)، فيرجى عدم فتح مشكلة عامة — بدلاً من ذلك، أرسل تقريرك على انفراد عبر نموذج الإبلاغ عن الثغرات.
فيما يلي بعض القيود لاستخدام teler-waf:
> [!NOTE]
> قد تختلف نتائج الاختبارات المعيارية وقد لا تكون متسقة. قد تكون مجموعة بيانات [teler-resources](https://github.com/teler-sh/teler-resources) قد زادت منذ ذلك الحين، مما قد يؤثر على النتائج.
- **تعقيد التكوين**: قد يكون تكوين teler-waf لتلبية الاحتياجات المحددة لتطبيقك معقدًا، وقد يتطلب مستوى معينًا من الخبرة في أمن الويب. يمكن أن يجعل ذلك من الصعب على أولئك غير المألوفين بجدران الحماية للتطبيقات وأنظمة كشف التسلل إعداد teler-waf واستخدامه بشكل صحيح.
- **حماية محدودة**: teler-waf ليس حلاً أمنيًا مثاليًا، وقد لا يكون قادرًا على الحماية من جميع أنواع الهجمات الممكنة. كما هو الحال مع أي نظام أمان، من المهم مراقبة وصيانة teler-waf بانتظام لضمان أنه يوفر المستوى المطلوب من الحماية.
#### المشكلات المعروفة
لعرض قائمة المشكلات المعروفة مع teler-waf، يرجى تصفية المشكلات باستخدام [وسم "known-issue"](https://github.com/teler-sh/teler-waf/issues?q=is%3Aopen+is%3Aissue+label%3Aknown-issue).
## المجتمع
نستخدم Google Groups كقائمتنا البريدية المخصصة. اشترك في [teler-announce](https://groups.google.com/g/teler-announce) عبر [[email protected]](mailto:[email protected]) للحصول على الإعلانات المهمة، مثل توفر الإصدارات الجديدة. سيبقيك هذا الاشتراك على اطلاع بالتطورات الهامة المتعلقة بـ [teler IDS](https://github.com/teler-sh/teler) و [teler WAF](https://github.com/teler-sh/teler-waf) و [teler Proxy](https://github.com/teler-sh/teler-proxy) و [teler Caddy](https://github.com/teler-sh/teler-caddy) و [teler Resources](https://github.com/teler-sh/teler-resources).
بخصوص أي [استفسارات](https://github.com/teler-sh/teler-waf/discussions/categories/q-a) أو [مناقشات](https://github.com/teler-sh/teler-waf/discussions) أو [مشكلات](https://github.com/teler-sh/teler-waf/issues)، يتم تتبعها هنا على GitHub. هذا هو المكان الذي ندير فيه ونتعامل مع هذه الجوانب من مشاركة مجتمعنا بنشاط.
## الترخيص
هذه الحزمة متاحة بموجب ترخيص مزدوج: [رخصة Apache 2.0](https://github.com/teler-sh/teler-waf/blob/HEAD/LICENSE-APACHE) و [رخصة Elastic 2.0 (ELv2)](https://github.com/teler-sh/teler-waf/blob/HEAD/LICENSE-ELASTIC) (للحزمة الرئيسية، **teler**).
يمكنك استخدامها بحرية داخل مؤسستك لحماية تطبيقاتك. ومع ذلك، لا يمكنك استخدام الحزمة الرئيسية لإنشاء خدمة سحابية أو مستضافة أو مدارة، أو لأي أغراض تجارية، لأنك ستحتاج إلى ترخيص تجاري لذلك – على الرغم من أن هذا الخيار غير متاح حاليًا. إذا كنت مهتمًا بالحصول على هذا الترخيص التجاري للاستخدامات غير المصرح بها بموجب [ELv2](https://github.com/teler-sh/teler-waf/blob/HEAD/LICENSE-ELASTIC)، فيرجى التواصل مع **@dwisiswant0**.
teler-waf وأي مساهمات هي حقوق نشر © بواسطة Dwi Siswanto 2022-2024.
request.method: يذكر طريقة HTTP المستخدمة في الطلب المرتبط.request.path: يشير إلى مسار الطلب المرتبط.