Hosting környezet Debian 6 alatt

Bevezető

Immáron sokadik alkalommal ugrom neki a feladatnak, viszont úgy döntöttem ez alkalommal dokumentálom is, hátha mások számára is hasznos lesz ez a kis útmutató.

Angol nyelven temérdek ilyen és ehhez hasonló leírás található a neten, azonban bízom benne, hogy akad olyan, akinek könnyebbséget okoz, ha mindezt magyar nyelven olvashatja, mindezeken felül pedig igyekszem hozzátenni a saját tapasztalataimat, kiegészítéseimet is, hogy végül egy részletes, jól körbejárt útmutató kerekedjék ki belőle.

Létezik már egy Debian szerverről szóló címlapos írásom, azonban az még az 5.0-ás verziószámot viselő Lenny-hez készült és mára már nem is mindenütt helytálló, plusz főként az otthoni szerver létrehozásáról szól, míg ez az új útmutató már megállja a helyét komolyabb környezetben is.
Természetesen otthoni gépünkre is felvarázsolhatjuk a következő oldalakon olvasható megoldásokat, azonban ott már előfordulhat, hogy problémákba fogunk ütközni (például a levelezés esetén, mivel a legtöbb ISP korlátozza az egy IP-ről küldhető/fogadható levelek számát).

Alaphelyzet:

Adott egy (vagy több) szervergép egy feltelepített, szűz (lehetőleg grafikus felület nélküli) Debian Squeeze-el, amit mi főként hosting célokra (web, virtuális szerver) szeretnénk használni.
Ennek megoldására létezik rengeteg alternatíva, fizetősek és ingyenesek egyaránt. Web hosting panelek közül személyes kedvencem a Cpanel/WHM páros lenne, ám ezekért sajnos elég komoly összeget kell kicsengetnünk (ezen felül ők inkább CentOS alatt érzik jól magukat), így maradunk egy ingyenes megoldásnál, ami jelen esetben nem lesz más, mint az ISPConfig hármas verziója. Természetesen itt is lenne temérdek egyéb opció, mint például akár az ISPCP, de az előbb említett program számomra sokkal szimpatikusabb és a neten fellelhető tudásanyag is jóval bővebb hozzá.

Hirdetés

Mi is fog történni?

Első lépésként feltelepítjük a szükséges csomagokat, majd az ISPConfigot, végül pedig mindezt kiegészítjük egy OpenVZ-vel és képessé tesszük az ISPConfigot az OpenVZ adminisztrálására, hogy mindent könnyedén el tudjunk végezni webes felületről anélkül, hogy a cli-ben kellene turkálnunk.

Feltételezem, hogy a Debian telepítése sikeresen lezajlott, így innen kezdem az útmutatót.

A rendszer előkészítése

Először is frissítsük a csomaglistát, majd a csomagokat:

apt-get update
apt-get upgrade

Ha még nem tettük volna meg, akkor állítsunk be a szerverünknek egy érvényes hosztnevet, ez a későbbiekben fontos szerepet fog betölteni. Ajánlott regisztrálni és a gépünkre irányítani egy domaint, amin keresztül bármikor el tudjuk érni a jövőben.

echo hostingszerverem.hu > /etc/hostname
/etc/init.d/hostname.sh start

Ezek után a következő két parancs kiadására a hostingszerverem.hu választ kell hogy kapd. Amennyiben így történt, úgy tovább is léphetsz.

hostname
hostname -f

Visszaállítjuk az alapértelmezett shell-t dash-ról bash-ra, mivel a Debian 6-ban a bash-t felváltotta az előbb is említett dash.

dpkg-reconfigure dash

Megkérdezi, hogy szeretnéd-e a dash-t alapértelmezett shell-ként használni, tehát nyomj NEM-et.

Fontos, hogy a szerverünk lehetőleg mindig a pontos időt mutassa, ezért:

apt-get install ntp ntpdate

Egy nagy adag csomag telepítése következik (levelezés életre keltése, adatbázisszerver, biztonság, stb.)

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl courier-maildrop getmail4 rkhunter binutils sudo gamin

Kérdéseket kapunk, amelyre a következőket válaszoljuk:

A levelezés konfigurációjánál az "Internet Site"-ot válasszuk, a "System Mail Name" pedig a gép hosztneve, azaz a "hostingszerverem.hu" legyen. Kérni fogja, hogy adjuk meg a MySQL root user jelszavát, ezt írjuk be kétszer is és jegyezzük meg jól. A "Create directories for web-based administration" résznél válasszuk a nem-et, az SSL certificate-nél pedig nyomjunk entert.

Szeretnénk, hogy a MySQL szerver ne csak a localhostról legyen elérhető, ezért megnyitjuk a /etc/mysql/my.cnf fájlt és kikommenteljük a bind-address sort.

nano /etc/mysql/my.cnf

#bind-address = 127.0.0.1 (tehát egy # karaktert tettünk elé)

Ctrl + o majd Ctrl + x és végül újraindítjuk a MySQL-t.

/etc/init.d/mysql restart

A telepítés során az IMAP és POP3 SSL tanúsítványok a localhost hosztnévvel kerültek legenerálásra, ezért ajánlott ennek módosítása a hostname fájlban is megadott hostra.

Először töröljük őket:

cd /etc/courier
rm -f /etc/courier/imapd.pem
rm -f /etc/courier/pop3d.pem

Majd nyissuk meg a következő fájlokat és cseréljük ki a localhost sort a hostingszerverem.hu-ra.

nano /etc/courier/imapd.cnf
nano /etc/courier/pop3d.cnf

Így kell kinézniük mindkét esetben: CN=hostingszerverem.hu

Ctrl + o majd Ctrl +x és generáljuk újra a tanúsítványokat:

mkimapdcert
mkpop3dcert

Végül indítsuk újra a Az IMAP és POP3 SSL-t:

/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop-ssl restart

Újabb nagy adag csomag telepítése következik, spamszűrő, vírusirtó, stb.

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo 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

Leállíthatjuk a futó Spamassassint (és kilőhetjük az automatikus indulását), mert az ISPConfig automatikusan oldja meg a használatát.

/etc/init.d/spamassassin stop
update-rc.d -f spamassassin remove

Telepítjük az Apache2 webszervert, a PHP5-öt, ennek moduljait és még csomó egyebet.

apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby

A csomagok telepítése közben a PHPMyAdmin rákérdez, hogy melyik webszerverrel szeretnénk használni, ezért itt értelemszerűen az Apache2-t válasszuk ki. A következő kérdés, hogy az adatbázisát a dbconfig-common segítségével szeretnénk-e konfigurálni, itt pedig válasszuk a nem-et.

Betöltjük az Apache2 modulokat:

a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest

Újraindítjuk az Apache-ot:

/etc/init.d/apache2 restart

Jön a PureFTPd és a kvóta támogatás telepítése:

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

Megnyitjuk a PureFTPd konfigurációs fájlját és beállítjuk a chrootot, azaz a felhasználókat a saját könyvtárjukba zárjuk, tehát nem engedjük nekik, hogy kilépjenek belőle és illetéktelenül böngésszenek a szerveren.

nano /etc/default/pure-ftpd-common

VIRTUALCHROOT=true (a false szót cseréljük true-ra)

Ctrl + o majd Ctrl+x és megyünk is tovább.

(Nálam ez a megoldás valamiért nem működött, ezért a /etc/pure-ftpd/conf mappába létrehoztam egy "ChrootEveryone" nevű fájlt, aminek a tartalma mindössze annyi volt, hogy "Yes". Persze mindkettő macskakörmök nélkül. Ezzel a megoldással már üzemelt a chroot.)

Ha szeretnénk az FTP mellé TLS-t (titkosított protokoll támogatást) is a szerverünkre, akkor hajtsuk végre a következő lépéseket. (Ha nem szükséges, akkor haladhatunk tovább.)

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

Egy csomó kérdésre kell válaszolnunk, lakhely, szervezet, e-mail cím, stb. Megadhatjuk a valós adatokat, de ha csak entert nyomunk minden kérdés után, akkor is generálódik nekünk egy tanúsítvány.

Módosítsuk a jogosultságait az újonnan létrejött tanúsítványunknak:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Majd indítsuk újra a PureFTPd-t:

/etc/init.d/pure-ftpd-mysql restart

Engedélyezzük a rendszerben a kvóta támogatást az elsődlegesen használni kívánt partícióra. Ehhez nyissuk meg szerkesztésre az fstab-ot és keressük meg a / csatolási pontot.

nano /etc/fstab

A remount-ro után üssünk egy vesszőt és másoljuk be a következőt:

usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0

Ilyennek kell lennie a végeredménynek:

# / was on /dev/sda1 during installation
UUID=92bceda2-5ae4-4e3a-8748-b14da48fb297 / ext3 errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1

Ctrl + o majd Ctrl+ x és mehetünk tovább.

Újracsatoljuk a / partíciót, hogy a fenti módosítások érvénybe lépjenek:

mount -o remount /

Bekapcsoljuk a kvótát:

quotacheck -avugm
quotaon -avug

Telepítjük a BIND DNS szervert:

apt-get install bind9 dnsutils

Jönnek a webhely statisztikákat, látogatottsági infókat generáló programok (Webalizer, AWStats) és ezek függőségei.

apt-get install vlogger webalizer awstats geoip-database

Kapcsoljuk ki az AWstats alapértelemezett cron jobjait:

nano /etc/cron.d/awstats

Kommenteljük ki mindkét feladatot, hogy ez legyen a végeredmény:

#*/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

Ctrl + o majd Ctrl + x és robogunk tovább.

Fail2Ban

Jön a fail2ban telepítése:
(Nagyon hasznos kis segédprogram a brute-force támadások ellen.)

apt-get install fail2ban

Létrehozunk egy konfig fájlt, amelyben megadjuk, hogy mely szolgáltatásokat szeretnénk felügyelni:

nano /etc/fail2ban/jail.local

Másoljuk be a következőket az imént létrehozott fájlba:

[pureftpd]

enabled = true
port = ftp
filter = pureftpd
logpath = /var/log/syslog
maxretry = 3


[sasl]

enabled = true
port = smtp
filter = sasl
logpath = /var/log/mail.log
maxretry = 5


[courierpop3]

enabled = true
port = pop3
filter = courierpop3
logpath = /var/log/mail.log
maxretry = 5


[courierpop3s]

enabled = true
port = pop3s
filter = courierpop3s
logpath = /var/log/mail.log
maxretry = 5


[courierimap]

enabled = true
port = imap2
filter = courierimap
logpath = /var/log/mail.log
maxretry = 5


[courierimaps]

enabled = true
port = imaps
filter = courierimaps
logpath = /var/log/mail.log
maxretry = 5

Hozzunk létre 5 szűrő fájlt a fenti folyamatokhoz:

Első:

nano /etc/fail2ban/filter.d/pureftpd.conf

Tartalma a következő legyen:

[Definition]
failregex = .*pure-ftpd: \(.*@<HOST>\) \[WARNING\] Authentication failed for user.*
ignoreregex =

Második:

nano /etc/fail2ban/filter.d/courierpop3.conf

Tartalma a következő legyen:

[Definition]
failregex = pop3d: LOGIN FAILED.*ip=\[.*:<HOST>\]
ignoreregex =

Harmadik:

nano /etc/fail2ban/filter.d/courierpop3s.conf

Tartalma a következő legyen:

[Definition]
failregex = pop3d-ssl: LOGIN FAILED.*ip=\[.*:<HOST>\]
ignoreregex =

Negyedik:

nano /etc/fail2ban/filter.d/courierimap.conf

Tartalma a következő legyen:

[Definition]
failregex = imapd: LOGIN FAILED.*ip=\[.*:<HOST>\]
ignoreregex =

Ötödik:

nano /etc/fail2ban/filter.d/courierimaps.conf

Tartalma a következő legyen:

[Definition]
failregex = imapd-ssl: LOGIN FAILED.*ip=\[.*:<HOST>\]
ignoreregex =

Ha ezekkel megvagyunk, akkor indítsuk újra a fail2ban-t:

/etc/init.d/fail2ban restart

Webmail, ISPConfig

Telepítsük a mókuspostát (Squirrelmailt):

apt-get install squirrelmail

Hozzunk létre neki egy symlinket:

ln -s /usr/share/squirrelmail/ /var/www/webmail

Állítsuk be, hogy a couriert használja imap-hoz:

squirrelmail-configure

Az elénk ugró ablakban üssünk egy "D" betűt, majd nyomjunk entert. A következő képernyőnél írjuk be, hogy "courier" (persze macskakörmök nélkül) és ismét üssünk entert. Utána nyomjunk bármilyen gombot és ismét az első képernyőnél találjuk magunkat. Itt egy "S" betű (majd enter) leütésével elmentjük a változtatást, végül egy "Q" betűvel kilépünk a konfigurációs segédprogramból.

Ha sikeresen végrehajtottuk a fenti lépéseket, akkor már van is egy működőképes webmail felületünk, amit a http://hostingszerverem.hu/webmail cím alól érhetünk el a leggyorsabban (de természetesen simán csak IP-vel is működik).

A rendszert előkészítettük, jöhet az ISPConfig 3 telepítése:

Letöltjük, kicsomagoljuk:

cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install/

Futtatjuk a telepítőt:

php -q install.php

Néhány kérdésre kell válaszolnunk:

Select language (en,de) [en]: <-- Üssünk entert!
Installation mode (standard,expert) [standard]: <-- Üssünk entert!
Full qualified hostname (FQDN) of the server, eg server1.domain.tld [hostingszerverem.hu]: <-- Üssünk entert, ha az itt megjelent hosztnév megegyezik azzal, amit az első lépéseknél állítottunk be
MySQL server hostname [localhost]: <-- Üssünk entert, ha helyi MySQL szervert használunk
MySQL root username [root]: <-- Üssünk entert!
MySQL root password []: <-- Írjuk be a MySQL root felhasználó jelszavát!
MySQL database to create [dbispconfig]: <-- Üssünk entert!
MySQL charset [utf8]: <-- Üssünk entert!
ISPConfig Port [8080]: <-- Üthetünk entert, de nem árt megváltoztatni az alapértelmezett portot, ezzel is megnehezítve a betörők dolgát

A telepítő nekiáll a feladatának, majd rövidesen be is fejeződik a folyamat. Az új panelünket elérhetjük a https://hostingszerverem.hu:8080 -as címen (ha portot változtattunk, akkor értelemszerűen az kerüljön a kettőspont után). Az alapértelmezett belépési név / jelszó az admin (tehát admin/admin), de a jelszót mindenképpen változtassuk meg az első belépés után.

[ + ]

Squirrelmail cseréje Roundcube-ra

A Squirrelmailt sokan elég fapadosnak tarthatják (megjegyzem jogosan), szóval cseréljük le a sokkal tetszetősebb és okosabb Roundcube-ra! A lentebb olvasható kiegészítés amoba fórumtagunk tollából származik, köszönet neki érte még egyszer.

Kezdetnek lépjünk be a következő mappába:

cd /usr/share

Majd töltsük le a legújabb roundcube-ot:

wget http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/0.7.2/roundcubemail-0.7.2.tar.gz

Csomagoljuk ki:

tar -vxf roundcubemail-0.7.2.tar.gz

Belépve a mappába, adjunk változtassuk meg a következő mappák tulajdonosát:

chown -R www-data:www-data temp/ logs/

Készítsük el a mysql adatbázist a Roundcube számára:

Lépjünk be a mysqlbe:

mysql -p

Írjuk be a root felhasználó jelszavát, majd a következőket:

CREATE DATABASE roundcubemail;
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcubeuser@localhost IDENTIFIED BY 'jelszó';
FLUSH PRIVILEGES;

Természetesen itt a jelszót mi adjuk meg. (Lehetőleg ékezetek nélkül kis és nagy betűk és számot is tartalmazzon).

Miután ezzel készen lettünk, nyugdijazzuk a meglévő Squirrelmail-t:

mv squirrelmail squirrelmail.bak

Majd helyezzük a helyére a roundcube rendszert:

mv roundcubemail-0.7.2 squirrelmail

Ezek után ha a böngészőnkben a szerveren lévő bármely weboldalra navigálunk, az alattuk lévő /webmail aliassal elérjük a roundcube rendszert, mely még adatbázis hibával üdvözöl bennünket. Itt navigáljunk a /webmail/installer helyre, majd kövessük a leírtakat. Ha megvagyunk a varázslóval, kapunk 2 méretes szövegdobozt mely tartalma a roundcube működéséhez szükséges paraméterekkel van teli.
a terminálban navigáljuk a következő helyre:

cd /usr/share/squirrelmail/config

Majd adjuk ki a ezeket a parancsokat:

cp db.inc.php.dist db.inc.php
cp main.inc.php.dist main.inc.php

Majd egy szerkesztővel módosítsuk a fájlokat:
(Én nano-t használtam, szabadon használható bármi más.)

nano db.inc.php

Itt keressük meg ezt a sort:

$rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail';

Módosítsuk a mysql beállításinknak megfelelően(roundcube:pass@localhost/roundcubemail -> felhasználó:jelszó@host/adatbázisnév).

Ezután módositsuk a main beállításokat is:

nano main.inc.php

Itt a következő sorokat módosítsuk:

$rcmail_config['message_cache_lifetime'] = '30m';
$rcmail_config['default_host'] = 'localhost';
$rcmail_config['smtp_server'] = '%h';
$rcmail_config['session_lifetime'] = 30;
$rcmail_config['create_default_folders'] = TRUE;

(Ezekkel növeljük a biztonságot, alapértelmezzünk a localhost használatát, növeljük a session hosszát, és csökkentjük a terhelés a üzenetek cachelés idejének csökkentésével).

Ha ezeken túl vagyunk, van egy működő Roundcube rendszerünk.

A Roundcube rendszernek van modulja az ISPConfighoz, így képes a kliens lehetőséget adni a felhasználóknak az email fiókok jelszavak megváltoztatásához. Ez a modul alapértelmezettként kivan kapcsolva, a következőképpen engedélyezhetjük:

nano config.inc.php

Itt keressük meg az alábbit, és módosítsuk:

$rcmail_config['plugins'] = array(‘password’);

Mentsünk és navigáljunk át a következő mappába:

cd ..
cd /plugins/password

Készítsük el a config.inc.php fájlt:

cp config.inc.php.dist config.inc.php

Majd módosítsuk benne a következőket:

$rcmail_config['password_db_dsn'] = ‘mysql://root:password@localhost/dbispconfig’;

Itt érdemes a mysql-ben készíteni egy felhasználót, akinek joga van modosítani az ispconfig afdatbázisát, vagy megadhatjuk a mysql root felhasználót is. (Tetszés szerint.)
Ezek után létre kell hoznunk egy funkciót a mysql-ben. Ezt legkönnyebben a phpmyadminban tudjuk megtenni, másoljuk be az alábbi szöveget sql querryhez.

USE dbispconfig;
DELIMITER //
CREATE FUNCTION update_passwd (pwd varchar(100), usr varchar(100)) RETURNS INT
BEGIN
UPDATE databasename.mail_user SET password=pwd WHERE login=usr LIMIT 1; # Default: UPDATE dbispconfig.mail_user SET password=pwd WHERE login=usr LIMIT 1;
RETURN ROW_COUNT();
END//
DELIMITER ;

Ha mindent jól csináltunk a roundcube-ban a beállításoknál megjelenik egy jelszó fül, ahol megváltoztatható a felhasználó fiókhoz tartozó jelszava.

Az OpenVZ telepítése

Telepítsük az OpenVZ kernelt:

64 bites rendszer esetén:

apt-get -y install linux-image-openvz-amd64 vzctl vzquota vzdump

32 bites rendszer esetén:

apt-get -y install linux-image-openvz-686 vzctl vzquota vzdump

Hozzunk létre egy symlinket a /var/lib/vz mappáról a a /vz-re, mivel az ISPConfig ott fogja keresni:

ln -s /var/lib/vz /vz

Nyissuk meg a sysctl.conf-ot:

nano /etc/sysctl.conf

Másoljuk be a következőket:

net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.proxy_arp=1

Ctrl+o majd Ctrl+x.

Alkalmazzuk a változtatásokat:

sysctl -p

Ha a virtuális gépeink IP címei más alhálózatról származnak, mint a szerverünk IP címe, akkor fontos, hogy végrehajtsuk a következőket.

nano /etc/vz/vz.conf

Módosítsuk a következő sort így:

NEIGHBOUR_DEVS=all

Indítsuk újra a szervert, hogy az OpenVZ kernel használatba kerüljön:

reboot

Töltsünk le egy OpenVZ-hez tartozó Debian CD képet, így képesek leszünk virtuálisan futtatni a Debian 6-os verzióját:

cd /var/lib/vz/template/cache

64 bites rendszer esetében:

wget http://download.openvz.org/template/precreated/contrib/debian-6.0-amd64-minimal.tar.gz

32 bites rendszer esetében:

wget http://download.openvz.org/template/precreated/contrib/debian-6.0-i386-minimal.tar.gz

Egyéb operációs rendszerek CD képei fellelhetők a következő oldalon: http://download.openvz.org/template/precreated/contrib/

A teljesség igénye nélkül: Arch, Gentoo, Fedora, OpenSUSE, Ubuntu, CentOS, stb virtualizálására nyílik lehetőségünk. A felsorolásból gondolom már egyértelművé vált, de azért leírom, hogy OpenVZ környezetben nincs lehetőség Windows rendszerek virtualizálására.

Az OpenVZ feltelepült, az alapvető beállítások készen, következhet az ISPConfig konfigurálása.

Az OpenVZ és ez ISPConfig házasítása

Lépjünk be a már feltelepített ISPConfig admin felületére, majd a felső menüsoron válasszuk a "System" menüpontot, majd azon belül a bal oldalt található "Server Services" almenüt. A bejövő ablakban pipáljuk ki a "Vserver-server" szolgáltatást, végül kattintsunk a "Save" gombra. Ezzel engedélyeztük az ISPConfigban a virtuális szerver szolgáltatásának támogatását.

[ + ]

(Megjegyzés: Lehet, hogy bug, de az is lehet, hogy ez csak nálam fordult elő, azonban amikor legutoljára próbáltam, akkor valamiért nem működött az automatikus engedélyezés, tehát hiába pipáltam ki a szolgáltatást, az ISPConfig nem aktiválta. Erre viszont csak akkor jövünk rá, amikor már végeztünk az útmutatóval, hoznánk létre az első virtuális gépet, de az nem indul el. Ilyenkor érdemes a logokba beleolvasni, hátha ad valami kiindulási pontot. A megoldás ebben az esetben az volt, hogy manuálisan kellett létrehoznom egy symlinket az ISPConfig plugins-available mappájában található OpenVZ modulról az ispconfig plugins-enabled mappájába.)

Katitntsunk a felső menüsoron a "Vserver" ikonra, azon belül pedig navigáljunk az "OSTemplates" bal oldali almenüpontra. Ott válasszuk a "Debian minimal" menüpontot. Nagyon fontos, hogy a "Template filename" pontos ugyanaz legyen, mint ami a letöltött CD képünk neve is. Tehát 32 bites rendszer esetében "debian-6.0-i386-minimal", 64 bites rendszer esetében pedig "debian-6.0-amd64-minimal". Szintén fontos, hogy a .tar.gz végződést ide NEM kell kiírnunk. Az "Exist on all servers" és az "Active" gomb minden esetben legyen kipipálva. Ha ezek megvannak, akkor kattintsunk a "Save" gombra és mentsük el a módosításokat.

[ + ]

Az utolsó lépés az IP címek hozzáadása. Kattintsunk a bal oldali "IP adresses" menüpontra, majd az "Add new record" gombra. Fontos megjegyezni, hogy minimum 2 IP címre lesz szükségünk a virtualizáláshoz. Egy a szerverünknek, egy pedig a virtuális gépnek. Ebből következik, hogy minden egyes virtuális géphez szükségünk lesz egy új IP címre. Adjuk hozzá az IP címeket, mentsük el őket, és létre is hozhatjuk az első virtuális gépünket.

[ + ]

Kattintsunk bal oldalon a "Virtual Servers" gombra, majd az "Add new record"-ra. Itt részletesen be tudjuk állítani az új virtuális gép paramétereit, plusz ki tudjuk választani milyen rendszert szeretnénk virtualizálni. Jelenleg csak a Debian CD kép választható, mivel mást nem töltöttünk még le.
Ki kell választanunk egy IP címet és meg kell adnunk egy hosztnevet is. A "VM Password" mező mögötti karaktersor pedig az új gépünk root felhasználójának login jelszava lesz. Az "Active" és a "Start at boot" menüpontok legyenek kipipálva. Ezek után készen is vagyunk. Ha szeretnénk, akkor az "Advanced" fül alatt részletesen is beállíthatjuk a rendszernek kiosztott memória és CPU magok/egységek mennyiségét. Kattintsunk a "Save" gombra, várjunk pár percet, és ha minden jól megy, akkor csatlakozhatunk is Putty-val az újonnan létrehozott rendszerünk IP címére.

[ + ]

Ha valami miatt nem sikerülne a csatlakozás, akkor lépjünk be SSH-n keresztül az anyaszerverünkre és adjuk ki a vzlist -a parancsot. Ilyesmit kellene látnunk:

CTID NPROC STATUS IP_ADDR HOSTNAME
101 7 running 192.168.0.106 vm1.ispconfig.local

Ha nem ez tárul a szemünk elé, akkor nem indult el a container és valami probléma van. Ilyenkor szintén ajánlatos a logokat ellenőrizni először.

A PureFTPd nyugdíjazása

Nem tudom ki hogy van vele, de nekem a PureFTPd-nél sokkal szimpatikusabb a ProFTPd. Az ISPConfig kettes verziójában még ez volt az alapértelmezett FTP szerver, ráadásul a paramétereinek módosítása is sokkal egyszerűbb. Lehet ez csak az én furcsaságom, de úgy döntöttem, hogy nyugdíjaztatom a PureFTPd-t és visszaváltok ProFTPd-re. Természetesen ez is megoldható egy kis ügyeskedéssel, ráadásul semmi hátrányt nem jelent a dolog, mert a folyamat végeztével minden ugyanúgy fog működni, mint azelőtt. (Na jó, egy hátulütője talán mégis van a dolognak. Mivel egy ISPConfig fájlt is érint a folyamat, ezért egy esetleges frissítés esetén elveszhet a módosításunk, erre azért figyeljünk).

Töröljük a PureFTPd-t:

apt-get remove pure-ftpd-common pure-ftpd-mysql

Telepítsük a ProFTPd-t:

apt-get install proftpd proftpd-mod-mysql

Ha rákérdez, akkor a "standalone" módot válasszuk.

Hozzunk létre neki egy csoportot és felhasználót:

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

Módosítsuk kicsit az ISPConfig adatbázisát:

mysql -u root -p
Use dbispconfig

Az első parancs kiadása után kérni fogja a MySQL root jelszót, adjuk meg neki.

Hajtsuk végre a következő módosításokat a táblán:

ALTER TABLE `ftp_user` ADD `shell` VARCHAR( 18 ) NOT NULL DEFAULT
'/sbin/nologin',
ADD `count` INT( 11 ) NOT NULL DEFAULT '0',
ADD `accessed` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
ADD `modified` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00';
CREATE TABLE ftp_group (
groupname varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '5500',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';
INSERT INTO `ftp_group` (`groupname`, `gid`, `members`) VALUES
('ftpgroup', 2001, 'ftpuser');

Nyissuk meg az ISPConfig konfigurációs fájlját:

nano /usr/local/ispconfig/interface/lib/config.inc.php

Keressük ki az ISPConfig adatbázisának jelszavát és írjuk fel valahova (Keressük a "db_password" mögött).

Módosítsuk a ProFTPd konfigurációját és engedélyezzük az SQL modult:

nano /etc/proftpd/proftpd.conf

Szedjük ki a kettőskeresztet az include elől, hogy ezt kapjuk:

Include /etc/proftpd/sql.conf

Ctrl + o majd Ctrl +x.

Nyissuk meg a ProFTPd SQL konfigurációs fájlját:

nano /etc/proftpd/sql.conf

Másoljuk bele a következőket:

#
# Proftpd sample configuration for SQL-based authentication.
#
# (This is not to be used if you prefer a PAM-based SQL authentication)
#

<IfModule mod_sql.c>
DefaultRoot ~

SQLBackend mysql

# The passwords in MySQL are encrypted using CRYPT

SQLAuthTypes Plaintext Crypt

SQLAuthenticate users groups

# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo dbispconfig@localhost ispconfig _IRDIDEAJELSZOT_

# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo ftp_user username password uid gid dir shell

# Here we tell ProFTPd the names of the database columns in the "grouptable"

# we want it to interact with. Again the names match with those in the db
SQLGroupInfo ftp_group groupname gid members

# set min UID and GID - otherwise these are 999 each
SQLMinID 500

# create a user's home directory on demand if it doesn't exist
CreateHome off

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

RootLogin off

RequireValidShell off

</IfModule>

Fontos: A fenti szöveg bemásolása után keresd meg az _IRDIDEAJELSZOT_ részt, töröld ki és másold be az imént leírt ISPConfig MySQL jelszavát.

Ezután Ctrl + o majd Ctrl + x.

Engedélyezzünk még két modult:

nano /etc/proftpd/modules.conf

Ismét szedjük ki a kettős keresztet a loadmodule elől két helyen is:

LoadModule mod_sql.c
LoadModule mod_sql_mysql.c

Ctrl + o majd Ctrl + x.

Indítsuk újra a ProFTPd-t:

/etc/init.d/proftpd restart

Még egy apró módosítás az ISPConfig kódjában és kész is vagyunk:

nano /usr/local/ispconfig/interface/web/sites/ftp_user_edit.php

Keressük meg a következőt:

$uid = $web["system_user"];
$gid = $web["system_group"];

És cseréljük le erre:

$userinfo = posix_getpwnam($web["system_user"]);
$uid = $userinfo['uid'];
$gid = $userinfo['gid'];

Kész is vagyunk!

Végeredmény

Ha sikeresen eljutottunk idáig, akkor van egy stabil, megbízható Web hosting szerverünk, könnyen kezelhető és átlátható panellel, ami képes virtuális gépek létrehozására is.

ISPConfig Admin: https://hostingszerverem.hu:8080 (vagy a port, amit választottunk)
Squirrelmail Webmail: http://hostingszerverem.hu/webmail
PHPMyAdmin: http://hostingszerverem.hu/phpmyadmin (Érdemes lehet .htaccess-el korlátozni az elérését vagy akár teljes egészében eltüntetni, ha nincs rá igazán szükségünk).

Ha egyéb biztonsági tippekre is szükség lenne, akkor esetleg megérhet egy olvasást a "Debian rendszerünk biztonsága" című írásom is.

Remélem hasznosnak bizonyult ez a kis útmutató. Bármilyen hibát, észrevételt, korrekciót örömmel fogadok és esetlegesen bővítem is majd az írást, ha befut valami hasznos javaslat. Amennyiben valaki elakadna vagy további segítségre lenne szüksége, úgy bátran kérdezhet az írás topikjában vagy akár tőlem is privátban.

Források: Howtoforge, Google

Azóta történt