Einführung
Im Internet gibt es eine ganze Reihe verschiedener Beispiele für Linux-Kernel-Konfigurationen, um eine große Anzahl von Verbindungen, stark ausgelastete Webprojekte zu unterstützen und DDoS-Angriffen entgegenzuwirken. Hier ist ein weiteres Beispiel, das ich bereits in der Praxis ausprobieren konnte. Ich sage gleich – es hat mir mehr als geholfen. Probieren Sie es aus und Sie.
/etc/sysctl.conf-Optionen
Es gibt eine Liste von Optionen, die zur /etc/sysctl.conf hinzugefügt werden müssen :
net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.tcp_max_orphans = 65536 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_keepalive_time = 1800 net.ipv4.tcp_keepalive_intvl = 15 net.ipv4.tcp_keepalive_probes = 5 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_mem = 50576 64768 98152 net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 net.ipv4.tcp_orphan_retries = 0 net.ipv4.tcp_syncookies = 0 net.ipv4.netfilter.ip_conntrack_max = 16777216 net.netfilter.nf_conntrack_max = 16777216 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_sack = 1 net.ipv4.tcp_congestion_control = htcp net.ipv4.tcp_no_metrics_save = 1 net.ipv4.route.flush = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.lo.rp_filter = 1 net.ipv4.conf.eth0.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.lo.accept_source_route = 0 net.ipv4.conf.eth0.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rfc1337 = 1 net.ipv4.ip_forward = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_echo_ignore_all = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.core.somaxconn = 65535 net.core.netdev_max_backlog = 1000 net.core.rmem_default = 65536 net.core.wmem_default = 65536 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 fs.inotify.max_user_watches = 16777216
Und nun zu jeder Option im Detail.
net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.all.send_redirects = 0
Akzeptieren oder senden Sie keine ICMP-Umleitungspakete. ICMP-Umleitungen können von einem Angreifer verwendet werden, um Routing-Tabellen zu ändern. Es ist ratsam, ihn auf „0“ einzustellen. Die Einheit ist nur für Hosts sinnvoll, die als Router verwendet werden.
net.ipv4.tcp_max_orphans = 65536
Der ganzzahlige Wert des Parameters tcp_max_orphans bestimmt die maximale Anzahl gültiger TCP-Sockets im System, die von keinem Benutzerdateihandle verbunden sind. Bei Erreichen des Schwellenwerts werden verwaiste Verbindungen sofort mit einer Warnung zurückgesetzt. Dieser Schwellenwert hilft, nur einfache DoS-Angriffe zu verhindern. Sie sollten den Schwellenwert nicht verringern (sondern entsprechend den Anforderungen des Systems erhöhen, z. B. nach dem Hinzufügen von Speicher. Jede verwaiste Verbindung verbraucht etwa 64 KByte nicht auslagerbaren Speicher).
net.ipv4.tcp_fin_timeout
net.ipv4.tcp_fin_timeout = 10
Der Parameter tcp_fin_timeout bestimmt die Zeit, in der der Socket im Zustand FIN-WAIT-2 verbleibt, nachdem er von der lokalen Seite geschlossen wurde. Der Partner darf diese Verbindung nie schließen, daher sollten Sie diese nach einem Timeout von sich aus schließen. Standardmäßig beträgt das Timeout 60 Sekunden. In den Cores der 2.2-Serie wurde normalerweise ein Wert von 180 Sekunden verwendet, und Sie können diesen Wert speichern, aber Sie sollten nicht vergessen, dass Sie auf geladenen WEB-Servern Gefahr laufen, viel Speicher zu verbrauchen, um halb unterbrochene tote Verbindungen zu speichern. Sockets im FIN-WAIT-2-Zustand sind weniger gefährlich als FIN-WAIT-1, da sie nicht mehr als 1,5 KByte Speicher beanspruchen, aber länger dauern können.
TCP-Keepalive-Zeit
net.ipv4.tcp_keepalive_time = 1800 net.ipv4.tcp_keepalive_intvl = 15 net.ipv4.tcp_keepalive_probes = 5
tcp_keepalive_time Die Variable legt fest, wie oft die Verbindung überprüft werden soll, wenn sie längere Zeit nicht benutzt wurde. Der Wert der Variablen ist nur für die Sockets sinnvoll, die mit dem SO_KEEPALIVE-Flag erstellt wurden. Die Integer-Variable tcp_keepalive_intvl definiert das Abtastintervall. Das Produkt tcp_keepalive_probes * tcp_keepalive_intvl bestimmt die Zeit, nach der die Verbindung getrennt wird, wenn keine Antworten kommen. Standardmäßig beträgt das Intervall 75 Sekunden, d. h. die Zeit der Trennung ohne Antworten beträgt etwa 11 Minuten.
net.ipv4.tcp_max_syn_backlog = 4096
Der ganzzahlige Wert in der Datei tcp_max_syn_backlog definiert die maximale Anzahl von gemerkten Verbindungsanfragen, für die keine Bestätigung vom verbindenden Client empfangen wurde. Wenn der Server überlastet ist, können Sie versuchen, diesen Wert zu erhöhen.
net.ipv4.tcp_synack_retries = 1
Der ganzzahlige Wert (1 Byte) tcp_synack_retries bestimmt die Anzahl der Wiederholungsversuche zur Übertragung von SYNACK-Paketen für passive TCP-Verbindungen. Die Anzahl der Versuche sollte 255 nicht überschreiten. Ein Wert von 5 entspricht ca. 180 Sekunden für den Verbindungsaufbauversuch.
net.ipv4.tcp_mem
net.ipv4.tcp_mem = 50576 64768 98152
Die Vektorvariable (Minimum, Lademodus, Maximum) in der Datei tcp_mem enthält allgemeine Speicherverbrauchseinstellungen für das TCP-Protokoll. Diese Variable wird in Seiten (normalerweise 4 KB) gemessen, nicht in Bytes.
Minimum :Während die Gesamtspeichergröße für TCP-Protokollstrukturen kleiner als diese Anzahl von Seiten ist, unternimmt das Betriebssystem nichts.
Lademodus :Sobald die Anzahl der für das TCP-Protokoll zugewiesenen Speicherseiten diesen Wert erreicht, wird der Lademodus aktiviert, in dem das Betriebssystem versucht, die Speicherzuweisung zu begrenzen. Dieser Modus wird beibehalten, bis der Speicherverbrauch wieder das Mindestniveau erreicht.
Maximal :Die maximal zulässige Anzahl von Speicherseiten für alle TCP-Sockets.
net.ipv4.tcp_rmem
net.ipv4.tcp_rmem = 4096 87380 16777216
Die Vektorvariable (Minimum, Standard, Maximum) in der Datei tcp_rmem enthält 3 Ganzzahlen, die die Größe des TCP-Socket-Empfangspuffers bestimmen.
Minimum :Jeder TCP-Socket hat das Recht, diesen Speicher bei seiner Erstellung zu verwenden. Die Nutzbarkeit eines solchen Puffers ist auch bei Erreichen der Schwelle des Limits (mäßiger Speicherdruck) gewährleistet. Die standardmäßige minimale Puffergröße beträgt 8 KB (8192).
Standardwert :Die für den standardmäßigen TCP-Socket-Übertragungspuffer zulässige Speichermenge. Dieser Wert wird anstelle des Parameters /proc/sys/net/core/rmem_default verwendet, der von anderen Protokollen verwendet wird. Der Standardpufferwert (normalerweise) beträgt 87830 Bytes. Dies bestimmt die Fenstergröße von 65535 mit dem Standardwert von tcp_adv_win_scale und tcp_app_win =0, etwas kleiner als der Standardwert von tcp_app_win.
Maximal :Die maximale Puffergröße kann automatisch zugewiesen werden, um einen TCP-Socket zu empfangen. Dieser Wert hebt das in der Datei /proc/sys/net/core/rmem_max angegebene Maximum nicht auf. Bei „statischer“ Speicherallokation mittels SO_RCVBUF spielt dieser Parameter keine Rolle.
net.ipv4.tcp_wmem
net.ipv4.tcp_wmem = 4096 65536 16777216
Die Vektorvariable in der Datei tcp_wmem enthält 3 ganzzahlige Werte, die die minimale, standardmäßige und maximale Speichermenge definieren, die für TCP-Socket-Übertragungspuffer reserviert ist.
Minimum :Jeder TCP-Socket hat das Recht, diesen Speicher bei seiner Erstellung zu verwenden. Die standardmäßige minimale Puffergröße beträgt 4 KB (4096)
Standardwert :Die für den standardmäßigen TCP-Socket-Übertragungspuffer zulässige Speichermenge. Dieser Wert wird anstelle des Parameters /proc/sys/net/core/wmem_default verwendet, der von anderen Protokollen verwendet wird, und ist normalerweise kleiner als /proc/sys/net/core/wmem_default. Die Größe des Standardpuffers beträgt normalerweise (Standard) 16 KByte (16384).
Maximal :Die maximale Speichermenge, die dem TCP-Socket-Übertragungspuffer automatisch zugewiesen werden kann. Dieser Wert überschreibt nicht das in der Datei /proc/sys/net/core/wmem_max angegebene Maximum. Bei „statischer“ Speicherallokation mittels SO_SNDBUF spielt dieser Parameter keine Rolle.
net.ipv4.tcp_orphan_retries =0
Der ganzzahlige Wert tcp_orphan_retries bestimmt die Anzahl der Fehlversuche, nach denen die lokal geschlossene TCP-Verbindung zerstört wird. Der Standardwert ist 7, was je nach RTO ungefähr einem Zeitraum von 50 Sekunden bis 16 Minuten entspricht. Auf stark ausgelasteten WEB-Servern ist es sinnvoll, den Wert dieses Parameters zu reduzieren, da geschlossene Verbindungen viele Ressourcen verbrauchen können.
net.ipv4.tcp_syncookies =0
Im Zusammenhang mit der Empfehlung von Kernel-Entwicklern ist es besser, diese Option zu deaktivieren.
net.ipv4.netfilter.ip_conntrack_max =16777216
Die maximale Anzahl von Verbindungen, damit der Verbindungsverfolgungsmechanismus funktioniert (verwendet zum Beispiel iptables). Bei zu kleinen Werten beginnt der Kernel eingehende Verbindungen mit entsprechendem Eintrag im Systemlog abzulehnen.
net.ipv4.tcp_timestamps =1
Ermöglicht TCP-Zeitstempel. Ihr Vorhandensein ermöglicht es Ihnen, den Betrieb des Protokolls unter starker Belastung zu kontrollieren (siehe tcp_congestion_control).
net.ipv4.tcp_sack = 1
Selektive Bestätigung der TCPIP-Unterstützung zulassen. Diese Option ist für die effiziente Nutzung der gesamten verfügbaren Bandbreite einiger Netzwerke erforderlich.
net.ipv4.tcp_congestion_control = htcp
Protokoll, das zur Laststeuerung in TCP-Netzwerken verwendet wird. Die standardmäßigen bic- und cubic-Implementierungen enthalten Fehler in den meisten Versionen des RedHat-Kernels und seiner Klone. Die Verwendung von htcp wird empfohlen.
net.ipv4.tcp_no_metrics_save = 1
Speichern Sie keine TCP-Verbindungsmessungen im Cache, wenn dieser geschlossen ist. In einigen Fällen hilft es, die Produktivität zu steigern.
Schutz vor IP-Spoofing
net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.lo.rp_filter = 1 net.ipv4.conf.eth0.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1
Quellrouting deaktivieren
net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.lo.accept_source_route = 0 net.ipv4.conf.eth0.accept_source_route = 0 net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 1024 65535
Erhöhen Sie den Bereich der für ausgehende Verbindungen verfügbaren lokalen Ports.
net.ipv4.tcp_tw_reuse = 1
Wir erlauben die Wiederverwendung von TIME-WAIT-Sockets in Fällen, in denen das Protokoll dies als sicher erachtet.
net.ipv4.tcp_window_scaling = 1
Dynamische Größenänderung des TCP-Stack-Fensters zulassen.
net.ipv4.tcp_rfc1337 = 1
Verteidigung vor TIME_WAIT-Angriff.
net.ipv4.ip_forward = 0
Wir verbieten die Paketweiterleitung, da wir kein Router sind.
net.ipv4.icmp_echo_ignore_broadcasts = 1
Wir antworten nicht auf ICMP-ECHO-Anfragen, die durch Broadcast-Pakete übertragen werden.
net.ipv4.icmp_echo_ignore_all = 1
Sie können überhaupt nicht auf ICMP-ECHO-Anfragen antworten (der Server pingt nicht).
net.ipv4.icmp_ignore_bogus_error_responses = 1
Wir reagieren nicht auf falsch formulierte Nachrichten.
net.core.somaxconn = 65535
Die maximale Anzahl offener Sockets, die auf eine Verbindung warten. Es ist sinnvoll, den Standardwert zu erhöhen.
net.core.netdev_max_backlog = 1000
Der Parameter bestimmt die maximale Anzahl von Paketen in der Verarbeitungswarteschlange, wenn die Schnittstelle Pakete schneller empfängt, als der Kernel sie verarbeiten kann.
Speicher max. Standard
net.core.rmem_default = 65536
Die Standardgröße des Datenempfangspuffers für alle Verbindungen.
net.core.wmem_default = 65536
Die Standardgröße des Datenübertragungspuffers für alle Verbindungen.
net.core.rmem_max = 16777216
Die maximale Größe des Datenempfangspuffers für alle Verbindungen.
net.core.wmem_max = 16777216
Maximale Datenpuffergröße für alle Verbindungen.