目录
1.BIOS
2.SSH安全
3.禁用telnet
4.禁用代码编译
5.ProFTP
6.TCPwrappers
7.创建一个SU组
8.root通知
9.history安全
10.欢迎信息
11.禁用所有特殊账户
12.chmod危险文件
13.指定允许root登陆的TTY设备
14.选择一个安全的密码
15.检查Rootkit
16.安装补丁
17.隐藏Apache信息
18.隐藏php信息
19.关闭不使用的服务
20.检测监听中的端口
21.关闭打开的端口和服务
22.删除不用的rpm包
23.禁用危险的php函数
24.安装配置防火墙
25.安装和配置BFD
26.内核加固(sysctl.conf)
27.更改SSH端口
28./tmp /var/tmp,/dev/shm分区安全
29.PHP IDS
总结
========================================================================
介绍
这个教程将一步步的指引你,使你的Linux系统变得安全。
任何默认安装的操作系统都是不够安全的,本文将指引你如何建立一个
相对安全的Linux系统。
========================================================================
1.BIOS
你应该总是在系统启动的时候设置一个BIOS密码和禁用从CD-ROM和软盘引导。
这将防止一些人未经允许访问你的系统和更改BIOS设置
2.SSH安全
SSH是一个协议,利用它可以登录到一个远程系统或远程执行系统命令,默认允许root登录,并且sshv1存在缺陷,我们应该在sshd_config禁止root访问和使用sshv2来让ssh更加安全。
方法:
把协议改为2
重启
3.禁用telnet
早期的Linux默认开启telnet服务,telnet,ftp,rlogin都是明文传输的协议
是容易被嗅探到的,这就是为什么推荐使用安全的版本(sftp,scp,ssh)的原因
如果你必须要使用telnet,那么至少应该隐藏banner信息
方法:
修改
4.禁用代码编译
你可以禁用代码编译并且只把编译的权限分配给一个用户组
方法:
添加编译用户组
把常见的编译器所属组赋给编译用户组
设置mysqlaccess的访问
设置权限
把用户添加到组里
修改/etc/group
5.ProFTP
你可以通过修改proftpd.conf来禁止root登陆
方法:
修改/etc/proftpd.conf
重启
6.TCP wrappers
编辑hosts.allow和hosts.deny可以限制或允许访问inet服务
方法:
限制访问inet服务
修改/etc/hosts.allow
建议格式:
修改/etc/hosts.deny
7.创建SU用户组
因为我们在SSH禁止了root用户访问并且禁用了telnet,所有我们应该
分配给一些用户su权限来获取root特权
方法:
vi /etc/group
添加一行 wheel:x:10:root,user1,user2
8.root通知
当一个具有root权限的用户登录的时候发mail
方法:
编辑/root下的.bashrc ,当有root权限的用户登录时发生email通知
9.history安全
这是一个避免删除.bash_history或重定向到/dev/null的好主意
因此他不能清除或删除他最后执行的命令
方法:
获取用户的人会知道他的历史命令锁定并且要同意才可以使用服务
10.使用欢迎信息
你必须提供一些信息让攻击者知道该系统不对公众开放。在国外有类似案件,攻击者入侵一个系统并且系统没有这些信息,这种情况下法院不能做任何裁决,因为系统说welcome
方法:
删除/etc/redhat-release
编辑/etc/issue /etc/motd并显示警告信息
11.禁用所有特殊账户
你应该从系统中删除所有默认用户和组
例如news,lp,sync,shutdown,uucp,games,halt 等
方法:
删除账户userdel name
删除组 groupdel name
锁定特定账户:
12.chmod危险文件
这可能是限制不具有root权限的用户执行下面这些命令的好主意
方法:
13.指定允许root登陆的TTY设备/etc/securetty文件允许你指定root可以从哪个TTY设备登录
方法:
只留2个连接
14.选择一个安全的密码
在/etc/login.defs文件中定义了shadow密码的具体配置默认密码长度最短为5字符,你应该至少设置为8
方法:
15.检测Rootkit
用chkrootkit或rkhunter,以chkrootkit为例
方法:
首先检查md5校验值: md5sum chkrootkit.tar.gz
然后解压安装
然后运行./chkrootkit
我们可以将其添加到contrab使其每天自动扫描:
#!/bin/bash
# 输入chkrootkit的安装目录
# 输入你想收到检测报告的email
16.安装补丁
你要经常检查更新以修复某些缺陷或系统稳定性的改进
否则你存在漏洞的系统将会不时的遭受新的攻击
方法:
17.隐藏Apache信息
你应该隐藏Apache的banner信息使攻击者不知道Apache的版本,从而使他们难以利用漏洞
方法:
修改/etc/httpd/conf/httpd.conf
改变服务器签名:
重启Apache /sbin/service httpd restart
18.隐藏php信息
你应该隐藏php的banner信息,原因同上
方法:
修改php.ini
改变
重启Apache
19.关闭不用的服务
你应该把任何未使用的服务关闭,可以在/etc/xinetd.d文件夹里找到
方法:
这将显示所有服务开启或关闭的状态,然后根据需要来开启或关闭服务
20.检测监听的端口
检测是否有必要开放端口是非常重要的
方法:
21.关闭端口和服务
重点是关闭在系统启动时打开的不需要的端口
方法:
对于正在运行的服务,可以执行chkconfig -list | grep on
禁用服务可以执行chkconfig servicename off
然后停止正在运行的服务:/etc/init.d/service stop
22.删除不用的rpm包
首先应该清楚你的系统的作用,它是web,mail,file服务器或其他
然后觉得哪些包是必要的,之后删除不需要的软件包
方法:
首先列出安装列表rpm -qa
更详细的信息rpm -qi rpmname
还可以检测删除包可能出现的冲突rpm -e ?test rpmname
23.禁用危险的php函数
你应该禁用php的危险函数防止在网站上执行系统命令
方法:
编辑
24.安装配置防火墙
高级策略防火墙(APF)是一种IP表(网络过滤),它是基于当今互联网部署服务器防火墙系统的基本需要和客户部署LINUX安装的唯一需要而设计的。 它是最好的开源防
火墙之一。
配置APF防火墙方法:
下载APF:wget
http://www.r-fx.ca/downloads/apf-current.tar.gz解压安装:
然后我们配置它vi /etc/apf/conf.apf
一般配置:
启用防火墙使用DShield.org块列表
USE_DS=”1″
然后我将列出常规的配置和CPanel配置方式,因为CPanel是应该最广泛的虚拟主机管理软件
1.常规配置(DNS,Mail,Web,FTP)
之后启动防火墙 /etc/apf/apf -s
如果运行良好我在回去修改配置文件,使DEVM=”0″
然后我们配置APF的AntiDos: vi /etc/apf/ad/conf.antidos
找到下面的内容并替换成你的资料
你应把USR_ALERT改为1
保存后重启APF:/etc/apf/apf -r
APF开机自启动:chkconfig --level 2345 apf on
禁止一个IP用/etc/apf/apf -d ip或vi /etc/apf/deny_hosts.rules
允许一个IP用/etc/apf/apf -a ip或vi /etc/apf/deny_hosts.rules
25.安装配置BFD(暴力破解检测)
BFD是一个用于分析应用日志和检测验证失败的模块化shell脚本而且安装配置和用法都是非常容易的。使用BFD的原因很简单。其实在LINUX领域几乎没有结合防火墙或实时设备来监控不验证和暴力攻击审计的程序。在用BFD之前你必须安装APF防火墙。
方法:
然后我们来配置它 vi /usr/local/bfd/conf.bfd
把以下内容改为你的资料
然后vi /usr/local/bfd/ignore.hosts
把你的IP设置成允许主机,避免意外的锁定自己。
之后重启BFD /usr/local/sbin/bfd -s
26.内核加固(sysctl.conf)
sysctl.conf用来加固内核,目的是避免DOS和欺骗攻击
方法:
到/proc/sys目录或sysctl -a命令了解下当前配置的大概情况
然后vi /etc/sysctl.conf
添加如下内容:
重启后生效
/sbin/sysctl -p
27.更改SSH端口
更改SSH默认端口号在一定程度上可以提高安全性
方法:
vi /etc/ssh/sshd_config
Port 22改为其他端口
当然不要忘记把更改的端口加进防火墙
然后重启生效/etc/init.d/ssh restart
如果安装了APF并把端口添加之后,还要重启APF:/etc/init.d/apf restart
28./tmp,/var/tmp,/dev/shm分区的安全
/tmp,/var/tmp,/dev/shm目录是不安全的,任何用户都可以执行脚本。
最好的解决办法是挂载noexec和nosuid选项的参数
注意:不建议在CPanel使用
方法:
/tmp目录:
cd /dev
创建 100M (“count”) 的存储文件:
dd if=/dev/zero of=tmpMnt bs=1024 count=100000
设为一个扩展的文件系统:
备份现有临时文件:
用noexec挂载新文件系统:
把备份的文件拷贝回去:
删除备份:
修改/etc/fstab 添加下面的条目使其在引导时仍然有效
/var/tmp目录:
/dev/shm目录:
编辑/etc/fstab
把 none /dev/shm tmpfs defaults,rw 0 0
改为