博客
Centos7云服务器基础安全加固
- 2019年9月1日
- 作者: 茹憶
- 分类目录 Linux
阅读484次
没有评论
周末由于一台运行个人网站的香港云主机被挂马,造成数据库被恶意删库,网站无法正常运行。更加让我无语的是对方竟然让我发送0.03BTC过去,才会把数据库备份发给我。但是作为一个DBA,数据库备份肯定是必须的。发现被黑客删库后,赶快从备份中将数据库恢复出来,网站代码也使用最新代码进行了替换,网站恢复正常。虽然网站恢复正常,但是购买的云主机安全问题确不得不让我警惕。在排查被黑原因之前,先对服务器安全做了一点基本的加固,防止再次被黑。主要从Linux,Nginx, 程序目录,MySQL几个方面做了一些简单安全加固。对运营个人网站的朋友提供一些参考帮助。当然这些安全加固其实非常的基础,无法防止ddos攻击,如果黑客手段高明的话也是无济于事的,毕竟不是安全专家。无论如何,一定要做好备份,备份大于一切。
一、服务器安全
1.修改服务器密码
服务器不要使用弱密码,至少大小写字母加数字及特殊字符组成,长度12位以上。
# passwd
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
2.修改服务器SSH默认端口
修改默认SSH端口防止被恶意扫描,修改SSH端口前请先确认防护墙是否关闭,否则可能导致变更端口导致SSH无法连接。
修改方法如下,修改sshd_config文件,更改SSH默认端口,例如改成2222
# vim /etc/ssh/sshd_config
Port 2222
然后重启SSH服务,此时新的SSH连接就需要使用新端口登录
# systemctl reload sshd
# systemctl status sshd
当然你甚至可以选择使用密钥方式进行登录,相比单纯的密码登录,会更加安全一些。
3.开启网络防火墙
只放行SSH端口和web端口即可,其他端口全部禁止远程访问。
在开启防火墙前,先配置一个自动关闭防火墙的计划任务,这一步非常重要,防止开启防火墙后SSH无法进入服务器,计划任务在防火墙配置完成后确认没问题移除即可。
配置关闭防火墙的机会任务
# crontab -l
*/3 * * * * systemctl stop firewalld
修改防火墙配置文件添加放行SSH端口(假如被修改成了2222)
# vim /etc/firewalld/zones/public.xml
<?xml version=”1.0″ encoding=”utf-8″?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name=”ssh”/>
<service name=”dhcpv6-client”/>
<rule family=”ipv4″> 放通任意ip访问服务器的2222端口
<port protocol=”tcp” port=”2222″/>
<accept/>
</rule>
</zone>
开启防火墙
# systemctl start firewalld
通过命令行放行添加80端口,开放web服务
# firewall-cmd –permanent –add-port=80/tcp
查看已开通的端口列表
# firewall-cmd –list-all
4.启用GoogleAuth双重身份认证
借助Google的身份验证插件,获取动态验证码完成SSH动态码认证。
安装配置过程如下:
安装epel源
yum -y install epel-release
安装Qrencode,谷歌身份验证器通过该程序生成二维码
yum install -y qrencode
安装谷歌身份验证器,编译安装
yum -y install pam-devel libtool
cd google-authenticator-libpam/
./bootstrap.sh
./configure –prefix=/usr/local/google-authenticator
make && make install
拷贝google的身份验证器pam模块到系统下
cp /usr/local/google-authenticator/lib/security/pam_google_authenticator.so /lib64/security/
配置sshd的pam认证,在基于密码认证的前面,配置先基于google验证码认证
# vim /etc/pam.d/sshd
加入下面一行,放在auth include password-auth 基于密码认证的上面一行
auth required pam_google_authenticator.so
修改ssh服务配置,开启下面配置
# vim /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
重启ssh服务
systemctl restart sshd
接下来进入刚才克隆下来的 google-authenticator-libpam 目录,执行
./google-authenticator #基于当前用户做验证,如果切换别的系统用户,请登陆其他用户,执行此命令即可
Do you want authentication tokens to be time-based (y/n) y #输入y, 提示是否基于时间的认证
接下来会生成一张二维码图片: 手机上下载身份验证器app软件,扫描此二维码
–二维码图片–
Your new secret key is: XXXXXXXXXXXXX #此安全key需要备份,用于后续更换手机或者二维码丢失,浏览器的身份验证丢失后,通过此安全key获取新的验证码。
# 手机配置号身份验证器之后,输入验证码,会生成备用验证码,只能验证一次
Enter code from app (-1 to skip): 597824
Code confirmed
Your emergency scratch codes are:
11111111
222222
333333
444444
二、应用程序安全
1.应用程序使用非root运行
# ps -ef|grep nginx
root 27723 1 0 23:00 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
www 27725 27723 0 23:00 ? 00:00:00 nginx: worker process
# ps -ef|grep php-fpm
root 28241 1 0 23:00 ? 00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 28242 28241 0 23:00 ? 00:00:01 php-fpm: pool www
www 28243 28241 0 23:00 ? 00:00:01 php-fpm: pool www
www 29951 28241 0 23:31 ? 00:00:00 php-fpm: pool www
2.代码目录最小权限,非必须可写目录请设置为root权限
# chown -R root:root lepus.cc
# chown -R www:www assets protected/runtime
三、Nginx安全设置
1.nginx禁止使用Ip访问,只允许使用域名访问
2.禁止通过url列出程序里的所有目录文件
打开nginx.conf配置文件
# vim /usr/local/nginx/conf/nginx.conf
加入以下内容
location ~ /\.
{
deny all;
}
2. 禁止php文件的访问及执行
打开fastcgi.conf配置文件
# vim /usr/local/nginx/conf/fastcgi.conf
将允许网站上传和可写的目前加入进来,禁止使用url执行PHP文件
location ~* ^/(uploads|assets|protected/runtime)/.*\.(php|php5)$
{
deny all;
}
最后重启nginx使配置生效
# /usr/local/nginx/sbin/nginx -t
# lnmp nginx restart
四、MySQL安全
1.禁止MySQL远程连接
删除MySQL默认test数据库、删除host为空的账号、禁止各账号远程连接权限
2.加固root本机登录密码,使用强密码
mysql> update mysql.user set password=password(‘xxxxxxxxxxx’) where user=’root’;
mysql> flush privileges;
3.应用程序mysql账号加固
授予应用程序连接数据库最小权限,并使用强密码,禁止远程服务器连接到MySQL。
mysql> grant select,insert,update,delete on lepus_web.* to ‘lepus_web’@’127.0.0.1’ identified by ‘xxxxxx’;
mysql> flush privileges;
4.登录MySQL请勿将密码输入到屏幕中
登录mysql使用以下方式登录
# mysql -uroot -p
Enter password:
5.修改MySQL默认端口
修改MySQL默认端口,防止别人使用工具进行端口扫描
打开MySQL配置文件修改默认端口
# vim /etc/my.cnf
[client]
port = 3316
[mysqld]
port = 3316
修改后重启MySQL服务
# lnmp mysql restart
版权声明:本文为DBARUN原创文章,如需转载请注明本站作者及本文链接,DBARUN保留一切法律解释权。
本文链接:http://www.dbarun.com/linux/centos7-safety-reinforcement/
作者: 茹憶

PHP开发工程师(WEB开发认证)、曾就职于1号店高级MySQL DBA、现就职于中国平安,专注于MySQL架构设计和优化、Python技术研究、数据库自动化平台构建。开源天兔数据库监控系统(www.lepus.cc)开发作者。