Kategorie: Linux

Perfekcyjny serwer na Ubuntu 18.04 Nginx, MySQL, PHP, Postfix, BIND, Dovecot, Pure-FTPD z panelem ISPConfig 3.1

W dzisiejszym poradniku opiszę proces przygotowania w pełni działającego serwera webowego wraz z darmowym panelem do zarządzania ISPConfig.
Poradnik został przygotowany pod najnowszą wersję Ubuntu 18.04

Na początek dokonujemy zmiany hostname systemu. Krok ten opisywałem w tym poradniku.

Logujemy się na konto root poleceniem:

sudo -s

I wpisujemy hasło. Następnie instalujemy nasz ulubiony edytor plików tekstowych dla przykładu nano:

apt-get install nano

Kolejnym krokiem jest ustawienie repozytoriów w pliku /etc/apt/sources.list

wykonujemy je poleceniem:

nano /etc/apt/sources.list

Plik powinien wyglądać następująco:

#

# deb cdrom:[Ubuntu-Server 18.04 LTS _Bionic Beaver_ - Release amd64 (20180425.1)]/ bionic main restricted

#deb cdrom:[Ubuntu-Server 18.04 LTS _Bionic Beaver_ - Release amd64 (20180425.1)]/ bionic main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://de.archive.ubuntu.com/ubuntu/ bionic main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic universe
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic universe
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates universe
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic multiverse
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu bionic partner
# deb-src http://archive.canonical.com/ubuntu bionic partner

deb http://security.ubuntu.com/ubuntu bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu bionic-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse

Następnie dokonujemy aktualizacji repozytoriów oraz aktualizacji systemu:

apt-get update
apt-get upgrade

Dla pewności poprawnego działania systemu i zapisania wszystkich zmian dokonujemy restartu systemu poleceniem:

reboot

Po restarcie ponownie logujemy się do systemu na konto root i dokonujemy zmiany powłoki systemu.
Wykonamy to poleceniem:

dpkg-reconfigure dash

W komunikacie zaznaczamy opcję no czyli nie:

Use dash as the default system shell (/bin/sh)? 

Wyłączamy AppArmor

AppArmor to rozszerzenie bezpieczeństwa (podobne do SELinux), które powinno zapewniać rozszerzone zabezpieczenia. Sprawdzimy, czy jest zainstalowany, i jeśli to konieczne, usuniemy go. Moim zdaniem nie potrzebujemy go do skonfigurowania bezpiecznego systemu i zwykle powoduje więcej problemów niż korzyści.

Dezaktywacji dokonamy wydając polecenia:

service apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils

Synchronizujemy czas na serwerze z serwerem NTP

apt-get -y install ntp ntpdate

Instalacja Postfix, Dovecot, MariaDB, phpMyAdmin, rkhunter, Binutils

Tutaj drobna uwaga aby zainstalować posfixa niezbędne jest odinstalowanie sendmaila. Wykonamy to poleceniem:

service sendmail stop; update-rc.d -f sendmail remove

Następnie instalujemy wszystkie pakiety:

apt-get -y install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd sudo

Instalator poprosi nas o wybranie 2 opcji które zaznaczamy jak poniżej:

General type of mail configuration: 

Uruchamiamy TLS /SSL w postfix

Edytujemy plik:

nano /etc/postfix/master.cf

I od komentujemy sekcję smtpd_client_restrictions=permit_sasl_authenticated,reject

Całość powinna wyglądać jak poniżej:

[...]
submission inet n       -       -       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
[...]

Po wykonaniu zmian dokonujemy restartu posfixa

service postfix restart

Chcemy, aby MariaDB / MySQL nie tylko na localhost. Dlatego edytujemy plik /etc/mysql/mariadb.conf.d/50-server.cnf (dla MariaDB lub /etc/mysql/my.cnf (dla MySQL) i zakomentuj linię bind-address = 127.0.0.1:

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Dodajemy # przy bind-address

[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1
[...]

Ustawiamy hasło root serwera mysql oraz przechodzimy podstawową konfigurację wydając polecenie:

mysql_secure_installation

Odpowiadamy na pytania jak poniżej:

Enter current password for root (enter for none): 

Ustawiamy metodę uwierzytelniania hasła na natywną, abyśmy mogli później do PHPMyAdmin połączyć się jako użytkownik root:

echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | mysql -u root

Modyfikacja pliku /etc/mysql/debian.cnf i ustawienie hasła root

nano /etc/mysql/debian.cnf

Poniżej zmodyfikowany plik wygląda tak:

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = root
password = HASLO ROOT
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = root
password = HASLO ROOT
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

Edytujemy plik /etc/mysql/my.cnf i Haszujemy nasłuch lokalny Mysql

nano /etc/mysql/my.cnf

Plik powinien wyglądać jak poniżej:

[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1
[...]

Dokonujemy restartu serwera mysql poleceniem:

service mysql restart

Instalacja Amavisd-new, SpamAssassin, And ClamAV

apt-get -y install amavisd-new spamassassin clamav clamav-daemon unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl postgrey

Aby zaktualizować sygnatury antywirusowe ClamAV i uruchomić usługę Clamd wydajemy następujące polecenia:

freshclam
service clamav-daemon start

Aktualizacja bazy wirusów może trochę potrwać należy cierpliwie poczekać.

Poniższy błąd można zignorować przy pierwszym uruchomieniu freshclam.

ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).

Program amavisd-new zawiera obecnie błąd w Ubuntu 18.04, który uniemożliwia prawidłowe podpisanie e-maili z Dkim. Uruchom następujące polecenia, aby załączyć amavisd-new.

cd /tmp
wget https://git.ispconfig.org/ispconfig/ispconfig3/raw/stable-3.1/helper_scripts/ubuntu-amavisd-new-2.11.patch
cd /usr/sbin
cp -pf amavisd-new amavisd-new_bak
patch 

Dokonujemy instalacji Nginx, PHP 7.2 (PHP-FPM), oraz Fcgiwrap

Nginx instalujemy poleceniem:

apt-get install nginx

Usuwamy serwer www Apache:

service apache2 stop
update-rc.d -f apache2 remove

Uruchamiamy serwer Nginx

service nginx start

Instalujemy PHP

apt-get -y install php7.2-fpm

Następnie wyszukujemy moduły php i dokonamy ich instalacji.

apt-cache search php7.2
apt-get -y install php7.2 php7.2-common php7.2-gd php7.2-mysql php7.2-imap php7.2-cli php7.2-cgi php-pear mcrypt imagemagick libruby php7.2-curl php7.2-intl php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl memcached php-memcache php-imagick php-gettext php7.2-zip php7.2-mbstring php-soap php7.2-soap

Edytujemy plik php.ini

Dokonujemy zmian 2 linijkach

nano /etc/php/7.2/fpm/php.ini

I zmieniamy:

cgi.fix_pathinfo=0

Oraz

date.timezone="Europe/Warsaw"

Dokonujemy przeładowania php poleceniem:

service php7.2-fpm reload

Instalujemy pakiet FCIWRAP dzięki niemu ISPConfig zajmie się poprawną konfiguracją vhost.

apt-get -y install fcgiwrap

Instalujemy i konfigurujemy phpMyAdmin

apt-get -y install phpmyadmin php-mbstring php-gettext

I konfigurujemy

Web server to reconfigure automatically: 

Instalacja Let's Encrypt

apt-get -y install certbot
certbot register

ISPConfig pozwala również zarządzać (tworzyć / modyfikować / usuwać) listy mailingowe Mailman. Jeśli chcesz skorzystać z tej funkcji, zainstaluj Mailman w następujący sposób:

apt-get -y install mailman

Wybierz co najmniej jeden język, np .:

Languages to support: 

Wykonujemy polecenie i odpowiadamy na pytania

newlist mailman
root@server1:~# newlist mailman
Enter the email of the person running the list: 
Hit enter to notify mailman owner... 

root@server1:~#

edytujemy plik /etc/aliases i dodajemy:

nano /etc/aliases

## mailman mailing list
mailman:              "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Przeładowujemy, restatartujemy postfixa i uruchamiamy mailmana

newaliases
service postfix restart
service mailman start

Instalujemy PureFTPd oraz Quota

apt-get -y install pure-ftpd-common pure-ftpd-mysql quota quotatool

Edytujemy plik /etc/default/pure-ftpd-common i ustawiamy w następujący sposób

nano /etc/default/pure-ftpd-common
[...]
STANDALONE_OR_INETD=standalone
[...]
VIRTUALCHROOT=true
[...]

Uruchamiamy TLS oraz SSL dla serwera FTP:

echo 1 > /etc/pure-ftpd/conf/TLS
mkdir -p /etc/ssl/private/
openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Podajemy swoje dane jak poniżej:

Country Name (2 letter code) [AU]: 

Nadajemy chmod i restartujemy serwer FTP

chmod 600 /etc/ssl/private/pure-ftpd.pem
service pure-ftpd-mysql restart

Instalacja serwer DNS BIND

apt-get -y install bind9 dnsutils haveged
systemctl enable haveged
service haveged start

Instalacja Vlogger, Webalizer, oraz AWStats

apt-get -y install vlogger webalizer awstats geoip-database libclass-dbi-mysql-perl

Dokonujemy edycji w pliku /etc/cron.d/awstats i komentujemy go w sposób podany poniżej:

nano /etc/cron.d/awstats
#MAILTO=root

#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh

# Generate static reports:
#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh

Instalacja Jailkit

apt-get -y install build-essential autoconf automake1.11 libtool flex bison debhelper binutils
cd /tmp 
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz
tar xvfz jailkit-2.19.tar.gz
cd jailkit-2.19
echo 5 > debian/compat

Obecna wersja Jailkit 2.19 ma błąd składniowy, który uniemożliwia jej kompilację. Aby to naprawić, otwórz plik debian / changelog za pomocą nano:

nano debian/changelog

I dodaj następujący wiersz w linii 5, a następnie pusty wiersz:

 -- Olivier   Wed, 18 Nov 2015 20:38:44 +0100

Dokonujemy rekompilacji

./debian/rules binary
cd ..
dpkg -i jailkit_2.19-1_*.deb
rm -rf jailkit-2.19*

Instalujemy Fail2Ban oraz UFW

apt-get -y install fail2ban
apt-get -y install ufu

Następnie tworzymy plik:/etc/fail2ban/jail.local o następującej zawartości:

nano /etc/fail2ban/jail.local
[pure-ftpd]
enabled  = true
port     = ftp
filter   = pure-ftpd
logpath  = /var/log/syslog
maxretry = 3

[dovecot]
enabled = true
filter = dovecot
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 5

[postfix]
enabled  = true
port     = smtp
filter   = postfix
logpath  = /var/log/mail.log
maxretry = 3

Dokonujemy przeładowania usługi

s

ervice fail2ban restart

Instalacja Webmaila Roundcube

apt-get -y install roundcube roundcube-core roundcube-mysql roundcube-plugins javascript-common libjs-jquery-mousewheel php-net-sieve tinymce

Podczas konfiguracji wybieramy następująco:

Configure database for roundcube with dbconfig-common? 

Edytujemy plik /etc/roundcube/config.inc.php i zmieniamy domyślny host

nano /etc/roundcube/config.inc.php
$config['default_host'] = 'localhost';

Instalacja ISPConfig 3.1

Dla pewności zatrzymujemy Apache, usuwamy go i restartujemy Nginx

service apache2 stop
update-rc.d -f apache2 remove
service nginx restart

Następie Pobieramy najnowszą wersję ISPConfig i ją rozpakowujemy.

cd /tmp 
wget -O ispconfig.tar.gz https://git.ispconfig.org/ispconfig/ispconfig3/repository/archive.tar.gz?ref=stable-3.1
tar xfz ispconfig.tar.gz
cd ispconfig3*/install/

Uruchamiamy skrypt instalacyjny:

php -q install.php

Odpowiadamy na pytania jak poniżej:

--------------------------------------------------------------------------------
_____ ___________ _____ __ _ ____
|_ _/ ___| ___ \ / __ \ / _(_) /__ \
| | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ /
| | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ |
_| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \
\___/\____/\_| \____/\___/|_| |_|_| |_|\__, | \____/
__/ |
|___/
--------------------------------------------------------------------------------


>> Initial configuration

Operating System: Ubuntu 18.04 LTS (Bionic Beaver)

Following will be a few questions for primary configuration so be careful.
Default values are in [brackets] and can be accepted with .
Tap in "quit" (without the quotes) to stop the installer.


Select language (en,de) [en]: 

Gotowe skrypt został zainstalowany i jest dostępny pod adresem https://ipserwera:8080

Domyślne dane do panelu to login admin hasło admin

Takim sposobem mamy w pełni działający i skonfigurowany serwer www raz z serwerem poczty bazami danych i ftp.

Źródło: https://www.howtoforge.com/tutorial/perfect-server-ubuntu-18.04-with-apache-php-myqsl-pureftpd-bind-postfix-doveot-and-ispconfig/

Linux

Zobacz komentarze

  • Cześć,
    Na wstępie dziękuję za poradnik, spadł mi z nieba :)
    Mam jednak problem: w punkcie gdzie: nano /etc/postfix/master.cf
    Moja konfiguracja nieco się różni od Twojej, np. nie mam w ogóle opcji smtpd_client_restrictions=permit_sasl_authenticated,reject

    Dołączam to co mam:

    # service type private unpriv chroot wakeup maxproc command + args
    # (yes) (yes) (no) (never) (100)

    smtp inet n - y smtpd
    #smtp inet n y 1 postscreen
    #smtpd pass - y smtpd
    #dnsblog unix - y 0 dnsblog
    #tlsproxy unix - y 0 tlsproxy
    #submission inet n y smtpd
    # -o syslog_name=postfix/submission
    # -o smtpd_tls_security_level=encrypt
    # -o smtpd_sasl_auth_enable=yes
    # -o smtpd_tls_auth_only=yes
    # -o smtpd_reject_unlisted_recipient=no
    # -o smtpd_client_restrictions=$mua_client_restrictions
    # -o smtpd_helo_restrictions=ftua_helo_restrictions
    # -o smtpd_sender_restrictions=$mua_sender_restrictions
    # -o smtpd_recipient_restrictions=
    # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
    # -o milter_macro_daemon_name=ORIGINATING
    #smtps inet n y smtpd
    # -o syslog_name=postfix/smtps
    # -o smtpd_tls_wrappermode=yes
    # -o smtpd_sasl_auth_enable=yes
    # -o smtpd_reject_unlisted_recipient=no
    # -o smtpd_client_restrictions=$mua_client_restrictions
    # -o smtpd_helo_restrictions=ftua_helo_restrictions
    # -o smtpd_sender_restrictions=$mua_sender_restrictions
    # -o smtpd_recipient_restrictions=
    # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
    # -o milter_macro_daemon_name=ORIGINATING
    #628 inet n y qmqpd
    pickup unix n y 60 1 pickup
    cleanup unix n y 0 cleanup
    qmgr unix n n 300 1 qmgr

    Czy coś źle zrobiłem na poprzednim etapie? Czy po prostu jest to nowsza wersja postfixa i coś się inaczej nazywa?

    • Jest to zapewne nowsza wersja ;)
      Poradnik na już trochę czasu.
      O ile od komentujesz to co podałem w poradniku całość będzie działać poprawnie :)

      Zauważ że przy swoich wpisach masz #hasz

  • Wkradł się błąd w kodzie z pliku:
    nano /etc/mysql/my.cnf
    Bowiem w okienku widnieje treść pliku:
    nano /etc/mysql/mariadb.conf.d/50-server.cnf

  • Witam,
    niestety po przeprowadzeniu w całości tutka, serwer postfix działa oraz ispconfig ale niestety nie działa ani phpmyadmin ani roundcube. Druga kwestia tyczy się tego, że mam domenę w az.pl i nie bardzo wiem w jaki sposób ją skierować na swój serwer w domu. Mam zmienny adres ip ale zmienia się on co kilka miesięcy. Czy jest ktoś w stanie mi pomóc w konfiguracji serwera ?

  • Po instalacji, nie idzie zainstalować żadnego innego php błąd:

    dpkg: error processing package pure-ftpd-mysql (--configure):
    installed pure-ftpd-mysql package post-installation script subprocess returned error exit status 127
    Errors were encountered while processing:
    pure-ftpd-mysql

    • A Spróbuj:
      apt-get install -y inetutils-inetd
      update-inetd
      oraz
      apt --fix-broken install

Udostępnij
Opublikowane przez
Linux

Najnowsze wpisy

KeePass2 2.52 w Ubuntu 22.04

Poniższy poradnik opisuje sposób instalacji KeePass w systemie Ubuntu. Całość wykonamy za pomocą kilku poleceń…

2 lata temu

Instalacja Master PDF editor w Ubuntu 22.04

Master PDF Editor to wszechstronny program PDF, który zawiera wiele funkcji. Oprócz tworzenia i edycji…

2 lata temu

iotop – monitorowanie pamięci

Iotop jest prostym narzędziem dla systemów Uniksowych umożliwiającym monitorowanie użycia dowolnego nośnika pamięci flash/hdd/ssd w…

2 lata temu

Uruchomienie wiele poleceń w jednym zadaniu Cron

Możesz oddzielić dwa lub więcej poleceń za pomocą średników (;), Średnik (;): służy do oddzielania…

2 lata temu

Zmiana danych exif zdjęcia w terminalu Linux

Poniższy poradnik opisuje w jaki sposób za pomocą konsoli możemy dokonać edycji danych zdjęcia exif.…

2 lata temu

Instalacja Rocket.Chat Server w systemie Rocky Linux 8

Poniższy poradnik opisuje sposób instalacji Rocket.Chat W systemie Rocky Linux 8 Całość bardzo prosto zainstalujemy…

2 lata temu