一、服务器安全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 |
沙发等你来坐!