Konfiguracja serwera cz.5

execPrzedstawiam Wam przedostatnią część mojego poradnika konfiguracji serwera w jeden dzień. W ostatniej części opiszę w jaki sposób monitorować system obserwując co mu może dolegać.

W dzisiejszej piątej części poruszę temat instalacji/konfiguracji postfix, proftpd i eacceleratora.
Po tej części można powiedzieć, że będziemy mieć w pełni działający serwer, któremu nic nie brakuje (oprócz odbierania poczty (POP3/SMTP) przez www).

Czekam także na dalsze komentarze od Was :) Dostaję sporo emaili z pochwałami oraz pytaniami o kolejne części. Dziękuję bardzo za wsparcie oraz te miłe słowa uznania. Poradnik robię dla Was, dzięki Wam!

Dodatkowe składniki
Serwer bez tych dodatkowych składników może i będzie funkcjonować bez żadnego zająknięcia. Jednak jeśli chcemy mieć serwer taki, jak w innych firmach hostingowych to musimy doinstalować jeszcze trochę oprogramowania do pełnego wykorzystania naszych aplikacji internetowych.
W tym dziale opiszę więc instalację/konfigurację: postifix, proftpd, eaccelerator, gzip.

Postfix
Postfix jest niezbędnym pakietem do podstawowej obsługi poczty na serwerze. Dzięki niemu będziemy mogli wysyłać email z poziomu PHP poprzez wbudowaną funkcję mail().

# apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules procmail

UWAGA !!
Niektóre pakiety mogą nie występować w starszych wersjach Debiana. Przypominam, że poradnik oparty jest na systemie Debian 5.0.

Przy instalacji wyskoczy monit o podanie kilku wartości, które zostaną zapisane do konfiguracji.

General type of mail configuration:
System mail name:

W pierwszym zapytaniu proszę wybrać „Internet Site„, a w drugim wpisać nazwę głównej domeny na serwerze – w moim przypadku jest to po prostu „ania.li„.

Kiedy instalacja definitywnie się zakończy, należy oprócz tych podstawowych dwóch opcji ustawić także inne.
Wpisujemy więc normalnie w konsoli:

# dpkg-reconfigure postfix

I ponownie zostaniemy zapytani o kilka pytań. Większość pól powinna być już poprawnie uzupełniona. Odpowiadamy wg wzorca podanego przeze mnie (z prawej strony umieściłem sugerowaną odpowiedź).

General type of mail configuration: [Internet Site]
System mail name: [ania.li]
Root and postmaster mail recipient: [zostaw puste]
Other destinations to accept mail for (blank for none): [ania.li, localhost.ania.li, localhost.localdomain, localhost]
Force synchronous updates on mail queue? [No]
Local networks: [127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128]
Use procmail for local delivery? [Yes]
Mailbox size limit (bytes): [0]
Local address extension character: [+]
Internet protocols to use: [all]

Zwróćcie uwagę na:

  • „Other destinations to accept mail for (blank for none)” – w dokumencie nie zmieściła mi się odpowiedź w jednej linijce, ale Wy zapiszcie to razem.
  • „Local networks” – dodatkowe kwadratowe nawiasy wewnątrz odpowiedzi oznaczają adresację IPv6. Nie pomijajcie ich – zapiszcie dokładnie tak jak zostało pokazane.

Następnie wykonaj takie polecenia:

# postconf -e 'smtpd_sasl_local_domain =’
# postconf -e 'smtpd_sasl_auth_enable = yes’
# postconf -e 'smtpd_sasl_security_options = noanonymous’
# postconf -e 'broken_sasl_auth_clients = yes’
# postconf -e 'smtpd_sasl_authenticated_header = yes’
# postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination’
# postconf -e 'inet_interfaces = all’
# echo 'pwcheck_method: saslauthd’ >> /etc/postfix/sasl/smtpd.conf
# echo 'mech_list: plain login’ >> /etc/postfix/sasl/smtpd.conf

6 (słownie: szóste) polecenia od góry także nie zmieściło się w całości w linijce w dokumencie. Zwróćcie na nie proszę uwagę, aby nie wystąpiły żadne błędy przy wykonaniu jego. Można na przykład skopiować całość do swojego ulubionego edytora tekstu (typu: Notatnik, Gedit, Kate), usunąć zbędne przejścia do nowej i wtedy całość wkleić do konsoli.

Następnie musimy stworzyć certyfikat dla TLS:

# mkdir /etc/postfix/ssl
# cd /etc/postfix/ssl/
# openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024

W tym i każdym innym wywołaniu polecenia „openssl” zostaniemy zapytani o „hasło”. Ja przywykłem podawać tam dowolny ciąg znaków, ale nie moje hasło systemowe. W każdym poleceniu identyczny klucz podaję, ponieważ sam do końca nie wiem od czego zależą te polecenia.

# chmod 600 smtpd.key
# openssl req -new -key smtpd.key -out smtpd.csr

# openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt

# openssl rsa -in smtpd.key -out smtpd.key.unencrypted

# mv -f smtpd.key.unencrypted smtpd.key
# openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

Następnie musimy skonfigurować Postfix, aby korzystał z TLS.

# postconf -e 'myhostname = ania.li’

UWAGA!!
Upewnij się, że zamiast ania.li wprowadziłeś swoja nazwę domeny.

# postconf -e 'smtpd_tls_auth_only = no’
# postconf -e 'smtp_use_tls = yes’
# postconf -e 'smtpd_use_tls = yes’
# postconf -e 'smtp_tls_note_starttls_offer = yes’
# postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key’
# postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt’
# postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem’
# postconf -e 'smtpd_tls_loglevel = 1′
# postconf -e 'smtpd_tls_received_header = yes’
# postconf -e 'smtpd_tls_session_cache_timeout = 3600s’
# postconf -e 'tls_random_source = dev:/dev/urandom’

Konfiguracja już skończona. Aby zobaczyć jak wygląda plik konfiguracyjny postfixa, to można go podejrzeć w lokalizacji: /etc/postfix/main.cf
I radzę to zrobić – choćby dlatego, aby przejrzeć jego wartości dla jakiej domeny został ustawiony.

Autoryzacja serwera, który wysyła email jest poprzez saslauthd. Musimy zatem zmienić kilka rzeczy, aby Postfix działał poprawnie, ponieważ obecnie jest w chrootowanym środowisku w /var/spool/postfix.

# mkdir -p /var/spool/postfix/var/run/saslauthd

Następnie musimy włączyć syslauthd w jego pliku konfiguracyjnym.

# vim /etc/default/saslauthd

UWAGA!!
Jeśli otwarty plik jest pusty:
Na parę przypadków instalowania postfix zauważyłem, że na niektórych serwerach był, a na niektórych nie był zainstalowany plik saslauthd. Dlatego otwierając ten plik w celu zmiany START i OPTIONS uzyskiwałem pusty plik – wynik braku domyślnego pliku pakietu.
Aby naprawić te braki należy zainstalować:

# apt-get install sasl2-bin libsasl2-2 libsasl2-modules

I ponownie otworzyć plik w celu jego edycji.

Zmień jego domyślne wartości START i OPTIONS na następujące:

#Should saslauthd run automatically on startup? (default: no)
START=yes

#OPTIONS=”-c -m /var/run/saslauthd”
OPTIONS=”-c -m /var/spool/postfix/var/run/saslauthd -r”

Zamykamy, zapisując plik i wykonujemy kolejną komendę:

# adduser postfix sasl

I po tym restartujemy oba deamony

# /etc/init.d/postfix restart
# /etc/init.d/saslauthd restart

Czy działa Postfix?
Sprawdzimy teraz, czy wysyłanie email działa poprawnie. Najpierw rzucimy okiem w systemie, czy wszystko jest uruchomione, a potem wykonamy prosty test z użyciem mail() w PHP.

# telnet localhost 25

UWAGA!!
Tutaj także możemy nie mieć odpowiedniego pakietu do telnetu. Instalacja jego jest banalnie prosta:

# apt-get install telnet

Kiedy połączenie będzie już ustanowione z Twoim Postfix’em, to w konsoli wpisz:

ehlo localhost

Jeśli zobaczysz:

250-STARTTLS
250-AUTH LOGIN PLAIN

To znaczy, że wszystko działa. W moim przypadku na ekranie zobaczyłem:

Trying 127.0.0.1…
Connected to localhost.
Escape character is '^]’.
220 ania.li ESMTP Postfix (Debian/GNU)
ehlo localhost
250-ania.li
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Aby wyjść z linii komend telnetu wpisz „quit”.

Czy działa mail()?
Teraz pora na test, czy email dochodzą na naszą prawdziwą skrzynkę email.
Proponuję skorzystać ze skrzynki http://poczta.o2.pl/ – nigdy nie miałem z nią problemów przy takim testowaniu. Niestety, ale Gmail nie zawsze ufa nowym serwerom pocztowym i wiadomości mogą do niego nie dochodzić.

Stwórz więc plik PHP do którego będziesz mógł się dostać z poziomu przeglądarki www, wpisując odpowiedni adres.
Zakładam, że nie masz jeszcze podczepionej żadnej domeny, więc dostęp do strony będzie odbywać się poprzez adres IP serwera. W związku z tym testowy plik musisz umieścić w /var/www.

$ vim /var/www/mail-test.php

W pliku umieśćcie taki kod:

$Name = „Moj serwer”; //nazwa adresata
$email = „[email protected]”; //email adresata
$recipient = „[email protected]”; //email odbiorcy
$mail_body = „Dziala mi wysylanie email”; //Tresc wiadomosci
$subject = „BlueMan.pl – test funkcji email”; //Temat wiadomosci
$header = „From: „.$Name.” <„.$email.”>rn”; //naglowki

if ( mail($recipient, $subject, $mail_body, $header) )
echo 'Email wyslano’;
else
echo 'Blad – nie można wyslac wiadomosci’;
?>

A następnie uruchomcie go wpisując w przeglądarkę:
http://twoj-adres-IP/mail-test.php
Niemalże od razu na skrzynkę powinniście dostać wiadomość. Jeśli tak się nie dzieje, i przez najbliższe max 3 godz także nic nie dostaliście to może to oznaczać dwa problemy:

  1. Źle zainstalowałeś/skonfigurowałeś swojego deamona
  2. Twój adres IP jest na światowej czarnej spam-liście.

Jeśli test uda się dla o2.pl sprawdźcie także dla innych skrzynek. Jak zawsze najbardziej problematyczny jest Gmail.com ;)

Może się też tak zdarzyć, że chcąc uruchomić serwer w domu, który ma zewnętrzne IP, ale korzystacie z internetu dostarczanego przez jakiegoś lokalnego providera (kablówka, etc.), to cała pula adresów tego usługodawcy jest dodana do czarnej spam-listy.

the-spamhaus-project-pbl-the-policy-block-list_1243073822376

http://www.spamhaus.org/pbl/ – tutaj możecie sprawdzić, czy Wasz IP znajduje się na niej. Można także wypełnić wniosek wniosek o odblokowanie adresu IP.
Zdarzyło mi się, że dwa razy moje adresy IP były uznane jako SPAM, ale po wypełnieniu wniosku, na następny dzień blokada ta została usunięta.
Gmail i inne skrzynki zaczęły odbierać email odemnie i już nie miałem z tym problemów. Jednak systematycznie sprawdzam, czy oby nie powrócił mój adres na ich listę – może się tak zdarzyć, więc miejcie to na uwagę. Tym bardziej, że przez pierwszy okres po odbanowaniu serwis sprawdza, czy nie robimy jakiś niekoszernych rzeczy na tym IP w związku z wysyłaniem email – miejcie się na baczności :)

ProFTPd
Najbardziej popularny (o ile nie monopolista) serwer FTP który można zainstalować na naszym serwerze. Można, ale nie trzeba – wystarczy ściągnąć program WinSCP i dzięki niemu przeglądać i uploadować pliki na serwer. Jednakże, niektóre aplikacje PHP chcą, aby podać im także dane dostępowe do FTPa (np. WordPress, SMF) w momencie instalowania nowych dodatków.

Instalacja tego programu sprowadza się tylko i wyłącznie do dwóch kroków:

# apt-get install proftpd

W zależności jak często będziemy korzystać z serwera FTP wybierzmy opcję, która bardziej nam odpowiada – standalone lub inted.

Następnie dodajmy 3 wpisy do pliku konfiguracyjnego:

DefaultRoot ~
IdentLookups off
ServerIdent on „FTP Server ready.”

Niektórzy jeszcze zmieniają port na którym FTP będzie działać. Jest to dodatkowy ukłon w stronę bezpieczeństwa, ale ja się do niego nie stosuję.

Pozostaje więc tylko zrestartować FTP, aby działał z nowymi ustawieniami

# /etc/init.d/proftpd restart

Eaccelerator
Dzięki temu dodatkowi do PHP, część skryptów będzie w jakiś automagiczny sposób cachowana. Uzyskamy w ten sposób bardzo duże przyśpieszenie wczytywania się stron, poprzez skrócenie czasu generowania wynikowego kodu z PHP.

http://eaccelerator.net/ – strona główna projektu.

Jak widzicie ostatnia wersja (0.9.5.3) wyszła w maju 2008 roku. Ale nie martwcie się – działa z wszystkimi wersjami PHP (obecnie najnowsza 5.2.9).

Instalacja jest bardzo prosta i została wystarczająca wyjaśniona na stronie projektu ( http://eaccelerator.net/wiki/InstallFromSource ). Ja napiszę to jeszcze raz, ale po polsku i na końcu wyjaśnię jedną ważną rzecz.

Na początku stwórzmy w /var/www plik w którym sprawdzimy czy mamy i czy poprawnie zainstalowaliśmy.

# vim /var/www/phpinfo.php

phpinfo();
?>

Po wywołaniu tego pliku w przeglądarce uzyskamy znany wszystkim ekran wartości jakimi posługuje się nasza instalacja PHP5.
Nasz interesuje „stopka” tuż pod pierwszą tabelką.

php1

Ale ani słowa w niej (ani całym pliku), że korzystamy z eAccelerator. Pora więc go zainstalować. Niestety, ale nie ma gotowej paczki dla systemu Debian i będziemy musieli ręcznie to wykonać. Zanim jednak zainstalujemy główny pakiet, musimy uzupełnić nasz system o inne niezbędne składniki.

# apt-get install build-essential php5-dev

Po tym możemy już zainstalować główną paczkę eAccelerator:

# cd /tmp
# wget http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2
# tar xvfj eaccelerator-0.9.5.3.tar.bz2
# cd eaccelerator-0.9.5.3
# phpize
# ./configure
# make
# make install

Cacher został już zainstalowany. Teraz pora powiedzieć o tym PHP, aby zaczął go używać.
Pliki konfiguracyjne PHP5 w systemie Debian Lenny są w /etc/php5/conf.d/ i właśnie tam powinniśmy utworzyć dodatkowy plik z opcjami eAccelerator’a.

# vim /etc/php5/conf.d/eaccelerator.ini

extension=”eaccelerator.so”
eaccelerator.shm_size=”16″
eaccelerator.cache_dir=”/var/log/eaccelerator”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=””
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”0″
eaccelerator.shm_prune_period=”0″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″

Opis poszczególnych opcji konfiguracyjnych znajduje się na stronie producenta: http://www.eaccelerator.net/wiki/Settings

Zapisujemy i wychodzimy z pliku.
W 3 linijce podałem ścieżkę, gdzie skompresowane pliki PHP będą umieszczone. Możesz podać tam dowolną ścieżkę na dysku – ważne, aby lokalizacja ta istniała i miała pełne prawa (chmod 777), ponieważ eAccelerator nie stworzy jej sobie sam.

Aby utworzyć odpowiedni katalog dla cachera wykonaj polecania:

# mkdir -p /var/log/eaccelerator
# chmod 0777 /var/log/eaccelerator

Po tym wszystkim zrestartuj serwer Apache, aby nowa konfiguracja PHP została wczytana.

# /etc/init.d/apache2 restart

I odśwież poprzednio oglądaną stronę w przeglądarce pod adresem phpinfo.php.
Powinieneś zobaczyć różnice w stopce, oraz dodatkowe opcje konfiguracyjne dla cachera.

php2

Teraz możemy być pewni, że działa nasz eAccelerator.

Ciekawscy mogą jeszcze sprawdzić jakie katalogi stworzył sobie cacher w /var/log/eaccelerator/. Powinniście ujrzeć 16 katalogów (0-9 oraz a-f).

Z ciekawostek napiszę, że eaccelerator zainstalowany u mnie na serwerze 5 lutego 2009 do dzisiaj wygenerował 1.4GB skompresowanych plików PHP.

UWAGA!!
Jeśli przyjdzie nam aktualizować PHP do nowszej wersji, to musicie się także przygotować do ponownej kompilacji eAcceleratora. Najlepiej wtedy wykonać wszystkie kroki w tym rozdziale od początku – usuwając stare pliki w /tmp.

Pełny kurs dostępny jest także w formie dokumentu PDF:
pdf icon big Podstawowa konfiguracja serwera dedykowanego/VPS

W kolejnej części:
Monitorowanie serwera i stron (munin, webalizer)