MultiServer (Web Server, MySQL, Email, DNS) – Debian Squeeze cz.1

Chciałbym pokazać jak przy użyciu zewnętrznego dedykowanego serwera możemy przygotować środowisko udostępniające możliwość stworzenia wielu wirtualnych maszyn, które możemy udostępnić na zewnątrz.


Czego będziemy potrzebowali?

– musimy posiadać wykupiony serwer dedykowany, powiedźmy taki: http://www.hetzner.de/en/hosting/produkte_rootserver/ex4

– powinniśmy mieć min. 5 różnych adresów IP,

Utworzymy następujące maszyny:

Typ: Node
Hardware: Serwer dedykowany
Nazwa: root.example.com
IP:192.168.1.1

Typ: Container
Hardware: Maszyna wirtualna
Hostname: web.example.com
IP:192.168.1.2

Typ: Container
Hardware: Maszyna wirtualna
Hostname: mail.example.com
IP:192.168.1.3

Typ: Container
Hardware: Maszyna wirtualna
Hostname: ns1.example.com
IP:192.168.1.4

Typ: Container
Hardware: Maszyna wirtualna
Hostname: ns2.example.com
IP:192.168.1.5

0) Certyfikat SSL:
W następnym poście opisałem kroki potrzebne do wygenerowania certyfikatu SSL dla naszego środowiska serwerowego.

1) Podstawy konfiguracji:

HetZner udostępnił prosty graficzny interfejs, dzięki któremu możemy w prosty sposób możemy zainstalować jeden z dostępnych systemów. Wybieramy Debian 6.0 minimal. Otrzymasz dane do zalogowania się do naszego systemu.


2) Instalujemy paczkę do wirtualizacji systemu:

Na początku musimy dla pewności pobrać aktualizacje dla naszego systemu, o ile są dostępne:

apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade

Dodatkowo musimy zainstalować pakiety pozwalające nam na edycję plików, tworzące archiwa, sprawdzające czas:

apt-get -y install nano wget ntp ntpdate


Pobieramy oraz instalujemy OpenVZ (system do tworzenia maszyn wirtualnych w naszym środowisku):

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


Tworzymy dowiązanie symboliczne:

ln -s /var/lib/vz /vz


Dodajemy odpowiednie wpisy do pliku sysctl.conf:

nano /etc/sysctl.conf


będą one konfigurowały cechy naszego połączenie poprze IPv4:

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

poleceniem:

sysctl -p

zaktualizujemy wpisy, tak aby system je rozpoznał, dzięki czemu nasze maszyny wirtualne otrzymają wewnętrzne adresy IP, a poprzez główny adres IP będą mogły łączyć się ze światem. 
Będziemy edytować:

nano /etc/vz/vz.conf



dodamy:

# Controls which interfaces to send ARP requests and modify APR #tables on.NEIGHBOUR_DEVS=all


robimy:

reboot


Katalog /home po zamontowaniu może być wykorzystany jako kopi zapasowa OpenVZ:

rm -rf /var/lib/vz/dump ln -s /home/backup/vz /var/lib/vz/dump

Przygotujemy konfigurację, dzięki której później będziemy mogli wykorzystać z fail2ban:

nano /etc/vz/vz.conf

szukamy IPTABLES, następnie komentujemy go. Dodajemy natomiast:

IPTABLES=”ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length ipt_state”


następnie aktywujemy nowe ustawienia:

modprobe xt_state


Dodajemy GUI dla OpenVZ:

wget -O – http://ovz-web-panel.googlecode.com/svn/installer/ai.sh | sh

Będziemy mogli teraz dostać się do OpenVZ poprzez przeglądarkę:

http://nasze_ip:3000



3) Utworzenie nowej maszyny wirtualnej:

Logujemy się przez przeglądarkę do OpenVZ. Klikamy kolejno:localhost -> OS Templates. Następnie klikamy: Install New OS Template -> Contributed  oraz wybieramy debian-6.0-amd64-minimal (lub inną dystrybucję).Wracamy do ekranu localhost następnie klikamy na Create virtual server. Musimy wypełnić kilka opcji dotyczących maszyny:

Server ID (VEID): wpisujemy naszą nazwę (ewentualnie numer)
OS Template: pozostawiamy domyślną wersje systemu
Server Template: unlimited
IP Address: 192.168.1.2
Host Name: web.example.tld
DNS Server: 8.8.4.4 8.8.8.8 (wpisujemy nasze DNS’y)
Pozostałe parametry pozostawiamy.
Musimy utworzyć dodatkowo jeden serwer pocztowy, oraz dwa obsługujące DNS. Zmieniamy IP oraz nazwę hosta ( informacje te znajdziemy na początku posta ).
Przeprowadzimy podstawową konfigurację maszyn wirtualnych. Logujemy się na każdą utworzoną maszyną wirtualną, następnie wydajemy:

apt-get update && apt-get -y upgrade && apt-get -y dist-upgrade 
apt-get -y install nano wget ntp ntpdate




4) Konfigurujemy serwer dedykowany (web.example.tld):

Edytujemy plik hosts na wszystkich maszynach:

nano /etc/hosts
127.0.0.1 localhost192.168.1.2 web.example.tld192.168.1.3 mail.example.tld192.168.1.4 ns1.example.tld192.168.1.5 ns2.example.tld
# The following lines are desirable for IPv6 capable hosts::1     localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allroutersff02::3 ip6-allhosts

przechodzimy do maszyny (192.168.1.2) nadajemy nazwę serwerowi web:


echo web.example.tld > /etc/hostname /etc/init.d/hostname.sh start

Instalujemy Serwer MySQL:

apt-get -y install mysql-client mysql-server


edytujemy ustawienia nasłuchu dla naszej bazy:

nano /etc/mysql/my.cnf
# 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

Komentujemy bind-address, tak aby baza nasłuchiwała na wszystkich  interfejsach maszyny.

Restartujemy bazę:

/etc/init.d/mysql restart


Musimy doinstalować niezbędne pakiety:

apt-get -y 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 libopenssl-ruby libapache2-mod-ruby sudo zip wget

W czasie instalacji musimy odpowiedzieć na pytanie:

Web server to reconfigure automatically: apache2


Musimy uruchomić kilka modułów apache’a:

a2enmod suexec rewrite ssl actions include ruby dav_fs dav auth_digest headers expires


Instalujemy ftp:

apt-get -y install pure-ftpd-common pure-ftpd-mysql
nano /etc/default/pure-ftpd-common


musimy ustawić:

VIRTUALCHROOT=true


Ustawimy bezpieczne połączenie dla ftp:


echo 1 > /etc/pure-ftpd/conf/TLS 
mkdir -p /etc/ssl/private/



Konfigurujemy certyfikat SSL:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Country Name (2 letter code) [AU]: skrót kraju PL State or Province Name (full name) [Some-State]: WojewództwoLocality Name (eg, city) []: Miasto
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Nazwa firmy
Organizational Unit Name (eg, section) []: Oddział / Departament
Common Name (eg, YOUR name) []: nazwa naszej domenyEmail Address []: mail admina
chmod 600 /etc/ssl/private/pure-ftpd.pem

Instalujemy statystyki:

apt-get -y install vlogger webalizer awstats
nano /etc/cron.d/awstats


kopiujemy poniższy wpis w takim kształcie:

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

Opcjonalnie możemy zainstalować Jailkit ( robimy to przez instalacją ISPConfig ):

apt-get -y install build-essential autoconf automake1.9 libtool flex bison debhelper
cd /tmp wget http://olivier.sessink.nl/jailkit/jailkit-2.14.tar.gz tar xvfz jailkit-2.14.tar.gz cd jailkit-2.14 ./debian/rules binary cd .. dpkg -i jailkit_2.14-1_*.deb rm -rf jailkit-2.14*


Instalujemy fail2ban :

apt-get install fail2ban
nano /etc/fail2ban/jail.local

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

Konfigurujemy filter:

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

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

Restart fail2ban:

/etc/init.d/fail2ban restart



Musimy dodać konta do bazy danych. Logujemy się do phpmyadmin, http://192.168.1.2/phpmyadmin:

CREATE USER 'root’@’192.168.1.3′ IDENTIFIED BY 'myrootpassword’; GRANT ALL PRIVILEGES ON * . * TO 'root’@’192.168.1.3′ IDENTIFIED BY 'myrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root’@’192.168.1.4′ IDENTIFIED BY 'myrootpassword’; GRANT ALL PRIVILEGES ON * . * TO 'root’@’192.168.1.4′ IDENTIFIED BY 'myrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root’@’192.168.1.5′ IDENTIFIED BY 'myrootpassword’; GRANT ALL PRIVILEGES ON * . * TO 'root’@’192.168.1.5′ IDENTIFIED BY 'myrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root’@’mail.example.tld’ IDENTIFIED BY 'myrootpassword’; GRANT ALL PRIVILEGES ON * . * TO 'root’@’mail.example.tld’ IDENTIFIED BY 'myrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root’@’ns1.example.tld’ IDENTIFIED BY 'myrootpassword’; GRANT ALL PRIVILEGES ON * . * TO 'root’@’ns1.example.tld’ IDENTIFIED BY 'myrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root’@’ns2.example.tld’ IDENTIFIED BY 'myrootpassword’; GRANT ALL PRIVILEGES ON * . * TO 'root’@’ns2.example.tld’ IDENTIFIED BY 'myrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

Oczywiście musimy odpowiednio wpisać IP, oraz nazwy naszym wirtualnych maszyn, zgodnie z ustawieniami w naszej sieci.

Wracamy do maszyny Web:

cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install/
php -q install.php
Select language (en,de) [en]:en
Installation mode (standard,expert) [standard]:expert
Full qualified hostname (FQDN) of the server, eg server2.domain.tld [web.example.tld]:web.example.tld
MySQL server hostname [localhost]:localhost MySQL root username [root]:root
MySQL root password []:wpisujemy haslo rootaMySQL database to create [dbispconfig]:dbispconfig MySQL charset [utf8]:utf8 Shall this server join an existing ISPConfig multiserver setup (y,n) [n]:n Configure Mail (y,n) [y]:n
Configure Jailkit (y,n) [y]:y
Configure FTP Server (y,n) [y]:y Configure DNS Server (y,n) [y]:n
Configure Apache Server (y,n) [y]:y
Configure Firewall Server (y,n) [y]:n
Install ISPConfig Web-Interface (y,n) [y]:y
ISPConfig Port [8080]:8080
Enable SSL for the ISPConfig web interface (y,n) [y]:y
Country Name (2 letter code) [AU]: ENTER State or Province Name (full name) [Some-State]: ENTER
Locality Name (eg, city) []: ENTER Organization Name (eg, company) [Internet Widgits Pty Ltd]: ENTER Organizational Unit Name (eg, section) []: ENTER
Common Name (eg, YOUR name) []: nasza nazwaEmail Address []: ENTER
A challenge password []: ENTER An optional company name []:ENTER


Usuwamy niepotrzebne pliki:

cd /tmp
rm -rf /tmp/ispconfig3_install/install
rm -f /tmp/ISPConfig-3-stable.tar.gz


5) Instalujemy serwer pocztowy (mail.example.tld):


Musimy posiadać wpisy w /etc/hosts:

127.0.0.1 localhost192.168.1.2 web.example.tld
192.168.1.3 mail.example.tld
192.168.1.4 ns1.example.tld
192.168.1.5 ns2.example.tld
# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Nadajemy mu nazwę:

echo mail.example.tld > /etc/hostname echo mail.example.tld > /etc/mailname
/etc/init.d/hostname.sh start

Instalujemy Postfix, MySQL oraz dovecot:

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


Odpowiadamy na pytania w trakcie instalacji:

General type of configuration? Internet site
Mail name? mail.example.tld


Dodajemy ochronę antywirusową:

apt-get -y 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
Zainstalujemy PHP:
apt-get -y install php5-cli php5-mysql php5-mcrypt mcrypt
apt-get install fail2ban

nano /etc/fail2ban/jail.local


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

[Definition]failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login (auth failed|Aborted login (tried to use disabled|Disconnected (auth failed|Aborted login (d+ authentication attempts).*rip=(?PS*),.*ignoreregex =
/etc/init.d/fail2ban restart


Instalujemy ISPConfig:

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

Select language (en,de) [en]:en
Installation mode (standard,expert) [standard]:expert Full qualified hostname (FQDN) of the server, eg server1.domain.tld [mail.example.tld]:mail.example.tld MySQL server hostname [localhost]:localhost
MySQL root username [root]:root
MySQL root password []:hasło roota bazy
MySQL database to create [dbispconfig]:dbispconfig
MySQL charset [utf8]:utf8 Shall this server join an existing ISPConfig multiserver setup (y,n) [n]:y
MySQL master server hostname []:web.example.tld MySQL master server root username [root]:root MySQL master server root password []:hasło roota bazyMySQL master server database name [dbispconfig]:dbispconfig
Configure Mail (y,n) [y]:y
Country Name (2 letter code) [AU]:KrajState or Province Name (full name) [Some-State]:WojewództwoLocality Name (eg, city) []:Miasto
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ENTER Organizational Unit Name (eg, section) []:ENTER
Common Name (eg, YOUR name) []:ENTER
Email Address []:ENTER
Configure Jailkit (y,n) [y]:n
Configure FTP Server (y,n) [y]:n
Configure DNS Server (y,n) [y]:n
Configure Apache Server (y,n) [y]:n
Configure Firewall Server (y,n) [y]:n
Install ISPConfig Web-Interface (y,n) [y]:n



Kończymy konfigurację:


rm -f /var/www/ispconfig

rm -rf /tmp/ispconfig3_install/install rm -f /tmp/ISPConfig-3-stable.tar.gz



6) Instalujemy serwer DNS:

Dodajemy jeżeli nie posiadamy wpisy w /etc/hosts. Dokładnie tak samo jak jak wcześniej.Zmienimy nazwę maszyny:

echo ns1.example.tld > /etc/hostname
/etc/init.d/hostname.sh start

dodajemy MySQL, PHP, fail2ban, Bind, ISPConfig:

apt-get -y install mysql-client mysql-server

apt-get -y install php5-cli php5-mysql php5-mcrypt mcrypt

apt-get install fail2ban
apt-get -y install bind9 dnsutils
cd /tmp wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz tar xfz ISPConfig-3-stable.tar.gz cd ispconfig3_install/install/

php -q install.php

Select language (en,de) [en]: en Installation mode (standard,expert) [standard]:expert Full qualified hostname (FQDN) of the server, eg server2.domain.tld [ns1.example.tld]: ns1.example.tld MySQL server hostname [localhost]: localhost MySQL root username [root]: root MySQL root password []: hasło roota dla bazyMySQL database to create [dbispconfig]: dbispconfig MySQL charset [utf8]:utf8 Shall this server join an existing ISPConfig multiserver setup (y,n) [n]: y MySQL master server hostname []: web.example.tld MySQL master server root username [root]: root MySQL master server root password []:hasło roota do bazyMySQL master server database name [dbispconfig]: dbispconfig Configure Mail (y,n) [y]: n Configure Jailkit (y,n) [y]: n Configure FTP Server (y,n) [y]: n Configure DNS Server (y,n) [y]:y Configure Apache Server (y,n) [y]: n Configure Firewall Server (y,n) [y]:n Install ISPConfig Web-Interface (y,n) [y]:n


Znów usuwamy niepotrzebne pliki:


rm -f /var/www/ispconfig
rm -rf /tmp/ispconfig3_install/install
rm -f /tmp/ISPConfig-3-stable.tar.gz


7) Dodamy zapasowy serwer DNS:


Dodajemy jeżeli nie posiadamy wpisy w /etc/hosts. Dokładnie tak samo jak jak wcześniej.Zmienimy nazwę maszyny:

echo ns2.example.tld > /etc/hostname
/etc/init.d/hostname.sh start

dodajemy MySQL, PHP, fail2ban, Bind, ISPConfig:

apt-get -y install mysql-client mysql-server

apt-get -y install php5-cli php5-mysql php5-mcrypt mcrypt

apt-get install fail2ban
apt-get -y install bind9 dnsutils
cd /tmp wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz tar xfz ISPConfig-3-stable.tar.gz cd ispconfig3_install/install/

php -q install.php

Select language (en,de) [en]: en Installation mode (standard,expert) [standard]:expert Full qualified hostname (FQDN) of the server, eg server2.domain.tld [ns1.example.tld]: ns2.example.tld MySQL server hostname [localhost]: localhost MySQL root username [root]: root MySQL root password []: hasło roota dla bazyMySQL database to create [dbispconfig]: dbispconfig MySQL charset [utf8]:utf8 Shall this server join an existing ISPConfig multiserver setup (y,n) [n]: y MySQL master server hostname []: web.example.tld MySQL master server root username [root]: root MySQL master server root password []:hasło roota do bazyMySQL master server database name [dbispconfig]: dbispconfig Configure Mail (y,n) [y]: n Configure Jailkit (y,n) [y]: n Configure FTP Server (y,n) [y]: n Configure DNS Server (y,n) [y]:y Configure Apache Server (y,n) [y]: n Configure Firewall Server (y,n) [y]:n Install ISPConfig Web-Interface (y,n) [y]:n


Znów usuwamy niepotrzebne pliki:


rm -f /var/www/ispconfig
rm -rf /tmp/ispconfig3_install/install
rm -f /tmp/ISPConfig-3-stable.tar.gz


8) Konfigurujemy ISPConfig:


Logujemy się do ISPConfig: http://192.168.1.2:8080. Dodamy teraz maszyny na których uruchommiliśmy kolejne usługi do ISPConfig. W tym celu klikamy kolejno:  System – Server services – web.example.tld. Odznaczymy: WebserverFileserver oraz DB-Server, na koniec klikamy na Save. Dalej klikamy na: System – Server services – mail.example.tld. Odznaczamy wszystko poza Mailserver, na koniec klikamy na Save. Na koniec skonfigurujemy serwery DNS, w tym celu przechodzimy odpowiednio na:System – Server services – ns1.example.tld / ns2.example.tld oraz odznaczymy wszystkie opcje poza  DNS-Server. Na koniec zapisujemy klikając na Save.

Dla serwera mailowego musimy dodać możliwość odwrotnego rozwiązywania nazw, robimy to tak:


Zapisujemy ten adres. W naszych ustawieniach pod 192.168.1.3 powinien znaleźć się wpis mail.example.tld.
Resztę zrobi serwer.


9) Dodamy kilka opcji do naszego środowiska:

Wszystkie poniższe kroki możemy powtórzyć na maszynach wirtualnych. Obecnie kroki przeprowadzimy dla maszyny dedykowanej. 

Na początek SSH:

ssh-keygen


W trakcie możemy podać hasło, ale nie musimy. Skonfigurujemy teraz logowanie bez potrzeby podawania hasła, przy pomocy klucza ssh:

ssh-copy-id -i .ssh/id_rsa.pub root@root.example.tld
passwd -l root 


Dodatkowo zainstalujemy paczkę, która będzie wysyłać raporty na temat działania naszego serwera (LogWatch):

apt-get -y install logwatch
nano /usr/share/logwatch/default.conf/logwatch.conf


dodajemy:

Output = mail
Format = text
MailTo = username@youremail.tld #wpisujemy nasz login, informacje będziemy otrzymywać na wewnętrzny mail.
Detail = High
Service = All

apt-get -y install fail2ban
nano /etc/fail2ban/jail.local

[ssh]enables = trueport    = sshfilter  = sshdlogpath  = /var/log/auth.logmaxretry = 3
[ssh-ddos]
enabled = trueport    = sshfilter  = sshd-ddoslogpath  = /var/log/auth.logmaxretry = 5
/etc/init.d/fail2ban restart


Warto dodać panel, dzięki któremu będziemy mogli zobaczyć podstawowe parametry naszej maszyny. Więcej informacji będziemy mogli znaleźć 

nano /etc/apt/sources.list

dodamy:

deb http://repo.ajenti.org/debian main main

następnie w konsoli wydajemy:

wget http://repo.ajenti.org/debian/key -O- | sudo apt-key add –

Możemy się zalogować do panelu: http://192.168.1.1:8000, domyślny login oraz hasło to admin . Jeżeli jednak z jakiegoś powodu nie chce współpracować musimy dodać:

apt-get -y install python-imaging



Poniższe dodatki dotyczą jedynie maszyny Web oraz tej na której jest baza.

apt-get -y install curl php5-curl libcurl3-dev


instalujemy ionCube, pobierając go ze strony producenta:http://www.ioncube.com/loaders.php.



apt-get -y install php-apc htop iptraf tiger

nano /etc/php5/conf.d/apc.ini


dodamy do niego:

apc.shm_size=128

na koniec restartujmy apache’a:


/etc/init.d/apache2 restart


następnie:

nano /etc/aliases



zamieniamy:


root:root


na:

root:username@example.tld
newaliases


Jeżeli chcemy zainstalować jakiś CMS w przyszłości, dodajmy:

apt-get -y install php5-dev php-services-json
pecl install uploadprogress
touch /etc/php5/apache2/conf.d/uploadprogress.ini
nano /etc/php5/apache2/conf.d/uploadprogress.ini

Dodajemy:

extension=uploadprogress.so


na koniec:

/etc/init.d/apache2 restart

Podwyższymy poziom zabezpieczeń dla naszego apache’a:

apt-get -y install libapache-mod-security
mkdir /etc/apache2/mod-security
chmod 600 /etc/apache2/mod-security
cd /tmp
wget http://www.modsecurity.org/download/modsecurity-core-rules_2.5-1.6.1.tar.gz
tar fvx modsecurity-core-rules_2.5-1.6.1.tar.gz
mv *.conf /etc/apache2/mod-security/
ln -s /var/log/apache2 /etc/apache2/logs


nano /etc/apache2/conf.d/mod-security.conf

dodajemy:

Include /etc/apache2/mod-security/*.conf


następnie:

nano /etc/apache2/mod-security/modsecurity_crs_10_config.conf



usuwamy # z poniższego wiersza:


SecDefaultAction

 „phase:2,log,deny,status:403,t:lowercase,t:replaceNulls,t

 :compressWhitespace” 

/etc/init.d/apache2 force-reload

tail /var/log/apache2/modsec_audit.log

może zdarzyć się zablokowanie URL’a, jednak możemy dodać taki do białej listy:

nano /etc/apache2/mod-security/modsecurity_crs_99_whitelist.conf






np. takie wpisy:

SecRuleRemoveById 960015SecRuleRemoveById 960016


Zajmiemy się nieco „podkręceniem” naszej bazy:

cd /root/scriptswget http://www.day32.com/MySQL/tuning-primer.shwget http://mysqltuner.com/mysqltuner.plchmod 700 tuning-primer.sh mysqltuner.pl
perl /root/scripts/mysqltuner.pl/root/scripts/tuning-primer.sh


Skrypty zapytają się o login oraz hasło, następnie otrzymamy informacje o problemach / błędach konfiguracyjnych bazy.

Dodamy RoundCube, aplikacje do sprawdzania poczty:

Na początku usuniemy Squirrelmai:

apt-get remove squirrelmail

rm /etc/apache2/conf.d/squirrelmail.conf


Musimy być zalogowani jako administrator bazy:

apt-get -y install roundcube roundcube-mysql


odpowiadamy na kilka pytań:

Configure database for roundcube with dbconfig-common?  YesDatabase type to be used by roundcube:  mysqlPassword of the database’s administrative user: hasło_admina bazyMySQL application password for roundcube: dodajemy_hasło_ uzytkownika_roundcubePassword confirmation:jeszcze_raz_wpisujemy_hasło


Jeżeli pojawi się jakiś błąd, możemy wykonać:

dpkg-reconfigure roundcube-core


Ewentualne inne problemy, możemy rozwiązać przy pomocy postu na forum.

Włączymy dostęp do aplikacji dla wszystkich użytkowników, aby mieli dostęp do swojej poczty:

nano /etc/apache2/conf.d/roundcube
# Those aliases do not work properly with several hosts on your apache server# Uncomment them to use it or adapt them to your configuration#    Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/    Alias /roundcube /var/lib/roundcube    Alias /webmail /var/lib/roundcube
# Access to tinymce files      Options Indexes MultiViews FollowSymLinks      AllowOverride None      Order allow,deny      allow from all
  Options +FollowSymLinks  # This is needed to parse /var/lib/roundcube/.htaccess. See its  # content before setting AllowOverride to None.  AllowOverride All  order allow,deny  allow from all
# Protecting basic directories:        Options -FollowSymLinks        AllowOverride None
        Options -FollowSymLinks        AllowOverride None        Order allow,deny        Deny from all
        Options -FollowSymLinks        AllowOverride None        Order allow,deny        Deny from all

 
      RewriteEngine on      RewriteCond %{HTTPS} !^on$ [NC]      RewriteRule . https://%{HTTP_HOST}:50443%{REQUEST_URI}  [L] 



 
      RewriteEngine on      RewriteCond %{HTTPS} !^on$ [NC]      RewriteRule . https://%{HTTP_HOST}:50443%{REQUEST_URI}  [L] 

nano /var/lib/roundcube/config/main.inc.php


edytujemy w wierszu 60 oraz 66:

auto_create_user = TRUE;$rcmail_config[’default_host’] = 'mail.example.tld’;


dodamy również wpis odnośnie fail2ban wiersz 42:

$rcmail_config[’plugins’] = array(’fail2ban’); 


Możemy zainstalować logger dla roundcube stąd: http://mattrude.com/projects/roundcube-fail2ban-plugin/

Lub wykonując poniższe polecenia:



cd /usr/share/roundcube/plugins/
wget –no-check-certificate http://cloud.github.com/downloads/mattrude/rc-plugin-fail2ban/roundcube-fail2ban-plugin.1.1.tgztar -xvzf roundcube-fail2ban-plugin.1.1.tgztouch /var/log/roundcube/userloginsrm roundcube-fail2ban-plugin.1.1.tgzchown www-data:www-data /var/log/roundcube/userlogins







Musimy poinformować o tej instalacji ISPConfig: System -> Interface Config ->  Mail, ustawiamy /webmail. Na koniec musimy zrestartować apache’a:

/etc/init.d/apache2 restart


Powinniśmy móc poprzez przeglądarkę wejść do webmail’a:

http://web.example.tld/webmail


Edytujemy jail.local:

nano /etc/fail2ban/jail.local
[roundcube]enabled  = trueport     = httpfilter   = roundcubelogpath  = /var/log/roundcube/userloginsmaxretry = 5


Tworzymy plik konfiguracyjne dla roundcube:

nano /etc/fail2ban/filter.d/roundcube.conf
[Definition]failregex = FAILED login for .*. fromignoreregex =
/etc/init.d/fail2ban restart


Dodamy jeszcze zabezpieczenie przed atakiem DDos. Fail2ban będzie automatycznie blokował ataki z takich IP:

apt-get install libapache2-mod-evasivemkdir /var/lock/mod-evasivechown www-data /var/lock/mod-evasiveln -s /etc/alternatives/mail /bin/mailnano /etc/apache2/mods-available/mod-evasive.conf


dodamy do niego:

   DOSHashTableSize 3097   DOSPageCount 3   DOSSiteCount 60   DOSPageInterval 1   DOSSiteInterval 2   DOSBlockingPeriod 15   DOSEmailNotify username@example.tld   DOSLogDir „/var/lock/mod_evasive”


uruchomimy wszystkie moduły:

a2enmod mod-evasive
/etc/init.d/apache2 restart


Utworzymy teraz plik do banowania IP podczas ataków:

nano /etc/fail2ban/filter.d/apache-dosevasive.conf


dodamy:

# Fail2Ban configuration file## Author: Xela## $Revision: 728 $#
[Definition]
# Option:  failregex# Notes.:  regex to match the Forbidden log entrys in apache error.log#          maybe (but not only) provided by mod_evasive## Values:  TEXT#failregex = ^[[^]]*]s+[error]s+[client ] client denied by server configuration:s
# Option:  ignoreregex# Notes.:  regex to ignore. If this regex matches, the line is ignored.# Values:  TEXT#ignoreregex =







do jail.local dodamy:

[apache-dosevasive]
enabled = truefilter  = apache-dosevasiveaction = iptables-allports[name=dos]logpath = /var/log/apache*/*error.logbantime = 600maxretry = 10








Poniższe dodatki dotyczą jedynie maszyny obsługującej serwer pocztowy.

Dodamy teraz filtr antySpamowy:

postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_hostname, reject_non_fqdn_hostname, reject_unknown_recipient_domain, reject_non_fqdn_recipient, reject_unauth_destination, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_rbl_client cbl.abuseat.org,reject_rbl_client dul.dnsbl.sorbs.net,reject_rbl_client ix.dnsbl.manitu.net, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination’


restartujemy postfix:


/etc/init.d/postfix restart



Dodanie Postgrey pozwoli nam na wyeliminowanie praktycznie w 100% spamu w mailach:


apt-get install postgrey
/etc/init.d/postgrey start


Edytujemy:

 /etc/postfix/main.cf


następnie dodajemy do smtpd_recipient_restrictions:


check_policy_service inet:127.0.0.1:60000


następnie wydajemy polecenie:


postfix reload



Powinniśmy móc już w pełni korzystać z naszej infrastruktury. Postaram się dodać informację w jaki sposób dodać do naszego serwera certyfikat SSL.



Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.

Link do formularza tutaj: https://beitadmin.pl/pomysly

Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).

3 komentarze do “MultiServer (Web Server, MySQL, Email, DNS) – Debian Squeeze cz.1”

Dodaj komentarz

beitadmin.pl - Droga Administratora IT