
teler-waf एक Go HTTP मिडलवेयर है जो स्थानीय वेब सेवाओं को OWASP Top 10 खतरों, ज्ञात कमजोरियों, दुर्भावनापूर्ण अभिनेताओं, बॉटनेट, अवांछित क्रॉलर और ब्रूट फोर्स हमलों से बचाता है।
teler-waf Go-आधारित वेब अनुप्रयोगों के लिए एक व्यापक सुरक्षा समाधान है। यह एक HTTP मिडलवेयर के रूप में कार्य करता है, जो मौजूदा Go अनुप्रयोगों में teler IDS के साथ IDS कार्यक्षमता को एकीकृत करने के लिए एक आसान-से-उपयोग इंटरफ़ेस प्रदान करता है। teler-waf का उपयोग करके, आप क्रॉस-साइट स्क्रिप्टिंग (XSS) और SQL इंजेक्शन जैसे विभिन्न वेब-आधारित हमलों से सुरक्षा में मदद कर सकते हैं।
पैकेज एक मानक net/http.Handler के साथ आता है, जिससे इसे आपके एप्लिकेशन के रूटिंग में एकीकृत करना आसान हो जाता है। जब कोई क्लाइंट teler-waf द्वारा सुरक्षित रूट पर अनुरोध करता है, तो पहले ज्ञात दुर्भावनापूर्ण पैटर्न का पता लगाने के लिए teler IDS के विरुद्ध अनुरोध की जाँच की जाती है। यदि कोई दुर्भावनापूर्ण पैटर्न नहीं पाया जाता है, तो अनुरोध को आगे की प्रक्रिया के लिए भेज दिया जाता है।
वेब-आधारित हमलों से सुरक्षा प्रदान करने के अलावा, teler-waf आपके एप्लिकेशन की समग्र सुरक्षा और अखंडता को बेहतर बनाने में भी मदद कर सकता है। यह अत्यधिक कॉन्फ़िगरेबल है, जिससे आप इसे अपने एप्लिकेशन की विशिष्ट आवश्यकताओं के अनुरूप बना सकते हैं।
यह भी देखें:
teler-waf आपके Go वेब अनुप्रयोगों की सुरक्षा बढ़ाने के लिए डिज़ाइन की गई शक्तिशाली सुविधाओं की एक श्रृंखला प्रदान करता है:
कुल मिलाकर, teler-waf Go-आधारित वेब अनुप्रयोगों के लिए एक व्यापक सुरक्षा समाधान प्रदान करता है, जो वेब-आधारित हमलों से बचाने और आपके एप्लिकेशन की समग्र सुरक्षा और अखंडता में सुधार करने में मदद करता है।
निर्भरताएँ:
अपने Go एप्लिकेशन में teler-waf स्थापित करने के लिए, 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).
यहां बताया गया है कि किसी Go एप्लिकेशन में teler-waf का उपयोग कैसे करें:
1. अपने Go कोड में teler-waf पैकेज आयात करें:```go
import "github.com/teler-sh/teler-waf"
Teler प्रकार का एक नया उदाहरण बनाने के लिए New फ़ंक्शन का उपयोग करें। यह फ़ंक्शन विभिन्न वैकल्पिक पैरामीटर लेता है जिनका उपयोग teler-waf को आपके एप्लिकेशन की विशिष्ट आवश्यकताओं के अनुरूप कॉन्फ़िगर करने के लिए किया जा सकता है।```go
waf := teler.New()3. `Teler` इंस्टेंस की `Handler` विधि का उपयोग करके `net/http.Handler` बनाएं। इस हैंडलर का उपयोग आपके एप्लिकेशन के HTTP रूटिंग में विशिष्ट रूट्स पर teler-waf की सुरक्षा उपायों को लागू करने के लिए किया जा सकता है।```go
handler := waf.Handler(http.HandlerFunc(yourHandlerFunc))
handler का उपयोग करके विशिष्ट रूट्स पर teler-waf के सुरक्षा उपाय लागू करें।```go
http.Handle("/path", handler)बस इतना ही! आपने अपने Go एप्लिकेशन में teler-waf को कॉन्फ़िगर कर लिया है।
**विकल्प:**
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)
}
For more examples of how to use teler-waf or integrate it with any framework, take a look at examples/ directory.
[!TIP] यदि आप कॉन्फ़िगरेशन का पता लगाना चाहते हैं, कस्टम नियम बनाने और DSL एक्सप्रेशन लिखने में गहराई से जाना चाहते हैं, तो आप इस teler WAF playground का उपयोग करके अभ्यास कर सकते हैं और व्यावहारिक अनुभव प्राप्त कर सकते हैं। यहां, आप अपने एप्लिकेशन की विशिष्ट आवश्यकताओं को पूरा करने के लिए अनुकूलित अनुरोधों का अनुकरण भी कर सकते हैं।
teler-waf मिडलवेयर में कस्टम नियमों को एकीकृत करने के लिए, आपके पास दो विकल्प हैं: Customs और CustomsFromFile। ये विकल्प आपकी अपनी सुरक्षा जांच बनाने या teler-waf द्वारा प्रदान की गई डिफ़ॉल्ट जांचों को ओवरराइड करने की लचीलापन प्रदान करते हैं।
Customs विकल्पआप ऊपर example में दिखाए अनुसार सीधे Customs विकल्प का उपयोग करके कस्टम नियम परिभाषित कर सकते हैं।
Customs विकल्प में, आप teler.Rule संरचनाओं की एक सरणी प्रदान करते हैं। प्रत्येक teler.Rule एक अद्वितीय नाम और एक शर्त के साथ एक कस्टम नियम का प्रतिनिधित्व करता है जो निर्दिष्ट करता है कि नियम के भीतर व्यक्तिगत शर्तों का मूल्यांकन कैसे किया जाता है (or या and)। नियम में एक या अधिक teler.Condition संरचनाएँ होती हैं, जिनमें से प्रत्येक जाँच करने के लिए एक विशिष्ट शर्त परिभाषित करती है। शर्तें HTTP method, element (हेडर, बॉडी, URI, या कोई भी), और एक regex पैटर्न या DSL expression पर आधारित हो सकती हैं, जिनसे मिलान किया जाता है।
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` विकल्प को अपने कस्टम नियम फ़ाइलों के स्थान को इंगित करने वाले वास्तविक फ़ाइल पथ या ग्लोब पैटर्न के साथ निर्दिष्ट कर सकते हैं। उदाहरण के लिए:```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 के साथ, आप फ़ाइल पथ या ग्लोब पैटर्न प्रदान करते हैं जहाँ आपकी कस्टम नियम फ़ाइलें स्थित हैं। पैटर्न में एकाधिक फ़ाइलों या किसी निर्देशिका और उसकी उपनिर्देशिकाओं से मिलान करने के लिए वाइल्डकार्ड शामिल हो सकते हैं। प्रत्येक फ़ाइल में उचित 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 पता localhost से है या नहीं:```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 अभिव्यक्तियों में उन चरों का उपयोग करके, आप आने वाले अनुरोधों की विशेषताओं तक प्रभावी ढंग से पहुंच और हेरफेर कर सकते हैं और प्रासंगिक खतरे की श्रेणियों का आकलन कर सकते हैं। यह आपको कस्टम नियम शर्तें<!-- and whitelists--> बनाने में सक्षम बनाता है जो आपके विशिष्ट उपयोग के मामले के अनुरूप हों।
#### उपलब्ध फ़ंक्शन
इसके अलावा, आपके पास विभिन्न प्रकार के फ़ंक्शनों तक पहुंच है। ये फ़ंक्शन expr पैकेज द्वारा प्रदान किए गए [बिल्ट-इन फ़ंक्शन](https://expr.medv.io/docs/Language-Definition#built-in-functions) और DSL पैकेज के भीतर विशेष रूप से परिभाषित दोनों को शामिल करते हैं। फ़ंक्शन बिल्ट-इन `strings` Go पैकेज द्वारा प्रदान की गई कार्यक्षमताओं का उपयोग करते हैं। यहां उपलब्ध फ़ंक्शनों की विस्तृत सूची दी गई है:
- `cidr`: दिए गए CIDR के साथ रेंज में सभी IP पते प्राप्त करें।
- `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 प्रारूपों से कॉन्फ़िगरेशन डेटा को कुशलतापूर्वक unmarshal या लोड कर सकते हैं, ताकि 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 मिनट में साफ़ करता है। हालाँकि, यदि आप अभी भी अपने एप्लिकेशन की आवश्यकताओं से मेल खाने के लिए सेटिंग्स को अनुकूलित कर रहे हैं, तो आप development mode विकल्प को 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":""}}
id एक अद्वितीय पहचानकर्ता है जो 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 को इवेंट भेजने के लिए कॉन्फ़िगर कर सकते हैं, जो आपके लिए उन्हें प्राप्त और संसाधित करेगा। ऐसा करने के लिए, बस `New` फ़ंक्शन का उपयोग करके `Teler` प्रकार का एक नया इंस्टेंस बनाएँ और `FalcoSidekickURL` विकल्प को अपने Falco Sidekick इंस्टेंस के URL के साथ प्रदान करें। उदाहरण के लिए:```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: प्राथमिकता को लगातार warning के रूप में दर्शाया जाता है, यह सुरक्षा से संबंधित घटनाओं से जुड़ी तात्कालिकता की ओर इशारा करता है।rule: संबंधित अनुरोध से मेल खाने वाले विशिष्ट नियम (message) को इंगित करता है।time: ईवेंट जनरेट टाइमस्टैम्प।teler.caller: teler-waf को आह्वान करने वाले एप्लिकेशन स्रोत की पहचान करता है।teler.id: अस्वीकृत अनुरोध के लिए एक अद्वितीय पहचानकर्ता का प्रतिनिधित्व करता है।teler.threat: खतरे की श्रेणी निर्दिष्ट करता है।teler.listen_addr: वह नेटवर्क पता दर्शाता है जिस पर teler-waf इनकमिंग अनुरोधों को सुन रहा है।
request.body: संबंधित अनुरोध का बॉडी शामिल है।request.headers: संबंधित अनुरोध के हेडर्स सूचीबद्ध करता है।कुल मिलाकर, Falco Sidekick एक बहुमुखी उपकरण है जो आपकी सुरक्षा प्रतिक्रिया प्रक्रिया को स्वचालित करने और आपकी समग्र सुरक्षा स्थिति में सुधार करने में आपकी सहायता कर सकता है। इसकी क्षमताओं का लाभ उठाकर, आप सुनिश्चित कर सकते हैं कि आपके क्लाउड-नेटिव एप्लिकेशन सुरक्षित हैं और संभावित खतरों से सुरक्षित हैं।
आप teler WAF लॉग को Wazuh में एकीकृत करके अपनी सुरक्षा निगरानी को बढ़ा सकते हैं। ऐसा करने के लिए, extras/ निर्देशिका में उपलब्ध कस्टम नियमों का उपयोग करें।
नीचे दिए गए localfile एलिमेंट ब्लॉक को स्थानीय कॉन्फ़िगरेशन फ़ाइल में ossec_config एलिमेंट के अंदर जोड़ें:```xml
<ossec_config>
ऐसा करने से, Wazuh teler WAF लॉग को पढ़ और विश्लेषण करने में सक्षम होगा, जिससे आपकी नेटवर्क सुरक्षा बढ़ेगी और बेहतर जानकारी मिलेगी।
teler-waf पैकेज खतरों के एक डेटासेट का उपयोग करता है ताकि प्रत्येक आने वाले अनुरोध की पहचान और विश्लेषण संभावित सुरक्षा खतरों के लिए किया जा सके। यह डेटासेट प्रतिदिन अपडेट होता है, जिसका अर्थ है कि आपके पास हमेशा नवीनतम संसाधन रहेगा। यह डेटासेट पहली बार लॉन्च करने पर उपयोगकर्ता-स्तरीय कैश निर्देशिका (यूनिक्स सिस्टम पर, यह $XDG_CACHE_HOME/teler-waf लौटाता है जैसा कि XDG Base Directory Specification द्वारा निर्दिष्ट है, यदि खाली नहीं है तो, अन्यथा $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, })
अंत में, कुछ ऐसे मामले हो सकते हैं जहाँ खतरे के डेटासेट को उपयोगकर्ता-स्तरीय कैश निर्देशिका में सहेजने के बजाय सीधे मेमोरी में लोड करना आवश्यक हो। यह विशेष रूप से तब उपयोगी हो सकता है जब आप किसी डिस्ट्रोलेस या रनटाइम इमेज पर एप्लिकेशन या सेवा चला रहे हों, जहाँ फ़ाइल एक्सेस सीमित या धीमी हो सकती है। इस परिदृश्य में, आप **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 License 2.0](https://github.com/teler-sh/teler-waf/blob/master/LICENSE-APACHE) और [Elastic License 2.0 (ELv2)](https://github.com/teler-sh/teler-waf/blob/master/LICENSE-ELASTIC) (मुख्य पैकेज, **teler** के लिए)।
आप इसे अपने संगठन के भीतर अपने एप्लिकेशन की सुरक्षा के लिए स्वतंत्र रूप से उपयोग कर सकते हैं। हालाँकि, आप मुख्य पैकेज का उपयोग क्लाउड, होस्टेड या प्रबंधित सेवा बनाने के लिए, या किसी भी व्यावसायिक उद्देश्य के लिए नहीं कर सकते, क्योंकि इसके लिए आपको एक व्यावसायिक लाइसेंस की आवश्यकता होगी – हालाँकि यह विकल्प वर्तमान में उपलब्ध नहीं है। यदि आप [ELv2](https://github.com/teler-sh/teler-waf/blob/master/LICENSE-ELASTIC) द्वारा अधिकृत नहीं उपयोगों के लिए इस व्यावसायिक लाइसेंस को प्राप्त करने में रुचि रखते हैं, तो कृपया **@dwisiswant0** से संपर्क करें।
teler-waf और कोई भी योगदान © Dwi Siswanto 2022-2024 द्वारा कॉपीराइट हैं।
request.ip_addr: संबंधित अनुरोध का IP पता बताता है।request.method: संबंधित अनुरोध में प्रयुक्त HTTP विधि बताता है।request.path: संबंधित अनुरोध के पथ को संदर्भित करता है।