DDoS และการโจมตีอื่น ๆ เทียบกับ iptables (Anti-DDoS security ใน iptables)

หลีกเลี่ยงการโจมตี 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) สำหรับที่อยู่ IP แต่ละรายการในช่วง 10 วินาทีที่ผ่านมา หากถึง 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 ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา

  1.   KZKG ^ กาอาระ dijo

    และนี่คือเหตุผลที่ฉันใส่บทช่วยสอนก่อนที่ DDoS จะโจมตี😉
    เพื่อใส่ / อธิบายเหตุผลหรือปัญหา (บทช่วยสอนก่อนหน้า) และยังให้วิธีแก้ปัญหา (บทช่วยสอนนี้) 🙂

    1.    ไดอะซีแพน dijo

      สมบูรณ์

  2.   โครตสึกิ dijo

    ขนมเด็ก ...

  3.   ฮิวโก้ dijo

    บทความที่ดี

    สองเซ็นต์ของฉัน:

    ในกรณีของแพ็กเก็ต UDP จะไม่มีแฟล็ก SYN เนื่องจากเป็นโปรโตคอลที่ไม่มีการควบคุมสถานะ อย่างไรก็ตามในทางตรงกันข้ามรัฐใหม่และสถานะที่จัดตั้งขึ้นนั้นมีอยู่จริงเนื่องจาก iptables มีตารางภายในเพื่อจุดประสงค์นี้

    ในทางกลับกันในความคิดของฉันควรใช้ปลายทาง DROP แทน REJECT ด้วยเหตุผลสองประการประการแรกการปฏิเสธเป็นการให้ข้อมูลแก่ผู้โจมตีที่เป็นไปได้และคอมพิวเตอร์กำลังใช้ส่วนหนึ่งของการเชื่อมต่อเพื่อส่ง การแจ้งเตือนไปยังทีมโจมตี

    อีกประการหนึ่งคือในกรณีของโปรโตคอล ICMP (และโดยทั่วไป) สะดวกในการควบคุมทั้งคำขอและการตอบสนองเนื่องจากเราอาจสนใจในบางจุดในการ ping ตัวเองและโดยการเปิดใช้งานฟังก์ชันนี้อาจมีคนใช้บ็อตเน็ตและปลอมแปลง จากที่อยู่ต้นทางให้ทำการ ping ที่ไม่มีที่สิ้นสุดไปยังพีซีที่ถูกบุกรุกเหล่านี้จำนวนมากและการตอบสนองจะไปที่เซิร์ฟเวอร์ของเราโดยจะยุบลงหากไม่มีการกำหนดขีด จำกัด

    ฉันมักจะอนุญาต ICMP ประเภท 0,3,8,11 และ 12 โดยมีขีด จำกัด อินพุตหนึ่งต่อวินาทีและการระเบิดสูงสุดสองหรือสี่ครั้งและทุกอย่างจะเหลือให้ DROP

    ในความเป็นจริงยกเว้นโปรโตคอล TCP ที่สามารถควบคุมได้ดีกว่าอื่น ๆ ทั้งหมดควรได้รับการป้องกันด้วยมาตรการต่อต้าน DDoS ผ่านการจับคู่ประเภทล่าสุด เกี่ยวกับเรื่องนี้เนื่องจากความอยากรู้ผู้เขียนโมดูลนี้ชอบที่จะวางการอัปเดตก่อนแล้วจึงกำหนดชุด

    Iptables มีความยืดหยุ่นและทรงพลังมากจนถึงตอนนี้สิ่งเดียวที่ฉันเสนอให้ทำและฉันยังไม่ประสบความสำเร็จ (แม้ว่าฉันใกล้จะบรรลุแล้วก็ตาม) คือการเปิดใช้งานโมดูล psd เพื่อหลีกเลี่ยงการพอร์ตสแกน แต่ถึงแม้จะมีทุกสิ่งที่ฉันได้เรียนรู้เกี่ยวกับเรื่องนี้ เครื่องมือฉันไม่คิดว่าฉันยังมีรอยขีดข่วนบนพื้นผิว 😉

    อย่างไรก็ตามในโลกนี้คุณต้องศึกษาอยู่เสมอ

  4.   โครตสึกิ dijo

    จุดดี Hugo ในไฟล์สำหรับอภิธานศัพท์ของเรา: D เช่นเคยเรียนรู้ ...

    1.    ฮิวโก้ dijo

      ยังไงก็ตามฉันมีโมดูล psd ที่ใช้งานได้แล้ว ปัญหาคือตอนแรกขึ้นอยู่กับฟังก์ชันเคอร์เนลที่เลิกใช้แล้วพร้อมกับ patch-o-matic ดังนั้นจึงถูกลบออกจากโมดูลในตัวใน netfilter ตามค่าเริ่มต้น ดังนั้นใน Debian เพื่อใช้ส่วนขยาย psd ก่อนอื่นคุณต้องทำสิ่งนี้:


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

      จากนั้นสามารถใช้งานได้ตามปกติตามคำแนะนำ:

      man xtables-addons

      1.    alej dijo

        Hugo ทำไมคุณไม่เผยแพร่ iptables.sh พร้อมคำแนะนำของคุณเพื่อปรับปรุงสคริปต์ของโพสต์นี้ (ซึ่งดี) รวมถึง psd

        กราเซีย

  5.   เนลสัน dijo

    บทความยอดเยี่ยม iptables ที่ยอดเยี่ยมและคำอธิบายที่ยอดเยี่ยมจาก @hugo ฉันเริ่มเชื่อมั่นมากขึ้นเรื่อย ๆ ว่าฉันยังมีอะไรให้เรียนรู้อีกมาก

  6.   โครตสึกิ dijo

    ไม่ใช่คุณคนเดียวอย่างน้อยฉัน ... ฉันหายไปเป็นล้าน ... 😀

  7.   Miguel Angel dijo

    สวัสดีทุกคนและขอบคุณสำหรับการมีส่วนร่วม แต่ความจริงก็คือเราหมดหวังแล้วเราไม่รู้ว่าจะทำอย่างไรในตอนนี้และเรามาหาคุณสำหรับ iptables นี้ซึ่งเรารู้ว่าคุณเป็นผู้เชี่ยวชาญในระบบ
    ฉันเป็นผู้นำของชุมชนในสเปนของแหล่งที่มาของการโต้กลับและเราเป็นหนึ่งในไม่กี่คนที่ยังแทบยืนไม่อยู่เราได้รับการโจมตีอย่างต่อเนื่องบนเครื่องและการโจมตีอื่น ๆ ในช่วงเวลาหนึ่งค่าคงที่จะลบออกไปเล็กน้อย เซิร์ฟเวอร์เพียงเล็กน้อย แต่เป็นช่วงเวลาที่สร้างความเสียหายมากกว่า เครื่องของเราติดตั้งบน 6.2 เซนโตส
    และเรามี tcadmin เพื่อควบคุมเซิร์ฟเวอร์ คุณสามารถกำหนดรูปแบบที่สามารถหยุดการโจมตีประเภทนี้ได้แม้เพียงเล็กน้อยก็เท่ากับว่าเราหมดหวังแล้ว
    และเราไม่รู้ว่าจะหันหน้าไปหาใครเรารู้ว่ามีบ็อตเน็ตสองอันอันหนึ่งโฮมเมดและอีกอันจ่ายเงินตามเวลาและแรง ดังนั้นเราจึงอดทนต่อการโจมตีที่โหดร้ายประเภทนี้มาเกือบหนึ่งปีแล้วหากคุณสามารถช่วยเราได้เราจะขอบคุณตลอดไปเพราะตอนนี้มันไม่ยั่งยืนฉันชอบที่จะกำหนดค่าเซิร์ฟเวอร์เช่น hoobie และฉันไม่ใช่เด็กที่ฉันรับรอง แต่ นี่เป็นสิ่งที่มากสำหรับฉัน หากคุณต้องการให้ ts3 ของฉันพูดคุยหรือสิ่งใดก็ตามที่ฉันรักให้คุณช่วยเราดังนั้นเราจะโพสต์ผลลัพธ์และทุกสิ่งที่ได้รับการแก้ไขเพื่อประโยชน์ของคนจำนวนมากมันจะเป็นบล็อกที่มีผู้เยี่ยมชมมากที่สุดแห่งปีที่ฉันรับรองเพราะ มันเหลือเชื่อมากที่มันสร้างความรำคาญให้กับ ddos ​​การโจมตีเหล่านี้ เนื่องจากเราพยายามกำหนดค่าด้วยตัวเองและบล็อกการเข้าถึงเครื่องเราจึงต้องฟอร์แมตจากไบออสดังนั้นลองนึกดูว่าเราเป็นอย่างไร
    ฉันส่งคำอวยพรอย่างจริงใจ และขอแสดงความยินดีกับบล็อกที่หายไปหลายคนพบว่ามีการอัปเดตด้วยบล็อกนี้ - มิเกลแองเจิล -

    1.    KZKG ^ กาอาระ dijo

      สวัสดีคุณเป็นอย่างไรบ้าง🙂
      เขียนถึงอีเมลของฉัน เรายินดีที่จะช่วยเหลือคุณ 😀 -» kzkggaara[@]desdelinux[.]สุทธิ

  8.   อาเธอร์เชลบี dijo

    สวัสดีทุกคนจนถึงตอนนี้ที่ฉันทำงานใช้สคริปต์นี้ดีมาก ... มีข้อสงสัยประการหนึ่ง: โมดูล "ล่าสุด" ไม่ลดประสิทธิภาพหรือไม่?

    ทักทาย - ขอบคุณ / ชอบใคร?

  9.   Jose tapia dijo

    การสนับสนุนที่ยอดเยี่ยมเพื่อนของฉันฉันจะนำคุณไปสู่การอ้างอิงของวิดีโอแนะนำที่เรากำลังดำเนินการกอดจากคอสตาริกา

  10.   คริสเตียน มาร์ฟิล เรโนโซ dijo

    สวัสดี

    ไม่สามารถใช้สคริปต์ในหลายพอร์ตได้หรือไม่?
    ฉันมีเซิร์ฟเวอร์เกมและฉันได้รับการโจมตีทั้งบนเว็บและพอร์ตเซิร์ฟเวอร์เกม

    คำอวยพร