{"id":5552,"date":"2018-07-16T21:30:43","date_gmt":"2018-07-16T17:30:43","guid":{"rendered":"https:\/\/www.howtoforge.com\/tutorial\/perfect-server-ubuntu-18-04-nginx-bind-dovecot-and-ispconfig-3\/"},"modified":"2018-07-16T21:30:43","modified_gmt":"2018-07-16T17:30:43","slug":"the-perfect-server-ubuntu-18-04-nginx-mysql-php-postfix-bind-dovecot-pure-ftpd-and-ispconfig-3-1","status":"publish","type":"post","link":"https:\/\/afaghhosting.net\/blog\/the-perfect-server-ubuntu-18-04-nginx-mysql-php-postfix-bind-dovecot-pure-ftpd-and-ispconfig-3-1\/","title":{"rendered":"The Perfect Server &#8211; Ubuntu 18.04 (Nginx, MySQL, PHP, Postfix, BIND, Dovecot, Pure-FTPD and ISPConfig 3.1)"},"content":{"rendered":"<p>This tutorial shows the steps to install an Ubuntu 18.04 (Bionic Beaver) server with Nginx, PHP, MariaDB, Postfix, pure-ftpd, BIND, Dovecot and ISPConfig 3.1. ISPConfig is a web hosting control panel that allows you to configure the installed services through a web browser. This setup provides a full hosting server with web, email (inc. spam and antivirus filter), Database, FTP and DNS services.<\/p>\n<h2 id=\"-preliminary-note\">1. Preliminary Note<\/h2>\n<p>In this tutorial, I will use the hostname <span class=\"system\">server1.example.com<\/span>\u00a0with the IP address <span class=\"system\">192.168.1.100<\/span> and the gateway <span class=\"system\">192.168.1.1<\/span>\u00a0for the network configuration. These settings might differ for you, so you have to replace them where appropriate.\u00a0 Before proceeding further, you need to have a basic minimal installation of Ubuntu 18.04 as explained in this\u00a0<a href=\"https:\/\/www.howtoforge.com\/tutorial\/ubuntu-minimal-server-install\/\" target=\"_blank\" rel=\"noopener noreferrer\">tutorial<\/a>.<\/p>\n<p>The steps in this tutorial have to be executed as root user, so I will not prepend &#8220;sudo&#8221; in front of the commands. Either Login as root user to your server before you proceed or run:<\/p>\n<p class=\"command\">sudo -s<\/p>\n<p>to become root when you are logged in as a different user on the shell.<\/p>\n<p>The commands to edit files will use the editor &#8220;nano&#8221;, you can replace it with an editor of your choice. Nano is an easy to use file editor for the shell. If you like to use nano and haven&#8217;t installed it yet, run:<\/p>\n<p class=\"command\">apt-get install nano<\/p>\n<h2 id=\"-update-your-linux-installation\">2. Update Your Linux Installation<\/h2>\n<p>Edit <span class=\"system\">\/etc\/apt\/sources.list<\/span>. Comment out or remove the installation CD from the file and make sure that the <span class=\"system\">universe<\/span> and <span class=\"system\">multiverse<\/span> repositories are enabled. It should look like this:<\/p>\n<p class=\"command\">nano \/etc\/apt\/sources.list<\/p>\n<pre readability=\"48\">#<p># deb cdrom:[Ubuntu-Server 18.04 LTS _Bionic Beaver_ - Release amd64 (20180425.1)]\/ bionic main restricted<\/p><p>#deb cdrom:[Ubuntu-Server 18.04 LTS _Bionic Beaver_ - Release amd64 (20180425.1)]\/ bionic main restricted<\/p><p># See http:\/\/help.ubuntu.com\/community\/UpgradeNotes for how to upgrade to<br\/># newer versions of the distribution.<br\/>deb http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic main restricted<br\/># deb-src http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic main restricted<\/p><p>## Major bug fix updates produced after the final release of the<br\/>## distribution.<br\/>deb http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic-updates main restricted<br\/># deb-src http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic-updates main restricted<\/p><p>## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu<br\/>## team. Also, please note that software in universe WILL NOT receive any<br\/>## review or updates from the Ubuntu security team.<br\/>deb http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic universe<br\/># deb-src http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic universe<br\/>deb http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic-updates universe<br\/># deb-src http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic-updates universe<\/p><p>## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu<br\/>## team, and may not be under a free licence. Please satisfy yourself as to<br\/>## your rights to use the software. Also, please note that software in<br\/>## multiverse WILL NOT receive any review or updates from the Ubuntu<br\/>## security team.<br\/>deb http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic multiverse<br\/># deb-src http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic multiverse<br\/>deb http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic-updates multiverse<br\/># deb-src http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic-updates multiverse<\/p><p>## N.B. software from this repository may not have been tested as<br\/>## extensively as that contained in the main release, although it includes<br\/>## newer versions of some applications which may provide useful features.<br\/>## Also, please note that software in backports WILL NOT receive any review<br\/>## or updates from the Ubuntu security team.<br\/>deb http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic-backports main restricted universe multiverse<br\/># deb-src http:\/\/de.archive.ubuntu.com\/ubuntu\/ bionic-backports main restricted universe multiverse<\/p><p>## Uncomment the following two lines to add software from Canonical's<br\/>## 'partner' repository.<br\/>## This software is not part of Ubuntu, but is offered by Canonical and the<br\/>## respective vendors as a service to Ubuntu users.<br\/># deb http:\/\/archive.canonical.com\/ubuntu bionic partner<br\/># deb-src http:\/\/archive.canonical.com\/ubuntu bionic partner<\/p><p>deb http:\/\/security.ubuntu.com\/ubuntu bionic-security main restricted<br\/># deb-src http:\/\/security.ubuntu.com\/ubuntu bionic-security main restricted<br\/>deb http:\/\/security.ubuntu.com\/ubuntu bionic-security universe<br\/># deb-src http:\/\/security.ubuntu.com\/ubuntu bionic-security universe<br\/>deb http:\/\/security.ubuntu.com\/ubuntu bionic-security multiverse<br\/># deb-src http:\/\/security.ubuntu.com\/ubuntu bionic-security multiverse<\/p><\/pre>\n<p>Then run:<\/p>\n<p class=\"command\">apt-get update<\/p>\n<p>To update the apt package database and then:<\/p>\n<p class=\"command\">apt-get upgrade<\/p>\n<p>to install the latest updates (if there are any). If you see that a new kernel gets installed as part of the updates, you should reboot the system afterward:<\/p>\n<p class=\"command\">reboot<\/p>\n<h2 id=\"-change-the-default-shell\">3. Change the Default Shell<\/h2>\n<p><span class=\"system\">\/bin\/sh<\/span> is a symlink to <span class=\"system\">\/bin\/dash<\/span>, however we need <span class=\"system\">\/bin\/bash<\/span>, not <span class=\"system\">\/bin\/dash<\/span>. Therefore we do this:<\/p>\n<p class=\"command\">dpkg-reconfigure dash<\/p>\n<p><span class=\"system\">Use dash as the default system shell (\/bin\/sh)?<\/span> <span class=\"highlight\">&lt;&#8211; No<\/span><\/p>\n<p>If you don&#8217;t do this, the ISPConfig installation will fail.<\/p>\n<h2 id=\"-disable-apparmor\">4. Disable AppArmor<\/h2>\n<p>AppArmor is a security extension (similar to SELinux) that should provide extended security. We will cross check if it is installed and remove it if necessary. In my opinion you don&#8217;t need it to configure a secure system, and it usually causes more problems than advantages (think of it after you have done a week of trouble-shooting because some service wasn&#8217;t working as expected, and then you find out that everything was ok, only AppArmor was causing the problem). Therefore, I disable it (this is a must if you want to install ISPConfig later on).<\/p>\n<p>We can disable it like this:<\/p>\n<p class=\"command\">service apparmor stop<br \/>update-rc.d -f apparmor remove<br \/>apt-get remove apparmor apparmor-utils<\/p>\n<h2 id=\"-synchronize-the-system-clock\">5. Synchronize the System Clock<\/h2>\n<p>It is a good idea to synchronize the system clock with an NTP (<strong>n<\/strong>etwork <strong>t<\/strong>ime <strong>p<\/strong>rotocol) server over the Internet. Simply run<\/p>\n<p class=\"command\">apt-get -y install ntp ntpdate<\/p>\n<p>and your system time will always be in sync.<\/p>\n<h2 id=\"-install-postfix-dovecot-mariadb-phpmyadmin-rkhunter-binutils\">6. Install Postfix, Dovecot, MariaDB, phpMyAdmin, rkhunter, Binutils<\/h2>\n<p>For installing postfix, we need to ensure that sendmail is not installed and running. To stop and remove sendmail run this command:<\/p>\n<p class=\"command\">service sendmail stop; update-rc.d -f sendmail remove<\/p>\n<p>The error message:<\/p>\n<p class=\"system\">Failed to stop sendmail.service: Unit sendmail.service not loaded.<\/p>\n<p>Is ok, it just means that sendmail was not installed, so there was nothing to be removed.<\/p>\n<p>We can install Postfix, Dovecot, MariaDB (as MySQL replacement), rkhunter, and binutils with a single command:<\/p>\n<p class=\"command\"><span>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\u00a0sudo<\/span><\/p>\n<p>MariaDB is a fork of the MySQL database server, developed by the original MySQL developer Monty Widenius. According to tests found on the internet, MariaDB is faster than MySQL and it&#8217;s development is going on with more pace, therefore, most Linux Distributions replaced MySQL with MariaDB as default &#8220;MySQL alike&#8221; database server. In case that you prefer MySQL over MariaDB, replace &#8220;mariadb-client mariadb-server&#8221; in the above command with &#8220;mysql-client mysql-server&#8221;.<\/p>\n<p>You will be asked the following questions:<\/p>\n<p class=\"system\">General type of mail configuration: <span class=\"highlight\">&lt;&#8211; Internet Site<\/span><br \/>System mail name: <span class=\"highlight\">&lt;&#8211;\u00a0server1.example.com<\/span><\/p>\n<p>Next open the TLS\/SSL and submission ports in Postfix:<\/p>\n<p class=\"command\">nano \/etc\/postfix\/master.cf<\/p>\n<p>Uncomment the <span class=\"system\">submission<\/span> and <span class=\"system\">smtps<\/span> sections as follows &#8211; add the line <span class=\"system\">-o smtpd_client_restrictions=permit_sasl_authenticated,reject<\/span> to both sections and leave everything thereafter commented:<\/p>\n<pre>[...]&#13;\nsubmission inet n - - - - smtpd&#13; -o syslog_name=postfix\/submission&#13; -o smtpd_tls_security_level=encrypt&#13; -o smtpd_sasl_auth_enable=yes&#13; <span class=\"highlight\"><strong>-o smtpd_client_restrictions=permit_sasl_authenticated,reject<\/strong><\/span>&#13;\n# -o smtpd_reject_unlisted_recipient=no&#13;\n# -o smtpd_client_restrictions=$mua_client_restrictions&#13;\n# -o smtpd_helo_restrictions=$mua_helo_restrictions&#13;\n# -o smtpd_sender_restrictions=$mua_sender_restrictions&#13;\n# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject&#13;\n# -o milter_macro_daemon_name=ORIGINATING&#13;\nsmtps inet n - - - - smtpd&#13; -o syslog_name=postfix\/smtps&#13; -o smtpd_tls_wrappermode=yes&#13; -o smtpd_sasl_auth_enable=yes&#13; <span class=\"highlight\"><strong>-o smtpd_client_restrictions=permit_sasl_authenticated,reject<\/strong><\/span>&#13;\n# -o smtpd_reject_unlisted_recipient=no&#13;\n# -o smtpd_client_restrictions=$mua_client_restrictions&#13;\n# -o smtpd_helo_restrictions=$mua_helo_restrictions&#13;\n# -o smtpd_sender_restrictions=$mua_sender_restrictions&#13;\n# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject&#13;\n# -o milter_macro_daemon_name=ORIGINATING&#13;\n[...]<\/pre>\n<p><strong>NOTE:<\/strong><span><span>\u00a0<\/span>The whitespaces in front of the &#8220;-o &#8230;. &#8221; lines are important!<\/span><\/p>\n<p>Restart Postfix afterward:<\/p>\n<p class=\"command\">service postfix restart<\/p>\n<p>We want MariaDB\/MySQL to listen on all interfaces, not just localhost. Therefore we edit <span>\/etc\/mysql\/mariadb.conf.d\/50-server.cnf (for MariaDB or<\/span>\u00a0<span class=\"system\">\/etc\/mysql\/my.cnf<\/span>\u00a0(for MySQL) and comment out the line <span class=\"system\">bind-address = 127.0.0.1<\/span>:<\/p>\n<p><strong>MariaDB<\/strong><\/p>\n<p class=\"command\"><span>nano\u00a0\/etc\/mysql\/mariadb.conf.d\/50-server.cnf<\/span><\/p>\n<pre>[...]&#13;\n# Instead of skip-networking the default is now to listen only on&#13;\n# localhost which is more compatible and is not less secure.&#13;\n<strong><span>#<\/span><\/strong>bind-address = 127.0.0.1&#13;\n[...]<\/pre>\n<p>Now we set a root password in MariaDB. Run:<\/p>\n<p class=\"command\">mysql_secure_installation<\/p>\n<p>You will be asked these questions:<\/p>\n<p class=\"system\">Enter current password for root (enter for none): <span class=\"highlight\">&lt;&#8211; press enter<\/span><br \/>Set root password? [Y\/n] <span class=\"highlight\">&lt;&#8211; y<\/span><br \/>New password: <span class=\"highlight\">&lt;&#8211; Enter the new MariaDB root password here<\/span><br \/>Re-enter new password: <span class=\"highlight\">&lt;&#8211; Repeat the password<\/span><br \/>Remove anonymous users? [Y\/n] <span class=\"highlight\">&lt;&#8211; y<\/span><br \/>Disallow root login remotely? [Y\/n] <span class=\"highlight\">&lt;&#8211; y<\/span><br \/>Reload privilege tables now? [Y\/n] <span class=\"highlight\">&lt;&#8211; y<\/span><\/p>\n<p>Set the password authentication method in MariaDB to native so we can use PHPMyAdmin later to connect as root user:<\/p>\n<p class=\"command\">echo &#8220;update mysql.user set plugin = &#8216;mysql_native_password&#8217; where user=&#8217;root&#8217;;&#8221; | mysql -u root<\/p>\n<p>Edit the file\u00a0\/etc\/mysql\/debian.cnf and set the MYSQL \/ MariaDB root password there twice in the rows that start with password.<\/p>\n<p class=\"command\">nano \/etc\/mysql\/debian.cnf<\/p>\n<p>The MySQL root password that needs to be added is shown in read, in this example the password is &#8220;howtoforge&#8221;.<\/p>\n<p class=\"system\"># Automatically generated for Debian scripts. DO NOT TOUCH!<br \/>[client]host = localhost<br \/>user = root<br \/>password = <span class=\"highlight\">howtoforge<\/span><br \/>socket = \/var\/run\/mysqld\/mysqld.sock<br \/>[mysql_upgrade]host = localhost<br \/>user = root<br \/>password =<span>\u00a0<\/span><span class=\"highlight\">howtoforge<\/span><br \/>socket = \/var\/run\/mysqld\/mysqld.sock<br \/>basedir = \/usr<\/p>\n<p>Then we restart MariaDB:<\/p>\n<p class=\"command\">service mysql restart<\/p>\n<p><span>The systemd service name for MariaDB and MySQL is &#8220;<\/span>mysql<span>&#8220;, so the restart command is the same for both database servers.<\/span><\/p>\n<p><strong>MySQL<\/strong><\/p>\n<p class=\"command\">nano \/etc\/mysql\/my.cnf<\/p>\n<pre>[...]&#13;\n# Instead of skip-networking the default is now to listen only on&#13;\n# localhost which is more compatible and is not less secure.&#13;\n<strong><span>#<\/span><\/strong>bind-address = 127.0.0.1&#13;\n[...]<\/pre>\n<p>Then we restart MySQL:<\/p>\n<p class=\"command\">service mysql restart<\/p>\n<p>The systemd service name for MariaDB and MySQL is &#8220;mysql&#8221;, so the restart command is the same for both database servers.<\/p>\n<p><strong>For MySQL and MariaDB:<\/strong><\/p>\n<p>Now check that networking is enabled. Run:<\/p>\n<p class=\"command\">netstat -tap | grep mysql<\/p>\n<p>The output should look like this:<\/p>\n<p class=\"system\"><a href=\"https:\/\/www.howtoforge.com\/cdn-cgi\/l\/email-protection\" class=\"__cf_email__\" data-cfemail=\"1d6f7272695d6e786f6b786f2c\" target=\"_blank\" rel=\"noopener\">[email\u00a0protected]<\/a>:~# netstat -tap | grep mysql<br \/>tcp6 0 0 [::]:mysql [::]:* LISTEN 12210\/mysqld<\/p>\n<h2 id=\"-install-amavisdnew-spamassassin-and-clamav\">7. Install Amavisd-new, SpamAssassin, And ClamAV<\/h2>\n<p>To install amavisd-new, SpamAssassin, and ClamAV, we run<\/p>\n<p class=\"command\"><span>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<\/span><\/p>\n<p>The ISPConfig 3 setup uses amavisd-new which loads the SpamAssassin filter library internally, so we can stop SpamAssassin to free up RAM:<\/p>\n<p class=\"command\">service spamassassin stop<br \/>update-rc.d -f spamassassin remove<\/p>\n<p>\u00a0To update the ClamAV antivirus signatures and start\u00a0the Clamd service. The update process can take some time, don&#8217;t interrupt it.<\/p>\n<p class=\"command\"><span>freshclam<\/span><br \/><span>service clamav-daemon start<\/span><\/p>\n<p>The following error can be ignored on the first run of freshclam.<\/p>\n<p class=\"system\">ERROR: \/var\/log\/clamav\/freshclam.log is locked by another process<br \/>ERROR: Problem with internal logger (UpdateLogFile = \/var\/log\/clamav\/freshclam.log).<\/p>\n<p>The amavisd-new program has currently a bug in Ubuntu 18.04 which prevents that emails\u00a0get signed with Dkim correctly. Run the following commands to patch amavisd-new.<\/p>\n<p class=\"command\">cd \/tmp<br \/>wget https:\/\/git.ispconfig.org\/ispconfig\/ispconfig3\/raw\/stable-3.1\/helper_scripts\/ubuntu-amavisd-new-2.11.patch<br \/>cd \/usr\/sbin<br \/>cp -pf amavisd-new amavisd-new_bak<br \/>patch &lt; \/tmp\/ubuntu-amavisd-new-2.11.patch<\/p>\n<p>In case you get an error for thelast &#8216;patch&#8217; command, then Ubuntu has probably fixed the issue in the meantime, so it should be safe to ignore that error then.<\/p>\n<h2 id=\"-install-metronome-xmpp-server-optional\">7.1 Install Metronome XMPP Server (optional)<\/h2>\n<p>The Metronome XMPP Server provides an XMPP chat server. This step is optional, if you do not need a chat server, then you can skip this step. No other ISPConfig functions depend on this software.<\/p>\n<p>Install the following packages with apt.<\/p>\n<p class=\"command\">apt-get -y install git lua5.1 liblua5.1-0-dev lua-filesystem\u00a0libidn11-dev libssl-dev lua-zlib lua-expat lua-event lua-bitop lua-socket lua-sec luarocks\u00a0luarocks<\/p>\n<p class=\"command\">luarocks install lpc<\/p>\n<p>Add a shell user for Metronome.<\/p>\n<p class=\"command\">adduser &#8211;no-create-home &#8211;disabled-login &#8211;gecos &#8216;Metronome&#8217; metronome<\/p>\n<p>Download Metronome to the \/opt directory and compile it.<\/p>\n<p class=\"command\">cd \/opt; git clone https:\/\/github.com\/maranda\/metronome.git metronome<br \/>cd .\/metronome; .\/configure &#8211;ostype=debian &#8211;prefix=\/usr<br \/>make<br \/>make install<\/p>\n<p>Metronome has now be installed to \/opt\/metronome.<\/p>\n<nav> <\/nav>\n<div>\n<p><b>Share this page:<\/b><\/p>\n<p>\n<a href=\"https:\/\/www.facebook.com\/sharer.php?u=https%3A%2F%2Fwww.howtoforge.com%2Ftutorial%2Fperfect-server-ubuntu-18-04-nginx-bind-dovecot-and-ispconfig-3%2F\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/afaghhosting.net\/blog\/wp-content\/uploads\/2018\/07\/the-perfect-server-ubuntu-18-04-nginx-mysql-php-postfix-bind-dovecot-pure-ftpd-and-ispconfig-3-1.png\" height=\"20\" alt=\"\" title=\"\"><\/a><br \/>\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fwww.howtoforge.com%2Ftutorial%2Fperfect-server-ubuntu-18-04-nginx-bind-dovecot-and-ispconfig-3%2F&amp;text=The+Perfect+Server+-+Ubuntu+18.04+%28Nginx%2C+MySQL%2C+PHP%2C+Postfix%2C+BIND%2C+Dovecot%2C+Pure-FTPD+and+ISPConfig+3.1%29&amp;via=howtoforgecom&amp;related=howtoforgecom\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/afaghhosting.net\/blog\/wp-content\/uploads\/2018\/07\/the-perfect-server-ubuntu-18-04-nginx-mysql-php-postfix-bind-dovecot-pure-ftpd-and-ispconfig-3-1-1.png\" height=\"20\" alt=\"\" title=\"\"><\/a><br \/>\n<a href=\"https:\/\/twitter.com\/howtoforgecom\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/afaghhosting.net\/blog\/wp-content\/uploads\/2018\/07\/the-perfect-server-ubuntu-18-04-nginx-mysql-php-postfix-bind-dovecot-pure-ftpd-and-ispconfig-3-1-2.png\" height=\"20\" alt=\"\" title=\"\"><\/a><br \/>\n<a href=\"https:\/\/plus.google.com\/share?url=https%3A%2F%2Fwww.howtoforge.com%2Ftutorial%2Fperfect-server-ubuntu-18-04-nginx-bind-dovecot-and-ispconfig-3%2F\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/afaghhosting.net\/blog\/wp-content\/uploads\/2018\/07\/the-perfect-server-ubuntu-18-04-nginx-mysql-php-postfix-bind-dovecot-pure-ftpd-and-ispconfig-3-1-3.png\" height=\"20\" alt=\"\" title=\"\"><\/a>\n<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial shows the steps to install an Ubuntu 18.04 (Bionic Beaver) server with Nginx, PHP, MariaDB, Postfix, pure-ftpd, BIND, Dovecot and ISPConfig 3.1. ISPConfig is a web hosting control panel that allows you to configure the installed services through a web browser. This setup provides a full hosting server with web, email (inc. spam &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[36],"tags":[],"class_list":["post-5552","post","type-post","status-publish","format-standard","hentry","category-36"],"_links":{"self":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/posts\/5552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/comments?post=5552"}],"version-history":[{"count":0,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/posts\/5552\/revisions"}],"wp:attachment":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/media?parent=5552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/categories?post=5552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/tags?post=5552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}