Security is relative. Will these steps make your server “secure”? It will be more secure than it was before. And more secure than most servers. Your server will not be “low hanging fruit”. Security is an on-going process. It includes settings, practices and procedures. Make it your business to regularly read about security and to understand the concepts and our system. Paranoia is useful with regard to server security.
I’ve tested what is presented here in Ubuntu Server 8.04 (Hardy). If you want to harden your new Ubuntu server, this is a good start.Ubuntu server is well designed, regularly updated and relatively secure. The Ubuntu Security Team manifests an onging effort to keep Ubuntu secure. Regular security updates are available and easy to implement.
- No open ports
- Role-based administration
- No X server
- Security updates
- Kernel and compiler hardening
- Change settings for increased security
- Implement UFW, the uncomplicated firewall
- Use denyhosts to automatically blacklist attackers
- Scan the system for vulnerabilities with Tiger
- Detect attempted intrusions with psad
- Install nmap and scan the system for open ports
- Check the system for rootkits with chkrootkit
- Monitor logs
Change settings for increased security
see also: https://help.ubuntu.com/community/StricterDefaultsSecure shared memory
/dev/shm can be used in an attack against a running service, such as httpd. Modify /etc/fstab to make it more secure.1.
sudo vi /etc/fstab
1.
tmpfs /dev/shm tmpfs defaults,noexec,nosuid 0 0
Disable root SSH login
The root account is disabled by default in Ubuntu. If you installed Ubuntu on Slicehost or Linode, root is enabled. In any case, it is a good idea to disable root SSH access. Edit /etc/ssh/sshd_config and set PermitRootLogin to no.1.
sudo vi /etc/ssh/sshd_config
1.
PermitRootLogin no
Only allow admin users to use su
This helps prevent privilege escalation.By default, Ubuntu does not have an admin group. Create an admin group:
1.
sudo groupadd admin
1.
sudo usermod -a -G admin andrew
1.
sudo dpkg-statoverride --update --add root admin 4750 /bin/su
1.
ls -lh /bin/su
1.
-rwsr-x--- 1 root admin 31K 2010-01-26 17:09 /bin/su
Do not permit source routing of incoming packets
see also: http://www.cromwell-intl.com/security/security-stack-hardening.html1.
sudo sysctl -w net.ipv4.conf.all.accept_source_route=0
2.
sudo sysctl -w net.ipv4.conf.
default
.accept_source_route=0
Don’t allow system users to access an FTP server
This is only needed is ftpd is installed and running. Only if you’ve installed ftpd. However, it is Ok to do this anyway and it will remove a FAIL from the tiger report.SFTP is probably better than FTP, if it is usable for your files transfer needs.
see ftpusers manual: http://manpages.ubuntu.com/manpages/lucid/man5/ftpusers.5.html
Edit /etc/ftpusers:
1.
sudo vi /etc/ftpusers
01.
backup
02.
bin
03.
daemon
04.
games
05.
gnats
06.
irc
07.
libuuid
08.
list
09.
lp
10.
mail
11.
man
12.
mysql
13.
news
14.
ntp
15.
postfix
16.
proxy
17.
sshd
18.
sync
19.
sys
20.
syslog
21.
uucp
22.
www-data
UFW: basic firewall
previous post: Ubuntu UFW Uncomplicated Firewall Examplescommunity documentation: https://help.ubuntu.com/community/UFW
server guide: https://help.ubuntu.com/10.04/serverguide/C/firewall.html
ufw manual: http://manpages.ubuntu.com/manpages/lucid/en/man8/ufw.8.html
project wiki: https://wiki.ubuntu.com/UncomplicatedFirewall
nice article: http://savvyadmin.com/ubuntus-ufw/
UFW (Uncomplicated Firewall) provides an easy to understand interface to control iptables (iptables conteol Netfilter, which is built into the kernel). Will just a few commands, your server can control access. Checking status is also easy.
UFW (uncomplicated firewall) is a simple interface used to configure iptables.
Install and enable Uncomplicated Firewall:
1.
sudo aptitude install -y ufw
2.
sudo ufw enable
1.
sudo ufw show
1.
sudo ufw status
1.
sudo ufw allow ssh
2.
sudo ufw allow http
See services running and which names to use:
The practice here is to open only ports that you use – ports that use a service that have a service running. To see a list of services that you have running for which you might want to open ports for:
1.
sudo ufw app list
1.
less /etc/services
Denyhosts: avoid SSH attacks
project: http://denyhosts.sourceforge.net/Looking at /var/log/auth.log on servers that I manage shows a steady streams of attacks on SSH. I am countering these attacks in a number of ways, starting with denyhosts.
Denyhosts periodically scans /var/log/auth.log for repeated failures to access the system via SSH. It then adds these offenders to /etc/hosts.deny. See the project page for details.
1.
sudo aptitude -y install denyhosts
1.
sudo less /etc/hosts.deny
Tiger: security system scanner
project: http://www.nongnu.org/tiger/Tiger creates an automated security audit by analyzing files and settings on the system and creating a report listing what has been analyzed and listing warning, alerts and failures.
The tiger command creates a report of potential security problems in /var/log/tiger. The use the tigexp command to look up the resulting codes generated for a detailed explanation and what to do to make the system more secure. The problems tiger considers most serious are marked with FAIL.
Install tiger:
1.
sudo aptitude -y install tiger
1.
sudo tiger
1.
sudo -i
2.
less /
var
/log/tiger/`ls -t1 /
var
/log/tiger | head -1`
3.
exit
1.
tigexp dev002f
Ignore these:
1.
--FAIL-- [dev002f] /dev/fuse has world permissions
2.
--FAIL-- [logf005f] Log file /
var
/log/btmp permission should be 660
Detect attempted intrusions with psad
project: http://www.cipherdyne.org/psad/Psad is a collection of lightweight daemons that log attempted intrusions, in particular monitoring iptables.
Installation:
1.
sudo aptitude -y install psad
To check current status:
1.
sudo psad -S
Nmap: port scanning
project: http://nmap.org/This allows you to see which ports are open, verifying that UFW/iptables is working correctly.
Installing nmap:
1.
sudo aptitude install -y nmap
1.
nmap -v -sT localhost
1.
sudo nmap -v -sS localhost
Chkrootkit: check for rootkit presence
project: http://www.chkrootkit.org/Chkrootkit scans the system for evidence that a rootkit has been installed.
This is a confidence test to be used to test whether your system has been compromised. In a perfect world you would not need this…but in this world, it is good to run periodically.
Installing chkrootkit:
1.
sudo aptitude install -y chkrootkit
1.
sudo chkrootkit
LogWatch
Ubuntu community documentation: https://help.ubuntu.com/community/LogwatchThe most detailed and informative logs in the world are useless if no one looks at them. Logwatch winnows the deluge to a succinct report…which you will look at. Even so, familiarize yourself with your system’s logs and review them on a regular basis. A daily logwatch habit would be a good start.
Installation:
1.
sudo aptitude -y install logwatch
1.
sudo logwatch | less
Ongoing maintenance
Your server is now more secure. Once a week, perform on-going maintenance.Updating software:
1.
sudo aptitude update
2.
sudo aptitude safe-upgrade
see: http://wiki.debian.org/Aptitude
Or, you could set-up automatic security updates, if you cannot do the weekly maintenance. This is not a perfect solution because an administrator is not monitoring what is being updated and testing after updates. see: https://help.ubuntu.com/10.04/serverguide/C/automatic-updates.html
Check for attempted instrusions:
1.
sudo psad -S
1.
sudo -i
2.
tiger
3.
grep FAIL /
var
/log/tiger/`ls -t1 /
var
/log/tiger | head -1`
4.
exit
Use tigexp to list explanations for FAIL codes:
1.
tigexp dev002f
1.
sudo nmap -v -sS localhost
1.
sudo chkrootkit
1.
sudo logwatch | less
visit: http://www.linuxsecurity.com/
Elsewhere
http://www.itsecurity.com/features/ubuntu-secure-install-resource/http://www.cyberciti.biz/tips/linux-security.html