Raspberry Pi에서 failed2ban 로그 구문 분석이 너무 느립니다 - 옵션?

Raspberry Pi에서 failed2ban 로그 구문 분석이 너무 느립니다 - 옵션?

저는 Raspberry Pi에서 950MHz로 fail2ban을 실행하고 있지만 더 이상 오버클럭할 수 없습니다.

Pi는 때때로 특정 포트에서 SYN 플러드를 겪습니다. 관심 포트의 SYN 속도를 제한하기 위해 iptables를 설정했습니다. 제한이 초과되면 SYN을 보내는 호스트가 REJECT 체인에 들어가고 제한을 초과한 특정 SYN 패킷이 기록됩니다.

그런 다음 fall2ban은 기록된 SYN을 모니터링하고 일부 SYN을 확인한 후 일정 기간 동안 호스트를 일시적으로 금지합니다(이것은 제가 사용하고 있던 애플리케이션의 일시적인 문제였습니다).

문제는 SYN 플러드가 때때로 너무 빠른 속도에 도달하여 Fail2ban이 따라잡을 수 없다는 것입니다. 초당 20-40개의 로그 메시지가 표시되고 결국에는 SYN 플러드가 뒤처져 효과가 없게 됩니다. 설상가상으로, 따라잡으려고 노력하는 동안 계속해서 많은 CPU를 소비합니다.

Fail2ban에 의해 금지된 호스트의 DROP 링크 패킷이 다음과 같은지 확인했습니다.아니요로드가 증가하지 않도록 기록됩니다.

여기서 내 옵션은 무엇입니까? 몇 가지 아이디어가 있지만 앞으로 나아갈 명확한 경로가 없습니다.

  1. 로그 구문 분석 정규식을 "더 쉽게" 만들어 주기를 줄일 수 있습니까? iptables --log-prefix를 사용하여 로그 메시지 시작 부분에 토큰을 배치하거나, ​​그렇지 않으면 실패2반 정규식을 단순화/변경하는 것이 도움이 될까요? 다음은 현재 정규식을 포함하는 failure2ban 구성 줄입니다.
    failregex = kernel:.*?SRC=(?:::f{4,6}:)?(?P<host>[\w\-.^_]+) DST.*?SYN

  2. 제한을 초과하는 Fail2ban 모니터링 패킷을 확보하기 위해 kern.log를 구문 분석하는 것보다 더 빠른 방법이 있습니까?

  3. 최소한의 비표준 마법을 사용하여 CPython 대신 PyPy에서 Fail2ban을 실행할 수 있습니까(OS는 Raspbian 7이므로 대부분 Debian 7입니다)?

  4. SYN 제한을 초과하는 패킷을 모니터링하고 X초 내에 N개 이상의 패킷이 발생한 후 문제가 되는 IP를 일시적으로 iptables DROP 버킷에 넣고 타이머가 만료되면 제거를 비활성화하는 데 사용할 수 있는 FAIL2BAN보다 더 나은 것이 있습니까? 다시 말하지만, 나는 데비안 패키지를 긴급하게 구축할 수 있지만 가능한 한 데비안에서 사용할 수 있는 소프트웨어를 많이 사용하는 솔루션을 선호합니다.

답변1

귀하의 질문에 대한 주제와 약간 다르지만 보통 수준의 SYN 플러드가 발생하는 경우 SYN 쿠키가 적합하고 간단한 완화가 될 수 있습니다.

# echo 1 > /proc/sys/net/ipv4/tcp_syncookies

Google을 통해 이것이 왜 좋은 아이디어인지 나쁜 아이디어인지 알아보세요.

또는 이미 커널 방화벽이 구성되어 있으므로 "가장 가까운" iptables 모듈을 제한기로 사용하여 fall2ban을 완전히 우회할 수 있습니다.

# iptables -A INPUT -p tcp -m state --state NEW -m recent --name ftp_limit --update --seconds 60 --hitcount 20 -j DROP
# iptables -A INPUT -p tcp -m state --state NEW -m recent --set --name ftp_limit -m tcp --dport 21 -j ACCEPT

이러한 규칙은 ftp_limit라는 목록의 IP 주소에 대해 SYN 요청(새 연결) 속도를 1 IP에서 분당 20(라인 1)으로 제한하고 다른 모든 요청을 삭제합니다. 포트 21(ftp)에 새 연결이 설정될 때마다 라인 2는 소스 IP 주소를 ftp_limit 목록에 추가합니다.

트래픽이 단일 IP 주소에서 발생하는 것으로 나타나기 때문에 NAT 뒤의 네트워크에서 발생하는 합법적인 트래픽을 차단할 위험이 있습니다. 신뢰할 수 있는 일부 네트워크를 화이트리스트에 추가할 수도 있습니다.

답변2

제가 리뷰에서 말했듯이요.

대신 CSF를 사용하면 더 큰 메모리 공간을 차지하지만 높은 ARM-CPU 사용량과 높은 전체 메모리 사용량 중에서 선택해야 한다면 후자를 선택하겠습니다.

또 다른 옵션은 방화벽 소프트웨어 사용을 중단하고 대신 iptables 규칙을 사용하는 것입니다. 서버를 비표준 포트(8030, 24544 등)로 이동하고 iptables를 사용하여 다른 모든 포트의 연결을 제거합니다.

NAT 뒤에 있는 경우 라우터를 사용하여 웹 서버 포트를 제외한 모든 포트에서 포트 전달을 비활성화할 수 있습니다(다른 포트에서 수신하도록 설정했다고 가정).

관련 정보