Linux: 나가는 TCP 플러드 방지

Linux: 나가는 TCP 플러드 방지

저는 로드 밸런서 뒤에서 수백 개의 웹 서버를 운영하고 있으며, 수많은 애플리케이션이 포함된 다양한 사이트를 호스팅하고 있습니다(이 중 저는 통제할 수 없습니다). 매달 한 번씩 사이트 중 하나가 해킹당하고 일부 은행이나 정치 기관을 공격하기 위한 홍수 스크립트가 업로드됩니다. 과거에는 개별 웹 서버에서 나가는 UDP 트래픽을 차단하여 효과적으로 해결된 UDP 플러드가 항상 있었습니다. 어제 그들은 포트 80에 대한 많은 TCP 연결을 사용하여 우리 서버에서 대규모 미국 은행을 넘치게 하기 시작했습니다. 이러한 유형의 연결은 우리 애플리케이션에 완벽하게 유효하므로 단순히 차단하는 것은 허용되는 솔루션이 아닙니다.

나는 다음과 같은 대안을 고려하고 있습니다. 어느 것을 추천하시겠습니까? 이를 구현했습니까? 어떻게 구현했습니까?

  • 소스 포트가 != 80인 웹 서버(iptables) 발신 TCP 패킷 제한
  • 동일하지만 큐잉(tc)이 있습니다.
  • 서버당 사용자당 나가는 트래픽의 비율을 제한합니다. 응용 프로그램 서버당 잠재적으로 수천 명의 서로 다른 사용자가 있기 때문에 상당한 관리 부담이 됩니다. 어쩌면 이것은:사용자당 대역폭을 어떻게 제한할 수 있나요?
  • 다른 건 없나요?

당연히 해커가 호스팅된 사이트 중 하나에 침입할 가능성을 최소화하는 방법도 모색하고 있지만 해당 메커니즘은 결코 100% 방수가 되지 않으므로 침입으로 인한 영향을 심각하게 제한하고 싶습니다.

업데이트: 현재 이러한 특정 공격을 방지할 수 있는 규칙을 테스트하고 있습니다. 좀 더 일반적으로 만들려면 어떻게 제안하시겠습니까? SYN 패킷에 대한 속도 제한만 적용하면 알려진 TCP DoS 공격이 누락됩니까?

iptables -A OUTPUT -p tcp --syn -m limit --limit 100/min -j ACCEPT
iptables -A OUTPUT -p tcp --syn -m limit --limit 1000/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A OUTPUT -p tcp --syn -j REJECT --reject-with tcp-reset

건배!

답변1

내 의견에 가장 잘 맞는 솔루션은 대상 IP에 대한 연결/패킷 수를 제한하는 것입니다. 제한을 합리적인 속도로 설정하면 공격자가 대상에 대량의 연결을 보내는 것을 방지할 수 있습니다. 포트와 프로토콜을 설정하는 것은 좋은 생각이 아닙니다. 공격자가 오늘 http 플러드를 보낸다면 내일은 다른 유형의 공격을 사용할 것이기 때문입니다. 따라서 일반적으로 IP 당 연결을 제한하는 것이 문제에 대한 해결책이 될 것입니다.

도움이 되었으면 좋겠습니다 :)

답변2

내가 항상 취한 입장은 웹 서버가 아웃바운드 TCP 연결을 전혀 만들어서는 안 된다는 것입니다. 단지 인바운드 요청에 응답하는 서버로서 트래픽을 보내는 것뿐입니다. (나는 또한 웹 서버와 SSH에 대해서만 인바운드 TCP를 허용합니다.) (이와 관련하여 나는 또한 웹 서버가 메일을 보내는 데 적합한 호스트가 아니라고 믿습니다.) 이것은 아웃바운드 공격을 예방할 뿐만 아니라 약간의 어려움도 추가합니다. 시스템에 대한 공격(해커는 xterm 창을 얻거나 호스트에 툴킷을 가져올 수 없습니다).

관련 정보