Serwer poczty z www w 15 minut (postfix, dovecot, roundcube)

Konfiguracja serwerów, usług, itp.
dhapollo
Beginner
Posty: 168
Rejestracja: 12 czerwca 2010, 14:10
Lokalizacja: Warszawa

Serwer poczty z www w 15 minut (postfix, dovecot, roundcube)

Post autor: dhapollo »

Przedstawiam Wam sposób na uruchomienie prostego serwera poczty, opartego o konta systemowe z dostępem przez www. Sprawdzić się może jako serwer domowy lub jako serwer w małej firmie.

Jeśli cokolwiek nie działa proszę napisać będziemy walczyć aż do skutku, ale powinno działać wszystko. Oczywiście wszystkie uwagi z uzasadnieniem są mile widziane.

U mnie dziaał to na urządzeniu terminalowym (nie mylić z komputerem czy serwerem).

Parametry tego urządzenia to:
[INDENT]Procesor 500MHz
Ram 128MB
Dysk - BRAK
USB -> pendrive 8BG zamiast dysku twardego
System Debian 6[/INDENT]

Jak widać sprzęt to istna rakieta z przed dwóch dekad.

Od czego zacząć? Od instalacji Debiana, gdzieś na forum opis jak to zrobić (oczywiście w trybie tekstowym).

Po zainstalowaniu nasz system jest uzbrojony w system plików exim4, którego usuwamy poleceniem:

Kod: Zaznacz cały

apt-get autoremove --purge exim4
Teraz instalujemy potrzebne pakiety:

Kod: Zaznacz cały

aptitude -y install postfix postfix-tls sasl2-bin ssh mc unzip

Wydajemy polecenie, które nam pobierze gotową konfigurację:

Kod: Zaznacz cały

wget http://cosinus.waw.pl/postfix/postfix.zip



Za pomocą mc (bo wygodniej) usuwamy wszystko z katalogu /etc/postfix i kopiujemy zawartość naszego pobranego archiwum (mc je otwiera).

Instalujemy kolejny wynalazek, magicznym poleceniem:

Kod: Zaznacz cały

aptitude -y install dovecot-common dovecot-pop3d dovecot-imapd 
i pobieramy gotowy plik zip z konfiguracją:

Kod: Zaznacz cały

wget http://cosinus.waw.pl/postfix/dovecot.zip

Następnie z pomocą mc, czyścimy zawartość katalogu /etc/dovecot i kopiujemy tam zawartość archiwum dovecot.zip.

Teraz musimy podmienić nazwy naszej domeny w pliku /etc/postfix/main.cf

Kod: Zaznacz cały

mcedit   /etc/postfix/main.cf

linijka 76

Kod: Zaznacz cały

myhostname = mail.twoja.domena.pl
linijka 83

Kod: Zaznacz cały

mydomain = twoja.domena.pl
linijka 268 zmieniamy na swoje ip z sieci lokalnej

Kod: Zaznacz cały

mynetworks = 127.0.0.0/8, 192.168.125.0/24
linijka 677 doprowadzamy do poniższej postaci

Kod: Zaznacz cały

smtpd_client_restrictions = permit_mynetworks,permit

Następnie wydajemy polecenia:

Kod: Zaznacz cały

newaliases 
/etc/init.d/postfix restart 
/etc/init.d/dovecot restart 

Konta pocztowe dodajemy, tak jak systemowe, czyli:

Kod: Zaznacz cały

adduser nazwa_użytkownika
Dodajemy obsługę poczty przez www.

Instalujemy kolejne pakiety poleceniem

Kod: Zaznacz cały

apt-get inatall -y apache2 mysql-server php5 phpmyadmin
oraz

Kod: Zaznacz cały

apt-get install -y roundcube-mysql roundcube-core roundcube

Edytujemy plik /etc/hosts do poniższej postaci

Kod: Zaznacz cały

mcedit /etc/hosts

Kod: Zaznacz cały

127.0.0.1       localhost
127.0.0.1       mail.domena.pl domena.pl mail

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
oraz plik /etc/hostmame

Kod: Zaznacz cały

mcedit /etc/hostname
w którym usuwamy obecna nazwę i wpisujemy

Kod: Zaznacz cały

mail

Edytujemy ostatni plik /etc/roundcube/apache.conf:

Kod: Zaznacz cały

mcedit /etc/roundcube/apache.conf
gdzie w 3 i 4 linijce zmieniamy wpisy na:

Kod: Zaznacz cały

Alias /poczta/program/js/tiny_mce/ /usr/share/tinymce/www/
Alias /poczta /var/lib/roundcube

Wykonujemy restart systemu

Kod: Zaznacz cały

reboot

Po uruchomieniu się systemu nasz panel www dostępny jest pod adresem:

Kod: Zaznacz cały

[URL]http://domena.pl/poczta[/URL]

Jeśli dobrnąłeś aż dotąd to dobry znak, są duże szanse, że wszystko działa.

Proszę o wpisanie opinii i spostrzeżeń, Was to nic nie kosztuje a zachęca do rozwijania tematu i pisania kolejnych poradników

Pozdrawiam
dhapollo


Dodane:
Dodajemy obsługę logowania użytkowników na podstawie bazy danych mysql i dodawanie kont przez www

Dodawanie kont systemowych jest dosyć niewygodne dlatego dodałem sobie obsługę kont przechowywanych w mysql. Potrzebne nam są dodatkowe pakiety apache2, mysql-server, php5 phpmyadmin. Instalujemy wszystko wydając jedno polecenie:

Kod: Zaznacz cały

apt-get install -y apache2 mysql-server php5 phpmyadmin

Po zainstalowaniu pakietów pobieramy gotowy plik z konfiguracją dovecot-sql.zip i podmieniamy calutką zawartość katalogu /etc/dovecot/ na tą co jest spakowana zipem.

Kod: Zaznacz cały

wget http://cosinus.waw.pl/postfix/dovecot-sql.zip
Teraz musimy utworzyć sobie bazę danych, w której będziemy przechowywać swoje konta pocztowe. W tym celu otwieramy phpmyadmina i importujemy zawartość pliku mail.sql, w czasie importu zostanie utworzona baza danych z dwoma testowymi kontami, które należy usunąć lub zamienić na swoje już istniejące konta.
Pozostało nam teraz utworzyć nowego użytkownika bazy danych, również z poziomu phpmyadmina, klikamy zakładkę uprawnienia i zakładamy nowego użytkownika z hasłem jakim chcemy. Następnie znowu klikamy na zakładkę uprawnienia i edytujemy naszego użytkownika przyznając mu prawa do bazy mail (wszystkie). Po zapisaniu zmian ponownie klikamy uprawnienia, a następnie: przeładuj uprawnienia.

Jak się dostać do phpmyadmina?

Kod: Zaznacz cały

http://domena.pl/phpmyadmin



Pozostała do wykonania ostatnia rzecz, czyli podanie danych, z pomocą których ma się logować nasz serwer do poczty w celu pobrania danych. W tym celu edytujemy plik /etc/dovecot/dovecot-sql.conf wydając polecenie:

Kod: Zaznacz cały

mcedit /etc/dovecot/dovecot-sql.conf
Teraz odnajdujemy linijkę nr 48 i wstawiamy swoje dane do bazy mysql (użytkownik przed chwilą utworzony). Host pozostaje bez zmian. nazwa bazy, użytkownik, hasło składnia jest bardzo prosta każdy da sobie radę.

Restartujemy program dovecot.

Kod: Zaznacz cały

/etc/init.d/dovecot restart

Dodawanie użytkowników przez www

Ponieważ nasz system pocztowy dalej bazuje na kontach systemowych a jedynie autoryzacja idzie przez mysql musimy troszkę nawydziwiać aby dodawać użytkowników przez www.
Instalujemy paczkę sudo.

Kod: Zaznacz cały

apt-get install -y sudo 
pozwalam aby serwer www mógł korzystać z dodawania konta użytkownika, czyli wykonywał polecenie:code] useradd[/code]
W tym celu w konsoli wpisujemy

Kod: Zaznacz cały

visudo
i doprowadzamy plik do podobnego wyglądu

Kod: Zaznacz cały

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL
[B]
www-data        ALL=(root) NOPASSWD: /usr/sbin/useradd
www-data        ALL=(root) NOPASSWD: /etc/init.d/postfix
[/B]

# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d
Zapisujemy zmiany (ctrl+o) i wychodzimy (ctrl+x).

Pozostało nam wykonanie skryptów, bardo proste do własnej rozbudowy, na podstawie tego wzoru. W celu dodania danych do bazy i sytemu potrzebujemy dwóch plików formularz i skrypt
  1. Formularz -> nazwijmy go dodaj.php

    Kod: Zaznacz cały

     <form action="useradd-sql.php" method="post">
     login:
    
     <input type="text" name="login" />
    
     hasło:
    
     <input type="text" name="passwd" />
    
     <input type="submit" value="dodaj" />
     </form>
    
  2. Skrypt -> nazwijmy go dodaj-sql.php

    Kod: Zaznacz cały

    <?php
    // odbieramy dane z formularza
    $login = $_POST['login'];
    $passwd = $_POST['passwd'];
    
    //dodaje konto systemowe z poziomu php
    echo exec("sudo useradd -d /home/$login -s /bin/false $login");
    //wykonuje restart postfixa 
    exec("sudo /etc/init.d/postfix restart");
    //tworzy katalog domowy
    exec("mkdir /home/$login");
    //kopiuje gotowy szablon z folderami do interfejsu www
    //echo exec("cp -p -r /home/szablon/Maildir /home/poczta/$login");
    //zmieniamy parawa
    exec("sudo chmod 777 -R /home/poczta/$login");
    
    if($login and $passwd) {
         // łączymy się z bazą danych uzupełniamy swój login i hasło
          $connection = @mysql_connect('localhost', 'LOGIN-DO-BAZY', 'HASŁO DO BAZY')
          or die('Brak połączenia z serwerem MySQL');
          $db = @mysql_select_db('mail', $connection)
          or die('Nie mogę połączyć się z bazą danych');
    
           // dodajemy rekord do bazy
           $ins = @mysql_query("INSERT INTO users SET username='$login', password='$passwd', domain='domena.pl'");
    
           if($ins) echo "
    Rekord został dodany poprawnie";
           else echo "
    Błąd nie udało się dodać nowego rekordu";
    
            mysql_close($connection);
                                                            }
    
                                                            ?> 
    


    Pliki dodajemy do katalogu /var/www, jest to podstawowy katalog do obsługi www.
    Wystarczy uruchomić stronę:

    Kod: Zaznacz cały

    [URL]http://domena.pl/dodaj.php[/URL]
    i dodać nowego użytkownika
Awatar użytkownika
Andyk
Beginner
Posty: 125
Rejestracja: 08 listopada 2008, 01:24

Post autor: Andyk »

Jeżeli będę chciał serwer w 10 minut to raczej skorzystam z tego:
http://www.howtoforge.com/virtual-users ... -6-squeeze
Dodaj sprawdzanie SPF'a i list RBL bez tego nie nadaje się do wystawienia na świat.
Jeśli to ma być serwer dla domu to konieczne jest zaprzęganie mysql'a? Postfix działa dobrze na wirtualnych użytkownikach.
dhapollo
Beginner
Posty: 168
Rejestracja: 12 czerwca 2010, 14:10
Lokalizacja: Warszawa

Post autor: dhapollo »

Dziękuję za słowa krytyki i proszę o więcej.
SPF to wykonałem według tego opisu: http://man.sethuper.com/integracja-spf- ... bianubuntu wersja dla pythona. Czy może być?
RBL to chyba wystarczy dodać wpisy w:

Kod: Zaznacz cały

smtpd_recipient_restrictions

Ja dodałem takie:

Kod: Zaznacz cały

reject_rbl_client zen.spamhaus.org, reject_rbl_client dnsbl.njabl.org, reject_rbl_client bl.spamcop.net,
Jeśli zrobiłem źle nie bij tylko wytłumacz.

Odnośnie iredmaila, to zdecydowanie odradzam! Więcej miesza niż pożytku robi, to jest moje zdanie, którego będę się trzymał. Dlaczego? To już inny temat.

Odnośnie sql to ja nie zmuszam nikogo, pierwszy post działa i nie zawiera tego. Jeszcze jedna prośba, czy możesz podać dobry odnośnik do opisu jak przełożyć użytkowników i domen do mysql zawierającego zarówno opis dodatkowych plików modyfikacji w min.cf oraz wzór tabeli mysql.

Próbowałem wczoraj wykonać na podstawie: http://workaround.org/ispmail/squeeze/p ... main-types ale coś zepsułem.
Awatar użytkownika
Unit
Beginner
Posty: 356
Rejestracja: 27 marca 2007, 09:39

Post autor: Unit »

Co do użytkowników w bazie danych to można wykorzystać gotowe rozwiązanie - PostfixAdmin
dhapollo
Beginner
Posty: 168
Rejestracja: 12 czerwca 2010, 14:10
Lokalizacja: Warszawa

Post autor: dhapollo »

Wykonałem wszystko według tego opisu http://workaround.org/book/export/html/58 w devocot-sql.conf zmodyfikowałem wpisy aby współgrały z tą bazą danych na wszystkie

Kod: Zaznacz cały

postmap -q ..... 
mam poprawne wyniki. ale ciągle używane są konta lokalne.

Co robię źle albo czego jeszcze nie zrobiłem?
Awatar użytkownika
Andyk
Beginner
Posty: 125
Rejestracja: 08 listopada 2008, 01:24

Post autor: Andyk »

A sprawdź tutaj http://www.howtoforge.com/virtual-users ... an-squeeze jest gotowe rozwiązanie tylko, że zamiast dovecot'a jest courier
dhapollo
Beginner
Posty: 168
Rejestracja: 12 czerwca 2010, 14:10
Lokalizacja: Warszawa

Post autor: dhapollo »

Uciekam teraz do pracy jak wrócę o normalnej porze to przetestuje jeszcze dzisiaj, jak nie to jutro. Jak coś nie zadziała to liczę na Waszą pomoc
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2324
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Post autor: LordRuthwen »

Swoją drogą bardziej niż Courier preferuję Dovecot gdyż obsługuje on sieve - można robić filtry wiadomości na poziomie skrzynki a nie klienta pocztowego.
Awatar użytkownika
Andyk
Beginner
Posty: 125
Rejestracja: 08 listopada 2008, 01:24

Post autor: Andyk »

dhapollo pisze:Uciekam teraz do pracy jak wrócę o normalnej porze to przetestuje jeszcze dzisiaj, jak nie to jutro. Jak coś nie zadziała to liczę na Waszą pomoc
OK tylko daj dostęp do konfiguracji, żeby można było to przeanalizować (jakieś linki?), bo nawet jak robiłeś wg strony to gdzieś może być błąd, bez wglądu w pliki to można zgadywać.
mt2
Posty: 2
Rejestracja: 27 kwietnia 2013, 18:59

Post autor: mt2 »

Witam.
Jestem początkowym użytkownikiem Debiana. Próbowałem postawić sobie serwer poczty i korzystałem z powyższego poradnika, wszystko było dobrze do momentu, kiedy próbowałem wysłać wiadomość.

Po wciśnięciu przycisku:

Kod: Zaznacz cały

send
wyświetla mi się komunikat:

Kod: Zaznacz cały

Message not sent. Server replied:
 Requested action aborted: error in processing
451 4.3.5 Server configuration error
Co robić? Proszę o pomoc!
ODPOWIEDZ