slawek481 Opublikowano 27 Maja 2010 Zgłoś Udostępnij Opublikowano 27 Maja 2010 Ten poradnik zakłada, że posiadacie "goły" system Linuks zainstalowany na swoim serwerze. Od siebie mogę polecić trzy systemy na serwer: Debiana, CentOS i Ubuntu. Te trzy systemy testowałem, były bardzo stabilne i końcowo zdecydowałem zaufać CentOS i na tym systemie będę opisywał poszczególne kroki. Spis treści: Co jest potrzebne do połączenia się z serwerem? Instalacja LAMP (Apache, PHP, MySQL) Konfiguracja LAMP Instalacja panelu zarządzania serwerem Zabezpieczanie serwera Copyright by slawek481 @ FixItPc.pl Kopiowanie całości (bądź części) tego poradnika bez mojej wiedzy i zgody zabronione. Odnośnik do komentarza
slawek481 Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 Co jest potrzebne do połączenia się z serwerem? W e-mailu od serwerowni, na pewno dostaliśmy adres IP serwera oraz hasło root. Aby zarządzać zdalnie serwerem, ściągamy programik Putty. 1. Uruchamiamy Putty. W okienku Host Name (or IP address) wpisujemy adres IP naszego serwera, który otrzymaliśmy w e-mailu. Zaznaczamy SSH. Klikamy Open. 2. Wyskakuje nam okienko konsoli: login as: wpisujemy root i wciskamy ENTER 3. Wyskakuje nam: root@xx.xxx.xxx.xxx's password: Wpisujemy swoje hasło konta root, które otrzymaliśmy w e-mailu i wciskamy ENTER <blink>UWAGA!</blink> Ze względów bezpieczeństwa, przy wpisywaniu hasła nie wyświetlają się żadne gwiazdki, kropki etc. 4. Jeśli wszystko dobrze wykonaliśmy (hasło było poprawne), ujrzymy coś takiego: Gratuluję! Właśnie dostałeś się do katalogu głównego Twojego serwera Teraz można przejść do następnej części artykułu, mianowicie instalacji serwera WWW. Odnośnik do komentarza
slawek481 Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 Instalacja LAMP 1. Co oznacza skrót LAMP? LAMP jest to akronim utworzony z pierwszych liter wyrazów1: Linux - system operacyjny Apache - serwer WWW MySQL - serwer bazodanowy PHP - interpreter języka skryptowego. 2. Skoro już wiemy, co to jest LAMP i do czego służy, przejdźmy do procesu instalacji. - Na początek zaktualizujmy repozytoria by być pewnym, ze instalujemy najnowszą, dostępną wersję oprogramowania. Wpisujemy: yum upgrade Gdy już zostanie wybrany najszybszy serwer lustrzany, wpisujemy litanię: yum install httpd mysql-server php php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy Powyższe polecenie właściwie załatwi wszystko za nas, tzn zainstaluje na początek wszystko co jest nam potrzebne do odpalenia serwera WWW. 1 http://pl.wikipedia.org/wiki/LAMP Odnośnik do komentarza
slawek481 Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 Konfiguracja LAMP W tej części poradnika postaram się opisać najważniejsze części plików konfiguracyjnych Apache, PHP i MySQL. Apache: W konsoli wklepujemy komendę: vim /etc/httpd/conf/httpd.conf Tweak ustawień: Timeout 120 << czas, po którym przeglądarka wyświetla komunikat, że serwer nie odpowiada.KeepAlive On << koniecznie ustawione na on. Znacząco odciąża serwer gdy nasza strona zawiera dużo obrazków. MaxKeepAliveRequests 100 << Maksymalna ilość konkurencyjnych zapytań w jednej sekundzie KeepAliveTimeout 15 << określa jak długo serwer ma czekać na następne żądanie zanim zakończy połączenie. Najlepiej ustawić 2-3 sek. Dobór odpowiedniego MPM dla odpowiedniego typu serwera. Worker MPM używa dużej ilości procesów potomnych (mówiąc prościej - procesów "dzieci" ), doskonale nadaje się na serwery wieloprocesorowe, jednak jego stabilność jest krótko mówiąc do bani. Jeden proces potomny może rozłożyć cały serwer. Zjada mało pamięci RAM. <IfModule worker.c>StartServers 5 MaxClients 10 MinSpareThreads 7 MaxSpareThreads 21 ThreadsPerChild 25 MaxRequestsPerChild 25 </IfModule> Prefork MPM tak samo jak Worker używa wielu procesów potomnych, jednakże ten moduł jest jednowątkowy, co sprawdza się doskonale w użytku z jednostkami wyposażonymi w pojedynczy procesor. Jest także o wiele stabilniejszy od Workera, jednakże jako że nie ma rzeczy doskonałych na tym świecie, charakteryzuje się dużym (czasami nawet ogromnym) zużyciem pamięci RAM. <IfModule prefork.c>StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 50 MaxClients 50 MaxRequestsPerChild 0 </IfModule> Powyższe ustawienia pochodzą z mojego własnego VPS o konfigu: ~3GHz zegara procesora, 2 GB RAM, choć generalnie nie ma złotego środka na konfiguracje apache. Trzeba metodą prób i błędów wypracować sobie ustawienia ServerSignature Off << wyłącza wyświetlanie informacji o zainstalowanym OS na serwerze i wersji Apache, PHP itd. Zalecam mieć to wyłączone ze względów bezpieczeństwa. PHP: W konsoli wydajemy polecenie: vim /etc/php.ini Najważniejsze elementy do zmiany: max_execution_time = 60memory_limit = 128M upload_max_filesize = 50M max_execution_time - maksymalny czas, przez jaki skrypty PHP będą się wykonywać. Zalecam ustawienie 60-120 sekund. memory_limit - maksymalna ilość pamięci RAM, którą w jednej chwili może zaalokować skrypt. upload_max_filesize - maksymalny rozmiar uploadowanych plików. Zalecane ustawić dużą wartość, jeśli zamierzamy importować bazę przez phpmyadmina. MySQL: Konfiguracja MySQL (jak z resztą Apache) zależy od zasobów przydzielonych nam przez hostingodawcę. Aby ułatwić sobie konfigurację MySQL, pobierzemy narzędzie mysqltuner. Wystarczy w konsoli wklepać krótką komendę: cd /tmp wget mysqltuner.pl Następnie, nadajemy uprawnienia jako aplikacja: chmod a+x mysqltuner.pl Uruchamiamy aplikację poleceniem: perl mysqltuner.pl Narzędzie komunikuje się z nami w języku angielskim. W pierwszej kolejności, zapyta się o dane dostępowe do serwera MySQL: Please enter your MySQL administrative login: root Kolejny komunikat - pytanie o hasło (ustawialiśmy je podczas instalacji MySQL, pamiętacie? ) Please enter your MySQL administrative password: Utworzy się raport, mniej więcej w tym stylu: >> MySQLTuner 1.0.1 - Major Hayden <major@mhtx.net> >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with '--help' for additional options and output filtering Please enter your MySQL administrative login: root Please enter your MySQL administrative password: -------- General Statistics -------------------------------------------------- [--] Skipped version check for MySQLTuner script [OK] Currently running supported MySQL version 5.0.77 [OK] Operating on 32-bit architecture with less than 2GB RAM -------- Storage Engine Statistics ------------------------------------------- [--] Status: -Archive +BDB -Federated +InnoDB -ISAM -NDBCluster [!!] InnoDB is enabled but isn't being used [!!] BDB is enabled but isn't being used [OK] Total fragmented tables: 0 -------- Performance Metrics ------------------------------------------------- [--] Up for: 22m 21s (19 q [0.014 qps], 13 conn, TX: 8K, RX: 1K) [--] Reads / Writes: 100% / 0% [--] Total buffers: 34.0M global + 2.7M per thread (100 max threads) [OK] Maximum possible memory usage: 302.7M (29% of installed RAM) [OK] Slow queries: 0% (0/19) [OK] Highest usage of available connections: 1% (1/100) [OK] Key buffer size / total MyISAM indexes: 8.0M/67.0K [!!] Key buffer hit rate: 0.0% (1 cached / 1 reads) [!!] Query cache is disabled [OK] Temporary tables created on disk: 0% (0 on disk / 4 total) [!!] Thread cache is disabled [OK] Table cache hit rate: 50% (6 open / 12 opened) [OK] Open file limit used: 1% (12/1K) [OK] Table locks acquired immediately: 100% (13 immediate / 13 locks) [!!] Connections aborted: 30% -------- Recommendations ----------------------------------------------------- General recommendations: Add skip-innodb to MySQL configuration to disable InnoDB Add skip-bdb to MySQL configuration to disable BDB MySQL started within last 24 hours - recommendations may be inaccurate Enable the slow query log to troubleshoot bad queries Set thread_cache_size to 4 as a starting value Your applications are not closing MySQL connections properly Variables to adjust: query_cache_size (>= 8M) thread_cache_size (start at 4) W zaznaczonej na czerwono części wypisane są wszystkie elementy, które wymagają poprawek do stabilnej pracy serwera. Aby je wprowadzić, wpisujemy: vim /etc/my.cnf Jak posługiwać się vim? szukamy podanych wartości, które wymagają poprawek, zmieniamy i zapisujemy. (Patrz "Jak posługiwać się vim"). Odnośnik do komentarza
slawek481 Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 Instalacja panelu zarządzania serwerem Panel zarządzania serwerem, którego instalację opiszę, zwie się Virtualmin GPL. Jest to bardzo dobry panel, a przede wszystkim darmowy. (Oczywiście są płatne alternatywy - CPanel, DirectAdmin, Plesk [powyżej jednej domeny]). 1. Pobieramy skrypt instalacyjny na serwer: cd /tmp wget http://software.virtualmin.com/gpl/scripts/install.sh 2. Nadajemy uprawnienia instalacyjne: chmod a+x install.sh 3. Uruchamiamy instalator Virtualmin sh install.sh 4. Wyskoczy nam informacja o wersji i o systemach operacyjnych obecnie wspieranych: Welcome to the Virtualmin GPL installer, version 1.0.4 WARNING: The installation is quite stable and functional when run on a freshly installed supported Operating System, but upgrades from existing .wbm- based systems, or systems that already have Apache VirtualHost directives or mail users, will very likely run into numerous problems. Please read the Virtualmin Administrators Guide before proceeding if your system is not a freshly installed and supported OS. This script is not intended to update your system! It should only be used to install Virtualmin, on a supported OS. If you have previously installed Virtualmin via this script or the GPL version of this script, upgrades and updates should be handled within Virtualmin itself. Once Virtualmin is installed, you never need to run this script again. The systems currently supported by install.sh are: CentOS 4 and 5 on i386 and x86_64 Debian 4.0 and 5.0 on i386 and amd64 Ubuntu 8.04 LTS and 10.04 LTS on i386 and amd64 If your OS is not listed above, this script will fail. More details about the systems supported by the script can be found here: http://www.virtualmi...os-support.html Na pytanie: "Continue?" odpowiadamy wciskając y na klawiaturze, a następnie ENTER. 4. Wyskoczy nam pytanie o nazwę hosta. Wpisujemy np komputer.localhost, serwer.localhost, dowolną nazwę. Najlepiej, żeby było to z coś.localhost, żeby nie mylić domen lokalnych z domenami internetowymi. 5. Instalator przygotowywuje serwer do instalacji Virtualmin, instaluje zależności itd... 6. Gdy już konfiguracja systemu operacyjnego i zależności, instalator przejdzie do części właściwej - instalacji pakietu podstawowego Virtualmin. 7. W pewnym momencie wyskoczy to: -WARNING: Your ClamAV installation is OUTDATED! WARNING: Local version: 0.96 Recommended version: 0.96.1 \WARNING: getfile: daily-10678.cdiff not found on remote server (IP: 194.186.47.19) WARNING: getpatch: Can't download daily-10678.cdiff from database.clamav.net /WARNING: getfile: Error while reading database from database.clamav.net (IP: 199.184.215.2): Operation now in progress WARNING: getpatch: Can't download daily-10678.cdiff from database.clamav.net -WARNING: getfile: daily-10678.cdiff not found on remote server (IP: 209.209.47.66) WARNING: getpatch: Can't download daily-10678.cdiff from database.clamav.net WARNING: Incremental update failed, trying to download daily.cvd Zignorować - to tylko komunikat o zdezaktualizowanym antywirusie i niemożności aktualizacji. 8. Tadamm! Virtualmin zainstalowany. Logujemy się do niego przez https://ipserwera:10000/, login to root a hasło to hasło do konta root. Ważne! Pamiętajcie o https, Virtualmin nie pozwala na logowanie bez SSL. Należy też dodać certyfikat do wyjątków. Konfigurację Virtualmina opiszę w innym poradniku Odnośnik do komentarza
slawek481 Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 Zabezpieczanie serwera Opiszę tutaj kilka moim zdaniem najważniejszych rzeczy dotyczących bezpieczeństwa Waszego serwera. 1. Zmiana domyślnego portu logowania SSH. Boty próbujące dostać się do serwera przez SSH domyślnie przeszukują port 22. Aby się przed tym uchronić, należy zmienić port nasłuchu SSH. W konsoli wklepujemy: vim /etc/ssh/sshd_config Poszukujemy linijki: Port 22 Zmieniamy "22" na dowolną liczbę z przedziału >5000. Zapamiętaj to, co wpiszesz, gdyż od restartu SSH będziesz w Putty wpisywał nowy port! Dodatkowo: MaxAuthTries 6 Zmieniamy "6" na 3. Po 3 nieudanych próbach zalogowania serwer zamknie połączenie. Utrudnia to robotę botom, które metodą słownikową próbują odgadnąć hasło dostępu. Zapisujemy plik i restartujemy ssh: /etc/init.d/sshd restart 2. Jeżeli na naszym VPSie ma stać nie tylko strona/forum a np także serwer TeamSpeak, pod żadnym pozorem nie uruchamiamy go jako root! Należy stworzyć nowego użytkownika: adduser slawek481 nadać mu silne hasło: passwd slawek481 Wyskoczy nam: Changing password for user slawek481. New UNIX password: wpisujemy hasło. Retype new UNIX password: wpisujemy hasło ponownie. Jeśli po tym wszystkim ukaże nam się: passwd: all authentication tokens updated successfully. to znaczy, że hasło zostało ustanowione. Następnie logujemy się przez SSH na utworzonego przed chwilą użytkownika i majstrujemy 3. Instalacja fail2ban fail2ban jest skryptem, który banuje adres IP na ustaloną ilość czasu, po nieudanych próbach logowania do SSH i FTP. 1. Wklepujemy kolejno do konsolki jako root: cd /tmp wget http://superb-west.dl.sourceforge.net/sourceforge/fail2ban/fail2ban-0.8.1.tar.bz2 tar -xjvf fail2ban-0.8.1.tar.bz2 cd fail2ban-0.8.1 python setup.py install 2. Konfiguracja fail2ban. vim /etc/fail2ban/jail.conf Jako że nie chcemy banować samych siebie, wklepujemy tam coś takiego: ignoreip = 127.0.0.1 192.245.12.0/24 xxx.xxx.xx.x/19 xxx.xx.xxx.x/24 w miejsce xxxxxx wstawiamy swoje IP. Zaznacz tylko te chronione usługi, które tak naprawdę potrzebujesz. W naszym przypadku SSH i FTP. Zmieniamy enabled = na true w obu przypadkach. bantime = 600 Długość bana (w sekundach). findtime = 600 Po jakim czasie fail2ban ma zresetować liczbę nieudanych prób logowania. Przykład: Ktoś 2 razy źle wpisał hasło. Jeśli w ciągu 600 sekund ponownie źle wprowadzi hasło, zostanie zbanowany. Po 600 sekundach znowu będzie mógł dwa razy się pomylić. maxretry = 3 Maksymalna ilość prób logowania zanim IP zostanie zbanowane. Zalecam pozostawienie domyślnej wartości. To wszystko! Masz już skonfigurowany serwer z panelem do zarządzania, gotowy do stawiania stronki i zabezpieczony przed najprostszymi atakami :cheer: Odnośnik do komentarza
Rekomendowane odpowiedzi