Zabezpieczanie Linuksa

Uwaga : poniższy tekst oparty został na artykule "Securing & Hardening Linux v1.0" autorstwa Charalambousa Glafkosa.


Wstęp

Ten tekst jest przewodnikiem, z którego dowiesz się krok po kroku, jak zabezpieczyć twój Linuksowy system. Domyślnie, Linux nie jest dostatecznie zabezpieczony, zaś domyślna instalacja Windows nie jest bezpieczna w ogóle. Zdecydowałem się napisać artykuł o tym, co należy zrobić, aby zabezpieczyć serwer z Linuksem. Powiedźmy sobie otwarcie - nie ma czegoś takiego jak "perfekcyjnie" albo "całkowicie" zabezpieczony system operacyjny. Zadaniem tego tekstu jest pomóc ci w zwiększeniu choć trochę bezpieczeństwa twojego OS-u. Poniższa lista nie jest kompletna, a ja nie odpowiadam za żadne szkody które po wykonaniu opisanych w niej działań może ponieść Twój system. Oczywiście wszystkie polecenia musimy wykonywać z konta super użytkownika.

Przewodnik zabezpieczania

BIOS

Zawsze powinieneś ustawić hasło do BIOS-u i wyłączyć uruchamianie z dyskietek oraz dysków optycznych. To uchroni Cię przez intruzami próbującymi uzyskać nieautoryzowany dostęp do systemu lub zmienić ustawienia BIOS-u.

Zabezpieczanie SSH

SSH (ang. Secure SHell) to protokół umożliwiający zdalne logowanie do systemu i wykonywanie komend na zdalnym komputerze, przy użyciu zaszyfrowanego połączenia pomiędzy dwoma komputerami. Domyślnie SSH używa pierwszej wersji protokołu i pozwala na zdalne logowanie się na konto roota. Powinniśmy to uniemożliwić i używać tylko wersji drugiej.

Jak ?

  1. Otwórz plik /etc/ssh/sshd_config
  2. Zmień "Protocol 2,1" na "Protocol 2"; "PermitRootLogin yes" na "no"
  3. Zapisz
  4. Zrestartuj daemona SSH: /etc/rc.d/init.d/sshd restart

Wyłączanie Telnetu

W starszych wersjach dystrybucji telnet jest domyślnie włączony. Programy ftp, rlogin oraz telnet są podatne na podsłuchiwanie, dlatego zaleca się używanie ich w wersach z szyfrowaniem (sftp, scp, ssh). Jeśli z jakiegoś powodu używasz telnetu (choć nie jest to zalecane), powinieneś chociaż wyłączyć informację powitalną…

Jak ?

  1. Otwórz plik /etc/xinetd.d/telnet
  2. Zmień "disable=no" na "disable=yes"
  3. Zapisz.

Wyłączanie kompilatora

Możesz zdecydować się na umożliwienie kompilacji kodu tylko grupie zaufanych użytkowników.

Jak ?

  1. Dodaj grupę "compiler": /usr/sbin/groupadd compiler
  2. Przejdź do odpowiedniego katalogu: cd /usr/bin
  3. Dodaj kompilatory do grupy "compiler":
    1. chgrp compiler *cc*
    2. chgrp compiler *++*
    3. chgrp compiler ld
    4. chgrp compiler as
  4. Zmień dostęp do mysqlaccess: chgrp root mysqlaccess
  5. Zmień prawa dostępu:
    1. chmod 750 *cc*
    2. chmod 750 *++*
    3. chmod 750 ld
    4. chmod 750 as
    5. chmod 755 mysqlaccess
  6. Aby dodać zaufanych użytkowników do grupy "compiler", otwórz plik /etc/group i zmień "compiler:x:123:" na "compiler:x:123:użytkownik1,użytkownik2" (ciąg znaków "123" będzie inaczej wyglądał w Twoim pliku)

ProFTP

Możesz uniemożliwić zdalne logowanie super użytkownika modyfikując plik proftpd.conf.

Jak?

  1. Otwórz /etc/proftpd.conf
  2. Dodaj linijkę "RootLogin off" i zapisz plik
  3. Uruchom ponownie ProFTP:
    1. /sbin/service proftpd stop
    2. /sbin/service proftpd start

TCP

Edytując pliki hosts.allow i hosts.deny możesz zastrzec lub zezwolić na dostęp do usług obsługiwanych przez inet.

Jak ?:

Otwórz plik /etc/hosts.allow i ustaw w nim hosty, które będą miały dostęp do wszystkich usług (ALL), lub tylko do danych usług.
Przykład konfiguracji:

# Adresy IP, które mają dostęp do wszystkich usług
ALL: 192.168.0.1
ALL: 192.168.5.2
#Automatycznie uploadowanie CSV na serwer FTP
proftpd: 10.0.0.5
# dostęp do pop3 zezwolony dla wszystkich hostów  
ipop3: ALL

Otwórz /etc/hosts.deny, i umieść w nim
ALL:ALL EXCEPT localhost:DENY.

Tworzenie grupy su

Ponieważ wyłączyliśmy zdalne logowanie super użytkownika do systemu przez SSH i telnet, powinniśmy umożliwić odpowiednim kontom używanie "su", czyli polecenia służącego do logowania się na konto innego użytkownika, także roota…

Jak?

  1. Otwórz plik /etc/group
  2. Dodaj linię "wheel:x:10:root,user1, user2" (tylko wymienione konta mogą się zalogować na konto super użytkownika)
  3. Zapisz plik
  4. Wykonaj :
    1. chgrp wheel /bin/su
    2. chmod o-rwx /bin/su

Informacja o tym, że ktoś zalogował się jako root

Co, gdy ktoś zaloguję się na konto super użytkownika za naszymi plecami ? Spowodujmy, abyśmy byli informowani o każdym logowaniu na roota.

Jak?

  1. Otwórz plik .bashrc znajdujący się w katalogu /root
  2. Dodaj linijkę "echo 'Uwaga - Logowanie na konto Root (Nazwa serwera) :' `date` `who` | mail -s "Uwaga - zalogowanie na konto roota`who | cut -d"(" -f2 | cut -d")" -f1`" twólp.liame|j#lp.liame|j"
  3. Zapisz plik

Zabezpieczanie historii powłoki

Wskazane byłoby zabezpieczenie pliku .bash_history przed jego usunięciem lub przeniesieniem do /dev/null. Uniemożliwi to próby zatarcia śladów, ponieważ będziemy mieli stały dostęp do historii poleceń basha.

Jak ?

  1. chattr +a .bash_history
  2. chattr +i .bash_history

Musisz jeszcze poinformować logujących się użytkowników o tym, że historia poleceń powłoki jest zabezpieczona - muszą wyrazić na to zgodę.

Używanie odpowiedniej wiadomości powitalnej

Musisz poinformować każdego, kto będzie próbował zalogować się do systemu o tym, co robi i oznajmić mu, że ten system nie jest dostępny dla każdego (publiczny). Kiedyś doszło do włamania do systemu, który nie używał takiej informacji, w wyniku czego sąd uniewinnił włamywacza, powitanego przy próbie zalogowania wiadomością "Welcome" ;).

Jak ?

  1. Usuń plik /etc/redhat-release
  2. Otwórz plik /etc/issue oraz /etc/motd i zamieść w nich poniższą informację :

Ten komputer jest dostępny tylko dla autoryzowanych użytkowników. Próby użycia tego systemu bez autoryzacji i/lub wszelkie nadużycia są monitorowane i zapisywane i/lub analizowane przez odpowiednie osoby, włączając w to instytucje rządowe. Działalność autoryzowanych użytkowników również może być monitorowana i rejestrowana. Wszystkie zarejestrowane i zapisane materiały mogą być przekazane odpowiednim służbom. Używając tego systemu zgadzasz się na powyższe warunki.

Wyłączenie wszystkich kont specjalnych

Powinieneś usunąć wszystkie domyślne konta i grupy kont z systemu (np. news, lp, sync, shutdown, uucp, games, halt, itp).

Jak?

  • Aby usunąć konto użytkownika: userdel użytkownik
  • Aby usunąć grupę: groupdel użytkownik
  • Aby zablokować konto użytkownika: /usr/sbin/usermod -L -s /bin/false użytkownik

Nadanie odpowiednich praw dostępu ważnym plikom

Mógłbyś umożliwić wykonanie poniższych poleceń tylko super użytkownikowi.

Jak?

  • chmod 700 /bin/ping
  • chmod 700 /usr/bin/finger
  • chmod 700 /usr/bin/who
  • chmod 700 /usr/bin/w
  • chmod 700 /usr/bin/locate
  • chmod 700 /usr/bin/whereis
  • chmod 700 /sbin/ifconfig
  • chmod 700 /usr/bin/pico
  • chmod 700 /usr/bin/vi
  • chmod 700 /usr/bin/which
  • chmod 700 /usr/bin/gcc
  • chmod 700 /usr/bin/make
  • chmod 700 /bin/rpm

Nadanie odpowiednich praw dostępu niebezpiecznym katalogom

Katalogi /tmp, /var/tmp, /dev/shm nie są zabezpieczone, co umożliwia atakującemu uruchamianie skryptów znajdujących się w tych katalogach. Najlepszym rozwiązaniem będzie przeniesienie tych katalogów na osobną partycję i zamontowanie jej z parametrami
noexec i nosuid. Uwaga: porady opisane w tym kroku nie są zalecane, gdy używasz cPanel. Używasz ich na własną odpowiedzialność.

Jak zabezpieczyć /tmp

  • Wejdź do katalogu dev - cd /dev
  • Stwórz stu megabajtowy plik przeznaczony na dane: dd if=/dev/zero of=tmpMnt bs=1024 count=100000
  • Dodaj system plików /sbin/mke2fs /dev/tmpMnt (odpowiedz "tak" na pytanie "…is not a block special device. continue?")
  • Skopiuj obecny katalog z plikami tymczasowymi: cp -R /tmp/ /tmp_backup
  • Zamontuj nowy system plików z parametrem noexec: mount -o loop,rw,nosuid,noexec /dev/tmpMnt /tmp
  • Pozwól wszystkim (chmod 777) na edycję /tmp: chmod 0777 /tmp
  • Przywróć kopię katalogu /tmp: cp -R /tmp_backup/* /tmp/
  • Usuń niepotrzebną już kopię: rm -rf /tmp_backup
  • Zmodyfikuj plik /etc/fstab, tak aby plik /dev/tmpMnt był automatycznie montowany podczas startu systemu: /dev/tmpMnt /tmp ext2 loop,rw,nosuid,noexec 0 0 (spacje są tabulacją)

Jak zabezpieczyć /var/tmp

*Wykonaj po kolei:

  1. mv /var/tmp /var/tmpbck
  2. ln -s /tmp /var/tmp
  3. cp /var/tmpbck/* /tmp/
  • Zrestartuj wszystkie usługi używające partycji /tmp

Jak zabezpieczyć /dev/shm

  • Otwórz plik /etc/fstab
  • Zamień linijkę none /dev/shm tmpfs defaults,rw 0 0 na none /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0
  • Zamontuj ponownie partycję /dev/shm: mount -o remount /dev/shm

Określenie, z których terminali może się zalogować root

Plik /etc/securetty pozwala określić, z jakich terminali TTY może się zalogować administrator. Wyłącz każde nie potrzebny terminal stawiając "#" na początku linii.

Jak?

  1. Otwórz plik /etc/securetty
  2. Pozostaw tylko dwie linijki :
    • tty1
    • tty2
  • Zapisz

Ustawienie bezpiecznego hasła

W pliku /etc/login.defs zdefiniowane są ustawienia pakietu shadow, odpowiedzialnego za hasła użytkowników. Domyślnie, minimalna długość hasła wynosi 5 znaków. Powinieneś zmienić ją na 8 znaków, aby hasła były mocniejsze.

Jak?

  1. vi /etc/login.defs
  2. Zmień "PASS_MIN_LEN", z 5 na 8.

Skanowanie w poszukiwaniu rootkitów

  1. Pobieramy program i jego sumę kontrolną:
  2. Sprawdzamy sumę kontrolną — md5sum chkrootkit.tar.gz
  3. Rozpakowujemy i instalujemy:
    • tar -zxvf chkrootkit.tar.gz
    • cd chkrootkit
    • make sense

Możesz teraz uruchomić narzędzie poleceniem ./chkrootkit.
Teraz ustawimy codzienne skanowanie systemu, wraz z przekazywaniem wiadomości o wynikach przez e-mail.

  1. vi /etc/cron.daily/chkrootkit.sh
  2. Wklej zawartość poniższego skryptu
#!/bin/bash
# Przechodzimy do katalogu, gdzie jest zainstalowany chkrootkit
cd /root/chkrootkit/
./chkrootkit | mail -s "Dzienny raport z działania skanera chkrootkit - nazwa serwera" twój@email.pl

Teraz zmień uprawnienia pliku tak, aby można było go uruchomić: chmod 755 /etc/cron.daily/chkrootkit.sh
Aby zobaczyć, czy wszystko jest porządku, możesz ręcznie uruchomić plik chkrootkit.sh z katalogu /etc/cron.daily. Powinieneś otrzymać na podany adres raport ze skanowania.

Instalowanie aktualizacji bezpieczeństwa

Powinieneś często sprawdzać, czy dostępne są aktualizacje które naprawią błędy lub zwiększą stabilność systemu. Od czasu do czasu wykrywane są nowe exploity, które umożliwiają atak na nie załatane systemy.

Jak? (Centos, Red Hat, Fedora)

  • Aby zobaczyć listę dostępnych aktualizacji: up2date -l
  • Aby zainstalować aktualizacje które nie są wyłączone: up2date –u
  • Aby zainstalować wszystkie aktualizacje, łącznie z wyłączonymi: up2date –uf

Jak ? (Debian i pochodne)

  • apt-get update && apt-get upgrade

Ukrywanie informacji o Apache

Powinieneś wyłączyć informacje o wersji serwera Apache, co spowoduje, że włamywacz, czy też skrypt skanujący system w poszukiwaniu dziur, nie będzie wiedział jakiej wersji Apache używasz — utrudni mu to pracę.

Jak?

  1. Otwórz plik /etc/httpd/conf/httpd.conf
  2. Zmień linię "ServerSignature" na "ServerSignature Off", oraz linię "ServerTokens" na "ServerTokens Prod"
  3. Zapisz plik
  4. Zrestartuj Apache: /sbin/service httpd restart

Ukrywanie informacji o PHP

Poza "uciszeniem" Apache powinniśmy wyłączyć informację o wersji PHP.

Jak ?

Otwórz plik php.ini
Zamień linię "expose_php" na "expose_php=Off"

Wyłączanie nieużywanych procesów

Szukanie otwartych portów

Znalezienie otwartych i nie używanych portów jest bardzo ważne, ponieważ każdy niepotrzebnie otwarty port może stanowić furtkę dla włamywacza.

Jak ?

Aby uzyskać listę otwartych portów możesz użyć poniższych komend:

  1. netstat -tulp
  2. lsof -i -n | egrep 'COMMAND|LISTEN|UDP'
  3. lub dowolnego skanera portów, na przykład nmap.

Zamykanie otwartych portów i usług

Usuwanie nieużywanych paczek

Wyłączanie niebezpiecznych funkcji PHP

Powinieneś wyłączyć niebezpieczne funkcje PHP, ponieważ pozwalają np. na wykonywanie poleceń w powłoce.

Jak:

Zlokalizuj twój plik php.ini i otwórz go do edycji:

  • whereis php.ini
  • Otwórz plik znajdujący się w ścieżce podanej przez wheris
  • Zamień linię disable_functions = “” na //disable_functions = "symlink,shell_exec,exec,proc_close,proc_open,popen,system,dl,passthru,escapeshellarg,escapeshellcmd"/

Instalacja i konfigurowanie firewalla

Advanced Policy Firewall (APF) to jeden z najlepszych otwartych firewalli, bazujący na iptables. W tej części artykułu dowiesz się, jak dostosować zaporę do twoich potrzeb.

Jak ?:

  • Pobierz APF:

wget http://www.r-fx.ca/downloads/apf-current.tar.gz

  • Rozpakuj i zainstaluj:
  1. tar –zxvf apf-current.tar.gz
  2. cd apf-0.9.6-3
  3. ./install.sh

Po instalacji powinieneś otrzymać komunikat mówiący o poprawnym zainstalowaniu.
Teraz skonfigurujemy firewall - otwórz do edycji plik /etc/apf/conf.apf. Ustawimy działanie zapory i zamykanie/otwieranie portów. Reszta dokumentacji jest dostępna w pliku README. Najpierw pozwolimy, aby firewall używał listy zablokowanych sieci ze strony DShield.org:
zamień USE_DS=”0” USE_DS=”1”
Poniżej zademonstruje dwa warianty konfiguracji - pierwszy ogólny, drugi przydatny dla posiadaczy CPanelu. CPanel jest najpopularniejszym panelem do zarządzania hostingiem, dlatego to jego konfigurację opiszę. Aby zobaczyć listę portów możesz skorzystać ze strony autora tego artykułu, defaultports.com.

Główna konfiguracja: (DNS, email, WWW, FTP)

# Dozwolone przychodzące porty TCP  
# -3000_3500 to pasywny zakres portów dla Pure-FTPd
IG_TCP_CPORTS="21,22,25,53,80,110,143,443,995"
# Dozwolone przychodzące porty UDP 
IG_UDP_CPORTS="53"
# Filtrowanie wychodzących pakietów [0 = Wyłączone / 1 = Włączone]
EGF="1"
# Dozwolone wychodzące porty TCP 
EG_TCP_CPORTS="21,25,80,443,43"
# Dozwolone wychodzące porty UDP 
EG_UDP_CPORTS="20,21,53"

Cpanel

# Dozwolone przychodzące porty TCP  
# -3000_3500 to pasywny zakres portów dla Pure-FTPd
IG_TCP_CPORTS="21,22,25,53,80,110,143,443,2082,2083, 2086,2087, 2095, 2096,3000_3500"
# Dozwolone przychodzące porty UDP 
IG_UDP_CPORTS="53"
# Filtrowanie wychodzących pakietów [0 = Wyłączone / 1 = Włączone]
EGF="1"
# Dozwolone wychodzące porty TCP 
EG_TCP_CPORTS="21,25,80,443,43,2089"
#
# Dozwolone wychodzące porty UDP
EG_UDP_CPORTS="20,21,53"

Po zakończeniu instalacji i konfiguracji możemy włączyć firewall: /etc/apf/apf –s. Jeśli jesteśmy pewni, że wszystko działa poprawnie, powinniśmy wyłączyć tryb debugowania. W tym celu w pliku konfiguracyjnym zmieniamy linijkę // DEVM=”1”// na // DEVM ="0".
Teraz pora na skonfigurowanie zabezpieczenia przeciwko atakom DoS. Mamy bardzo dużo różnorakich możliwości, jednak my ustawimy tylko powiadamianie o próbach ataku. W pliku z ustawieniami znajdź poniższe linie i ustaw zgodnie z twoją konfiguracją.
# Nazwa organizacji, będzie wyświetlana w komunikatach
CONAME="Twoja organizacja"
# Wysyłanie komunikatów na adres e-mail [0 = Wyłączone / 1 = Włączone] 
USR_ALERT="0"
#
# Adres, na jaki mają być wysyłane komunikaty
USR=twój@email.pl

Zapisz plik i zrestartuj firewall: /etc/apf/apf –r. Aby zapora była automatycznie uruchamiana przy starcie systemu, wydajemy polecenie chkconfig —level 2345 apf on

Porady:

Aby zablokować adres ip użyj /etc/apf/apf –d ip notes, aby zablokować dany host możesz wykorzystać plik etc/apf/deny_hosts.rules. Natomiast do dodania danego adresu ip/nazwy hosta do białej listy, należy użyć etc/apf/apf –a ip notes / /etc/apf/allow_hosts.rules.

Instalacja i konfigurowanie systemu detekcji ataków brute force

BFD jest modułowym skryptem powłoki przeznaczonym do przetwarzania logów i sprawdzania nieudanych prób zalogowania. Aby użyć BFD, musisz najpierw zainstalować firewall APF.

Jak?

  • Pobierz BFD:
  1. wget http://www.r-fx.ca/downloads/bfd-current.tar.gz
  2. tar –zxvf bfd-current.tar.gz
  3. cd bfd-0.9
  4. ./install.sh

Następnie przystąp do konfiguracji. Otwórz plik /usr/local/bfd/conf.bfd w Twoim ulubionym edytorze, znajdź poniższe linijki i dopasuj do własnej konfiguracji.

# Wysyłanie komunikatów na adres e-mail [0 = Wyłączone / 1 = Włączone] 
ALERT_USR="1"
#
# Adres na który mają być wysyłane komunikaty
EMAIL_USR="twój@email.pl"
#
# Temat wiadomości z komunikatem
SUBJ_USR="Brute Force Warning for $HOSTNAME"

Teraz postało tylko zabezpieczyć nas przed… własnym BFD, ponieważ bez wcześniejszej konfiguracji nasz adres ip również może zostać zablokowany. Na szczęście wystarczy tylko dodanie go do pliku /usr/local/bfd/ignore.hosts. BFD uruchamiamy komendą /usr/local/sbin/bfd –s. W pliku README opisane są inne możliwości konfiguracji.

Zabezpieczanie kernela (sysctl.conf)

Plik sysctl.conf zawiera ustawienia jądra, m.in. te związane z bezpieczeństwem. Naszym celem jest zabezpieczenie systemu przed atakami DoS oraz IP spoofing.

Jak ?

Aby uzyskać szybki raport nt. obecnej konfiguracji kernela, można użyć polecenia sysctl –a.
Zabezpieczmy więc jądro -

  • Otwórz plik /etc/sysctl.conf
  • Wklej poniższe linijki
# Kernel sysctl configuration file for Red Hat Linux
#
# Dla wartości binarnych, 0 oznacza wyłączenie, a 1 włączenie.
# Odpowiada za forwarding pakietów IP.
net.ipv4.ip_forward = 0
# Odpowiada za weryfikację źródła pakietów.
net.ipv4.conf.default.rp_filter = 1
# Odpowiada za debugującą funkcję kernela System Request.
kernel.sysrq = 0
# Odpowiada za dołączanie PID do plików ze zrzutami pamięci.
# Przydatne do debugowania wielowątkowych aplikacji.
kernel.core_uses_pid = 1
# Zapobiega atakom SYN
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
# Wyłącza forwarding pakietów
net.ipv4.ip_forward=0
# Wyłącza trasowanie wg. nadawcy pakietu
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
# Włącza zapobieganie atakom IP spoffing
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
# Wyłącza akceptację przekierowań ICMP
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# Włącza logowanie wszystkich spoofowanych, trasowanych wg. nadawcy lub przekierowanych pakietów
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.lo.log_martians = 1
net.ipv4.conf.eth0.log_martians = 1
# Wyłącza trasowanie wg. nadawcy IP
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
#Włącza zapobieganie atakom IP spoffing
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
# Wyłącza akceptację przekierowań ICMP
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
# Zapobiega użyciu magicznego klawisza SysRq
kernel.sysrq = 0
# Modyfikuje maksymalną ilość otwartych plików
fs.file-max = 65000
# Zmniejsza domyślny czas utrzymywania gniazda w stanie FIN-WAIT-2 jeśli zostało zamknięte przez drugą stronę
net.ipv4.tcp_fin_timeout = 15
# Decrease the time default value for tcp_keepalive_time connection
# Zmniejsza czas wysyłania wiadomości keepalive
net.ipv4.tcp_keepalive_time = 1800
# Wyłącza skalowanie okna TCP
net.ipv4.tcp_window_scaling = 0
# Wyłącza tcp_sack
net.ipv4.tcp_sack = 0
# Wyłącza  tcp_timestamps
net.ipv4.tcp_timestamps = 0
# Włącza zapobieganie atakom TCP SYN
net.ipv4.tcp_syncookies = 1
# Ignorowanie zapytań broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Włącza ochronę przez złymi powiadomieniami o błędach
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Włącza logowanie wszystkich spoofowanych, trasowanych wg. nadawcy lub przekierowanych pakietów
net.ipv4.conf.all.log_martians = 1
# Zwiększa maksymalną ilość pamięci przeznaczonej dla shm do 256 MB
kernel.shmmax = 268435456
# Zwiększa wydajność systemu plików
vm.bdflush = 100 1200 128 512 15 5000 500 1884 2
# Zwiększa wydajność pamięci wirtualnej
vm.buffermem = 90 10 60
# Zwiększa rozmiar kolejki gniazda
net.ipv4.tcp_max_syn_backlog = 1024
# Zwiększa maksymalny rozmiar bufora TCP
net.ipv4.tcp_mem = 57344 57344 65536
# Zwiększa maksymalny rozmiar zapisywalnego bufora TCP
net.ipv4.tcp_wmem = 32768 65536 524288
# Zwiększa maksymalny rozmiar odczytywalnego bufora TCP
net.ipv4.tcp_rmem = 98304 196608 1572864
# Zwiększa maksymalny i domyślny rozmiar bufora gniazda otrzymywanych pakietów 
net.core.rmem_max = 524280
net.core.rmem_default = 524280
#  Zwiększa maksymalny i domyślny rozmiar bufora  gniazda wysyłanych pakietów 
net.core.wmem_max = 524280
net.core.wmem_default = 524280
# Zwiększa rozmiar puli tcp_time_wait
net.ipv4.tcp_max_tw_buckets = 1440000
# Dozwolony zakres lokalnych portów
net.ipv4.ip_local_port_range = 16384 65536
# Zwiększa maksymalną ilość pamięci używanej do deasemblacji fragmentów IP 
net.ipv4.ipfrag_high_thresh = 512000
net.ipv4.ipfrag_low_thresh = 446464
# Increase the maximum amount of option memory buffers
# Zwiększa maksymalną ilość pamięci bufora opcji
net.core.optmem_max = 57344
# Zwiększa maksymalną ilość zapamiętywanych lokalnie skb-heads
net.core.hot_list_length = 1024
## NIE USUWAJ PONIŻSZEJ LINII!
## nsobuild:20051206

Ustawienia sysctl.conf zostały opisane lakonicznie, dla osób zainteresowanych tymi zagadnieniami polecam lekturę tych artykułów.

Źródła

Źródła, z których korzystał autor tłumaczenia

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-NonCommercial 3.0 License