iiDBA 门户首页 技术文档 查看内容

CentOS基础安全加固技术文档(Nginx+MySQL)

2020-5-11 19:45| 发布者: iidba| 查看: 1116| 评论: 0

摘要: Nginx+MySQL在centos下的安全加固

一、服务器安全

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

鲜花

握手

雷人

路过

鸡蛋

相关阅读

精彩评论

沙发等你来坐!

意见
反馈