There is a new revision of this tutorial available for Ubuntu 15.10 (Wily Werewolf).

The Perfect Server - Ubuntu 14.04 (Apache2, PHP, MySQL, PureFTPD, BIND, Dovecot, ISPConfig 3)

This tutorial shows how to prepare an Ubuntu 14.04 (Trusty Tahr) server (with Apache2, BIND, Dovecot) for the installation of ISPConfig 3, and how to install ISPConfig 3. ISPConfig 3 is a web hosting control panel that allows you to configure the following services through a web browser: Apache or nginx web server, Postfix mail server, Courier or Dovecot IMAP/POP3 server, MySQL, BIND or MyDNS nameserver, PureFTPd, SpamAssassin, ClamAV, and many more. This setup covers Apache (instead of nginx ), BIND (instead of MyDNS), and Dovecot (instead of Courier).

I do not issue any guarantee that this will work for you!


1. Requirements

To install such a system you will need the following:

  • the Ubuntu 14.04 server CD, available here: (i386) or
  • a fast Internet connection.


2. Preliminary Note

In this tutorial I use the hostname with the IP address and the gateway 192.1682.249. These settings might differ for you, so you have to replace them where appropriate.

3. The Base System

Insert your Ubuntu install CD into your system and boot from it. Select your language:

Then select Install Ubuntu Server:

Choose your language again (?):

Then select your location:

Choose a keyboard layout (you will be asked to press a few keys, and the installer will try to detect your keyboard layout based on the keys you pressed) In my case I prefer No & keyboard layout as English US:

The installer checks the installation CD, your hardware, and configures the network with DHCP if there is a DHCP server in the network:

Enter the hostname. In this example, my system is called, so I enter server1:

Create a user, for example the user administrator with the user name administrator (don't use the user name admin as it is a reserved name on Ubuntu 14.04):

Share this page:

38 Comment(s)

Add comment



The gateway address is missing a '.'

From: amldc

I'm very lazy  and I love seting up server with just copy-paste from howtoforge !

For those who install from USB stick: the system may recognize your USB stick as SDA and then try to install GRUB to /dev/sda. Just select NO in the 'Install the GRUB boot loader to the master boot record?' dialog; you will be prompted with another dialog which allows you to specify the correct device (mine was /dev/sdb as shown in the disk partitioning section during the installation).

From: Marc

Thank you very much Falko

Your guides helped me a lot.

From: Bogdan

Great tutorial. Everything works great, except amavis complains in mail.log :

 amavis[2269]: (02269-01) (!)connect to /var/run/clamav/clamd.ctl failed, attempt #1: Can't connect to UNIX socket /var/run/clamav/clamd.ctl: No such file or directory

Clamav didn't start after the first reboot of the server. Probably because it didn't have it's virus definitions updated. I had to start it manually. 

 #service clamav-daemon start

It started normally after the second reboot.

From: Gordon Fielden

Is the going to be an update that includes Roundcube install of squirrell, as squirrel doesn't have that professional feel, i see there PS for CentOS and Debian using Rouncube.

From: Karlis Eriks Grinbergs

good morning

Ok. so fare works all good. But how i do log on to Squirrelmail or how i do configure for log so i eable do configure Emailadresses????

From: till

The email address is created in ISPConfig, not in squirrelmail.Login to ispconfig and create the mailbox there. Then you can login with this email address and the password of the mailbox that you created in squirrelmail or your Desktopp email program to send and receive emails.

From: Bubba

Followed the guide line-by-line.

Having trouble receiving mail from external sites like gmail etc. to my server.

System SENDS mail just fine but am unable to recieve.

My ip is through godady.

output of dig -t mx is as follows:

; <<>...<<>> -t mx

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47746

;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 4



; EDNS: version: 0, flags:; udp: 1300




;; ANSWER SECTION: 3600 IN MX 0 3600 IN MX 10




;; ADDITIONAL SECTION: 66161 IN A 87240 IN AAAA 2607:f208:206::2e 26469 IN A


;; Query time: 37 msec


;; WHEN: Tue Mar 31 10:13:53 EDT 2015

;; MSG SIZE  rcvd: 199


I found this post:

Which seems to reference some of the same issues I am having but the broken english

makes it hard for me to understand.  Any suggestions or help appreciated.

From: Madness

Thanks for another great walkthrough!


Everything had seemed to be working fine, but now in doing further tests when i try to send myself an email from php using mail(), it says the email sends successfully, but the email is never delivered.


What do I look for to troubleshoot this issue?



From: Madness

When I send an email through php mail() it says success, but no email is received.

What could be the cause? I have checked the logs, I don't see anything. Verifyied postfix IS running.

What steps should I take? Thank you!

From: Bubba

If anybody else is having problems with mail setup and they are using a godaddy DNS

you might find some helpful info here:


Some of the programs that you refer are not current in the apt-get ! who proced ?

From: Mike

I get the following error when I run newaliases - newaliases: fatal: /etc/postfix/, line 51: missing '=' after attribute name: "permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination"

From: Ricardo

Hello. I get this message: Package dovecot-mysql is not available, but is referred to by another package.This may mean that the package is missing, has been obsoleted, oris only available from another sourceE: Unable to locate package getmail4E: Unable to locate package rkhunterE: Package 'dovecot-mysql' has no installation candidate


Any idea how to fix? Thank you :)

From: till

Check the /etc/apt/sources.list file, the universe or multiverse repository must be missing.

From: AC

Is there a specific reason why you are setting the mysql service to listen on all interfaces?

Wouldn't the localhost/loopback be enough

From: Alan

So far I have followed the tutorial exactly and when I check hostname -f it says there is no address associated with the hostname.  Plus at this point I cannot ping google or anything.  Any suggestions?

From: Thomas CARTER

Hi, I had same issue with getmail4 missing. I updated /etc/apt/sources.list using, in my case choosing France as the source, did an apt-get update and getmail installed correctly. Thomas CARTER

From: djsilas

There is a broken link on text "How To Use Multiple PHP Versions (PHP-FPM & FastCGI) With ISPConfig 3 (Ubuntu 12.10)" -> file:///how-to-use......

From: joe

fantastic article, saved me many times!


From: 'the Moose'

Great tutorial! Works perfect for me, even installed Roundcube instead of Squirelmail.

However I face a problem now with my FTP... not sure why. I can log into the website accounts with FTP (easy done via ISPConfig), but I also want an account to just log into my server for up-/downloading files.

How do I do that? I installed 'PureAdmin' to create an FTP user account outside of ISPConfig, but I just can't login with it. I see in the message log of Fillezilla:

Status: Connection established, waiting for welcome message...

Response: 220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------

Response: 220-You are user number 1 of 5 allowed.

Response: 220-Local time is now 16:16. Server port: 21.

Response: 220-This is a private system - No anonymous login

Response: 220-IPv6 connections are also welcome on this server.

Response: 220 You will be disconnected after 60 minutes of inactivity.

Command: USER [username]

Response: 331 User [username] OK. Password required

Command: PASS *******

Response: 530 Login authentication failed

Error: Critical error: Could not connect to server


Any idea what I'm doing wrong here?


All help is appreciated.

From: Heriberto Torrado

How can I open 465 port on Postfix?

Thanks a lot

From: till

Just follow the instructions, the tutorial opens port 465 (smtps) in postfix. The step is the one where you remove the # in front of the smtps line in the file.

From: trond

If I have forgotten to install jailkit before installing ispconfig - and I have moved sites to the server - is there a way to install jailkit afterwards?

From: Graham

hi, I got some error when I install ispconfig-3. Here is the error:


AH00543: apache2: bad user name ispapps

and there are some warnning:


PHP Warning:  chown(): Unable to find uid for ispapps in /tmp/ispconfig3_install/install/lib/installer_base.lib.php on line 1564


PHP Warning:  chown(): Unable to find uid for ispconfig in /tmp/ispconfig3_install/install/lib/installer_base.lib.php on line 1985


chown: invalid user: ‘ispconfig:ispconfig’

here is apache error.log:


[mpm_prefork:notice] [pid 15794] AH00169: caught SIGTERM, shutting down

It was ok before I followed  your install doc. While this time it occurs error in the last step :install ispconfig-3.

I will appreciate that if someone  can help me. thanks !

From: till

Either you did not run the ispconfig installer as root or you did not start from a fresh and empty system so that e.g. exec is disabled in cli php.ini. Fix thie issue in php.ini or login with the root user, then uninstall ispconfig with the uninstall.php script and then install it again with install.php script.

From: eduard

I cannot login squirrelmail : ERRORUnknown user or password incorrect.

tail /var/log/mail.log :

Sep  4 07:35:01 ns1 postfix/smtpd[10000]: disconnect from localhost[::1]Sep  4 07:35:58 ns1 dovecot: imap-login: Aborted login (auth failed, 1 attempts in 2 secs): user=<e>, method=PLAIN, rip=::1, lip=::1, secured, session=<Z86Rb+QeswAAAAAAAAAAAAAAAAAAAAAB>

From: till

This means that a wrong username or password was used. The username is the full email address and the password is the password of the mailbox that you created in ISPConfig.

From: xplode

i get this in syslog and no incoming or outgoing mail is possible :(

postfix/error[28574]: C4441A2E4A: to=<[email protected]>, orig_to=<root>, relay=none, delay=0.02, delays=0.01/0/0/0, dsn=4.3.0, status=deferred (mail transport unavailable)

From: Jeff

I have an issue with Memcache using this setup. In PHP, Memcache caches and retrieves valus just fine but the stats array is empty. By this I mean that if I create and connect a memcache object, then issue:


the array is blank.

If I do the following:


All i get is

"Array ( [localhost:11211] => )"


I have the same setup on Centos with CPanel and it works fine. I've tried to compare the config files but there seems to be no discrepancies. Has anyone else had this issue and if they have can they please, please tell me how to solve it!


It would be greatly appreciated.

From: Nigel Aves

Followed everything and I believe that the install is OK.  Created a web site and decided to use a "package" to load Joomla. When I do this I get the following error message in the cron.log

Fri Sep 18 11:30:01 MDT 2015 PHP Warning:  ZipArchive::getStream(): Invalid or unitialized Zip object in /usr/local/ispconfig/server/lib/classes/ on line 114

I don't know if this is because of something missing in the install procedures, or possibly a bug.

From: till

This message means that the joomla package from is broken at the moment so that the zip file could not be unpacked. Try to wait a day, then delete the broken install iin the ispconfig installed aps list and remove the package in /usr/local/ispconfig/server/aps_packages/ and try again. It can also be that the package got broken during download, so check that your server can download files from the internet.

From: Tyler

You sir are an amazing person!!!!

From: ragtimesp

For all of you who can't connect to FTP with website users after following this guide, please do as follow:

·         sudo nano /etc/pure-ftpd/conf/PassivePortRange

asAnd write inside "29799 29899" withouth the quotes. After that open the ports in your firewall, restart your server and will work like a charm!


From: rosario

thanks for your tutorial . I have a problem. control script provides this result . What it means ?<You missed to install these packages cat missing_packages You need to install these packages. To install these packages you need to run the command apt-get install package_name You can cross check the particular installation as follows:dpkg -l | grep package_name | cut -d ' ' -f3If it is showing the package_name then you can ignore the package.>

From: Alex

Hi there,

there seems to bee a problem. In Step7. at service restart hostname I got this error

stop: Unknown instance:hostname stop/waiting

my host looks like this   localhost hauptdomainxx.xx.xx.xx hauptdomain

Is there a soulotion?

Thank´s for your help


Kind Regards


From: till



hostname -f


when it shows the correct hostname, then proceed with the next step. If it does not show the right hostname, then edi the /etc/hosts file, it should have a line:   localhost localhost.localdomain

and a line for your server IP and main domain name, e.g.: hauptdomainxx.xx.xx.xx hauptdomain


then restart the server.


From: Mordimer

jail.local should be updated.

I was following the guide and the filter files was already there, but with different names: pure-ftpd.conf and dovecot.conf.Difference makes fail2ban failure to restart.