GNU/Linux >> Znalost Linux >  >> Linux

Jak používat iptables nebo tc k omezení paketů na klienta.

Udělal jsem to pomocí kombinace TC a iptables hashlimit. Vytvořil jsem omezovač šířky pásma TC odchozí na rozhraní LAN (pro cílový přenos stahování) nastavený na 5 Mbit/s. Poté použiji modul hashlimit iptables v řetězci výstupního mangle rozhraní tak, že pokud rychlost paketů překročí určitou prahovou hodnotu mezi libovolnými dvěma odlišnými zdrojovými a cílovými IP adresami, začne tyto pakety klasifikovat do třídy tvarování provozu TC 5 Mbit/s. .

Musíte však správně nastavit práh paketů a já jsem vycházel ze skutečnosti, že moje MTU je 1 500 bajtů, takže jsem to použil k výpočtu, kolik paketů za sekundu by bylo k vytvoření prahu 1,5 Mbitů za sekundu (1 000 paketů za sekundu ). Ve spojení s nastavením nejvyšší možné hodnoty burst na modulu hashlimit iptables (která v mém nastavení vypadá na 10 000) je výsledkem toho všeho, že krátká stahování běží plnou rychlostí, ale delší stahování se začíná zpomalovat, protože některé pakety jsou přešlo do třídy omezení šířky pásma TC, což pak samozřejmě snižuje rychlost paketů atd. atd. Je to trochu hack, ale překvapivě to funguje a funguje to dobře. A protože se používá TC, žádné pakety nejsou nikdy zahazovány – jednoduše zpožděny a zpomaleny kvůli tomu, že jsou zařazeny do třídy TC, jakmile je dosaženo rychlosti paketů.

Toto je na krabici CentOS 6. Myslím, že modernější věci umožňují modulu hashlimit podporovat bajty za sekundu, nejen pakety za sekundu, což je ještě lepší, ale zkusil jsem to na svém nastavení a prostě se to vrátí zpět k používání paketů za sekundu.

Právě jsem na mobilním telefonu, takže nemohu vložit žádnou konfiguraci, ale pokud chcete nějaké příklady, dejte mi vědět a já tuto odpověď upravím. Toto řešení se mi opravdu líbí, protože omezení, pro které jsem šel, je založeno na zdrojové a cílové IP. Systém tedy vidí každou jednotlivou kombinaci src+dst IP jako svůj vlastní paketový tok pro omezení. Modul hashlimit podporuje také zdrojové a cílové porty (v podstatě libovolnou kombinaci zdrojové IP, zdrojového portu, cílové IP, cílového portu), takže můžete dokonce provést omezení na relaci mezi zdrojovou IP+port a cílovou IP+port. .

AKTUALIZACE

Takže níže je zhruba to, jak to udělat; bude vyžadováno experimentování.

tc:

/sbin/tc qdisc add dev eth0 root handle 1: htb
/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 5Mbit

iptables:

#!/bin/bash

[[ "$1" =~ ^[ADI]$ ]] || exit 1

for IPT in /sbin/ip{,6}tables
do
  $IPT -t mangle -$1 POSTROUTING -o eth0 -m hashlimit --hashlimit-above 1000/second --hashlimit-burst 10000 --hashlimit-mode srcip,dstip --hashlimit-name limiter -j CLASSIFY --set-class 1:1
done

tento problém můžete vyřešit jednoduchým způsobem, zkuste použít recentní modul s iptables, recent sledujte zdrojovou adresu:

iptables -m recent -h
recent match options:
[!] --set                       Add source address to list, always matches.
[!] --rcheck                    Match if source address in list.
[!] --update                    Match if source address in list, also update last-seen time.
[!] --remove                    Match if source address in list, also removes that address from list.
    --seconds seconds           For check and update commands above.
                                Specifies that the match will only occur if source address last seen within
                                the last 'seconds' seconds.
    --reap                      Purge entries older then 'seconds'.
                                Can only be used in conjunction with the seconds option.
    --hitcount hits             For check and update commands above.
                                Specifies that the match will only occur if source address seen hits times.
                                May be used in conjunction with the seconds option.
    --rttl                      For check and update commands above.
                                Specifies that the match will only occur if the source address and the TTL
                                match between this packet and the one which was set.
                                Useful if you have problems with people spoofing their source address in order
                                to DoS you via this module.
    --name name                 Name of the recent list to be used.  DEFAULT used if none given.
    --rsource                   Match/Save the source address of each packet in the recent list table (default).
    --rdest                     Match/Save the destination address of each packet in the recent list table.
    --mask netmask              Netmask that will be applied to this recent list.

příklad pro blokování ssh brute force:

iptables -A INPUT -i eth0 -p tcp --syn --dport 22 -m recent --name ssh --set
iptables -A INPUT -i eth0 -p tcp --syn --dport 22 -m recent --name ssh --rcheck --seconds  30 --hitcount 2 -j DROP

Linux
  1. Jak zablokovat IP adresu na serveru Linux

  2. Jak zablokovat IP adresu na serveru Linux

  3. Jak používat IP Blocker v cPanel

  1. Jak snížit I/O procesu na maximální limit?

  2. Přesměrujte http provoz na jinou IP adresu pomocí iptables

  3. Omezte přístup SSH na konkrétní klienty podle IP adresy

  1. Klient Maestral Dropbox, zjistěte, jak jej nainstalovat a používat

  2. Jak protokolovat Linux IPTables Firewall zahozené pakety do souboru protokolu

  3. Jak používat zdrojový příkaz ve skriptu potrubí Jenkins