背景:某客户从老兵IDC上面购买了一台服务器用来学习使用,搭建完环境与安装过mysql等日常需要的软件后就没在关注了,一是足够日常调试使用,二是对这台云服务不够重视。于是,悲剧发生了,周一再次调试一个小项目时mysql居然报错了,上去看了下数据库被攻破了,数据和表已经全部被清空…基于此次决定写一篇对云服务器做一次简单的安全加固的文章供客户们学习使用。
ps:以下均以一台新开的老兵服务器为例。
禁用root用户远程登陆,采用 ‘su’ 命令方式登陆。
编写脚本,将恶意攻击服务器的IP加入黑名单中。
安装防火墙,指定开放端口&IP
mysql 更改用户名&常用端口。
1.使用root用户登录云服务,创建新用户。(一定要先创建用户再禁用root用户远程登陆),保存好账户密码。
useradd user_name #创建新用户的用户名passwd pwd #创建新用户的用户密码12
2.修改root密码,将root密码修改为难度高以上
passwd #执行命令够输入新密码1
建议用户密码设置包含大小写,特殊符号等,位数30位以上。如:hsauFGyhyue737482zsdnjKszryhwp 暴力破解需要好几年才有可能。
3.测试创建的用户是否能够登陆,如果能登陆执行下一步,如何不能登录使用root账户修改新创建的用户账户密码。
4.禁用root登陆
vim /etc/ssh/sshd_config # 修改PermitRootLogin后面的yes为no,并且去掉前面的注释符,同时可以限制失败次数1
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
MaxAuthTries 3
#MaxSessions 10
5.重启sshd服务
systemctl restart sshd.service1
6.退出重新使用root账户验证是否被禁用
1.创建脚本文件
vim /usr/local/bin/secure_ssh.sh1
2.添加脚本内容
#! /bin/bashcat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.listfor i in `cat /usr/local/bin/black.list`do IP=`echo $i |awk -F= '{print $1}'` NUM=`echo $i|awk -F= '{print $2}'` if (( $NUM > 5 )) ; then grep $IP /etc/hosts.deny > /dev/null if [ $? -gt 0 ];then echo "sshd:$IP:deny" >> /etc/hosts.deny fi fidone12345678910111213
3.添加定时任务
crontab -e1
在结尾处添加内容
*/1 * * * * sh /usr/local/bin/secure_ssh.sh1
4.脚本内容为累计超过五次恶意登陆&攻击的IP将会被加入黑名单。
5.查看黑名单
cat /use/local/bin/black.list# 已经在黑名单里面的IPcat /etc/hosts.deny1234
1.关闭firewall
systemctl stop firewalld.service;systemctl disable firewalld.service;systemctl mask firewalld.service;123
2.安装 iptables 安装防火墙
yum -y install iptables-services1
3.设置防火墙开机自动启动
systemctl enable iptables;systemctl start iptables;12
4.重启防火墙使配置生效
systemctl restart iptables.service1
5.配置黑白名单端口
# 修改配置文件vim /etc/sysconfig/iptables12
添加如下内容
*filter :INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 要放开的端口 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT123456789101112
# 重启生效systemctl restart iptables.service systemctl enable iptables.service123
1.关闭mysql默认3306 能够阻挡大部分恶意注入,自定义端口号范围通常是 1024-65535 之间。
#修改配置文件vim /etc/my.cnf#在 [mysqld] 下面增加新的端口配置port=设置的端口号12345
2.修改默认root账号
高版本mysql 8:
ALTER USER ‘账户’@’%’ IDENTIFIED WITH mysql_native_password BY ‘密码’;
flush privileges; #权限刷新
update user set user =‘账户’ where user =‘root’; # 修改账户
flush privileges; #权限刷新
mysql5.7以下
# 登陆mysqlmysql -u root -p #输入root密码# 使用mysql库use mysql;# 查看已有所有用户select user from mysql.user;# 更改user表中指定用户的密码update user set password=password('密码') where user='root' and host='localhost'; # 权限刷新flush privileges;# 更改用户名update user set user =’新的用户名’ where user =’root’;# 权限刷新flush privileges;12345678910111213141516171819
3.重启mysql
service mysqld restart1
4.验证登陆
以上就是本次服务加固的全部内容了,还有些步骤可以再优化,比如远程登陆禁用ssh账号密码登陆,使用密钥对方式登陆。mysql建议安装高版本5.7以上的,安全方面做了优化,使用起来更加安全,如果没有外部访问的需求可以安装mysql8 ,禁用远程登陆连,mysql更加安全。