CentOS7服务器基本安全防护篇

一.前言:

这个只是个人笔记,方便日后查阅,若有错误,欢迎同行帮忙纠正
1.最近买的腾讯云和阿里云服务器均受到攻击,以前不懂安全防护这方面,所以也没在意。由于这次查看腾讯云上面的一个java web项目日志发现,有很多请求php文件的日志,都被springmvc的拦截器给拦截了,当时看到这么多请求php文件的消息,心里倒没咋慌,因为那台只是测试服务器,心里倒是欣喜了一下,这下可以就地的实际解决一下这种问题,学习一下,刚开始以为服务器已被攻破呢,后来仔细分析了一下日志,其实它只是在扫文件,看看我服务器上有没有一样的php文件,可惜哥哥的服务器是java web的。
接着便着手了解这方面的知识,经过网上查阅和向同行请教,现在基本上对服务器的基本防护算是入门了。
1.通过查看项目里面的日志  cat catalina.out:

CentOS7服务器基本安全防护篇

 这是初步接触到攻击日志,网上查阅,说这类属于DOS攻击,到底属于不属于DOS攻击没有仔细研究

 


2.再查看项目请求的日志  cat  localhost_access_log.2016-06-29.txt

  CentOS7服务器基本安全防护篇


3.再查看系统级的日志   cat /var/log/secure

  CentOS7服务器基本安全防护篇

看到这边,刚开始还想着把这些攻击的IP一个个加到防火墙里面,禁止它再次访问,同时通过IP查询,发现这些IP都属于国外的,譬如印度、俄罗斯、巴西等,加了一两个进去,发现并没有实际性的作用,因为它好像是生成的伪IP,你加进去一个,它又有新的IP来攻击,那它必定是通过工具进行自动攻击的,我这边一个个加根本不是一解决办法。

 

二.进入主题:

遂上网查询防护的基本知识:

基本上形成了如下思路:

1.首先禁用root登录,创建普通用户来登录服务器,然后再通过su root切换到root用户

这样增加了攻击难度,首先它得猜到我的普通用户登录名,直接通过root登录已经没有用了。

2. 修改SSH的端口,通常都是22,我把端口改成23456,这样它扫端口也够他扫上一段时间了

3. 通过工具来拦截获取攻击的IP,生成黑名单,防止再次攻击,这个我选用的DenyHosts,好用不好用,用过才知道。

4.安装云锁 :http://www.yunsuo.com.cn/help/center#/qs/qs-03

 

三.操作

1禁用root登录

参考:http://www.2cto.com/os/201102/84178.html

#先创建一个普通用户test,同时给test用户设置密码

adduser test

passwd test

mkdir  /opt/doc

#给test用户分配doc目录的写入权限,方便上传war等文件

chown  test   /opt/doc

 

chmod  755   /opt/doc

 

#接着禁用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

 

注:操作不成功,可以参考:https://sebastianblade.com/how-to-modify-ssh-port-in-centos7/

 

然后确认一下是否添加进去

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地址到 

vi /etc/hosts.allow

# We mustn't block localhost

sshd: 127.0.0.1

sshd: 192.168.1.*

sshd: 公网IP

 

如有IP被误封,可以执行下面的命令解封:wget http://soft.vpser.net/security/denyhosts/denyhosts_removeip.sh && bash denyhost_removeip.sh 要解封的IP

 

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类型的端口)

 

清空secure的方式:

echo "" > /var/log/secure