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.
– 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
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
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:
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
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
/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
nano /etc/fail2ban/filter.d/pureftpd.conf
[Definition]failregex = .*pure-ftpd: (.*@) [WARNING] Authentication failed for user.* ignoreregex =
/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
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
echo mail.example.tld > /etc/hostname echo mail.example.tld > /etc/mailname
/etc/init.d/hostname.sh start
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
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
apt-get -y install mysql-client mysql-server
apt-get -y install php5-cli php5-mysql php5-mcrypt mcryptapt-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
apt-get -y install mysql-client mysql-server
apt-get -y install php5-cli php5-mysql php5-mcrypt mcryptapt-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: Webserver, Fileserver 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 = Allapt-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
apc.shm_size=128
na koniec restartujmy apache’a:
/etc/init.d/apache2 restart
nano /etc/aliases
root:root
root:username@example.tld
newaliases
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
extension=uploadprogress.so
/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
Include /etc/apache2/mod-security/*.conf
nano /etc/apache2/mod-security/modsecurity_crs_10_config.conf
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
SecRuleRemoveById 960015SecRuleRemoveById 960016
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
apt-get remove squirrelmail
rm /etc/apache2/conf.d/squirrelmail.conf
apt-get -y install roundcube roundcube-mysql
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
dpkg-reconfigure roundcube-core
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
auto_create_user = TRUE;$rcmail_config[’default_host’] = 'mail.example.tld’;
$rcmail_config[’plugins’] = array(’fail2ban’);
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
/etc/init.d/apache2 restart
http://web.example.tld/webmail
nano /etc/fail2ban/jail.local
[roundcube]enabled = trueport = httpfilter = roundcubelogpath = /var/log/roundcube/userloginsmaxretry = 5
nano /etc/fail2ban/filter.d/roundcube.conf
[Definition]failregex = FAILED login for .*. fromignoreregex =
/etc/init.d/fail2ban restart
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
DOSHashTableSize 3097 DOSPageCount 3 DOSSiteCount 60 DOSPageInterval 1 DOSSiteInterval 2 DOSBlockingPeriod 15 DOSEmailNotify username@example.tld DOSLogDir „/var/lock/mod_evasive”
a2enmod mod-evasive
/etc/init.d/apache2 restart
nano /etc/fail2ban/filter.d/apache-dosevasive.conf
# 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 =
[apache-dosevasive]
enabled = truefilter = apache-dosevasiveaction = iptables-allports[name=dos]logpath = /var/log/apache*/*error.logbantime = 600maxretry = 10
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
/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:).
wszystko działa jak należy, dzięki, czekam na informacje o certyfikatach SSL
Polecam się.
Certyfikaty SSL:http://geek-admin.blogspot.com/2013/02/ssl-dla-serwera-ispconfig-debian.html