Langsamer vSERVER (user_beancounters und numiptent)

Elegantly

Registered User
Hallo zusammen,

ich kämpfe bereits seit geraumer Zeit mit meinem deutlich langsamen vSERVER. Es kommt bisweilen vor, dass ich auf eine Webseite (generiert mit PHP und MySQL) zwischen 20-60 Sekunden warten muss. Im Einsatz habe ich Software wie Mambo oder WordPress (im Allgemeinen verwende ich den vSERVER ohnehin nur als Webserver, der Ressourcenverbrauch ist also recht gering). Das Traffic-Aufkommen des vSERVERs ist auch recht gering.

Beim Stöbern nach den Ursachen bin ich auf einen SSF Thread und darüber auf folgendes gestoßen:

Code:
vsXXXXXX:~ # cat /proc/user_beancounters
Version: 2.5
       uid  resource           held    maxheld    barrier      limit    failcnt
    XXXXXX: kmemsize        1644458    1652162    7056211    7761832      56912
            lockedpages           0          0        344        344          0
            privvmpages       12258      12312     194904     214394          0
            shmpages            144        144      19490      19490          0
            dummy                 0          0          0          0          0
            numproc              23         23        172        172          0
            physpages          4799       4805          0 2147483647          0
            vmguarpages           0          0      32484 2147483647          0
            oomguarpages       6625       6631      32484 2147483647          0
            numtcpsock            8          8        172        172          0
            numflock              3          3        275        302          0
            numpty                1          1         16         16          0
            numsiginfo            0          0       1024       1024          0
            tcpsndbuf          2220       6660    1647558    2352070          0
            tcprcvbuf             0       4268    1647558    2352070          0
            othersockbuf      11100      11100     823779    1528291          0
            dgramrcvbuf           0          0     823779     823779          0
            numothersock         12         12        172        172          0
            dcachesize       234914     237493    1538982    1585152          0
            numfile             580        581       2752       2752          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            numiptent            35         35         20         20          0

(Legende der verschiedenen Tabellen-Parameter)

Scheint alles im grünen Bereich zu sein, mit Ausname des Wertes von "numiptent" (Number of entries in IP tables). Vergleichswerte aus dem SSF weisen als Barrier und Limit i.d.R. 128 auf. D.h. also, dass meine iptables-Firewall als mögliche Performance-Bremse auftreten könnte.

Daher meine Frage: Hat jemand von euch weitere Informationen dazu parat? Wieso ist gerade auf meinem vSERVER das Limit für numiptent so niedrig?

TIA,
Elegantly
 
Nachtrag:

Ich habe mein Firewall-Script im Debug-Modus laufen lassen. Kommt das Script in die Nähe des 20. iptables-Aufrufs, erhalte ich nach jedem Befehl den Fehler:

iptables: Memory allocation problem
(kann auch sein, dass es ein Memory allocation error war)
 
Vergleichswerte aus dem SSF weisen als Barrier und Limit i.d.R. 128 auf. D.h. also, dass meine iptables-Firewall als mögliche Performance-Bremse auftreten könnte.
S4Y hat die Werte verändert, numiptent ist deutlich gesunken:
Entschuldige bitte meine Neugier, aber: Für was braucht man 35 Firewallregeln auf einem Server?
 
HornOx said:
S4Y hat die Werte verändert, numiptent ist deutlich gesunken:
Clevere Sache, S4Y. Daumen hoch!

Insbesondere, wenn man als Kunde davon wieder einmal nicht benachrichtigt wird.

Ergebnis: Mein vSERVER ist nach einem Reboot aus diesem Grunde z.Z. offline und nicht erreichbar. Super gemacht, Jungs.


HornOx said:
Entschuldige bitte meine Neugier, aber: Für was braucht man 35 Firewallregeln auf einem Server?
Hiermit entschuldigt. :)

Zu deiner Frage:

Erstens, und soweit ich dies erforschen konnte, erhöhen nicht nur "normale" Regeln den numiptent Zähler, sondern auch Direktiven wie "iptables -F" oder das Setzen von Default-Policies wie "iptables -P INPUT DROP"; d.h. die effektive Zahl an möglichen Regeln ist schon einmal geringer als das numiptent-Limit (sprich, von max. 35 bleiben vielleicht nur 25-30 effektiv übrig).

Zweitens, einer der wichtigsten Vorteile von iptables (und besonders im Vergleich zu seinem Vorgänger ipchains) ist das sog. Stateful Feature. Iptables kann normalerweise automatisch eine zugehörige Antwortverbindung (= in der Table OUTPUT) erlauben, wenn die entsprechende eingehende Verbindung erlaubt ist (= in der Table INPUT). Da S4Y allerdings auf vSERVER nicht die entsprechenden Kernelmodule gestattet, die dafür benötigt werden (zB. ip_conntrack oder ip_conntrack_ftp für FTP-Verbindungen), kann man dieses Feature nicht nutzen. Resultat: man muss doppelt so viele iptables-Einträge anlegen wie eigentlich erforderlich. Sprich: von den effektiven 25-30 von vorher bleiben nur noch 12-15 übrig.

Drittens, weil auf vSERVERn bestimmte Software-Pakete auch von Dritten (= S4Y) aktualisiert werden können, und niemand garantieren kann, dass nach einem Update die bislang auf privaten IP-Adressen wie 127.0.0.1 lauschende Server plötzlich auch aus dem Internet erreichbar und angreifbar sind. Dazu kommt, dass ich im Hinblick auf Sicherheit lieber zwei Barrieren gegen Angreifer habe - das erhöht meine Chancen, am Wochenende an den Strand zu fahren statt stundenlang Backups einzuspielen, weil ein verpickelter Teenager zuviel über Kevin Mitnick gelesen hat...

Viertens, wenn man als guter Internet-Bürger dafür sorgen möchte, dass der eigene Server im Zweifelsfalle nicht als Zombie für DOS etc. verwendet werden kann (ein Root Compromise einmal ausgeschlossen; oft reicht die Erlangung von normalen User-Rechten für die Zwecke der Cracker aus), sollte man nicht nur eingehende, sondern auch ausgehende Verbindungen einschränken. Das bedeutet, dass eine vernünftig konfigurierte Firewall z.B. nicht erlaubt, IP-Pakete mit gefälschten Absenderadressen zu versenden (Spoofing) oder IP-Pakete in private Netzbereiche zu schicken (diese sollten zwar in der Regel von den ISPs ohnehin nicht geroutet werden, aber heutzutage kann jeder Hansel Connectivity anbieten, wenn er das Wort Internet ohne Hilfe aussprechen kann). Dazu zählt im Übrigen auch, dass man Pakete auf dem am Internet angeschlossen Netzwerk-Interface ablehnt, die vorgeben die gleiche Source-IP haben wie der eigene Server.

Fünftens, weil man mit iptables nicht nur "Auf / Zu" sagen kann, sondern auch noch Bandbreiten- und Verbindungslimits einstellen kann, um Denial of Service Attacken vorzubeugen.

Sechstens, hast du alleine mal geschaut, was die Standard-Firewall von SuSE so alles an Regeln hat? Auf meinem SuSE 9.2 Laptop sind das immerhin schon um die 100 Regeln nur für die Funktionalität "alles dicht, keine Verbindungen von außen".

Hope that helps,
Elegantly
 
@Elegantly

Das stimmt so nicht, auf BUSINESS kannst du stateful benutzen nur auf BASIC und MAX nicht. Ich hab die netfilter Werte wieder erhoeht, wer allerdings Tonnen von netfilter Regeln aufstellt, hat den Sinn einer schnellen, flexiblen und einfachen Firewall irgendwie nicht verstanden. Einen Grossteil der Sachen bekommt man doch in eine Regel, wenn man sich die Doku einmal durchliest.

Eigentlich muesste ich aufgrund der beschwerde von Elegantly, die Werte wieder alle auf Ihren Ursprung zuruecksetzen, die ueber 800% mehr bei einigen Ressourcen braucht sicher keiner. ;) Sorry aber den konnt ich mir zu so spaeter Stunde einfach nicht verkneifen, nicht boese sein Thorsten. :)
 
Last edited by a moderator:
mbroemme said:
@Elegantly

Das stimmt so nicht, auf BUSINESS kannst du stateful benutzen nur auf BASIC und MAX nicht. Ich hab die netfilter Werte wieder erhoeht, wer allerdings Tonnen von netfilter Regeln aufstellt, hat den Sinn einer schnellen, flexiblen und einfachen Firewall irgendwie nicht verstanden. Einen Grossteil der Sachen bekommt man doch in eine Regel, wenn man sich die Doku einmal durchliest.

Eigentlich muesste ich aufgrund der beschwerde von Elegantly, die Werte wieder alle auf Ihren Ursprung zuruecksetzen, die ueber 800% mehr bei einigen Ressourcen braucht sicher keiner. ;) Sorry aber den konnt ich mir zu so spaeter Stunde einfach nicht verkneifen, nicht boese sein Thorsten. :)

@Maik: Noch online zu so später Stunde? :)

Hinsichtlich stateful auf vSERVERn: natürlich kann ich nur Kommentare über Dinge abgeben, mit denen ich selber Erfahrung gemacht habe. Wie schon vermutet, habe ich keinen Business vSERVER (und damit kein Stateful).

Und zur Beruhigung, mein Firewall-Ruleset beinhaltete keine Tonnen von Regeln, sondern lediglich eine Handvoll rudimentärer Anweisungen (/proc/user_beancounters wies nur einen Wert von 35 anstelle von max. 20 für numiptent auf). Zum Vergleich der heutige Wert von /proc/user_beancounters für meinen vSERVER:

Code:
vsXXXXXX:~ # cat /proc/user_beancounters
Version: 2.5
       uid  resource           held    maxheld    barrier      limit    failcnt
    XXXXXX: kmemsize        1519788    1588070    7056211    7761832      56912
            lockedpages           0          0        344        344          0
            privvmpages       12050      12165     194904     214394          0
            shmpages            144        144      19490      19490          0
            dummy                 0          0          0          0          0
            numproc              22         23        172        172          0
            physpages          4887       4890          0 2147483647          0
            vmguarpages           0          0      32484 2147483647          0
            oomguarpages       5455       5458      32484 2147483647          0
            numtcpsock            8          8        172        172          0
            numflock              2          3        275        302          0
            numpty                1          1         16         16          0
            numsiginfo            0          1       1024       1024          0
            tcpsndbuf          2220       4440    1647558    2352070          0
            tcprcvbuf             0       4268    1647558    2352070          0
            othersockbuf      11100      11528     823779    1528291          0
            dgramrcvbuf           0          0     823779     823779          0
            numothersock         11         12        172        172          0
            dcachesize       268157     272683    1538982    1585152          0
            numfile             595        606       2752       2752          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            dummy                 0          0          0          0          0
            numiptent            10         10         64         64        115

Wie man sieht, ist hier der maximale Wert von numiptent bereits von Maik erhöht worden (von vormals 20 auf nun 64). Zum Nachdenken allerdings hier das aktive Rulesets von iptables auf dem gleichen Server:

Code:
vsXXXXXX:/etc/init.d # iptables -L -v -n | sed 's/^[ \t]*//;s/[ \t]*$//' | grep -v "^$"
Chain INPUT (policy ACCEPT 30 packets, 2088 bytes)
pkts bytes target     prot opt in     out     source               destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 17 packets, 4468 bytes)
pkts bytes target     prot opt in     out     source               destination

D.h. selbst bei einer effektiv ausgeschalteten Firewall ("allow all") sind bereits 10 numiptent Einträge verbraucht. Da sollte doch recht klar sein, dass der vorige Wert von 20 vielleicht ein bißchen zu niedrig war, oder...? (das Anlegen einer eigenen Chain mittels "iptables -N ..." verbraucht z.B. schon 2 numiptent-Zähler; Aufrufe wie -F oder -X zählen nicht mit; "normale" Regeln und solche mit multiport zählen einfach).

Mein revidiertes Ruleset zur Filtering für eingehende und ausgehende Verbindungen, das keinerlei Special Features wie Connection Limits oder sonstiges verwendet, sondern lediglich bestimmte TCP (z.B. 25/SMTP) und UDP Ports (z.B. 53/DNS) unter Verwendung von multiport erlaubt sowie einige ICMP-Types durchläßt, kommt bereits auf 24 numiptent-Zähler(*). Nun sag mir nicht, dass das ein außergewöhnlich komplexes Ruleset ist... :p

Auf jeden Fall freut es mich, dass ihr (S4Y) die Limits wieder auf sinnvolle Werte erhöht. Dafür gibt es von mir schon mal "Daumen hoch". Ebenfalls lobenswert war dieses Mal die Reaktion des S4Y Supports; der gute Mann konnte mir zwar nicht bei der Klärung der Problemursache helfen (leitete dies aber an einen Kollegen weiter), allerdings konnte er mir wieder Zugang zu meinem vSERVER verschaffen, so dass ich die entsprechenden Änderungen vornehmen konnte.

Myc


(*) zugegeben, 2 dieser 24 Zähler gehören zu den erforderlichen beiden Regeln für SSH, die ich aus Schutz vor...gnarl...unvorhergesehen Änderungen an den verfügbaren Modulen...gnarl...nicht abhängig vom iptables multiport Modul machen wollte.
 
Last edited by a moderator:
Hi,

wie gesagt ist alles kein Problem, ich aender sowas ja immer wieder gerne. :) Wir wollen ja das unsere Kunden gluecklich sind.
 
HornOx said:
Für was braucht man 35 Firewallregeln auf einem Server?

Ich bin ein Newbie. Ich habe zur Zeit die iptables dazu verwendet um mittels

Code:
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

irgendwelche Spinner, die ständig meinen Server zu müllen, zu droppen. Nun bin ich an das Limit von 64 Regeln gestossen....was soll ich jetzt tun?

Danke für jegliche Hilfe!
 
thundebirdsei said:
Ich bin ein Newbie. Ich habe zur Zeit die iptables dazu verwendet um mittels

Code:
iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

irgendwelche Spinner, die ständig meinen Server zu müllen, zu droppen. Nun bin ich an das Limit von 64 Regeln gestossen....was soll ich jetzt tun?

Danke für jegliche Hilfe!

So, musste mich neu registrieren, bin einfach nicht mehr ins Forum gekommen (trotz neuem Passwort, welches ich per e-mail erhalten habe)..

Ich habe mein Problem dem Server4You-Support gestellt, mit welchem ich im übrigen überaus glücklich bin - toller Job den die da machen, und als Antwort folgendes bekommen

die Anzahl der Einträge in IP Tables (nomiptent) lässt sich leider nicht erhöhen.
Ich empfehle Ihnen, falls Sie mehrere numiptent brauchen, ein Upgrade Ihres Servers in Betracht zu ziehen.

Tja, jetzt bin ich ungefähr so schlau wie vorher...inzwischen weiss ich, das selbst bei einem Root Professional System das Limit bei 256 liegt...was kann ich tun?
 
Ich halte es für unsinnig.

Löse deine Siherheitsprobleme anders, mit den iptables drop's läuftst du den Angriffen ja nur hinterher ;-)


Jpsy
 
MrMasterJPsy said:
Ich halte es für unsinnig.

Löse deine Siherheitsprobleme anders, mit den iptables drop's läuftst du den Angriffen ja nur hinterher ;-)

Jpsy

Naja, richtige Angriffe sind das ja nicht... :rolleyes:

Hast mir einen sinnvollen Link, wo ich mich informieren kann? Bedenke, ich bin ein (lernwilliger) Newbie und mein Server ist ein virtual Server bei server4you...

Herzlichen Dank!
 
Huschi said:
Womit 'zu müllen' ?
Mit Mails oder was?

huschi.

Zum Beispiel:

Code:
[Sat Dec 24 18:38:41 2005] [error] [client 203.140.30.86] File does not exist: /srv/www/confixx/html/blog
[Sat Dec 24 18:38:43 2005] [error] [client 203.140.30.86] File does not exist: /srv/www/confixx/html/blog
[Sat Dec 24 18:38:44 2005] [error] [client 203.140.30.86] File does not exist: /srv/www/confixx/html/blogs
[Sat Dec 24 18:38:45 2005] [error] [client 203.140.30.86] File does not exist: /srv/www/confixx/html/drupal
[Sat Dec 24 18:38:46 2005] [error] [client 203.140.30.86] File does not exist: /srv/www/confixx/html/phpgroupware
[Sat Dec 24 18:38:48 2005] [error] [client 203.140.30.86] File does not exist: /srv/www/confixx/html/wordpress
[client 203.140.30.86] script '/srv/www/confixx/html/xmlrpc.php' not found or unable to stat
 
Naja, wenn Du das schon zumüllen nennst...
Da hast Du recht wenig Aussichten auf Erfolg.
Wenn Dich der Müll dermassen stört, dann filter ihn halt.
Entweder beim Logfiles anschauen, oder bereits beim Logfiles schreiben:
Code:
CustomLog |/usr/local/bin/logfilter.pl combined

huschi.
 
Huschi said:
Naja, wenn Du das schon zumüllen nennst...
Da hast Du recht wenig Aussichten auf Erfolg.
Wenn Dich der Müll dermassen stört, dann filter ihn halt.
Entweder beim Logfiles anschauen, oder bereits beim Logfiles schreiben:
Code:
CustomLog |/usr/local/bin/logfilter.pl combined

huschi.

An dieser Stelle befindet sich keine Datei. Willst Du mir damit sagen, dass ich eine Filter-Datei erstellen soll? Wie mache ich das? Habe eben Google bemüht jedoch nicht wirklich hilfreiches dazu gefunden, kannst mir einen nützlichen Link angeben?

Wahrscheinlich verstehe ich das ganze System nicht wirklich, aber weshalb kann ich nicht beliebig viele IP-Adressen sperren? Ist für mich das natürlichste auf der Welt... :o
 
Firebirdsei said:
Willst Du mir damit sagen, dass ich eine Filter-Datei erstellen soll?
Richtisch. Du erstellst ein kleines Filterprogramm, welches die Fehlermeldungen einfach löscht und den Rest ins error_log schreibt.

aber weshalb kann ich nicht beliebig viele IP-Adressen sperren? Ist für mich das natürlichste auf der Welt... :o
In diesem Fall: no comment.

huschi.
 
Back
Top