Wydajny router – linux – po co przepłacać

Bez kategorii, Iptables, Usługi, Ściąga Admina 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 Komentarze (2) »

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 ;-)

mod_security i logi czyli mlogc i AuditConsole

Ściąga Admina Komentarze (0) »

Postanowiłem opisać tutaj konfigurację aplikacji AuditConsole na którą będą wysyłane logi z mod_security i prezentowane na www (szczegóły na http://jwall.org/about)

Będę pisał w równoważnikach zdań bo tak jest krótko i treściwie,
a orginalna wersja jest pisana pod emacs-em w trybie org-mode więc sorrki za ewentualny rozjazd

1 dodatkowe paczki do kompilacji modsecurity

  • libcurl-devel
  • libxml2-devel
  • pcre-devel

2 kompilacja mlogc w modsecurity

  • cd modsecurity-apache_2.5.13
  • make mlogc
  • położenie skompilowanego obiektu
    • modsecurity-apache_2.5.13/rules/util/mlogc

3 przygotowanie środowiska

  • mkdir /etc/httpd/mlogc /etc/httpd/mlogc/logs
  • cp …/mlogc /etc/httpd/mlogc/mlogc
  • touch /etc/httpd/mlogc/mlogc.conf

4 instalacja AuditConsole

  • dowlnoad i unzip AuditConsole-0.4.2-4-standalone.zip z http://jwall.org/web/audit/console/download.jsp
  • sprawdzenie czy wersja java > 1.6 poleceniem java -version
  • zmiana użtkownika i grupy dla plików w [$AuditConsole_HOME]
  • download postgresql jdbc4 driver z http://jdbc.postgresql.org/download.html#current
  • cp postgresql-9.0-801.jdbc4.jar [$AuditConsole_HOME]/lib/
  • stworzenie nowej bazy postgresql dla obsługi w/w:
    • createdb [dbname] -O [owner]
  • chmod o+x [$AuditConsole]/bin/*.sh
  • konfiguracja portu Tomcata [$AuditConsole_HOME]/bin/catalina.sh w sekcji CONSOLE_HTTP_PORT=[port]
  • uruchomienie przez [$AuditConsole_HOME]/bin/startup.sh

5 konfiguracja AuditConsole

  • logowanie na www (uruchomiony zostanie wizzard)
    • http://[AuditConsole_host]:[port]/
    • admin/admin
  • wpisy dla wizzarda (dostępne później w menu System => Setup => Storage Engine
    • jdbc url: jdbc:postgresql://localhost:5432/[dbname]
    • User: [dbuser]
    • Password: [dbpass]
    • Storage Type: Database
    • Data directory: [$AuditConsole_HOME]/var/data
    • Database limit: 1024
  • dodanie sensora
    • menu System => Sensors => New Sensor
    • nadać [sensor_name] i [sensor_password]

6 konfiguracja mlogc

  • wpisy w /etc/httpd/mlogc/mlogc.conf
    CollectorRoot /etc/httpd/mlogc/logs
    ErrorLog mlogc-error.log
    ErrorLogLevel 3
    TransactionLog mlogc-transaction.log
    QueuePath mlogc-queue.log
    LockFile mlogc.lck
    ConsoleURI “http://[AuditConsole_host]:[port]/rpc/auditLogReceiver”
    SensorUsername “[sensor_name]”
    SensorPassword “[sensor_password]”
    LogStorageDir /etc/httpd/modsec/logs

7 konfiguracja modsecurity:

  • zmiana konfiguracji:
    SecAuditLogType Serial
    SecAuditLog logs/modsec_audit.log
  • na
    SecAuditLogType Concurrent
    SecAuditLogStorageDir /etc/httpd/modsec/logs
    SecAuditLog “|/etc/httpd/mlogc/mlogc /etc/httpd/mlogc/mlogc.conf”

inspiracja – amon :)

Date: 2011-06-10 15:26:56 CEST

HTML generated by org-mode 6.33x in emacs 23

httpd DoS i DDoS – iptables

Iptables, Usługi, Ściąga Admina 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 ;-)

Apache2 – mod_evasive

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

Skoro dziś tak o DoS i DDoS to nie może zabraknąć mod_mod_evasive dla apache2.

apt-get install libapache2-mod-evasive

mcedit /etc/apache2/mods-available/mod-evasive.load

i wpisujemy:

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

LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so
#<IfModule  mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 10
DOSSiteCount 200
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
DOSLogDir “/var/log/apache2/evasive”
DOSEmailNotify amon@antynet.pl
#</IfModule>

LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so

<IfModule  mod_evasive20.c>

DOSHashTableSize 3097

DOSPageCount 10

DOSSiteCount 200

DOSPageInterval 2

DOSSiteInterval 2

DOSBlockingPeriod 10

DOSLogDir “/var/log/evasive”

DOSEmailNotify amon@antynet.pl

</IfModule>

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

Pamiętamy  utworzeniu i nadaniu odpowiednich uprawnień dla:

/var/log/evasive

Dla pewności włączamy moduł:

a2enmod  mod-evasive

restart apache2:

/etc/init.d/apache2 restart

inspiracja – sow ;-)

Apache2 QoS – DoS DDoS

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

Jest fajny moduł do apacha2, który w pewnym stopniu blokuje ataki DoS oraz DDoS.

Oczywiście wszystko zależy od możliwości atakującego i naszych zasobów sieciowych oraz sprzętowych.

Ale do rzeczy.

Mowa o mod_qos

aktualna wersja na 10.06.2011:

cd /usr/src

wget http://netcologne.dl.sourceforge.net/project/mod-qos/mod_qos-9.57.tar.gz

tar zxvf mod_qos-9.57.tar.gz

cd mod_qos-9.57/apache2

apxs2 -i -c mod_qos.c

cd / etc/apache2/mods-available

mcedit qos.load

w zawartości:

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

LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so
## QoS module Settings
<IfModule mod_qos.c>
# zezwalamy na polaczenia z  1000 różnych IP.
QS_ClientEntries 1000
# Kazde IP moze wykonac 40 polaczen
QS_SrvMaxConnPerIP 40
# Maksymalna ilosc rownoczesnych polaczen TCP
MaxClients 256
# Wylacz keep-alive gdy aktywnych jest polaczen
QS_SrvMaxConnClose 180
# zapytanie / czas odpowiedzi ( ubij polaczenia niczego niezadajace, DoS)
QS_SrvMinDataRate 150 1200
CustomLog               logs/qsaudit_log  ”%{qos-path}n%{qos-query}n”
</IfModule>

LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so

## QoS module Settings

<IfModule mod_qos.c>

# zezwalamy na polaczenia z  1000 różnych IP.

QS_ClientEntries 1000

# Kazde IP moze wykonac 40 polaczen

QS_SrvMaxConnPerIP 40

# Maksymalna ilosc rownoczesnych polaczen TCP

MaxClients 256

# Wylacz keep-alive gdy aktywnych jest polaczen

QS_SrvMaxConnClose 180

# zapytanie / czas odpowiedzi ( ubij polaczenia niczego niezadajace, DoS)

QS_SrvMinDataRate 150 1200

</IfModule>

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

Teraz aktywujemy moduł:

a2enmod qos

no i restartujemy apache2:

/etc/init.d/apache2 restart

Oczywiście gdy DDoS będzie pochodził z większej ilości IP jak określonych w QS_ClientEntries  to się powiedzie.

Dlatego ważne jest ustalić dokładnie parametry pracy modułu mając na uwadze wydolność naszej sieci oraz moc obliczeniową serwera.

inspiracja – sow ;-)


Apache2, mod_security2 i blokowanie skanerów

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

Automatyczne skanery bezpieczeństwa skanują na ślepo,

odpalają bazę sygnatur i wykonują skanowanie.

Tego typu operacja z oczywistych względów wywoła całą masę 404 w logach apache2.

Więc dlaczego nie wykorzystać tego typu zależności?

SecRule RESPONSE_STATUS “@streq 404″ \
“phase:5,t:none,nolog,pass,setvar:ip.not_found_counter=+1,expirevar:ip.not_found_counter=60″
SecRule IP:NOT_FOUND_COUNTER “@gt 5″ “phase:1,t:none,log,block,msg:’Zbyt wiele 404′,id:’100003′,setvar:’tx.msg=%{rule.msg}’,setvar:tx.anomaly_score=+%{tx.error_anomaly_score}”
.

SecRule RESPONSE_STATUS “@streq 404″ \

“phase:5,t:none,nolog,pass,setvar:ip.not_found_counter=+1,expirevar:ip.not_found_counter=60″

SecRule IP:NOT_FOUND_COUNTER “@gt 5″ “phase:1,t:none,log,block,msg:’Zbyt wiele 404′,id:’100003′,setvar:’tx.msg=%{rule.msg}’,setvar:tx.anomaly_score=+%{tx.error_anomaly_score}”

powodzenia ;-)

inspiracja – sow :P

Quagga – No buffer space available

Ściąga Admina Komentarze (0) »

W logach OSPF można zobaczyć wpis:

No buffer space available; perhaps a kernel limit on # of multicast group membership
s has been exceeded

Powodem jest domyślna wartość

net.ipv4.igmp_max_memberships

wynosząca 20.

Nie pozostaje nic innego jak zmienić tę wartość na większą, np:

sysctl -w net.ipv4.igmp_max_memberships=400
sysctl -w net.ipv4.igmp_max_memberships=80
sysctl -p

powodzenia

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ść

Prosty routing OSPF w Linux ( quagga)

Ściąga Admina Komentarze (0) »

Zalety tego routingu nie będę tutaj opisywać, konieczność oszczędzania numerków IP zmusiła mnie do znalezienia rozwiązania na wprowadzenie rozsądnej metody dynamicznego przydziału numerów IP dla klientów.
Padło na Radius(sql)/PPPoE/OSPF.
Całość powstała w konsorcjum szyman-amon, teraz opisze tylko zagadnienie uruchomienia OSPF, reszta może kiedyś …. z mojej strony PPPoE, Radiusa zostawiam szymanowi :P

instalujemy pakiet quagga.

Konfiguracja ospfd.conf na maszynie 1.

hostname router
password xxx
enable password xxxyyy
log file /var/log/ospf.log
log syslog
interface eth1
router ospf
ospf router-id 172.0.0.1
network 0.0.0.0/0 area 0.0.0.0
area 0.0.0.0 authentication message-digest
line vty

Konfiguracja ospfd.conf na maszynie 2.

hostname osiedle
password xxx
enable password xxxyyy
log file /var/log/ospf.log
log syslog
interface eth0
router ospf
ospf router-id 172.0.0.100
network 0.0.0.0/0 area 0.0.0.0
area 0.0.0.0 authentication message-digest
line vty

w debianie pamiętajmy o daemons:

zebra=yes
bgpd=no
ospfd=yes
ospf6d=no
ripd=no
ripngd=no
isisd=no

Po uruchomieniu tych konfiguracji zobaczycie w logach że wszystko wstaje, stara się połączyć ale… nic z tego. Tablice routingu nieuzupełnianą się. OSPF komunikuje się multicastem ;-) dlatego też musimy załączyć obsługę multicastu.

ip link set dev ethx allmulticast on

Teraz wszystko powinno poprawnie zadziałać. Oczywiście prawdę Ci powie

route -n

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