들어오는 모든 패킷의 소스 IP를 기록합니다.

들어오는 모든 패킷의 소스 IP를 기록합니다.

패킷을 보내거나 서버에 연결하는 모든 시스템의 IP 주소를 어떻게 기록할 수 있습니까? 또한, DDoS에 참여하는 IP를 차단하고 서버에 패킷을 쇄도하는 방법은 무엇입니까?

답변1

사전에 몇 가지 주의 사항:DDoS 공격으로부터 방어하는 것은 어렵고 ISP의 도움이 필요한 경우가 많습니다.. IPtables만으로는 사용자를 보호할 수 없으며 해로울 수도 있습니다. 나는 당신이 정말로 당신이 요구하는 일을 하고 싶어한다고 생각하지 않습니다.

  • DDoS는 시스템에 과부하를 주어 서비스 거부를 유발하도록 설계되었습니다. 패킷을 로깅하면 시스템의 로드가 증가합니다. 그래서 당신은 공격자에게 호의를 베풀게 될 것입니다.
  • IP 주소의 출처는 쉽게 스푸핑될 수 있습니다. 서버에 SSH를 통해 접속했는데 공격자가 노트북의 IP 주소를 알아냈다고 상상해 보세요. 특정 IP(이 경우 노트북)에서 온 것처럼 보이는 패킷을 보내는 것은 매우 쉽습니다. 귀하의 서버는 귀하의 IP 주소를 차단하여 효과적으로 귀하를 차단합니다. 이 기술을 사용하면 공격자는 서버에서 차단한 모든 IP 주소를 소유할 수 있습니다. 다시 말하지만, 당신은 공격자에게 호의를 베풀고 그들의 작업을 더 쉽게 만드는 것입니다.

이는 배제됩니다:

각 개별 IP 주소를 시스템 로그에 기록합니다(IP당 시간당 최대 1개의 항목).

iptables -I INPUT 1 \! -i lo                 \
  -m hashlimit --hashlimit-name "IP_SOURCES" \
               --hashlimit-mode srcip        \
               --hashlimit-burst 1           \
               --hashlimit-upto 1/hour       \
  -j LOG

IPv6 패킷에 대해 동일한 작업을 수행하여 iptables대체 되었습니다 .ip6tables

conntrackIP 차단도 비슷하게 작동합니다. 모듈을 위의 규칙에 넣고 NEW연결을 일치시키고 점프 대상을 DROP.

iptables -I INPUT 1 \! -i lo                 \
  -m conntrack --ctstate NEW                 \
  -m hashlimit --hashlimit-name "RATE_LIMIT" \
               --hashlimit-mode srcip        \
               --hashlimit-burst 20          \
               --hashlimit-above 1/min       \
  -j DROP

이렇게 하면 분당 20번의 연결 시도가 허용되고 다른 모든 연결 시도는 무시됩니다. 설정된 연결의 패킷은 그대로 통과할 수 있습니다.

댓글에서 언급했듯이 fail2ban이는 원치 않는 트래픽을 차단하는 데 좋은 솔루션이 될 수 있습니다. 공격자가 SYN-flood를 생성하거나 IPv6를 사용하는 경우에는 도움이 되지 않지만, 공격자가 "일반" IPv4를 사용하여 SSH 또는 smtp 서버에 무차별 대입을 시도하는 경우에는 유용합니다. 연결하다.

관련 정보