router Linux – ponad 1M pps

Iptables, Ściąga Admina, Usługi Komentarze (0) »

Przedstawiana konfiguracja może w przypadku lekkim wyłączyć sieć, a ekstremalnym uszkodzić sprzęt.

Opis dla kart sieciowych intel z maszyna  16GB RAM. ( po tuningu starczy 4GB)

 

Pada sieć, pakiety są dropowane … drop na ethx, ruter gubi pakiety … ip_conntrack: table full, dropping packet

Ten problem to kwestia domyślnej konfiguracji linuxa, która nadaje się do hostingu i małych sieci.

Kilka sugestii jak zrobić z linuxa router na każdą skalę, 10G to nie problem! 😛

Bez komentarza …  jeśli się boisz … tych ekstremalnych zmian skontaktuj się:  amon@antynet.pl

/sbin/ifconfig eth0 txqueuelen 2000
/sbin/ifconfig eth1 txqueuelen 2000

ethtool -G eth0 rx 4096 tx 4096
ethtool -G eth1 rx 4096 tx 4096

sysctl -w net.ipv4.tcp_sack=0

#ip_conntrack
echo 17473 > /proc/sys/net/ipv4/netfilter/ip_conntrack_count
echo 20 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close
echo 1200 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent
echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close_wait
echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait
echo 10 > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout
echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout_stream

#ipv6 off
sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl -w net.ipv6.conf.default.disable_ipv6=1

#source route
sysctl -w net.ipv4.conf.lo.accept_source_route=1
sysctl -w net.ipv4.conf.all.accept_source_route=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.eth0.accept_source_route=0
sysctl -w net.ipv4.conf.eth1.accept_source_route=0

#redirs#zmina.06.04.2017
sysctl -w net.ipv4.conf.eth0.accept_redirects=0
sysctl -w net.ipv4.conf.eth1.accept_redirects=0
sysctl -w net.ipv4.conf.eth0.send_redirects=0
sysctl -w net.ipv4.conf.eth1.send_redirects=0
sysctl -w net.ipv4.conf.default.accept_redirects=0

#IPV4
sysctl -w net.ipv4.tcp_no_metrics_save=1
sysctl -w net.ipv4.tcp_moderate_rcvbuf=1
sysctl -w net.core.netdev_max_backlog=30000

sysctl -w net.ipv4.tcp_timestamps=1
sysctl -w net.ipv4.tcp_sack=1

#IPV4 MEM
sysctl -w net.ipv4.tcp_rmem=”4096 65536 33554432″
sysctl -w net.ipv4.tcp_wmem=”4096 65536 33554432″
sysctl -w net.ipv4.tcp_mem=”4096 65536 33554432″
sysctl -w net.core.rmem_max=”33554432″
sysctl -w net.core.wmem_max=”33554432″
sysctl -w net.core.rmem_default=”33554432″
sysctl -w net.core.wmem_default=”33554432″
sysctl -w net.core.optmem_max=”33554432″
echo 1 > /proc/sys/net/ipv4/tcp_moderate_rcvbuf
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
#IPV4 ARP
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0

sysctl -w net/ipv4/conf/default/arp_ignore=1
sysctl -w net/ipv4/conf/default/arp_announce=1

sysctl -w net/ipv4/conf/eth0/arp_ignore=1
sysctl -w net/ipv4/conf/eth0/arp_announce=1
sysctl -w net/ipv4/conf/eth1/arp_ignore=1
sysctl -w net/ipv4/conf/eth1/arp_announce=1

sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.default.forwarding=1

To są konfiguracje  systemu, potem mądry Firewall .

Naprowadzenie … state ESTABLISHED  pomaga 😀

 

pozdrawiam

jr

Kumaty admin załapie ,  resztę proszę o kontakt.

 

ps.

Ponad 7GB na jednym routerku obsługuję. 😉

 

 

Ip route – kierowanie ruchu z konkretnej sieci źródłowej do konkretnej sieci docelowej. Czyli ip route from to

Iptables, Ściąga Admina Komentarze (0) »

Co zrobić w przypadku, gdy jedną z obsługiwanych podsieci chcemy wypuścić łączem alternatywnym?  Generalnie problem niewielki. Sprawa wygląda trudniej, gdy chcemy drugim łączem wypuścić ruch tylko do jednej czy kilku konkretnych sieci.  Wtedy do głowy przychodzi metoda znakowania pakietów w iptables. Jednakże jest znacznie prostszy i czytelniejszy sposób, mianowicie samo iproute.

ip rule add to siec_docelowa table TRASA-Alternatywna

ip route add 192.168.10.0/24 table TRASA-Alternatywna  dev eth0

ip route add default via ip-bramy dev eth0 table TRASA-Alternatywna

Wydajny router – linux – po co przepłacać

Bez kategorii, Iptables, Ściąga Admina, Usługi Komentarze (0) »

Linux w zastosowaniach profesjonalnych to bardzo tania i wygodna alternatywa.

ISP, czyli dostawcy Internetu często borykają się z granicami przepustowości routerów. Internet jest pełen opisów, tutoriali traktujących o budowie routera opartego o Linux.

Często są to bardzo dobre informacje, rzetelne i pozwalające zbudować dobrej jakości router. Jednakże zwykle  administrator trafia na problem z wydajnością, przepustowością.

Kupuje od dostawcy 400Mbps puszcza ruch a tam 250 – 300Mbps i koniec, dach na wykresach.

Powody są złożone, sprzęt (frimware np. eth) skonfigurowany optymalnie a nie wydajnie, braki w optymalizacji Firewalla.

Niekończące się linie iptables i tc, zanim pakiet trafi na swoja regułkę przeleci 2tyś innych, w tym czasie system się obciąża a pakiet czeka na wysłanie w świat. Jest wiele różnych bolączek konfiguracyjnych routera.

Doświadczenie i wiedza pozwalają rozwiązać te problemy, na maszynie

cat /proc/cpuinfo | grep "model name"
model name      : Intel(R) Pentium(R) CPU        G6950  @ 2.80GHz
model name      : Intel(R) Pentium(R) CPU        G6950  @ 2.80GHz
cat /proc/meminfo
MemTotal:        2053400 kB
MemFree:          175188 kB
lspci | grep Eth
10:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
10:00.1 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)
20:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5723 Gigabit Ethernet PCIe (rev 10)
22:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5723 Gigabit Ethernet PCIe (rev 10)

Spokojnie z load 0.0 czasem 0.05 obsługiwanych jest 4tyś. abonentów, adresy prywatne a więc maskowane.

Komunikat ip_conntrack: table full

nie zaistnieje. Wszystko jest kwestią odpowiedniego przeprogramowania sprzętu oraz systemu.

Profesjonalne, niezwykle wydajne i skalowalne routery, które nie kosztują dziesiątek czy setek tysięcy złotych to nie mit.

Nie daj się wciągać w drogie „sprzętowe” rozwiązania.  Zaufaj odpowiedniej wiedzy i doświadczeniu.

Odpowiednio przygotowana maszyna może być równocześnie wydajnym i skalowalnym routerem dla tysięcy abonentów, obsługiwać BGP i OSPF do kilku operatorów oraz pracować jako koncentrator PPPoE. W takiej konfiguracji podmiana adresu mac nie pozwoli kraść Internet.

Zapraszam do kontaktu.

Wykres przepustowości z jednego z routerów Linuks:

Kompilacja jądra z IMQ

Iptables, Ściąga Admina 2 komentarze »

cd /usr/src
wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.6.tar.gz

tar xf linux-2.6.38.6.tar.gz
cd linux-2.6.38.6

pobieramy patcha IMQ

wget http://www.linuximq.net/patchs/linux-2.6.38-imq-multiqueue-test1.patch

patch -p1 <linux-2.6.38-imq-multiqueue-test1.patch

W celu ułatwienia sobie życia skopiujemy aktualne ustawienia jądra:

cp /boot/config-`uname -r` ./.config

teraz

make menuconfig

ustawiamy co tam uważamy za stosowne, w kontekście tego wpisu znaczenie mają jedynie opcje:

CONFIG_NETFILTER_XT_TARGET_IMQ=m
CONFIG_IMQ=y
# CONFIG_IMQ_BEHAVIOR_AA is not set
CONFIG_IMQ_BEHAVIOR_AB=y
# CONFIG_IMQ_BEHAVIOR_BA is not set
# CONFIG_IMQ_BEHAVIOR_BB is not set
CONFIG_IMQ_NUM_DEVS=16

Następnie przystępujemy już do kompilacji i budowy paczek.

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

pozostało zainstalowac powstałe paczki 😉

httpd DoS i DDoS – iptables

Iptables, Ściąga Admina, Usługi Komentarze (0) »

Teraz z grubej rury blokada 😉

iptables -N apache_dos
iptables -A INPUT -p tcp –dport 80 –syn -j apache_dos
iptables -A apache_dos -m hashlimit –hashlimit 2/sec –hashlimit-burst 30 \
–hashlimit-mode srcip –hashlimit-name apache_DDOS \
–hashlimit-htable-expire 30000 \
–hashlimit-htable-max 65535 -j ACCEPT
iptables -A apache_dos -j DROP

iptables -N apache_dos

iptables -A INPUT -p tcp –dport 80 –syn -j apache_dos

iptables -A apache_dos -m hashlimit –hashlimit 10/sec –hashlimit-burst 30 \

–hashlimit-mode srcip –hashlimit-name apache_DDOS \

–hashlimit-htable-expire 30000 \

–hashlimit-htable-max 65535 -j ACCEPT

iptables -A apache_dos -j DROP

Metoda chyba najpewniejsza i najprostsza, można zobaczyć efekty wykonując polecenie:

iptables -vL apache_dos

inspiracja – sow 😉

PPPoE vlan i problem z MTU

Bez kategorii, Iptables, Ściąga Admina Komentarze (0) »

Po skonfigurowaniu koncentratora PPPoE na vlan pojawił się malutki problem.
Otóż stacje z MS działały prawidłowo ale z Ubuntu już nie, pingi działały prawidłowo ale próba otwarcia strony kończyła się niepowodzeniem.
Aby było śmieszniej strony zagraniczne w większości działały, polskie… w mniejszości 😉
Generalnie na pierwszy rzut oka jakaś magia i/lub czeski błąd w testach.

Problemem okazało się zamieszanie z MTU, koncentrator pracuje na 1472, vlan na 1500. Synchronizacja tych wartości
nie przyniosła efektów. Więc tak na 100% gdzie problem to nie wiem, niemniej jednak przypomniałem sobie że kiedyś podobny problem był ze stroną
avon.com.
Wtedy zamiast martwić się MTU starczyło zainteresować się maksymalnym rozmiarem segmentu, czyli MSS.
Manipulacja tego pola także pozwala ustalać maksymalny rozmiar pakietu.
Więc pomijając zamieszanie z MTU vlan, eth, ppp zajmiemy się konfiguracją MSS.

iptables -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu

Tym sposobem system samodzielnie wyliczy odpowiednie MSS dla połączenia.
Oczywiście problem z MTU został zażegnany 😉

Dedykowany Serwer PPPoE , wysoka wydajność

Tuning linuxa – router 1GigE – ograniczenie przepustowości

Iptables, Ściąga Admina 2 komentarze »

Standardowo skonfigurowany Linux, pracujący jako router w dużej sieci zaczyna się męczyć przy 250 Mbit/s. Okazało się tak na maszynie Debian / 2.80GHz / 1GB Ram / eth – 1GigE / ~800 klientów. Do tego oczywiście firewall oraz htb ( filtry mieszające ) no i BGP z dwoma operatorami. Taka maszyna w godzinach szczytu wykazywała load 1-2.5, ponadto poważnie wzrastała temperatura procesora.

Znasz ten problem?
Nasłuchałeś się o ograniczeniach transferu Linuxa?
Proponuje czytać dalej!

Jak zawsze rozwiązanie okazało się banalne, szybki tuning sysctl i nasza maszyna przy 600 Mbit/s pracuje z load 0.07 😉
Oczywiście komfort pracy w sieci wzrasta naprawdę zauważalnie.

Więc co zrobić?

net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_moderate_rcvbuf = 1
net.core.netdev_max_backlog = 2500
net.ipv4.core.rmem_default = 262144
net.ipv4.core.wmem_default = 262144

net.ipv4.tcp_rmem = 4096 87380 8388608

net.ipv4.tcp_wmem = 4096 87380 8388608
net.ipv4.tcp_mem = 8388608 8388608 8388608
net.ipv4.core.rmem_max = 8388608
net.ipv4.core.wmem_max = 8388608

Warto także stuningować obsługę arp:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter

Twój Linux zatrzymał się na 250 Mbit/s to zobacz to:

W przypadku Linuxa z Quagga ( BGP ), opis tutaj to absolutna podstawa konfiguracji.
Pamiętaj też o rozsądnym zastosowaniu smp_affinity oraz wyłączeniu ( jeśli to możliwe ) modułów NAT.

powodzonka 😉

Masz problem z samodzielnym uruchomieniem routera 1GigE opartego o Linux?
Zapraszamy do współpracy:
Usługa Instalacji Routera BGP opartego o LINUX

Hak na bruteforce – SSH blacklist

Iptables, Ściąga Admina 7 komentarzy »

Bruteforce na SSH to strasznie irytująca plaga, szanse na udane włamanie są niewielkie gdy admin dba o serwer.
Jednakże wiecznie zaśmiecone logi i sam fakt … no krew zalewa.
Opisałem już wcześniej metodę opartą o haslimit, działa dobrze ale… dziś dodamy jeszcze jedno rozwiązanie.

Powstał fajny projekt, sshbl.org – (the SSH blacklist), co 15 minut tworzona jest czarna lista adresów IP z których przeprowadzane są ataki.
W prosty sposób wykorzystamy tą listę.

mkdir /etc/ssh-brute
cd /etc/ssh-brute
touch ssh.brute
chmod +x ssh.brute

w plik ssh.brute umieszczamy zawartość:

————————————————————————————————–
#!/bin/bash

PATH=”/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin”

adresy=`cat /tmp/ipki | grep [0-9] | grep -v „#”`
for x in $adresy
do
iptables -D INPUT -s $x -j DROP
done

wget http://www.sshbl.org/lists/base.txt -O /tmp/ipki

adresy=`cat /tmp/ipki | grep [0-9] | grep -v „#”`
for x in $adresy
do
iptables -I INPUT -s $x -j DROP
done
————————————————————————————————–

Teraz do crona dodamy wywołanie skryptu:
*/15 * * * * root /etc/ssh-brute/ssh.brute &>/dev/null

Powodzenia 😉

Update:

Kilka maszyn szalało przy dodaniu kolejnych paru tysięcy wpisów w iptables. Dlatego też pomyślałem o innej metodzie blokowania listy hostów z sshbl.org.
Padło na routing.

Gotowy skrypt:
######################################

#!/bin/bash

PATH=”/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin”

rm /tmp/ipki
wget -q http://www.sshbl.org/lists/base.txt -O /tmp/ipki

adresy=`route -n | grep \!H | awk ‚{print $1}’`
for x in $adresy
do
route del -host $x reject
done

adresy=`cat /tmp/ipki | grep [0-9] | grep -v „#”`
for x in $adresy
do
route add -host $x reject
done

###########################################

Działa wyśmienicie 😉

Optymalizacja routera opartego o system Linux

Iptables, Ściąga Admina Komentarze (0) »

Optymalizacja routera opartego o system Linux

Każdy admin pewnego dnia staje przed zadaniem optymalizacji reguł iptables celem ich optymalizacji. W moim przypadku problem pojawił się w momencie przekroczenia sumarycznego ruchu (do i z rutera) 360Mb/s. W tym Momocie sumaryczna ilość pakietów wzrosła do 31.8 k./s.
Efekt był taki, iż zaczęły się chwilami gubić pakiety, ponadto czas wczytywania stron www odczuwalnie się wydłużył, pomimo faktu, iż podczas ściągania danych w sieciach p2p nadal działały bez zakłóceń. Pakiety ICMP coraz częściej wypadały i/lub rosły ich czasy, load average routera dochodził do 1,5.
W związku z tym przystąpiłem do optymalizacji regułek iptables i innych drobnych zabiegów, kilka z nich przedstawiam poniżej.

1. Na początek dochodzimy do wniosku, w jakim celu filtrować po IP źródłowym połączenia, na które klient już wcześniej dostał zezwolenie. Przecież to bezsensu! Skoro już klient wysłał pakiet SYN kontrolowany na podstawie adresu IP oraz MAC i dostał zezwolenie na połączenie, to dalsze pakiety możemy spokojnie puścić bez tej kontroli, testujemy tylko stan połączenia:

iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT

2. Najbardziej popularne porty puszczamy szybciutko na początku filtrowania, pozwoli to znacznie zwiększyć prędkość wczytywania danych, ktoś zapyta a co z adresami IP, które maja blokadę dostępu do Internetu? O tym później 😉

iptables -A FORWARD -i eth1 -p tcp -m multiport –dports 25,80,110 -j ACCEPT

3. Podobna sytuacja z pakietami UDP, gry on-line oraz telefonia internetowa znacznie przyśpieszy.

iptables -A FORWARD -i eth1 -p udp -j ACCEPT

4. Zmieniamy domyślne wartości dla protokołu IPV4, po prostu przyspieszamy pewne operacje.

echo 20 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close
echo 1800 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent
echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close_wait
echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_time_wait
echo 10 > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout
echo 30 > /proc/sys/net/ipv4/netfilter/ip_conntrack_udp_timeout_stream

5. Przy tak skonstruowanych regułach iptables klienci, którzy, powinni mieć wycięty ruch do Internetu bez problemu mogą korzystać z www oraz poczty. Chcąc ich zablokować należy regułki DROP dać na początek, w efekcie pakiet autoryzowany musi pokonać regułki blokad i dopiero trafia na swoje zezwalające na dostęp do Internetu. Powoduje to oczywiste opóźnienie. Dlatego też wycinanie klientów realizowane będzie na poziomie routingu a nie filtrowania pakietów. Kolejne tysiące pakietów nie będą musiały być filtrowane:

route add -host ip_hosta reject

Połączenia z adresu ip_hosta nawet niedotrze do regułek filtrujących, chyba nie muszę mówić jak odpocznie nasz firewall.

Parę prostych zabiegów a Internet znowu zaczął u klientów szaleć aż miło, ponadto load average z 1,5 spadło do 0,05 czego życzę i Wam 😉

Netfilter – hashlimit

Iptables, Ściąga Admina Komentarze (0) »

HASHLIMIT

1) iptables -A FORWARD -p tcp –dport 3000 -m hashlimit –hashlimit 3/minute –hashlimit-burst 2 \
–hashlimit-name dupa –hashlimit-mode dstip –hashlimit-htable-expire 60000 -j ACCEPT
2) iptables -A FORWARD -p tcp –dport 3000 -j DROP

1) Podobno ma działać jak LIMIT tylko rozszerzony o reguły dstip,srcip,dstport,srcport (nie zachodzi konieczność pisania regułki dla każdego hosta w sieci),z tego co na razie widzę to –hashlimit-burst w rzeczywistości zawsze jest większy o 1 niż zadeklarowaliśmy, poza tym algorytm czasowy działa tak jak w LIMIT z tym wyjątkiem iż jeżeli w regule jest parametr np.: 3/minute to należy dopisać do reguły –hashlimit-htable-expire 40000 co oznacza 40000 milisekund czyli dokładnie 40 sekund, jezeli tego brak to tablica ipt_hashlimit/dupa zostaje czyszczona automatycznie po defaultowym czasie 1000 ms i wszystko się p……., ten czas wyliczyłem z iloczynu –hashlimit-burst i przedziału czasowego –hashlimit wynoszącego 20000 ms, chociaż jeżeli jednostką w –hashlimit jest sec to można pozostawić tę wartość default

–hashlimit x/sec,minute,hour,day określa przedział czasowy pomiędzy seriami
–hashlimit-burst x określa ilość pakietów w pierwszej serii tzw.token bucket
–hashlimit-mode dstip,srcip,dstport,srcport wiadomo ale można wpisywać kilka wartośći po przecinkach
–hashlimit-htable-size x maksymalna liczba „bucket” czyli jeżeli reguła jest połączona z dstip,dstport to znaczy że max może być otwarte x portów w tym samym czasie
–hashlimit-htable-max max ilość wpisów w tablicy o nazwie określonej w –hashlimit-name
–hashlimit-htable-expire = (–hashlimit) * (–hashlimit-burst) czas trwania wpisów w tablicy omówione wyżej
–hashlimit-htable-gcinterval x znalazłem taki opis w iptables tutorial:
How often should the garbage collection function be run. Generally speaking this value should be lower than the expire value. The value is measured in milliseconds. If it is set too low it will be taking up unnecessary system resources and processing power, but if it is too high it can leave unused token buckets lying around for too long and leaving other connections impossible.

WordPress - Hosting: Twój hosting - Skórka: N.Design Studio - Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj się