
다양한 규칙으로 요청을 필터링하는 역방향 HTTP 프록시입니다. 프로덕션 웹 서버와 애플리케이션 서버 사이에서 애플리케이션 백엔드의 남용을 방지하는 데 사용할 수 있습니다.
이 프로그램의 원래 목적은 searx를 보호하는 것이었지만, 모든 웹 애플리케이션을 보호하는 데 사용할 수 있습니다.
$ go install github.com/asciimoo/filtron
$ "$GOPATH/bin/filtron" --help
규칙에는 필수 속성인 name과 actions가 있습니다.
규칙은 다음 속성을 모두 포함할 수 있습니다:
limit 정수 - 일치하는 요청이 interval 초 내에 애플리케이션에 액세스할 수 있는 횟수를 정의합니다. (0인 경우 생략 가능)interval 정수 - 규칙 번호를 초기화하는 시간 범위(초) (limit이 0이면 생략 가능)filters 선택자 목록aggregations 선택자 목록 (filters가 지정된 경우 필터가 일치할 때만 활성화)subrules 규칙 목록 (filters가 지정된 경우 필터가 일치할 때만 활성화)disabled bool - 규칙 비활성화 (기본값은 false)stop bool - 요청 검증을 즉시 종료하고 나머지 규칙을 건너뜁니다 (기본값은 false)규칙의 JSON 표현:
{
"name": "example rule",
"interval": 60,
"limit": 10,
"filters": ["GET:q", "Header:User-Agent=^curl"],
"actions": [
{"name": "log",
"params": {"destination": "stderr"}},
{"name": "block",
"params": {"message": "Not allowed"}}
]
}
설명: q가 GET 매개변수로 표시되고 사용자 에이전트 헤더가 curl로 시작하는 경우 분당 10개의 요청만 허용합니다. 제한을 초과하면 요청이 STDERR에 기록되고 사용자 지정 오류 메시지와 함께 차단됩니다. 더 많은 예제는 여기에서 확인하세요.
actions규칙의 작업은 요청이 규칙의 제한을 초과하면 순차적으로 활성화됩니다.
참고: 사용자 지정 응답을 제공하는 규칙의 첫 번째 작업만 실행됩니다.
log요청 기록
block요청을 애플리케이션에 전달하는 대신 HTTP 429 응답 제공
shell셸 명령 실행. cmd(문자열)와 args(선택자 목록)는 필수 매개변수입니다. (예: {"name": "shell", "params": {"cmd": "echo %v is the IP", "args": ["IP"]}})
filters모든 선택자가 발견되면 카운터가 증가합니다. 카운터가 limit에 도달하면 규칙이 요청을 차단합니다.
aggregations선택자가 반환한 값을 계산합니다. 값의 개수가 limit에 도달하면 규칙이 요청을 차단합니다.
subrules각 규칙은 원하는 수의 하위 규칙을 포함할 수 있습니다. 상위 규칙의 필터 일치 시 활성화됩니다.
선택자 표현식을 사용하여 요청의 여러 부분을 추출할 수 있습니다.
선택자는 다음 구문을 사용하여 HTTP 요청의 모든 속성과 일치할 수 있는 문자열입니다:
[!]RequestAttribute[:SubAttribute][=Expression]
! 선택자를 부정할 수 있습니다.RequestAttribute (필수) 요청의 특정 부분을 선택 - 가능한 값:
IPHostPathMethodGETPOSTParam - GET과 POST 모두의 별칭입니다.CookieHeaderSubAttribute 가 단일 값이 아닌 경우, 내부 속성을 지정할 수 있습니다.IP 클라이언트의 IP 주소 반환
GET:x 존재하는 경우 x GET 매개변수 반환
!Header:Accept-Language Accept-Language HTTP 헤더가 없으면 true 반환
Path=^/(x|y)$ 경로가 /x 또는 /y인 경우 일치
IP=nslookup(example.com) 클라이언트의 IP 주소가 example.com의 IP 주소 중 하나인 경우 일치
Filtron은 기본적으로 127.0.0.1:4005에서 수신 대기하는 REST API를 통해 구성할 수 있습니다.
/rulesJSON 형식의 로드된 규칙
/rules/reload시작 시 지정된 규칙 파일 다시 로드
API 기반 UI

버그나 제안이 있으신가요? 이슈 트래커를 방문하세요.
RequestAttributeExpression 가능한 값:
nslookup(Hostname) Hostname의 IP 주소로 선택한 속성 값을 필터링합니다. Filtron은 규칙이 로드될 때 Hostname을 해당 IP 주소로 확인합니다(IPv4 및 IPv6).