[server] 리눅스 : 나가는 TCP 플러드 방지

로드 밸런서 뒤에 수백 개의 웹 서버를 실행하여 수많은 응용 프로그램으로 많은 다른 사이트를 호스팅합니다 (이는 제어 할 수 없음). 매월 약 한 번, 사이트 중 하나가 해킹 당하고 일부 스크립트 또는 은행을 공격하기 위해 홍수 스크립트가 업로드됩니다. 과거에는 항상 개별 웹 서버에서 나가는 UDP 트래픽을 차단하여 효과적으로 해결 된 UDP 홍수였습니다. 어제 그들은 많은 TCP 연결을 사용하여 서버에서 포트 80으로 미국 대형 은행을 플러딩하기 시작했습니다. 이러한 유형의 연결은 응용 프로그램에 완벽하게 유효하기 때문에 차단하는 것만으로는 적합한 솔루션이 아닙니다.

다음 대안을 고려하고 있습니다. 어느 것을 추천 하시겠습니까? 이것들을 어떻게 구현 했습니까?

  • 소스 포트! = 80으로 웹 서버 (iptables) 나가는 TCP 패킷 제한
  • 동일하지만 큐잉 (tc)
  • 서버 당 사용자 당 전송 속도 제한 응용 프로그램 서버 당 잠재적으로 1000 명의 다른 사용자가 있기 때문에 상당한 관리 부담이 있습니다. 어쩌면 이것은 : 사용자 당 대역폭을 어떻게 제한 할 수 있습니까?
  • 다른 거있어?

당연히 해커가 호스팅 사이트 중 하나에 침입 할 가능성을 최소화하는 방법을 찾고 있지만 그 메커니즘은 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

건배!



답변

내 의견에 가장 적합한 솔루션과 나에게 매우 효과적 인 방법은 대상 IP의 연결 / 패킷 수를 제한하는 것입니다. 제한을 적당한 속도로 설정하면 공격자가 대상에 많은 양의 연결을 보내지 못하게됩니다. 포트와 프로토콜을 설정하는 것은 좋은 생각이 아닙니다. 공격자가 오늘 http flood를 보내면 내일 다른 유형의 공격을 사용할 것이기 때문입니다. 따라서 일반적으로 ip 당 연결을 제한하면 문제를 해결할 수 있습니다.

나는 그것이 도움이되기를 바랍니다 🙂


답변

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


답변