写在前面:当你部署一台服务器,第一步不该该是部署应用,安全是才是首要任务php
若是某一天当你登陆服务器发现/bin/bash –i,python -c 'import pty; pty.spawn("/bin/sh")' 等命令在服务器上出现的时候,那么恭喜你,服务器被入侵了html
可是入侵者都是很聪明的,首先会执行如下命令python
而后是经过跳板访问mysql
创建ttyshelllinux
而后清除访问记录nginx
等等。。。一系列的操做web
而后你就能看到服务器上会留下以上的蛛丝马迹,那么咱们如何防止呢?sql
一、系统用户优化
用户是Linux中安全加固的第一关,若是系统中自己就存在有安全隐患的用户,那么再安全策略也没法起到加固的效果shell
若是除了root还有其余的超级用户,那就要很是当心了apache
1.1 将系统自带的用户和用户组删除掉
删除的用户,如adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher
删除的组,如adm,lp,news,uucp,games,dip,pppusers,popusers,slipusers
1.2 或者锁定不须要登陆的用户
如:xfs,news,nscd,dbus,vcsa,games,nobody,avahi,haldaemon,gopher,ftp,mailnull,pcap,mail,shutdown,halt,uucp,operator,sync,adm,lp,bin,sys,nuucp,hpdb,www,daemon
1.3 限制可以su为root的用户
这样,只有wheel组的用户能够su到root
1.4 检查shadow中空口令账号
对空口令帐号进行锁定,或要求增长密码
1.5 系统关键目录权限控制
根据安全须要,配置某些关键目录其所需的最小权限,password文件、shadow文件、group文件权限。
/etc/passwd 全部用户均可读,root用户可写 –rw-r—r—
/etc/shadow 只有root可读 –r——–
/etc/group 必须全部用户均可读,root用户可写 –rw-r—r—
二、系统服务优化
通常状况下,系统可能会自动的运行一些没必要要的服务,咱们可使用下面的命令查看当前默认开启运行的系统服务:
若是咱们只是提供web服务,那么对于sendmail、nfs、postfix、ftp等不须要的服务就能够关闭了
对于关键的服务,咱们须要保证它们的运行,好比:iptables、sshd、syslog、httpd、nginx、mysql、php-fpm等。
三、ssh访问策略
ssh的访问都是咱们平常工做中几乎惟一的控制系统的手段。因此ssh的安全性很是重要,通常来讲较高的ssh安全策略秉承如下几个原则。
禁止root用户ssh登陆。
禁止口令的方式验证。
只容许一个用户拥有sudo的完整权限。
除非是堡垒机,系统中不容许存放私钥文件。
使用一个随机端口来代替22端口。
编辑 /etc/sudoers,加入一条:
这里的例子表示:将test赋予彻底的sudo权限,并在sudo提权时不须要验证密码。
如今咱们来看ssh的访问效果:
全部用户不能使用密码验证登陆。
root用户不可直接登陆的,即便拥有root密码,惟一得到root的方法是使用test用户提权。
test用户只可使用证书登陆。
ssh再也不使用默认的22端口
四、系统内部安全配置
4.一、保护引导过程
4.二、内核修改
/etc/sysctl.conf 改成如下内容
/etc/security/limits.conf 改成如下内容
解释
4.3 密码口令策略修改
4.4 历史命令保留和经常使用服务端口修改
4.五、Banner假装
能够扰乱入侵者这对服务器信息的判断
a、Vsftpd banner 假装
修改vsftpd.conf
ftpd_banner=Welcome to Microsoft FTP service.
b、Apache banner 假装
修改/usr/local/apache/conf/httpd.conf文件,能够隐藏一些apache信息,若是要屏蔽掉全部信息,须要修改源码文件从新编译
httpd-2.2.25/include/ap_release.h httpd-2.2.25/os/unix/os.h
c、Nginx banner 假装
在nginx.conf 的 http 块里面添加 server_tokens off;
若要完全屏蔽,须要修改源码,从新安装
src/core/nginx.h
d、 PHP banner修改 php.ini 修改expose_phpOn —> expose_php = Off
Php彩蛋,PHP源码/ext/standard/info.h
e、 TTL值修改
echo net.ipv4.ip_default_ttl = 128 >> /etc/sysctl.conf /sbin/sysctl –p
f、利用iptables,将本机的TCP 3389端口转移到其它开有3389端口的计算机上,给Linux系统假装出一个提供服务的TCP 3389端口
4.六、防火墙IPtables设置
下面是linux一些经常使用的服务所须要的规则。(根据实际状况更改)
(1) iptables 防止CC攻击的规则
安装 kernel-smp-modules-connlimit 、recent 内核模块
modprobe ipt_connlimit 若是没有这个文件须要新建以下文件
控制单个IP的最大并发链接数
(2)iptables 限制主机登陆的规则
4.七、防止暴力登陆
ftp,ssh暴力登陆,脚本实现。
4.八、监控全部终端用户操做
记录全部登陆用户终端操做命令记录
4.9 日志审计
统一远程日志服务器配置,当前系统应配置远程日志功能,将须要重点关注的日志内容传输到日志服务器进行备份。
修改配置文件 /etc/rsyslog.conf
加上这一行:authpriv.* @x.x.x.x
从新启动syslog服务,执行下列命令:services syslogd restart
4.十、更改危险文件(命令)权限
只有root用户能使用一下命令
4.十一、杀毒软件
下载 http://www.clamav.net/lang/en/download/sources/
直接下载:http://downloads.sourceforge.net/clamav/clamav-0.98.1.tar.gz
4.12 、rootkit病毒检测
Rkhunter 下载:http://jaist.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.2/rkhunter-1.4.2.tar.gz
chkrootkit 下载:ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
4.1三、inotify 监控系统文件
监控命令
Inotify监控比较大的目录的时候会报错,须要修改/proc/sys/fs/inotify/max_user_watches的值
建议写入sysctl.conf:fs.inotify.max_user_watches=8192000
五、系统应用安全配置
5.一、中间件 安全配置
(1) apache安全配置
(2) nginx安全配置
5.二、php 安全配置
参考文章
http://m.jb51.net/hack/55784.html
https://blog.slogra.com/post-684.html
http://blog.chinaunix.net/uid-25723371-id-4542221.html