DDoS 및 기타 공격 대 iptables (iptables의 Anti-DDoS 보안)

공격을 피하십시오 DDoS 공격iptables에 패킷 크기, 연결 제한 등에 따라 여러 가지 방법이 있습니다. 여기에서는 쉽고 직관적이며 잘 설명 된 방법으로 목표를 달성하고 서버에 대한 다른 성가신 공격을 차단하는 방법을 살펴 봅니다.

# Iptables

IPT="/sbin/iptables"
ETH="eth0"

#Todo el tráfico syn
$IPT -P INPUT DROP
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -P OUTPUT DROP
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
$IPT -A OUTPUT -m state --state INVALID -j DROP
$IPT -P FORWARD DROP
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset
$IPT -A FORWARD -m state --state INVALID -j DROP
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A FORWARD -i lo -o lo -j ACCEPT

#Cuando sube la carga
$IPT -A INPUT -p tcp --syn -j REJECT --reject-with icmp-port-unreachable

#La que mejor va
$IPT -N syn-flood
$IPT -A syn-flood -m limit --limit 100/second --limit-burst 150 -j RETURN
$IPT -A syn-flood -j LOG --log-prefix "SYN flood: "
$IPT -A syn-flood -j DROP

#Igual que el de arriba pero muy raw
$IPT -N syn-flood
$IPT -A INPUT -i eth0:2 -p tcp --syn -j syn-flood
$IPT -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
$IPT -A syn-flood -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT

#Descartar paquetes mal formados
$IPT -N PKT_FAKE
$IPT -A PKT_FAKE -m state --state INVALID -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A PKT_FAKE -p tcp --dport 80 ! --syn -m state --state NEW -j DROP
$IPT -A PKT_FAKE -f -j DROP
$IPT -A PKT_FAKE -j RETURN

#Syn-flood
$IPT -N syn-flood
$IPT -A INPUT -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood
$IPT -A FORWARD -i eth+ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j syn-flood
$IPT -A syn-flood -m limit --limit 4/s --limit-burst 16 -j RETURN
$IPT -A syn-flood -m limit --limit 75/s --limit-burst 100 -j RETURN -A syn-flood -j LOG --log-prefix "SYN FLOOD " --log-tcp-sequence --log-tcp-options --log-ip-options -m limit --limit 1/second
$IPT -A syn-flood -j DROP

#Requiere módulo "recent"
modprobe ipt_recent
$IPT -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
$IPT -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 10 -j DROP

# explicación:
# Se añade cada ip que se conecte a la tabla de recent
# Por por cada ip en la tabla de recent si hace mas de x hits en x segundos, se dropea.
$IPT -I INPUT -p tcp --syn -m recent --set
$IPT -I INPUT -p tcp --syn -m recent --update --seconds 10 --hitcount 30 -j DROP

#UDP Flood
$IPT -A OUTPUT -p udp -m state --state NEW -j ACCEPT
$IPT -A OUTPUT -p udp -m limit --limit 100/s -j ACCEPT
$IPT -A OUTPUT -p udp -j DROP

그것이하는 일은 SYN 패킷의 수를 세는 것입니다 (TCP 연결 시작) 지난 10 초 동안 각 IP 주소에 대해. 30에 도달하면 해당 패킷을 폐기하므로 연결이 설정되지 않습니다 (TCP는 설정할 수있는 제한 아래로 떨어지면 여러 번 재 시도합니다.).

#Evitando Layer7 DoS limitando a 80 la máxima cantidad de conexiones
$IPT -A INPUT -p tcp --dport 80 -m hashlimit --hashlimit-upto 50/min --hashlimit-burst 80 --hashlimit-mode srcip --hashlimit-name http -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -j DROP

#Permitir el ping, pero a 1 paquete por segundo, para evitar un ataque ICMP Flood
$IPT -A INPUT -p icmp -m state --state NEW --icmp-type echo-request -m limit --limit 1/s --limit-burst 1 -j ACCEPT
$IPT -A INPUT -p icmp -j DROP

#Evitando que escaneen la máquina
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags SYN,RST SYN,RST –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags FIN,RST FIN,RST –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,FIN FIN –j DROP
$IPT -A INPUT -i $ETH -p tcp -m tcp --tcp-flags ACK,URG URG –j DROP

다음은 붙여 넣기의 스크립트입니다. 풀.DesdeLinux.net(이전 스크립트)

참조 :


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   KZKG ^ 가아라

    이것이 제가 DDoS 공격 전에 튜토리얼을 넣은 이유입니다 😉
    이유 또는 문제 (이전 자습서)를 입력 / 설명하고 솔루션 (이 자습서)도 제공합니다.

    1.    디아 제판

      완벽한.

  2.   고라츠키

    어린이 사탕 ...

  3.   휴고

    좋은 기사.

    내 XNUMX 센트 :

    UDP 패킷의 경우 SYN 플래그는 상태 제어가없는 프로토콜이기 때문에 존재하지 않습니다. 그러나 역설적이게도 NEW 및 ESTABLISHED 상태는 iptables가이 목적을 위해 내부적으로 테이블을 전달하기 때문에 존재합니다.

    반면에 제 생각에는 두 가지 이유로 REJECT 대신 DROP 대상을 사용하는 것이 좋습니다. 첫째, 거부 대상은 가능한 공격자에게 정보를 제공하고 컴퓨터는 연결의 일부를 사용하여 전송합니다. 공격 팀에 알림.

    또 다른 한 가지는 ICMP 프로토콜 (및 일반적으로)의 경우 요청과 응답을 모두 조절하는 것이 편리하다는 것입니다. 왜냐하면 우리는 자신을 핑하는 데 어느 시점에서 관심이 있고이 기능을 활성화함으로써 누군가가 봇넷을 사용하여 소스 주소를 위조하여 이러한 손상된 PC를 끝없이 핑하면 응답이 서버로 이동하여 제한이 적용되지 않으면이를 무너 뜨립니다.

    일반적으로 ICMP 유형 0,3,8,11 및 12를 허용하며 입력 제한은 초당 XNUMX 개이고 버스트는 최대 XNUMX 개 또는 XNUMX 개이며 나머지는 모두 DROP으로 남겨 둡니다.

    실제로는 더 잘 조절할 수있는 TCP 프로토콜을 제외하고 다른 모든 프로토콜은 최근 유형 일치를 통해 anti-DDoS 조치로 보호되어야합니다. 이와 관련하여 호기심으로이 모듈의 작성자는 업데이트를 먼저 배치 한 다음 세트를 배치하는 것을 좋아합니다.

    Iptables는 정말 매우 유연하고 강력합니다. 지금까지 제가 제안한 유일한 작업은 아직 성공하지 못했습니다 (하지만 거의 달성 할 수는 있지만). 도구에 대해 배웠지 만 아직 표면을 긁지 않은 것 같습니다. 😉

    어쨌든이 세상에서는 항상 공부해야합니다.

  4.   고라츠키

    Hugo, 용어집에 대한 좋은 점 : D, 항상 그렇듯이 학습 ...

    1.    휴고

      그건 그렇고, 나는 이미 나를 위해 일할 psd 모듈을 가지고 있습니다. 문제는 처음에는 패치-오 매틱과 함께 사용되지 않는 커널 기능에 의존했기 때문에 기본적으로 netfilter의 내장 모듈에서 제거되었습니다. 이제 데비안에서 psd 확장을 사용하려면 먼저 다음을 수행해야합니다.


      aptitude -RvW install iptables-dev xtables-addons-{common,source} module-assistant
      module-assistant auto-install xtables-addons-source

      그런 다음 지침에 따라 정상적으로 사용할 수 있습니다.

      man xtables-addons

      1.    떨어져

        Hugo, psd를 포함하여이 게시물의 스크립트를 개선하기위한 제안과 함께 iptables.sh를 게시하는 것이 어떻습니까?

        감사합니다

  5.   넬슨

    @hugo의 훌륭한 기사, 훌륭한 iptables 및 훌륭한 설명. 아직도 배울 것이 많다는 확신이 점점 더 커지고 있습니다.

  6.   고라츠키

    너 혼자가 아니야, 적어도 나 ... 백만이 빠졌어 ... 😀

  7.   미구엘 엔젤

    안녕하세요 여러분, 기여 해주셔서 감사합니다.하지만 진실은 우리가 절망적이며 지금 무엇을해야할지 모르겠습니다. 여러분이 시스템 전문가라는 것을 알고있는이 iptables를 위해 여러분에게 왔습니다.
    나는 스페인의 카운터 스트라이크 소스 커뮤니티의 리더이며 우리는 아직 거의 서 있지 않은 소수 중 하나입니다. 우리는 일정 간격으로 기계 및 기타 공격을 받고 있으며 상수는 거의 제거하지 않지만 서버를 지연시킵니다. 시간이 지나면 더 많은 피해를 입 힙니다. 우리의 기계는 6.2 centos에 장착됩니다.
    서버를 제어하는 ​​tcadmin이 있습니다. 이런 유형의 공격을 조금이라도 막을 수있는 구성을 만들 수 있습니다. 우리는 이미 절망적입니다.
    그리고 우리는 누구에게 의지해야할지 모릅니다. 두 개의 봇넷이 있다는 것을 압니다. 하나는 수제이고 다른 하나는 시간과 힘을 지불했습니다. 따라서 우리는 거의 3 년 동안 이런 유형의 잔인한 공격을 견뎌 왔습니다. 지금은 지속 할 수 없기 때문에 우리를 도울 수 있다면 영원히 감사 할 것입니다. 저는 hoobie와 같은 서버를 구성하는 것을 좋아합니다. 그리고 저는 여러분에게 확신하는 어린 아이가 아닙니다. 이것은 나에게 많은 것입니다. 내 tsXNUMX가 이야기하거나 우리를 도울 수 있다면 내가 좋아하는 것을 원한다면 여기에 결과와 많은 사람들의 이익을 위해 해결 된 모든 것을 게시 할 것입니다. 올해의 가장 많이 방문한 블로그가 될 것입니다. 이러한 공격 ddo를 얼마나 짜증나게하는지 놀랍기 때문입니다. 우리가 직접 구성하려고했고 시스템에 대한 액세스를 차단했기 때문에 BIOS에서 포맷해야했기 때문에 우리가 어떤지 상상해보세요.
    따뜻한 인사를 보냅니다. 누락 된 블로그를 축하합니다. 많은 사람들이이 블로그로 업데이트 된 블로그를 찾습니다. -미구엘 엔젤-

    1.    KZKG ^ 가아라

      안녕하세요 어떻게 지내세요 🙂
      제 이메일로 편지를 보내주시면 기꺼이 도와드리겠습니다 😀 -» kzkggaara[@]desdelinux[.]그물

  8.   아서쉘비

    안녕하세요 여러분, 지금까지 제가 일하고있는 동안이 스크립트를 사용하십시오. 그런데 한 가지 의심이 있습니다.«최근»모듈이 성능을 저하시키지 않습니까?

    인사말-감사합니다 / 누가 당신을 좋아합니까?

  9.   호세 타 피아

    훌륭한 공헌 제 친구, 코스타리카의 포옹 인 우리가 마운트하고있는 튜토리얼 비디오의 참고 문헌에 여러분을 넣을 것입니다.

  10.   크리스티안 마르 필 레이 노소

    안녕하세요

    여러 포트에서 스크립트를 사용할 수 없습니까?
    게임 서버가 있고 웹 및 게임 서버 포트 모두에 대한 공격을받습니다.

    인사말.