Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
teler-waf — teler-waf는 OWASP Top 10 위협, 알려진 취약점, 악의적인 공격자, 봇넷, 원치 않는 크롤러 및 무차별 대입 공격으로부터 로컬 웹 서비스를 보호하는 Go HTTP 미들웨어입니다. | Kitploit
도구/GitHubGitHub/teler-sh/teler-waf
Defensive ToolsVulnerability ScannersIDS/IPS EvasionWAF BypassWeb SecurityIntrusion DetectionMisconfigurationAPI Security
GitHubteler-sh/teler-waf

teler-waf

teler-waf는 OWASP Top 10 위협, 알려진 취약점, 악의적인 공격자, 봇넷, 원치 않는 크롤러 및 무차별 대입 공격으로부터 로컬 웹 서비스를 보호하는 Go HTTP 미들웨어입니다.

저장소 보기
405331년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

teler-waf

GoDoc codecov tests OpenSSF Scorecard Mentioned in Awesome Go

teler-waf는 Go 기반 웹 애플리케이션을 위한 종합적인 보안 솔루션입니다. 이는 HTTP 미들웨어 역할을 하며, 기존 Go 애플리케이션에 teler IDS의 침입 탐지 기능을 통합할 수 있는 간편한 인터페이스를 제공합니다. teler-waf를 사용하면 사이트 간 스크립팅(XSS) 및 SQL 인젝션과 같은 다양한 웹 기반 공격으로부터 보호할 수 있습니다.

이 패키지는 표준 net/http.Handler와 함께 제공되므로 애플리케이션의 라우팅에 쉽게 통합할 수 있습니다. 클라이언트가 teler-waf로 보호되는 경로에 요청을 보내면, 먼저 teler IDS를 통해 알려진 악성 패턴이 있는지 요청을 검사합니다. 악성 패턴이 감지되지 않으면 요청은 추가 처리를 위해 전달됩니다.

웹 기반 공격에 대한 보호 기능 외에도 teler-waf는 애플리케이션의 전반적인 보안과 무결성을 향상시키는 데 도움이 됩니다. 고도로 구성 가능하여 애플리케이션의 특정 요구 사항에 맞게 조정할 수 있습니다.

참고:

  • teler-sh/teler: 실시간 HTTP 침입 탐지.
  • teler-sh/teler-proxy: teler WAF와의 원활한 통합을 가능하게 하는 teler 프록시.
  • teler-sh/teler-caddy: Caddy 웹 서버에 teler WAF의 강력한 보안 기능을 통합하는 teler Caddy

기능

teler-waf는 Go 웹 애플리케이션의 보안을 강화하기 위해 설계된 다양한 강력한 기능을 제공합니다:

  • Go 웹 애플리케이션을 위한 HTTP 미들웨어.
  • teler IDS 기능 통합.
  • teler IDS를 사용한 알려진 악성 패턴 탐지.
    • 사이트 간 스크립팅(XSS) 및 SQL 인젝션 등 일반적인 웹 공격.
    • CVE, 알려진 취약점 및 익스플로잇 포함.
    • 알려진 악성 행위자 또는 봇넷과 관련된 IP 주소 등 나쁜 IP 주소.
    • 애플리케이션의 URL 구조에 따라 예상되지 않거나 악성 행위자와 관련된 것으로 알려진 나쁜 HTTP 리퍼러.
    • 성능 문제를 일으키거나 애플리케이션에서 민감한 정보를 추출하려는 시도로 알려진 나쁜 크롤러 또는 스크래퍼의 요청을 포함한 나쁜 크롤러.
    • 일반적인 디렉터리 이름 시도 또는 사전 공격 등을 통한 디렉터리 무차별 대입 공격.
  • 사용자 정의 커스텀 규칙 생성을 위한 높은 유연성 제공.
  • URL 또는 헤더 기반으로 특정 유형의 요청을 화이트리스트에 추가하는 구성 옵션.
  • 다양한 프레임워크와의 쉬운 통합.
  • 애플리케이션의 특정 요구 사항에 맞는 높은 구성 가능성.

전반적으로 teler-waf는 Go 기반 웹 애플리케이션을 위한 종합적인 보안 솔루션을 제공하여 웹 기반 공격으로부터 보호하고 애플리케이션의 전반적인 보안과 무결성을 향상시키는 데 도움이 됩니다.

설치

의존성:

  • teler-waf를 컴파일하려면 gcc(GNU Compiler Collection)가 설치 및 구성되어 있어야 합니다.

Go 애플리케이션에 teler-waf를 설치하려면 다음 명령을 실행하여 teler-waf 패키지를 다운로드하고 설치합니다:```console go get github.com/teler-sh/teler-waf

root@kitploit:~
## Usage

> [!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"
  1. New 함수를 사용하여 Teler 타입의 새 인스턴스를 생성합니다. 이 함수는 애플리케이션의 특정 요구에 맞게 teler-waf를 구성하는 데 사용할 수 있는 다양한 선택적 매개변수를 받습니다.```go waf := teler.New()
root@kitploit:~
3. `Teler` 인스턴스의 `Handler` 메서드를 사용하여 `net/http.Handler`를 생성합니다. 이 핸들러는 애플리케이션의 HTTP 라우팅에서 사용되어 특정 경로에 teler-waf의 보안 조치를 적용할 수 있습니다.```go
handler := waf.Handler(http.HandlerFunc(yourHandlerFunc))
  1. 애플리케이션의 HTTP 라우팅에서 handler를 사용하여 특정 라우트에 teler-waf의 보안 조치를 적용하십시오.```go http.Handle("/path", handler)
root@kitploit:~
됐습니다! 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)
}

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 옵션

Customs 옵션을 사용하여 직접 사용자 정의 규칙을 정의할 수 있습니다. 위의 예제에서 확인할 수 있습니다.

Customs 옵션에서는 teler.Rule 구조체의 배열을 제공합니다. 각 teler.Rule은 고유한 이름과 개별 조건들이 평가되는 방식을 지정하는 조건(or 또는 and)을 가진 사용자 정의 규칙을 나타냅니다. 규칙은 하나 이상의 teler.Condition 구조체로 구성되며, 각각은 확인할 특정 조건을 정의합니다. 조건은 HTTP method, element (headers, body, URI, or any), 그리고 일치시킬 regex pattern 또는 DSL expression을 기반으로 할 수 있습니다.

  • CustomsFromFile 옵션

또는 CustomsFromFile 옵션을 사용하면 외부 파일에서 사용자 정의 규칙을 로드할 수 있어 더 큰 유연성과 관리 용이성을 제공합니다. 이러한 규칙은 YAML 형식으로 정의할 수 있으며, 각 파일은 하나 이상의 규칙을 포함할 수 있습니다. 다음은 사용자 정의 규칙을 나타내는 YAML 구조 예시입니다:```yaml

  • name: condition: # Valid values are: "or" or "and", in lowercase or uppercase. rules:
    • method: # Valid methods are: "ALL", "CONNECT", "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT", and "TRACE". Please refer to https://pkg.go.dev/github.com/teler-sh/teler-waf/request for further details. element: # Valid elements are: "headers", "body", "uri", and "any", in lowercase, uppercase, or title case (except for "uri"). pattern: "" # Regular expression pattern
    • dsl: "" # DSL expression
root@kitploit:~
> [!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",
})

DSL 표현

DSL (도메인 특화 언어) 표현식은 사용자 정의 규칙 또는 허용 목록의 맥락에서 들어오는 요청을 평가하는 데 사용되는 조건을 정의하는 강력한 수단을 제공합니다. DSL 표현식을 사용하면 들어오는 요청의 다양한 속성을 기반으로 정교하고 대상화된 조건을 만들 수 있습니다. 다음은 DSL 표현식 코드의 예시입니다:

DSL 표현식 코드 예시:

들어오는 요청 헤더에 "curl"이 포함되어 있는지 확인합니다:```sql request.Headers contains "curl"

root@kitploit:~
들어오는 요청 메서드가 "GET"인지 확인합니다:```sql
request.Method == "GET"

정규 표현식과 matches 연산자를 사용하여 들어오는 요청 메서드가 "GET" 또는 "POST"인지 확인합니다:```sql request.Method matches "^(POS|GE)T$"

root@kitploit:~
들어오는 요청 IP 주소가 로컬호스트에서 오는지 확인하십시오:```sql
request.IP in ["127.0.0.1", "::1", "0.0.0.0"]

요청 내 요소 중 문자열 "foo"를 포함하는지 확인하세요:```console one(request.ALL, # contains "foo")

root@kitploit:~
들어오는 요청 본문에 "foo"가 포함되어 있는지 확인하세요:```sql
request.Body contains "foo"

현재 분석 중인 위협 범주가 불량 크롤러인지 디렉토리 브루트포스인지 확인하세요:```sql threat in [BadCrawler, DirectoryBruteforce]

root@kitploit:~
이러한 예제들은 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 표현식 내에서 이러한 변수들을 활용하면 들어오는 요청의 속성에 효과적으로 접근하고 조작하며, 관련 위협 카테고리를 평가할 수 있습니다. 이를 통해 특정 사용 사례에 맞춤화된 사용자 정의 규칙 조건<!-- 및 화이트리스트-->을 생성할 수 있습니다.

#### 사용 가능한 함수

또한 다양한 함수에 접근할 수 있습니다. 이러한 함수는 expr 패키지에서 제공하는 [내장 함수](https://expr.medv.io/docs/Language-Definition#built-in-functions)와 DSL 패키지 내에서 특별히 정의된 함수를 모두 포함합니다. 함수들은 Go 내장 `strings` 패키지가 제공하는 기능을 활용합니다. 사용 가능한 함수의 상세 목록은 다음과 같습니다.

- `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 형식의 구성 데이터를 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, })

root@kitploit:~
### Logs

다음은 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)에 포함되며, 웹사이트에 전송되는 요청 관련 문제를 해결하는 데 사용할 수 있습니다.

예를 들어, 웹사이트에 대한 요청이 403 Forbidden과 같은 HTTP 오류 상태 코드를 반환하는 경우, teler 요청 ID를 사용하여 오류를 발생시킨 특정 요청을 식별하고 문제 해결에 도움을 줄 수 있습니다.

Teler 요청 ID는 teler-waf가 웹 애플리케이션에 전송된 요청을 추적하는 데 사용되며, 웹사이트의 트래픽 패턴을 디버깅하고 분석하는 데 유용할 수 있습니다.

사용자 지정 응답

기본적으로 teler-waf는 요청이 거부되거나 차단될 때 표준 응답으로 DefaultHTMLResponse를 사용합니다. 그러나 teler-waf는 높은 수준의 사용자 지정을 제공하여 특정 요구 사항에 맞게 응답을 조정할 수 있습니다. 사용자 지정은 Response 인터페이스의 일부인 Status, HTML 또는 HTMLFile 옵션을 사용하여 수행할 수 있습니다.

다음은 코드에서 이러한 옵션을 사용하는 방법입니다.```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", }, })

root@kitploit:~
이러한 맞춤 설정 수준을 통해 teler-waf가 요청을 차단하거나 거부할 때 표시될 개인화되고 유용한 응답을 구성할 수 있습니다. `HTML` 옵션을 사용하면 원하는 HTML 콘텐츠를 문자열로 직접 지정할 수 있는 반면, `HTMLFile` 옵션을 사용하면 사용자 정의 HTML 응답이 포함된 외부 파일을 참조할 수 있습니다.

또한 사용자 경험을 향상시키기 위해 HTML 콘텐츠에 플레이스홀더를 활용하여 동적 요소를 생성할 수 있습니다. 런타임 중에 이러한 플레이스홀더는 실제 값으로 대체되어 더욱 상황에 맞는 응답을 제공합니다. 사용 가능하고 지원되는 플레이스홀더는 다음과 같습니다.

* `{{ID}}`: 요청 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으로 이벤트를 전송하도록 구성할 수 있으며, 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이 사고 대응 팀에 자동으로 알림을 보내도록 설정할 수 있습니다.

teler-waf의 Falco Sidekick 이벤트

이벤트

Falco Sidekick 인스턴스로 전달된 이벤트에는 다음 정보가 포함됩니다:

  • output: 경고 메시지를 나타냅니다.
  • priority: 우선순위는 일관되게 warning으로 표시되며, 이는 보안 관련 이벤트와 관련된 긴급성을 나타냅니다.
  • 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은 보안 대응 프로세스를 자동화하고 전반적인 보안 태세를 개선하는 데 도움이 되는 다목적 도구입니다. Falco Sidekick의 기능을 활용하여 클라우드 네이티브 애플리케이션이 안전하고 잠재적 위협으로부터 보호되도록 할 수 있습니다.

Wazuh

teler WAF 로그를 Wazuh에 통합하여 보안 모니터링을 강화할 수 있습니다. 이렇게 하려면 extras/ 디렉터리에서 사용할 수 있는 사용자 정의 규칙을 사용하십시오.

로컬 구성 파일의 ossec_config 요소 내에 아래 localfile 요소 블록을 추가하십시오:```xml <ossec_config>

syslog /path/to/your/teler.log ``` > [!NOTE] > `location` 값은 [`Options.LogFile`](https://pkg.go.dev/github.com/teler-sh/teler-waf#Options.LogFile)에서 지정한 teler WAF 로그 파일 경로여야 합니다.

이렇게 하면 Wazuh가 teler WAF 로그를 읽고 분석할 수 있어 네트워크 보호가 강화되고 더 나은 통찰력을 제공합니다.

Datasets

teler-waf 패키지는 위협 데이터셋을 사용하여 각 수신 요청을 식별하고 잠재적인 보안 위협을 분석합니다. 이 데이터셋은 매일 업데이트되므로 항상 최신 리소스를 사용할 수 있습니다. 데이터셋은 처음 실행 시 사용자 수준 캐시 디렉토리 _(Unix 시스템에서는 $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, })

root@kitploit:~
마지막으로, 위협 데이터셋을 사용자 수준 캐시 디렉토리에 저장하는 대신 메모리에 로드해야 하는 경우가 있을 수 있습니다. 이는 파일 접근이 제한되거나 느릴 수 있는 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 테스터! — 테스트를 위해 다음 사이트를 자유롭게 사용할 수 있습니다: https://test.teler.sh.
  • teler WAF 플레이그라운드 — 애플리케이션의 특정 요구 사항에 맞게 요청을 시뮬레이션할 수 있습니다: https://play.teler.sh.

보안

보안 문제를 발견하시면 즉시 알려주시기 바랍니다. 저희는 보안을 매우 중요하게 생각합니다!

취약점 보고

이 teler-waf 패키지의 보안 문제나 취약점에 대한 정보가 있거나, 교차 사이트 스크립팅(XSS)과 같은 공격을 성공적으로 실행하여 데모 사이트에서 경고창을 띄울 수 있는 경우(참고: 리소스), 공개 이슈를 제기하지 마시고 대신 취약점 보고 양식을 통해 비공개로 보고해 주시기 바랍니다.

제한 사항

teler-waf 사용 시 몇 가지 제한 사항은 다음과 같습니다:

  • 성능 오버헤드: teler-waf는 들어오는 각 요청을 처리해야 하므로 약간의 성능 오버헤드를 유발할 수 있습니다. 트래픽이 많은 경우 애플리케이션의 전반적인 성능이 크게 저하될 수 있습니다. 아래 벤치마크를 참조하십시오:```console $ go test -bench "^BenchmarkAnalyze" -cpu=4 goos: linux goarch: amd64 pkg: github.com/teler-sh/teler-waf cpu: 11th Gen Intel(R) Core(TM) i9-11900H @ 2.50GHz BenchmarkAnalyzeDefault-4 266018 4018 ns/op 2682 B/op 74 allocs/op BenchmarkAnalyzeCommonWebAttack-4 374410 3126 ns/op 2090 B/op 68 allocs/op BenchmarkAnalyzeCVE-4 351668 3296 ns/op 2402 B/op 68 allocs/op BenchmarkAnalyzeBadIPAddress-4 416152 2967 ns/op 1954 B/op 63 allocs/op BenchmarkAnalyzeBadReferrer-4 410858 3033 ns/op 2098 B/op 64 allocs/op BenchmarkAnalyzeBadCrawler-4 346707 2964 ns/op 1953 B/op 63 allocs/op BenchmarkAnalyzeDirectoryBruteforce-4 377634 3062 ns/op 1953 B/op 63 allocs/op BenchmarkAnalyzeCustomRule-4 432568 2594 ns/op 1954 B/op 63 allocs/op BenchmarkAnalyzeWithoutCommonWebAttack-4 354930 3460 ns/op 2546 B/op 69 allocs/op BenchmarkAnalyzeWithoutCVE-4 304500 3491 ns/op 2234 B/op 69 allocs/op BenchmarkAnalyzeWithoutBadIPAddress-4 288517 3924 ns/op 2682 B/op 74 allocs/op BenchmarkAnalyzeWithoutBadReferrer-4 298168 3667 ns/op 2538 B/op 73 allocs/op BenchmarkAnalyzeWithoutBadCrawler-4 276108 4023 ns/op 2682 B/op 74 allocs/op BenchmarkAnalyzeWithoutDirectoryBruteforce-4 276699 3627 ns/op 2682 B/op 74 allocs/op PASS ok github.com/teler-sh/teler-waf 32.093s
root@kitploit:~
> [!NOTE]
> 벤치마킹 결과는 다를 수 있으며 일관되지 않을 수 있습니다. [teler-resources](https://github.com/teler-sh/teler-resources) 데이터 세트는 그 이후로 증가하여 결과에 영향을 미칠 수 있습니다.

- **설정 복잡성**: teler-waf를 애플리케이션의 특정 요구에 맞게 구성하는 것은 복잡할 수 있으며 웹 보안에 대한 일정 수준의 전문 지식이 필요할 수 있습니다. 이로 인해 애플리케이션 방화벽 및 IDS 시스템에 익숙하지 않은 사용자가 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 그룹스를 전용 메일링 리스트로 사용합니다. [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/HEAD/LICENSE-APACHE) 및 [Elastic License 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: 관련 요청의 경로를 참조합니다.