wtorek, 5 lutego 2013

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=(?P\S*),.*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.






3 komentarze:

  1. wszystko działa jak należy, dzięki, czekam na informacje o certyfikatach SSL

    OdpowiedzUsuń
  2. Certyfikaty SSL:http://geek-admin.blogspot.com/2013/02/ssl-dla-serwera-ispconfig-debian.html

    OdpowiedzUsuń