Jak łatwo i szybko postawić dobry serwer mailowy, z niemal wszystkimi możliwymi wodotryskami?
Wydawać by się mogło, że to nie możliwe, a z pewnością wymagałoby dużo pracy… jakby więc podjąć temat tak, żeby sie nie narobić..?
Z pomocą przyszedł mi całkiem niezły skrypt, mail-in-a-box!
Oh, ubuntu only. No nic, może zadziała na Debianie.
…
Jednak nie działa, lecz na ratunek przyszło LXC!
Nowy kontener:
lxc-create -n ubuntu -t ubuntu
odpalam:
lxc-start -n ubuntu
Kontener nie działa!
Brakuje wpisu w /etc/fstab
, wystarczy wykonać:
echo "none /cgroup cgroup defaults 0 0" >> /etc/fstab mkdir -p /cgroup mount -a
Ops… nie działa internet. No to zaprzęgamy Google do pracy, szukam, szukam…
konieczne było utworzenie odpowiedniego interfejsu i (wraz z routingiem):
brctl addbr br0 ifconfig br0 10.0.0.1/24 up echo "1" > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
no i plik konfiguracyjny mojego kontenera wygląda następująco:
lxc.include = /usr/share/lxc/config/ubuntu.common.conf lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = 00:18:f3:d3:ec:ac lxc.network.ipv4 = $ip_LXC/24 lxc.network.ipv4.gateway = 10.0.0.1 lxc.network.flags = up # Container specific configuration lxc.rootfs = /var/lib/lxc/ubuntu/rootfs lxc.mount = /var/lib/lxc/ubuntu/fstab lxc.utsname = ubuntu lxc.arch = amd64
Startujemy:
lxc-start -n ubuntu
domyślne logowanie to oczywiście ubuntu/ubuntu.
Ubuntu w kontenerze już jest, ale w wersji 12 LTS… potrzebujemy 14.04
sudo su apt-get update && apt-get upgrade -y && apt-get install bridge-utils git host aptitude update-manager -y do-release-upgrade
I leci 😉
Uwaga, w trakcie aktualizacji wydania skrypt będzie zadawał mnóstwo irytujących pytań.
Gita mamy już zainstalowanego, więc teraz zgodnie z instrukcją na stronie domowej projektu, grzecznie wykonujemy:
curl -s https://mailinabox.email/bootstrap.sh | sudo bash
I leci znów! W trakcie wykonywania skryptu zostaniecie poproszeni o nazwę użytkownika, hasło, kraj i różne inne niezwykle istotne rzeczy. Nudy.
O, skrypt się skończył, ładnie ostrzegł o samopodpisanym(self-signed) certyfikacie, odpalamy przeglądarkę i… nie działa!
No tak, całość odpalona w kontenerze, nie dziw że z zewnątrz nie działa!
Z pomocą przychodzi firewall oparty o iptables, nat, oraz przekierowanie portów!
Nie zagłębiając się zbytnio w szczegóły, machnąłem malutki skrypcik który załatwia problem z portami
(https wystawiony na port 444 ze względu na to, że na matce uruchomiona już była tam usługa).
Cały skrypt jest oczywiście dostoswany do konfiguracji kontenera LXC którą podałem wcześniej.
############### # UWAGA!! # wszystkie wpisy zostaną usunięte. ############### iptables -F iptables -F -t nat iptables -F -t mangle iptables -X $zew_IP = zewnętrzne IP! $ip_LXC = ip kontenera LXC(10.0.0.10) //LXC iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -I PREROUTING -p tcp -d $zew_IP --dport 25 -j DNAT --to $ip_LXC:25 iptables -A FORWARD -p tcp -d $ip_LXC --dport 25 -j ACCEPT iptables -t nat -I PREROUTING -p tcp -d $zew_IP --dport 53 -j DNAT --to $ip_LXC:53 iptables -A FORWARD -p tcp -d $ip_LXC --dport 53 -j ACCEPT iptables -t nat -I PREROUTING -p tcp -d $zew_IP --dport 444 -j DNAT --to $ip_LXC:443 iptables -A FORWARD -p tcp -d $ip_LXC --dport 444 -j ACCEPT iptables -t nat -I PREROUTING -p tcp -d $zew_IP --dport 587 -j DNAT --to $ip_LXC:587 iptables -A FORWARD -p tcp -d $ip_LXC --dport 587 -j ACCEPT iptables -t nat -I PREROUTING -p tcp -d $zew_IP --dport 993 -j DNAT --to $ip_LXC:993 iptables -A FORWARD -p tcp -d $ip_LXC --dport 993 -j ACCEPT
Śmiga, o ile dobrze są ustawione DNSy. Informacje jak to zrobić można uzyskać na stronie projektu, bądź w zakładce panelu administracyjnego.
/mail -> roundcube
/cloud -> owncloud
/admin -> panel administracyjny, sprawdzanie poprawności, dodawanie użytkowników, aliasów, instrukcja połączenia z innymi usługami.