lnmp服务器架构与安全
我们Web开发常用的LNMP架构:
就是Linux+nginx+MySQL+PHP,这几个软件都是开源软件,对企业来说成本较低;因为开源,所以安全性显得尤为重要,特别有等保要求的项目,下面是一些常见的配置:
1.服务器:
1.1Root密码:
不设置一些容易被猜到的密码,如姓名、生日、手机号等;
密码不少于8位,最好包含字母、数字、特殊符号,而且要定期修改密码;
尽量不使用root账号进行操作和运行程序,其他账号权限也要最小化;
2.MariaDB:
MariaDB是MySQL的一个分支,开源免费;centos系统的常用操作命令:
安装:yum install mariadb-server mariadb-y
启动:systemctl start mariadb
设置启动:systemctl enable mariadb
3.Php:
Php安装,如果直接用yum源安装,PHP的版本比较落后,所以要求较高的场景我们一般自己编译安装;
PHP作为编程语言,需要注意的安全方面很多,
隐藏版本号:
下面是常见的请求返回头信息:
包含php的服务器返回
此返回包含了php版本信息,
修改php.ini ,
expose_php = Off , 重启nginx后,返回如下:
不包含php的服务器返回
屏蔽报错信息:
如下代码,echo date(); 运行报错
警告错误
修改php.ini配置 display_errors = Off
重新运行,不会有任何报错信息,错误信息被屏蔽;
Httponly: 主要用来防治xss问题
xss的概念就不用多说了,它的危害是极大的,这就意味着一旦你的网站出现xss漏洞,就可以执行任意的js代码,最可怕的是攻击者利用js获取cookie或者session劫持,如果里面包含了敏感信息(身份信息,管理员信息)等,那就容易出问题
Php.ini session.cookie_httponly=true ,设置httponly后,js脚本就不能取到cookie了,
这个功能要慎用,因为你用到的js和其他一些库中可能需要cookie;
禁用函数:
通过disable_functions=phpinfo,curl_exec ,可以把容易出现安全问题的函数禁用;
开启日志:
通过日志可以跟踪到很多系统运行中的问题,php.ini中的Log_errors, syslog,可以开启系统日志;
时间设置:
时间上的误差在运维上会产生安全问题,如分析日志;所有服务器的时区、时间设置都要正确;
PHP的时区设置,在php.ini中,
如果不设置,默认为UTC事件,也被成为格林威治标准时间(Greenwich Mean Time,GMT),都与英国伦敦的本地时间相同。而北京正好位于时区的东八区,早于UTC8个小时,北京时间设置
代码里设置:
date_default_timezone_set(‘PRC’);
php.ini配置
date.timezone = PRC
4.nginx:
nginx作为现在最流行的web代理服务器,很多站点都在用,所以nginx的安全也非常重要,为了隐藏服务器信息,需要安装编译时先修改源码,
src/core/nginx.h –修改版本号信息
其他版本名等信息也在此文件做相应的修改,
也可以通过配置修改,
Error_log logs/error.log; 错误日志
http{
…
Server_tokens off; 隐藏版本号
…
Server{
Allow ip; 禁止的ip地址或地址段
Deny all;
}
}
使用https访问,现在使用http的协议会被浏览器提示不安全;
访问服务器时,服务器会通过http返回头返回服务器的名称、版本等信息,这就给别有用心的人根据版本查找漏洞,对服务器攻击提供了信息,所有我们最好把这些信息都隐藏起来;
5.Apache:
隐藏服务器版本信息:
修改配置http.conf:
ServerSignature Off
ServerTokens Prod
关闭trace功能,根据trace返回的信息可以看到服务器的一些信息,
Apache
TraceEnable Off
禁止遍历目录:
Options -Indexes FollowSymLinks
日志开启: