上周去面试,被问了个问题,如果保障你服务器的安全?事情太过杂碎我一时间想不起来很多,被问了个措手不及.痛定思痛后决定来总结一番.
有参考众网友的意见,有总结过去的经验,也有包含书籍中介绍的。安全运维技能是每个运维人士必备的,毕竟自己的地盘哪容得旁人撒野。众多检查选项会写成定时任务,在凌晨2-5点之间分批执行,并记录下检查结果。关于定时任务脚本,另有篇幅会总结出来。
一、检查文件权限 不正确的权限设置直接威胁着系统的安全,因此运维人员应该能及时发现并立刻修正,防患于未然。
find / -type f -perm -2 -o -perm -20 |xargs ls -al //查找任何用户都有写权限的文件或目录
find / -type f -perm -4000 -o -perm -2000 -print | xargs ls –al //防止提权
find / -user root -perm -4000 -print -exec md5sum {} ; //检查系统中所有suid及sgid文件
二、查看 passwd 文件中有哪些特权用户,删除特殊的账户和账户组,最近24小时添加了哪些用户
# awk -F: '$3==0 {print $1}' /etc/passwd
可删除的用户adm,lp,sync,shutdown,halt,news,uucp,operator,games,gopher等。
可删除的组adm,lp,news,uucp,games,dip,pppusers,popusers,slipusers等。
三、查看系统里有没有空口令帐户,有没有无主的文件
# awk -F: 'length($2)==0 {print $1}' /etc/shadow
find / -nouser -o –nogroup //没有属主的孤儿文件比较危险,往往成为黑客利用的工具
四、检查系统守护进程,查看定时任务
# cat /etc/xinetd.conf | grep -v "^#" #这个进程在centos7以上没有了
cat /etc/crontab
五、检查网络连接和监听端口,哪些不是自己开放的。一般开放的端口有80,8080,22,21等
# netstat –an
# netstat –rn
# ifconfig –a
六、设置iptables,从根本上防止syn攻击和ddos攻击
防DDOS攻击-限制同一IP与80端口的最大连接数为10,超过的丢弃
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
限制同一IP与服务器连接的速率,每秒最多接收12个包,每秒峰值是24
iptables -A INPUT -p tcp --syn -m limit --limit 12/s --limit-burst 24 -j DROP
防Syn 洪水攻击,防非法的包组合
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
防洪水ping
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
七、查找最近时间段(设置为1天)产生的新文件,看哪些不是必要产生的
find / -mtime -1
八、检查系统文件完整性
# rpm -Vf /bin/ls
# rpm -Vf /usr/sbin/sshd
# rpm -Vf /sbin/ifconfig
# rpm -Vf /usr/sbin/lsof
# md5sum –b 文件名
# md5sum –t 文件名
九、查找是否有后门
# cat /etc/crontab
# ls /var/spool/cron/ ; crontab -l #查看定时任务是否被修改
# cat /etc/rc.d/rc.local
# ls /etc/rc.d
# ls /etc/rc3.d
# find / -type f -perm 4000 #查看是否为管理员增加或者修改
十、查看临时目录是否存在攻击者入侵时留下的残余文件
#tail -n 100 ~/.bash_history | more
#是否存在.c .py .sh为后缀的文件或者2进制elf文件
ls -la /tmp
ls -la /var/tmp
find / -name \*.elf | xargs ls -l
十一、在web目录下运行
#查看是否有木马
grep -r "getRuntime" ./
#运行的时候被连接或者被任何程序调用
find . -type f -name "*.jsp" | xargs grep -i "getRuntime"
#返回ip地址字符串
find . -type f -name "*.jsp" | xargs grep -i "getHostAddress"
#创建WshShell对象可以运行程序、操作注册表、创建快捷方式、访问系统文件夹、管理环境变量
find . -type f -name "*.jsp" | xargs grep -i "wscript.shell"
#gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针
find . -type f -name "*.jsp" | xargs grep -i "gethostbyname"
#调用系统命令提权
find . -type f -name "*.jsp" | xargs grep -i "bash"
#Jsp木马默认名字
find . -type f -name "*.jsp" | xargs grep -i "jspspy"
#检查是否有非授权访问管理日志
find . -type f -name "*.jsp" | xargs grep -i "getParameter"
#要进中间件所在日志目录运行命令
fgrep –R "admin_index.jsp" 20170702.log > log.txt #递归地读取每个目录下的所有文件
#查看是否出现对应的记录
fgrep –R "and1=1" *.log > log.txt
fgrep –R "select " *.log > log.txt
fgrep –R "union " *.log > log.txt
fgrep –R "../../" *.log > log.txt
fgrep –R "Runtime" *.log > log.txt
fgrep –R "passwd" *.log > log.txt
#查看是否有shell攻击
fgrep –R "uname -a" *.log > log.txt
fgrep –R "id" *.log > log.txt
fgrep –R "ifconifg" *.log> log.txt
fgrep –R "ls -l" *.log > log.txt
十二、安装chrootkit,检查是否有rootkit
rootkit是入侵者经常使用的工具,这类工具可以隐秘、令用户不易察觉的建立了一条能够总能够入侵系统或者说对系统进行实时控制的途径。
yum install -y glibc-static
mkdir chrootkit
cd chrootkit/
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.52/
make sense #编译
./chkrootkit #检测命令,若出现INFECTED那就要小心了(./chkrootkit | grep INFECTED)
检测脚本,放到定时任务里面即可
#!/bin/bash
#sript name:chkrootkit.sh
TOOLKITSPATH=/usr/local
MAILUSER=root@localhost
file_chkrootkit_log=chkrootkitcron.log
servername=`hostname`
date=`date +%Y-%m-%d`
cd ${TOOLKITSPATH}/chkrootkit
./chkrootkit > ${file_chkrootkit_log}
[ ! -z "$(grep INFECTED ${file_chkrootkit_log})" ] && \
grep INFECTED ${file_chkrootkit_log} | mail -s "[chkrootkit] report in ${servername} ${date}" ${MAILUSER}
十三、bash shell 漏洞
1、测试代码,有问题的
[root@localhost ~]# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable
this is a test
2、修复(下面是参考网上的东西,不知道效果怎么样)
[root@localhost ~]# yum -y install yum-downloadonly
[root@localhost ~]# yum -y install bash-4.1.2-33.el6_7.1.x86_64.rpm
3、重新测试
[root@localhost ~]# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
this is a test
十四、完成后根据检查结果可做如下措施
修改了root账号密码
修改了sshd默认端口
修改Nginx用户nologin
重新修订iptables规则
发现系统服务器存在bash严重漏洞、破壳漏洞(Shellshock)并修
来源:https://www.cnblogs.com/xyz999/p/11716095.html