There is a new version of this tutorial available for Ubuntu 20.04 (Focal Fossa).

The Perfect Server - Ubuntu 9.10 [ISPConfig 3]

Version 1.1
Author: Falko Timme
Follow me on Twitter

This tutorial shows how to prepare an Ubuntu 9.10 (Karmic Koala) server for the installation of ISPConfig 3, and how to install ISPConfig 3. ISPConfig 3 is a webhosting control panel that allows you to configure the following services through a web browser: Apache web server, Postfix mail server, MySQL, MyDNS nameserver, PureFTPd, SpamAssassin, ClamAV, and many more.

Please note that this setup does not work for ISPConfig 2! It is valid for ISPConfig 3 only!

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


1 Requirements

To install such a system you will need the following:


2 Preliminary Note

In this tutorial I use the hostname with the IP address and the gateway 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):

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

Share this page:

Suggested articles

3 Comment(s)

Add comment



be careful when making clean install on 9.10

if you have a RAID0 Grub2 acts realy strange. It cant find the boot sector of the drive. 

sollution : make clean install on 8.10 according on Falko`s pedfect server 8.10. and dist-upgrade to 9.04 and 9.10


Good evening,
I'm also having the same problem, Outlook users may not connect, with the previously ispconfig2 the users were created in / etc / passwd, not this happening in ispconfig3 this, they are only created in mysql ..
claim to know what can be? the distribution and debian 6.

By: Anonymous

First to praise the tutorial, but I have a problem. when I want to download e-mail (Outlook), every time we seek authorization through ISPCONFIG with defined user and his mail box, simply will not let me authorization. I really do not know more what the problem is. In addition to asking configuration. It is also not possible or authorization through Squirrelmail.

tail -f /var/log/mail.log

May 13 22:00:01 myserver postfix/smtpd[8313]: disconnect from localhost.localdomain[]
May 13 22:02:51 myserver pop3d: Connection, ip=[::ffff:]
May 13 22:02:51 myserver pop3d: LOGIN FAILED, user=test, ip=[::ffff:]
May 13 22:02:56 myserver pop3d: Disconnected, ip=[::ffff:]


[email protected]:/# netstat -tap

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0      *:*                     LISTEN      2106/mydns
tcp        0      0 localhost.locald:domain *:*                     LISTEN      2106/mydns
tcp        0      0 *:ftp                   *:*                     LISTEN      1816/pure-ftpd (SER
tcp        0      0 *:ssh                   *:*                     LISTEN      975/sshd
tcp        0      0 *:smtp                  *:*                     LISTEN      6470/master
tcp        0      0 *:https                 *:*                     LISTEN      1962/apache2
tcp        0      0 localhost.localdo:10024 *:*                     LISTEN      988/amavisd (master
tcp        0      0 localhost.localdo:10025 *:*                     LISTEN      6470/master
tcp        0      0 localhost.localdo:mysql *:*                     LISTEN      4858/mysqld
tcp        0      0 localhost.localdo:spamd *:*                     LISTEN      1227/
tcp        0      0 *:webmin                *:*                     LISTEN      4146/perl
tcp        0      0 *:http-alt              *:*                     LISTEN      1962/apache2
tcp        0      0 *:www                   *:*                     LISTEN      1962/apache2
tcp        0      0 localhost.localdoma:ftp localhost.localdo:40089 TIME_WAIT   -
tcp        0      0 localhost.localdo:mysql localhost.localdo:39324 ESTABLISHED 4858/mysqld
tcp        0      0 localhost.localdo:35514 localhost.localdoma:www TIME_WAIT   -
tcp        0      0 localhost.localdo:39324 localhost.localdo:mysql ESTABLISHED 1643/amavisd (ch3-a
tcp        0     52          ESTABLISHED 1499/0
tcp        0      0 localhost.localdo:45780 localhost.locald:domain TIME_WAIT   -
tcp6       0      0 localhost:domain        [::]:*                  LISTEN      2106/mydns
tcp6       0      0 [::]:ftp                [::]:*                  LISTEN      1816/pure-ftpd (SER
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      975/sshd
tcp6       0      0 [::]:imaps              [::]:*                  LISTEN      1666/couriertcpd
tcp6       0      0 [::]:pop3s              [::]:*                  LISTEN      1707/couriertcpd
tcp6       0      0 [::]:pop3               [::]:*                  LISTEN      7164/couriertcpd
tcp6       0      0 [::]:imap2              [::]:*                  LISTEN      1635/couriertcpd
[email protected]:/#

[email protected]:/# telnet 25

Connected to
Escape character is '^]'.
220 ESMTP Postfix (Ubuntu)


My postfix configuration:

# See /usr/share/postfix/ for a commented, more complete version

# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = /usr/share/doc/postfix

# TLS parameters
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname =
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination =, localhost, localhost.localdomain
relayhost =
mynetworks = [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html
virtual_alias_domains =
virtual_alias_maps = proxy:mysql:/etc/postfix/, mysql:/etc/postfix/
virtual_mailbox_domains = proxy:mysql:/etc/postfix/
virtual_mailbox_maps = proxy:mysql:/etc/postfix/
virtual_mailbox_base = /var/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/, reject_unauth_destination
smtpd_tls_security_level = may
transport_maps = proxy:mysql:/etc/postfix/
relay_domains = mysql:/etc/postfix/
virtual_create_maildirsize = yes
virtual_maildir_extended = yes
virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = "The user you are trying to reach is over quota."
virtual_overquota_bounce = yes
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/
smtpd_client_restrictions = check_client_access mysql:/etc/postfix/
maildrop_destination_concurrency_limit = 1
maildrop_destination_recipient_limit = 1
virtual_transport = maildrop
header_checks = regexp:/etc/postfix/header_checks
mime_header_checks = regexp:/etc/postfix/mime_header_checks
nested_header_checks = regexp:/etc/postfix/nested_header_checks
body_checks = regexp:/etc/postfix/body_checks
content_filter = amavis:[]:10024
receive_override_options = no_address_mappings
message_size_limit = 0