====== Make ispCP more Secure ====== Here you can find some stuff to make your Server more Secure.\\ Absolutely no warranty, use it at your own risk.\\ ===== 1.) Disable the Apache ServerSignature like this one ===== \\ Apache/2.2.3 (Debian) mod_fastcgi/2.4.2 mod_perl/2.0.2 Perl/v5.8.8 Put only these lines in your httpd.conf (Under Debian Etch you have to put this in your apache2.conf) # Disable ServerInfo ServerSignature Off ServerTokens Prod ===== 2.) Disable Debugging functions ===== \\ An attacker may use this flaw to trick your legitimate web users to give him their credentials. Add the following lines for each virtual host in your configuration file (/etc/apache2/ispcp/...) or directly in the template file (/etc/ispcp/apache/parts/custom.conf.tpl) to disable the Debugging RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] Reload the Apache configuration and check if your configuration is active: # /etc/init.d/apache2 reload # telnet yourdomain.com 80 Trying xxx.yyy.zzz.rrr... Connected to yourdomain.com. Escape character is '^]'. TRACE / HTTP/1.0 Host: foo A: b HTTP/1.1 301 Moved Permanently Date: ... Server: Apache Location: http://www.yourdomain.com/ Content-Length: ... Connection: close Content-Type: text/html; charset=iso-8859-1 301 Moved Permanently

Moved Permanently

The document has moved here.

Connection closed by foreign host.
===== 3.) Secure Proftpd a little more ===== \\ You can add a little more security to Proftp by editing it's configuration file and adding: DefaultRoot ~ IdentLookups off You can also disable displaying of ftp banner.It's displayed by default when someone connects to Your server like this: Verbindung mit 62.75.xx.xx wurde hergestellt. 220 ProFTPD 1.3.0 Server (vsxxxxxx) [62.75.xx.xx] Benutzer (62.75.xx.xx:(none)): Here can you see the ProFTPD Version -> 1.3.0 To Disable the Banner add, the following line to the proftpd.conf: ServerIdent off You can find more information about it here: http://proftpd.org/localsite/Userguide/linked/userguide.html ===== 4.) Enable SSL in ProFTPD ===== \\ For a secure File Transfer you can add SSL to your ProFTPD Create a SSL Certificate: openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl.crt -keyout /etc/proftpd/ssl.key Open your proftpd.conf to enable SSL # vi /etc/proftpd/proftpd.conf enable the last lines like this and set TLSEngine 'on' # # SSL via TLS # TLSEngine on # on for use of TLS TLSLog /var/log/proftpd/ftp_ssl.log # where to log to TLSProtocol SSLv23 # SSLv23 or TLSv1 TLSOptions NoCertRequest # either to request the certificate or not TLSRSACertificateFile /etc/proftpd/ssl.crt # SSL certfile TLSRSACertificateKeyFile /etc/proftpd/ssl.key # SSL keyfile TLSVerifyClient off # client verification Restart proftpd to bring the effect: # /etc/init.d/proftpd restart ===== 5.) Change the SMTP-Banner ===== \\ If you want to change this Postfix SMTP-Banner: Connected to your-domain.tld. Escape character is '^]'. 220 your-domain.tld. ISPCP 1.0 Priamos Managed ESMTP 1.0.0 RC3 OMEGA Open your "/etc/postfix/main.cf" and change the SMTP-Banner here to what you want smtpd_banner = $myhostname ISPCP 1.0 Priamos Managed ESMTP 1.0.0 RC3 OMEGA ===== 6. Install & Configure fail2ban ===== \\ Fail2Ban automatic blocks an IP-Address after some failed Logins.\\ It works with Apache,SSH,FTP and Mail. Install fail2ban per apt-get # apt-get install fail2ban After the installation you can configure fail2ban with these two configs under /etc/fail2ban/ /etc/fail2ban/fail2ban.conf /etc/fail2ban/jail.conf Open your jail.conf to enable the blocks for some Services. # vi /etc/fail2ban/jail.conf Now you can enable or disable the Services you want to protect. By default SSH is enabled. If you want to enable Apache,\\ change: # # HTTP servers # [apache] enabled = false port = http filter = apache-auth logpath = /var/log/apache*/*access.log maxretry = 6 to # # HTTP servers # [apache] enabled = true port = http filter = apache-auth logpath = /var/log/apache2/users/*access.log maxretry = 6 For FTP (proftpd) [proftpd] enabled = false port = ftp filter = proftpd logpath = /var/proftpd/proftp.log maxretry = 6 change it to [proftpd] enabled = true port = ftp filter = proftpd logpath = /var/log/auth.log maxretry = 3 **Important Note:** On debian lenny, the /var/log/auth.log contains extra spaces at the end of the line. Due to this, fail2ban cannot detect these lines. You have to modify the failregex to get it working. Details can be found here: [[http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=507986|Debian BugTracker]] You can change the maximal retry´s before ban with maxretry = X If you want to change the bantime, bantime = 600 (is set in seconds) Warning: fail2ban use Firewall ruls to block the IP.\\ A ban is per default for 10 minutes active. After this time the IP is unblocked automatically. The fail2ban Log is under /var/log/fail2ban.log ===== 7.) SSL for Mailservice (Courier) ===== \\ First we need to install the courier-ssl packages. # apt-get install courier-imap-ssl courier-pop-ssl A default Certificate will be created during the installation. So we need to change them. Open the /etc/courier/imapd.cnf # vi /etc/courier/imapd.cnf and change the attributes to your needs.\\ And then the same with /etc/courier/pop3d.cnf # vi /etc/courier/pop3d.cnf After these changes, first backup the old Certificate before we generate some new. # cd /etc/courier/ && mv pop3d.pem pop3d.pem.orig && mv imapd.pem imapd.pem.orig Now we can generate the new one: # dpkg-reconfigure courier-pop-ssl && dpkg-reconfigure courier-imap-ssl Done - your Mailservice is now ready for SSL.\\ Change your Client to use POP3-SSL on port 995 and IMAP-SSL on port 993 ===== 8.) Make SSH safer ===== Every Scriptkiddy checks your Server for a open Port 22 and test to login with the root account.\\ We will change these things to the good with an other Port and disable the root login via ssh. First we need a user on the system for a later login. If there is already one, jump over to the next step. If not, create it: # adduser new_username Open your sshd_config to change the settings: # vi /etc/ssh/sshd_config Change the Port from Port 22 to Port 222 Change this line: PermitRootLogin yes to PermitRootLogin no Restart the SSH-Server # /etc/init.d/ssh restart Close your connection and connect again to your Server on Port 222 with your new Username. \\ To become root, only do a: # su ===== 9.) Prevent DOS-Attacks ===== \\ To prevent simple Denial-of-Service attacks you can use the mod_evasive module. Download the actual version from http://www.zdziarski.com/projects/mod_evasive/ and unpack it. Make sure, that apache2-dev is installed. # apt-get install apache2-dev build-essential # wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz or # wget http://www.leetupload.com/dbindex2/index.php?dir=Linux/&file=mod_evasive_1.10.1.tar.gz # tar -xzf mod_evasive_1.10.1.tar.gz # cd mod_evasive Install it with Apache Extensions Module (apxs). # apxs2 -i -a -c mod_evasive20.c The module will be built and installed into your httpd.conf. Optionally you can change some specific directives in your /etc/apache2/apache2.conf file. Just add the following lines and change them to your needs. DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 ATTENTION: This config may produce "403 Forbidden" Errors on regular sites (to example: typo3, gallery,...) You can also add the following directives: DOSEmailNotify you@yourdomain.com DOSSystemCommand "su - someuser -c '/sbin/... %s ...'" DOSLogDir "/var/lock/mod_evasive" If you dont create and chmod /var/log/evasive you have this error: mx mod_evasive[32318]: Couldn't open logfile /var/log/evasive//dos-1.2.3.4: No such file or directory Create the evasive log directory: mkdir /var/log/evasive Chmod this directory chown www-data:www-data /var/log/evasive After all, just restart your Apache to load the module. # sudo /etc/init.d/apache2 restart ===== 10.) Securing Open DNS server (BIND 9) ===== After a clean install of a Debian server, dnsstuff.com reports the server as an open dns server(anyone can query the server about any domain => high load and high transfer). 2 steps for fixing this problem: a. first edit /etc/bind/named.conf.options (or /etc/named/named.conf for other distros, options paragraph) and add: allow-recursion { localnets; }; //only act as resolver for itself. transfer-format many-answers; //this is for speed up the transfer to a secondary dns. b. we need to modify the template used by ISPCP to generate to zone files, on Debian this is /etc/ispcp/bind/parts/cfg_entry.tpl. The file after modification should looks like: zone "{DMN_NAME}" { type master; file "{DB_DIR}/{DMN_NAME}.db"; notify YES; allow-query { any; }; }; Restart BIND: /etc/init.d/bind9 restart Now You're all done.