Sprawa wygląda następująco… sam jestem administratorem serwera od miesiąca i z lepszymi/gorszymi efektami ale daję sobie rade ale – jestem jeszcze początkującym administratorem-amatorem. Poniższy tekst przedstawia PODSTAWOWĄ konfigurację serwera aby działał i działał bezpiecznie – mam taką nadzieję, że tak jest :P. Jest to konfiguracja dla jednego użytkownika. Jak wspomniałem wyżej jestem jeszcze amatorem w tym zakresie.. ale dzięki temu napiszę to też takim językiem, że każdy powinien to zrozumieć (mam taką nadzieje :P).
Decyzja
Pierwsze i najważniejsze to musimy sobie odpowiedzieć na pytanie czy serwer dedykowany jest nam naprawdę potrzebny. Druga sprawa równie ważna: Czy umiem sobie poradzić sam z instalacją i konfiguracją windowsa i z jego obsługa, czy komputery są dla mnie „łatwe” czy to czarna magia. A trzecie: Czy nie boję się używać linuksa. Jak na wszystkie trzy *pytanie* twoja odpowiedź brzmi tak, przejdź do dalszej części tego tekstu.
Wybór
Wybór serwera dedykowanego w dużej mierze zależy od funduszy jakimi dysponujemy oraz naszych potrzeb. Ja osobiście korzystam z serwerów OVH i mogę je polecić. Nic lepszego w takiej cenie nie znajdziecie.
Ale jak nie macie doświadczenia w administrowaniu serwerem, a jak czytacie co tu pisze to tak właśnie jest, zalecam potrenowanie najpierw na VPS. Jest to „kilka serwerów dedykowanych” na jednej maszynie, nazwijmy to w ten sposób. Serwer dedykowany w tym wypadku dzielony jest na kilku użytkowników dla których jest przydzielana odpowiednia ilość zasobów tej maszyny z której ten user może korzystać i działa to podobnie do dedyka. Jedną z tańszych ofert możecie znaleźć na tej stronie http://webh.pl/index.php?cmd=svps
Pamiętajmy o jednym – wybierając dystrybucje linuksa na nasz serwer wybierajmy tą która jest najbardziej popularna i najlepiej, jak mamy jakieś pojęcie o niej :) ! Polecam Debiana albo Ubuntu Server. Poradnik napisany jest dla Ubuntu Server, ale dla Debiana będzie się różnił bardzo niewiele.
No to mamy już zamówiony VPS. Dostajemy już na maila dane do zalogowania się na nasz serwer i teraz zaczynamy zabawę :). Zaczynamy od ściągnięcia programu Putty – z oficjalnej strony, bądź tez z mojego mirrora. Po pobraniu włączamy program. Naszym oczom ukaże się takie o to okienko
W Host Name wpisujemy adres naszego serwera, jako protokół wybieramy SSH. Dodatkowo możemy nadać naszej sesji jakąś nazwę (Saved Sesion) i klikamy na Save. Po tych wstępnych czynnościach nie pozostanie nam nic innego jak kliknąć na Open.
Wyskoczy nam okienko aby podać login i hasło. I tutaj uwaga. Podczas wpisywania hasła na ekranie nie będzie się nic pojawiać. Tak ma być, wszystko jest OK. Po zalogowaniu się na serwerze możemy przystąpić do pracy.
Pomyślmy pierw czego będziemy potrzebowali. Na pewno dostępu przez ftp oraz serwera www, a z serwerem www idą w parze mysql i php. Ale zacznijmy od początku :). Bo na początku potrzebujemy użytkownika dla siebie, pamiętajmy że na roota wchodzimy tylko gdy jest to nie zbędne… nic wtedy nie zepsujemy :P. więc tworzymy użytkownika poleceniem
-
adduser nazwa_uzytkownia
Apache+mysql+php
Okey, więc czas na instalację apache+mysql+php. Wpisujemy komendę.
-
apt-get install apache2
i czekamy aż się zainstaluje apache. Kolejną komendą jest:
-
apt-get install php5
po zainstalowaniu php czas na mysql do konsoli wklepujemy
-
apt-get install mysql5-server mysql5-client
po zainstalowaniu:
-
mysqladmin -u root password twoje_haslo
gdzie w twoje haslo wpisujesz swoje haslo, do szczęścia jeszcze nam brakuje:
-
apt-get install libapache2-mod-auth-mysql
który to moduł odpowiada za współpracę apache2 z mysql. Teraz czas na php
-
apt-get install php5-mysql
Teraz jak mamy już wszystko zainstalowane należy zrestartować apache. Wklepujemy w terminal:
-
/etc/init.d/apache2 restart
Huh… i po krzyku :). Tylko że, to co zrobiliśmy… to jak na razie tylko zainstalowanie, została nam jeszcze konfiguracja. Domyślnym katalogiem www w którym apache szuka stron www to /var/www ale jak się tam dostać? Zostawimy na razie konfigurację www i przejdziemy do zainstalowania jakiegoś serwera ftp.
Ftp
Skorzystamy z programu ProFTPd. Wklepujemy w konsolę
-
apt-get install proftpd
Przy instalacji wybieramy standalone i w zasadzie już mamy działający serwer ftp. – możesz się logować na konto usera które zrobiliśmy parę akapitów wyżej. Domyślnie w ProFTPd możesz się logować do każdego usera w systemie, oprócz roota. Logując się przez ftp kierujemy się do naszego katalogu domowego czyli /home/nazwa_usera. No dobra.. ale teraz zapytasz się jak mam wrzuć swoją strone/portal. Zrobimy to w prosty sposób. Utwórz w swoim katalogu domowym katalog www poleceniem
mkdir wwwpamiętajmy że musimy być w naszym katalogu domowym. W tym wypadku poruszamy się po konsoli która polecenia ma jak DOS. Czyli aby wejść do katalogu cd katalog aby wyjść cd .. aby zobaczyć listę plików/katalogów w folderze ls. Ale możemy się posłużyć również darmowym linuksowym commanderem. Wpisz w konsole: mc. Jak dostaniesz komunikat, że program nie zainstalowany posłuż się jak już wiesz poleceniem:
-
apt-get install mc
no i po instalacji mc. Jak widzisz.. jest już prościej :). No dobra.. ale jak robimy ten myczek katalogiem www. Jak już zrobiliśmy katalogów www wpisujemy w konsole.
-
nano /etc/fstab
i uwaga.. NIC NIE ZMIENIAMY Z ISTNIEJĄCYCH WPISÓW. Przechodzimy do nowej linii i dodajemy:
-
/home/twoj_user/www /var/www none bind 0 0
aby zapisać zmiany ctrl+o i wyjsc ctrl+x (jeżeli gdzieś zobaczysz w opisie polecenia ^X oznacza to skrót ctrl+x). Teraz wklepujemy w konsoli
-
mount -a
To co zrobiliśmy to zmapowaliśmy oba foldery www. Teraz to wszystko co wrzucisz go home/twoj_user/www znajdzie się również na /var/www.
To teraz czas na kolejne kroki.. czyli konfigurację tego wszystkiego :). Zaczniemy tym razem od tyłu czyli od ftp.
Cala konfiguracja naszego ftp siedzi w pliku /etc/proftpd/proftpd.conf i jego będziemy edytować.
-
nano /etc/proftpd/proftpd.conf
i zmieniamy:
-
ServerName „nasza_nazwa_serwera”
usuwamy # przy
-
DefaultRoot i PassivePorts.
Przy Umask ustawiamy wartości:
-
002 002
AllowOverwrite ustawiamy na on a dodajemy:
-
AllowRetrieveRestart on
-
AllowStoreRestart on
i zapisujemy nasz plik. W zasadzie jak nie ruszaliśmy domyślnego katalogu apache możemy go na razie ominąć. Kolejną rzeczą jest sprawa uprawnień. System uprawnień linuksa jest podzielony na: Właściciel Grupa Świat. Co obrazuje zapis uprawnień w postaci 3 cyfr, np. 775. Odsyłam do google jak nie wiecie o co dokładnie chodzi. :). To teraz się wyjaśni co to ta nasza opcja Umask w konfiguracji daje… otóż jej wartość to 002 i 002 – jest odpowiednio do uploadowanych katalogów i plików i oznacza ona że nasze pliki i katalogi będą z prawami 775. A to z kolei oznacza, że Właściciel ma pełne prawa, Grupa ma pełne prawa a Świat może oglądać i tego właśnie potrzebujemy. Instalując apache uruchamia się on jako użytkownik www-data w grupie www-data. Zaś nasz użytkownik jest jako użytkownik: twój_user i w grupie twój_user. Jak byśmy teraz w grali nasze pliki do katalogu www dostalibyśmy błąd 403 – Brak uprawnień. Co właśnie wynika z tego że apache nie ma uprawnień do czytania/wykonywania plików które wrzuciłeś do katalogu www. No to trzeba to poprawić. Wszystkie informacje na temat grup są w /etc/group a więc do dzieła.
-
nano /etc/group
Edycja tego pliku jest bardzo prosta. Mianowicie ma on postać: grupa:x:user,user2 więc dodajemy wpisy do grup www-data i twój_user. Do www-data dodajemy twój_user a do grupy twój_user użytkownika www-data. I po problemie. Twoja strona powinna już śmigać.
Firewall
Teraz trzeba troszkę zabezpieczyć nasz serwer. Do tego celu posłużymy się firewallem na bazie iptables którego samemu napiszemy :) Najpierw przeczytaj wszystkie akapity związane z firewallem nim zaczniesz coś robić! firewall start. Tworzymy skrypt poleceniem:
-
touch /etc/init.d/firewall && chmod +x /etc/init.d/firewall && nano -w /etc/init.d/firewall
co spowoduje nam utworzenie pliku, nadanie odpowiednich uprawnień i otworzenie go w edytorze. Do pliku kopiujemy:
-
#!/bin/sh
-
iptables -F
-
iptables -X
-
iptables -t nat -X
-
iptables -t nat -F
-
iptables -A INPUT -i lo -j ACCEPT
-
iptables -A FORWARD -o lo -j ACCEPT
-
iptables -P INPUT DROP
-
iptables -P FORWARD DROP
-
iptables -P OUTPUT ACCEPT
-
iptables -A INPUT -j ACCEPT -m state –state ESTABLISHED,RELATED
-
iptables -A FORWARD -j ACCEPT -m state –state ESTABLISHED,RELATED
-
-
iptables -A INPUT -p icmp –icmp-type 8 -j ACCEPT
-
-
iptables -A INPUT -s 0/0 -p tcp –dport 80 -j ACCEPT
-
iptables -A INPUT -s 0/0 -p udp –dport 80 -j ACCEPT
-
-
iptables -A INPUT -s 0/0 -p tcp –dport 22 -j ACCEPT
-
iptables -A INPUT -s 0/0 -p udp –dport 22 -j ACCEPT
-
-
iptables -A INPUT -s 0/0 -p tcp –dport 20:21 -j ACCEPT
-
iptables -A INPUT -s 0/0 -p udp –dport 20:21 -j ACCEPT
-
iptables -A INPUT -s 0/0 -p tcp –dport 49152:65534 -j ACCEPT
-
iptables -A INPUT -s 0/0 -p udp –dport 49152:65534 -j ACCEPT
zapisujemy i wychodzimy. Co nam daje ten skrpyt? Skrypt ten zamyka wszystkie porty i otwiera 80 (www) 22 (ssh) 20 i 21 (ftp) i 49152:65534 (passiv ftp – zgodnie z configiem ProFTPd) a dzięki –icmp-type 8 nasz serwer będzie odpowiadał na polecenie ping. Okey.. to teraz zostało nam nasz firewall uruchomić poleceniem:
-
/etc/init.d/firewall.
I teraz.. sprawdźmy czy: www chodzi, do ftp da się zalogować, serwer odpowiada na pingi i czy po wylogowaniu możemy się zalogować do shella. Jak tak.. nic nie sknociliśmy i możemy wpisać w konsoli:
-
update-rc.d firewall defaults 90
spowoduje to dodania naszego skryptu do auto startu… od teraz firewall będzie zawsze aktywny :)
Fail2ban
No to mamy już pozamykany porty, jeszcze może przydałoby się coś do pilnowania czy przypadkiem ktoś nie próbuje się nam na chama zalogować do ssh lub ftp. Do tego celu wykorzystamy program fail2ban.
-
apt-get install fail2ban
Cała konfiguracja jest w /etc/fail2ban/jail.conf
-
nano /etc/fail2ban/jail.conf
do ignoreip dodajmy nasz adres ip, z którego będziemy korzystać aby administrować serwerem. Dlaczego dodajmy go tu? Sam się naciąłem, że mi fail2ban dał bana na godzinę ponieważ źle wpisywałem hasło.. no cóż jak się człowiek śpieszy to się mogą pomylić klawisze na klawiaturze, ale że ja admin to mi wolno.. :P dalej przechodzimy do sekcji [ssh]
maxretry=ilość_prób_zanim_ban
bantime=ilość_sekund_trwania_bana np. – 3600 to godzin, kiedy nie ma bantime to dodajmy ten wpis. Teraz czas na serwer ftp. Przechodzimy do sekcji [proftpd].
Enabled = true a reszta tak jak przy ssh. Zapisujemy konfiguracje i
-
/etc/init.d/fail2ban restart
i już po bólu.. nasz serwer działa i jest wstępnie zabezpieczony.. można iść spać :)
Pingback: webh.pl - lekko zawiedziony | Krecikowy Blog