一. 前言:
这个只是个人笔记,方便日后查阅,若有错误,欢迎同行帮忙纠正
1.最近买的腾讯云和阿里云服务器均受到攻击,以前不懂这方面,所以也没在意。由于这次查看腾讯云上面的一个java web项目日志发现,有很多请求php文件的日志,都被springmvc的拦截器给拦截了,当时看到这么多请求php文件的消息,心里倒没咋慌,因为那台只是测试服务器,心里倒是欣喜了一下,这下可以就地的实际解决一下这种问题,学习一下,刚开始以为服务器已被攻破呢,后来仔细分析了一下日志,其实它只是在扫文件,看看我服务器上有没有一样的php文件,可惜哥哥的服务器是java web的。
接着便着手了解这方面的知识,经过网上查阅和向同行请教,现在基本上对服务器的基本防护算是入门了。
1.通过查看项目里面的日志 cat catalina.out:
这是初步接触到攻击日志,网上查阅,说这类属于DOS攻击,到底属于不属于DOS攻击没有仔细研究
见附件2
3.再查看系统级的日志 cat /var/log/secure
见附件3
看到这边,刚开始还想着把这些攻击的IP一个个加到防火墙里面,禁止它再次访问,同时通过IP查询,发现这些IP都属于国外的,譬如印度、俄罗斯、巴西等,加了一两个进去,发现并没有实际性的作用,因为它好像是生成的伪IP,你加进去一个,它又有新的IP来攻击,那它必定是通过工具进行自动攻击的,我这边一个个加根本不是一解决办法。
二.进入主题:
遂上网查询防护的基本知识:
基本上形成了如下思路:
1.首先禁用root登录,创建普通用户来登录服务器,然后再通过su root切换到root用户
这样增加了攻击难度,首先它得猜到我的普通用户登录名,直接通过root登录已经没有用了。
1. 修改SSH的端口,通常都是22,我把端口改成23456,这样它扫端口也够他扫上一段时间了
2. 通过工具来拦截获取攻击的IP,生成黑名单,防止再次攻击,这个我选用的DenyHosts,好用不好用,用过才知道。
三. 操作
1禁用root登录
参考: http://www.2cto.com/os/201102/84178.html
#先创建一个普通用户test,同时给test用户设置密码
adduser test
passwd test
#接着禁用root登录
vi /etc/ssh/sshd_config
PermitRootLogin no
Systemctl restart sshd.service
测试看看,是不是通过root用户无法直接登录了,只能通过普通用户登录,然后再su root
2.修改SSH的端口
参考: http://blog.csdn.net/jasper_success/article/details/38537049
注意!这里的Centos版本是7
step1 修改/etc/ssh/sshd_config
vi /etc/ssh/sshd_config
#Port 22 //这行去掉#号
Port 51866 //下面添加这一行
为什么不先删除22,以防其他端口没配置成功,而又把22的删除了,无法再次进入服务器
step2 修改SELinux
使用以下命令查看当前SElinux 允许的ssh端口:
semanage port -l | grep ssh
添加51866端口到 SELinux
semanage port -a -t ssh_port_t -p tcp 51866
然后确认一下是否添加进去
semanage port -l | grep ssh
如果成功会输出
ssh_port_t tcp 51866, 22
step3 重启ssh
systemctl restart sshd.service
Step4 防火墙开放51866端口
firewall-cmd --permanent --zone=public --add-port=51866/tcp
然后测试试试,能不能通过51866登录,若能登录进来,说明成功,接着删除22端口
vi /etc/ssh/sshd_config
删除22端口 wq
systemctl restart sshd.service
同时防火墙也关闭22端口
firewall-cmd --permanent --zone=public --remove-port=22/tcp
然后再进行测试,看看22端口是不是不可以登录了
登录的时候,ssh [email protected] -p 51866
3.安装DenyHosts
参考: http://blog.chinaunix.net/uid-280772-id-2135429.html
http://www.cnblogs.com/xia/archive/2011/02/11/1951257.html
http://www.cnblogs.com/suihui/p/3899381.html
DenyHosts(项目主页:http://denyhosts.sourceforge.net/)是运行于Linux上的一款预防SSH暴力破解的软件,可以从
http://sourceforge.net/projects/denyhosts/files/进行下载,然后将下载回来的DenyHosts-2.6.tar.gz源码包上传到Linux系统中。
下面是安装过程
****************************************************************
tar zxvf DenyHosts-2.6.tar.gz #解压源码包
cd DenyHosts-2.6 #进入安装解压目录
python setup.py install #安装DenyHosts
cd /usr/share/denyhosts/ #默认安装路径
cp denyhosts.cfg-dist denyhosts.cfg #denyhosts.cfg为配置文件
cp daemon-control-dist daemon-control #daemon-control为启动程序
chown root daemon-control #添加root权限
chmod 700 daemon-control #修改为可执行文件
ln -s /usr/share/denyhosts/daemon-control /etc/init.d #对daemon-control进行软连接,方便管理
安装到这一步就完成了。
/etc/init.d/daemon-control start #启动denyhosts
chkconfig daemon-control on #将denghosts设成开机启动
******************************************************************
vi /usr/share/denyhosts/denyhosts.cfg #编辑配置文件,另外关于配置文件一些参数,通过grep -v "^#" denyhosts.cfg查看
SECURE_LOG = /var/log/secure #ssh 日志文件,redhat系列根据/var/log/secure文件来判断;Mandrake、FreeBSD根
据 /var/log/auth.log来判断
#SUSE则是用/var/log/messages来判断,这些在配置文件里面都
有很详细的解释。
HOSTS_DENY = /etc/hosts.deny #控制用户登陆的文件
PURGE_DENY = 2h #过多久后清除已经禁止的,设置为30分钟;
# ‘m’ = minutes
# ‘h’ = hours
# ‘d’ = days
# ‘w’ = weeks
# ‘y’ = years
BLOCK_SERVICE = sshd #禁止的服务名,当然DenyHost不仅仅用于SSH服务
DENY_THRESHOLD_INVALID = 1 #允许无效用户失败的次数
DENY_THRESHOLD_VALID = 3 #允许普通用户登陆失败的次数
DENY_THRESHOLD_ROOT = 3 #允许root登陆失败的次数
DAEMON_LOG = /var/log/denyhosts #DenyHosts日志文件存放的路径,默认
更改DenyHosts的默认配置之后,重启DenyHosts服务即可生效:
/etc/init.d/daemon-control restart #重启denyhosts
如果想删除一个已经禁止的主机IP,并加入到允许主机例表,只在 /etc/hosts.deny 删除是没用的。需要进入 /usr/share/denyhosts 目
录,进入以下操作:
1、停止DenyHosts服务:$ /etc/init.d/daemon-control stop
2、在 /etc/hosts.deny 中删除你想取消的主机IP
3、编辑 DenyHosts 工作目录的所有文件,通过
$ grep 127.0.0.1 /usr/share/denyhosts/data/* #这行没明白
然后一个个删除文件中你想取消的主机IP所在的行:
*/usr/share/denyhosts/data/hosts
*/usr/share/denyhosts/data/hosts-restricted
*/usr/share/denyhosts/data/hosts-root
*/usr/share/denyhosts/data/hosts-valid
*/usr/share/denyhosts/data/users-hosts
4、添加你想允许的主机IP地址到
/var/lib/denyhosts/allowed-hosts #这行没明白
vi /usr/share/denyhosts/data/allowed-hostsps
# We mustn't block localhost
127.0.0.1
192.168.1.*
5、启动DenyHosts服务: /etc/init.d/daemon-control restart
firewall-cmd --reload
firewall-cmd --state
firewall-cmd --permanent --zone=public --query-port=8025/tcp 查询端口是否开着
netstat -nupl (UDP类型的端口)
netstat -ntpl (TCP类型的端口)