安全是相对的,使用本文介绍的这些方法不能绝对保证你的服务器是“安全的”,但可以肯定的是它比以前更安全,也比大多数服务器要安全,至少菜鸟级的黑客是无法攻破的;安全是一个持续的过程,它不是一蹴而就的,我们认为,在安全领域是需要一点偏执精神的。

本文所列举的这些保护措施在Ubuntu Server 10.04(Lucid)和10.10(Maverick)中测试通过,如果你想让你的新Ubuntu服务器变得坚不可摧,你应该仔细阅读本文。

保护你的Ubuntu服务器_Ubuntu服务器

Ubuntu服务器设计优良,并有定期更新,相对来说是比较安全的,Ubuntu安全团队表示会不断努力,保护Ubuntu的安全,将会定期提供安全更新。

· 不打开端口

· 基于角色的管理

· 无X服务器

· 安全更新

· 内核和编译器保护

在这篇文章中,我们将从不同方向来应对安全挑战,包括:系统分析,修改设置,安装防火墙,扫描rootkit和制定周期性维护制度。

· 修改设置,增强安全性

· 实施UFW,简单的防火墙

· 使用denyhosts自动将攻击者列入黑名单

· 使用Tiger扫描系统漏洞

· 使用psad检测入侵尝试行为

· 安装nmap,扫描系统打开的端口

· 使用chkrootkit检查系统rootkit

· 监控日志

修改设置,增强安全

保护共享内存

攻击一个运行中的服务(如httpd)时经常要使用/dev/shm,修改/etc/fstab使其更安全。

sudo vi /etc/fstab

添加下面这一行内容:

tmpfs /dev/shm tmpfs defaults,noexec,nosuid 0 0

禁止root通过SSH登录

Root帐号在Ubuntu中默认是被禁用了的,如果你在Slicehost或Linode上安装Ubuntu,root则是被启用的,无论怎样,禁止root通过SSH登录系统都是一个好主意。

sudo vi /etc/ssh/sshd_config

PermitRootLogin设为no:

PermitRootLogin no

当然,如果你通过SSH访问你的服务器,在禁用root使用SSH之前,确保其它用户可以正常使用sudo工作。

只允许管理用户使用su

这将有助于预防特权提升,默认情况下,Ubuntu没有提供管理组,因此需要先创建一个管理组。

sudo groupadd admin

将你自己加入到管理组:

sudo usermod -a -G admin andrew

限制/bin/su的访问权,仅授予管理组成员:

sudo dpkg-statoverride --update --add root admin 4750 /bin/su

检查/bin/su的权限:

ls -lh /bin/su

看到下面的输出内容:

-rwsr-x--- 1 root admin 31K 2010-01-26 17:09 /bin/su

不允许跟踪入站数据包的源路由

sudo sysctl -w net.ipv4.conf.all.accept_source_route=0
sudo sysctl ­-w net.ipv4.conf.default.accept_source_route=0

不允许系统用户访问FTP服务器

只有当你安装了ftpd才需要这么做,只要tiger扫描报告中不出现相关警告即可,SFTP比FTP的安全性要好,如果可能,应尽量使用SFTP。

Edit /etc/ftpusers:

sudo vi /etc/ftpusers

添加系统用户拒绝使用ftpd:

 

  1. backup 
  2. bin 
  3. daemon 
  4. games 
  5. gnats 
  6. irc 
  7. libuuid 
  8. list 
  9. 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:简单防火墙

UFW(Uncomplicated Firewall,简单防火墙)提供了一个易于理解的接口控制iptable(iptable控制Netfilter,Netfilter内置于内核之中),只需要几个简单的命令,你的服务器就可以控制访问,创建状态也很容易。

UFW是用于配置iptable的一个简单接口。

安装并启用Uncomplicated Firewall:

sudo aptitude install -y ufw
sudo ufw enable

显示可用的UFW命令:

sudo ufw show

显示UFW配置:

sudo ufw status

允许SSH和HTTP访问Apache服务器:

sudo ufw allow ssh
sudo ufw allow http

在上面的示例中,OpenSSH和Apache的端口通过服务名(ssh和http)打开,你可以使用端口号替换这里的服务名(如用80替换http)。

查看服务运行情况:

查看运行中的服务,便知道应该打开哪些端口:

sudo ufw app list

查看UFW使用的服务:

less /etc/services

Denyhosts:避免SSH攻击

项目主页: http://denyhosts.sourceforge.net/

查看服务器上的/var/log/auth.log,我发现有一连串的SSH攻击,对付这种攻击有很多方法,首先就是denyhosts。

Denyhosts会周期性地扫描/var/log/auth.log,找出通过SSH反复失败访问系统的行为和来源,然后将它们添加到/etc/hosts.deny中。详细情况请访问项目主页。

sudo aptitude -y install denyhosts

要做的就这些,剩下来的都是自动的,你可以使用下面的命令查看添加到/etc/hosts.deny中的IP地址:

sudo less /etc/hosts.deny

Tiger:系统安全扫描器

项目主页: http://www.nongnu.org/tiger/

通过分析系统上的文件和设置,Tiger创建自动的安全审核,最终以报告的形式列出分析的内容,警告,警报和故障。

Tiger命令在/var/log/tiger中记录了潜在的安全问题,使用tigexp命令查找结果编码可以获得详细的解释和安全加固建议,tiger认为很严重的问题都标记为Fail。

安装tiger:

sudo aptitude -y install tiger

运行tiger,创建一个安全问题报告:

sudo tiger

使用less查看最近的tiger报告:

sudo -i
less /var/log/tiger/`ls -t1 /var/log/tiger | head -1`
exit

使用tigexp列出Fail代码的解释:

tigexp dev002f

当然使用Google搜索一下也可以。

忽略这些:

--FAIL-- [dev002f] /dev/fuse has world permissions
--FAIL-- [logf005f] Log file /var/log/btmp permission should be 660

修改它们的权限可能会导致其它问题。

使用psad检测入侵行为

项目主页: http://www.cipherdyne.org/psad/

Psad可以记录下入侵行为,还可以监控iptable。

安装psad:

sudo aptitude -y install psad

后台进程会自动运行。

检查当前的状态:

sudo psad -S

你可以修改psad设置,检测到入侵行为时给管理员发送电子邮件。

Nmap:端口扫描

项目主页: http://nmap.org/

Nmap允许你查看打开的端口,验证UFW/iptable工作是否正常。

安装nmap:

sudo aptitude install -y nmap

端口扫描:

nmap -v -sT localhost

SYN扫描:

sudo nmap -v -sS localhost

扫描类型解释: http://nmap.org/book/man-port-scanning-techniques.html

Chkrootkit:检查rootkit

项目主页: http://www.chkrootkit.org/

Chkrootkit扫描系统中是否存在rootkit。

理想情况下,你并不需要做这种扫描,但现实中最好还是定期运行一下。

安装chkrootkit:

sudo aptitude install -y chkrootkit

运行chkrootkit:

sudo chkrootkit

LogWatch

Ubuntu社区文档: https://help.ubuntu.com/community/Logwatch

日志再详细,如果没有一款好用的日志查看器,日志起的作用也非常有限,Logwatch可以从海量的日志中精选出最有用的信息,形成一个易读的报告,每天打开Logwatch看一下系统产生的日志是一个良好的习惯。

安装:

sudo aptitude -y install logwatch

用法:

sudo logwatch | less

持续维护

你的服务器现在更安全了,但不要就此停下来,每周例行一次维护是个好习惯。

更新软件:

sudo aptitude update
sudo aptitude safe-upgrade

我喜欢使用safe-upgrade,因为它执行的是安全更新。

请看: http://wiki.debian.org/Aptitude

或者,你可以将安全更新设置为自动,如果你不能每周维护一次,这不是一个完美的解决方案,因为管理员没有监控更新了什么,更新后也没有执行测试。请看: https://help.ubuntu.com/10.04/serverguide/C/automatic-updates.html

检查入侵行为:

sudo psad -S

请先使用tiger分析一下系统,因为tiger在/var/log/tiger中的报告属于root用户,每次都运行一下这些命令,解决有些用户的权限问题。

sudo -i
tiger
grep FAIL /var/log/tiger/`ls -t1 /var/log/tiger | head -1`
exit

在上面的命令中,使用grep从最新的报告文件中提取出Fail标记,ls子句给grep输送目录中的最新文件,sudo -i命令允许你以root用户运行多个命令,使用exit结束命令。

使用tigexp列出Fail代码的解释:

tigexp dev002f

使用nmap扫描端口:

sudo nmap -v -sS localhost

检查rootkit:

sudo chkrootkit

查看日志:

sudo logwatch | less