Server

Server


Ngix | Apache | Tomcat | IIS | Cherokee | LIGHTTPD | 群晖

Nginx (stylized as NGINX or nginx or NginX) is a web server which can also be used as a reverse proxy, load balance, mail proxy and HTTP cache.

The ApacheHTTP Server, colloquially called Apache, is free and open-source cross-platform web server software.

Tomcat provides a "pure Java" HTTP web server environment in which Java code can run. Tomcat is an application server from the Apache Software Foundation.

IIS (formerly Internet Information Server) is an extensible web server created by Microsoft for use with the Windows NT family.

Cherokee is an extremely fast, flexible and embeddabel web server.


============apache
[root@iZ94egs3be2Z ~]# service httpd stop
Stopping httpd:                                            [  OK  ]

service httpd start 启动
service httpd restart 重新启动
service httpd stop 停止服务

============nginx

配置nginx /usr/local/nginx/conf/nginx.conf

/usr/local/nginx/sbin/nginx -参数

/usr/local/nginx/sbin/nginx -s reload 重新启动

-c:使用指定的配置文件而不是conf目录下的nginx.conf 。

-t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重要,用来检测所修改的配置文件是否有语法错误。
-s:reload 重载
-s:stop 停止

[root@iZ94egs3be2Z ~]# /usr/local/nginx/sbin/nginx -t 检测配置文件级显示配置文件位置
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful


LA(N)MP安全配置 “言多必失”,这句话在服务器安全方面也同样适用。

PHP安全配置

1. 屏蔽PHP版本信息php.ini配置文件增加配置代码: expose_php = Off
2. 关闭错误回显。错误回显一般用于开发模式。配置代码:display_errors = Off
3. 错误日志。关闭display_errors后,在页面无法显示错误信息,虽然提升了安全性,但是也增加了开发人员排错工作量,因此建议将错误信息写入日志文件中。配置代码:log_error = On
建议错误日志存放位置于Apache日志一起:error_log = D:/usr/local/apache2/logs/php_error.log,该文件必须赋予写入权限。
4. 禁用危险函数。关闭不是必须的比较危险的函数。在配置文件中的disable_functions选项
phpinfo()(中)、passthru()(高)、exec()(高)、system()(高)、chroot()(高)、scandir()(中)、chgrp()(高)、chown()(高)、shell_exec()(高)、proc_open()(高)、proc_get_status()(高)、error_log()(低)、ini_alter()(高)、ini_set()(高)、ini_restore()(高)、dl()(高)、pfsockopen()(高)、syslog()(中)、redlink()(中)、symlink()(高)、popen()(高)、stream_socket_server()(中)、putenv()
5. 防止文件远程加载漏洞。建议关闭:allow_url_fopen、file_get_contents。
6. 限制活动目录。配置代码:open_basedir = /home/web/html/
7. 自动转义。配置代码:magic_quotes_gpc = Off、register_globals = OFF,这是PHP新版本默认设置。


taint PHP作者之一的鸟哥开发了一款安全扩展,可以从PHP语言层面去分析,找出一些可能的参数注入漏洞代码。taint (污染) 在SQL注入、命令执行、文件包含、XSS 跨站、代码执行、文件操作等方面给出提醒。

最后需要提醒大家,Taint在开发环境安装即可,不要安装到生产环境当中,否则可能会把网站的安全问题直接暴露给攻击者。

利用PHP扩展Taint找出网站的潜在安全漏洞实践 | PHP扩展--taint检测隐藏漏洞 | 利用PHP扩展Taint找出网站的潜在安全漏洞实践



开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。
测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。
生产环境:是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。

三个环境也可以说是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环境。
通俗一点就是:
1:开发环境:项目尚且在编码阶段,我们的代码一般在开发环境中 不会在生产环境中,生产环境组成:操作系统 ,web服务器 ,语言环境。  php 。 数据库 。 等等
2:测试环境:项目完成测试,修改bug阶段
3:生产环境:项目数据前端后台已经跑通,部署在阿里云上之后,有客户使用,访问,就是网站正式运行了


一个软件产品从开发到用户使用都涉及哪些环境?
开发环境、测试环境、回归环境、预发布环境、生产环境。
1、开发环境
顾名思义,开发同学开发时使用的环境,每位开发同学在自己的dev分支上干活,提测前或者开发到一定程度,各位同学会合并代码,进行联调。
2、测试环境
也就是我们测试同学干活的环境啦,一般会由测试同学自己来部署,然后在此环境进行测试。bug修复后,需要发版更新测试环境来回归bug。
3、回归环境
回归bug的环境,其实就是我们的测试环境,在测试环境上测试、回归验证bug。
4、预发布环境
测试环境到生产环境的过渡。测试环境可能会受到一些限制,一些流程或者数据没有测试到,就可以在预发布环境进行验证,从而保证产品上线质量。
预发布环境和生产环境区别:
1)预发环境中新功能为最新代码,其他功能代码和生产环境一致。
2)预发环境和生产环境的访问域名不同。
注意事项:预发布环境一般会连接生产环境的数据库,测试时要注意,以免产生脏数据,影响生产环境的使用。
5、生产环境
即线上环境,用户使用的环境。由特定人员来维护,一般人没有权限去修改。

另外,还有个灰度发布,发生在预发布环境之后,生产环境之前。
生产环境一般会部署在多台机器上,以防某台机器出现故障,这样其他机器可以继续运行,不影响用户使用。灰度发布会发布到其中的几台机器上,验证新功能是否正常。如果失败,只需回滚这几台机器即可。


渗透测试系统permeate



Apache安全配置
1.屏蔽版本信息 httpd.conf配置:(1)ServerTokens OS: ServerTokens ProductOnly; (2)ServerSignature On: ServerSignature Off。完成设置后需要重新启动Apache。

2.目录权限隔离:Apache安装后会产生serverRootDocumentRootScripAliasCustomlogErrorlog目录,需要单独设置他们的权限。
3.关闭默认主机。
4.低权限运行。http.conf加入:User nobody; Group# -1;
5.防止用户自定义设置。阻止用户建立修改.htaccess文件。
6.禁止显示目录。


Nginx安全设置

配置防御 Nginx的配置防御包括权限配置与访问限制,权限配置的主要目的是防止攻击者发现某些漏洞后可以轻松攻击获取WebShell,而访问限制的主要目的是让攻击者不能访问某些URL。 1.权限配置。1)文件权限。为了防止在Web目录中生成木马文件,应该给Web运行目录执行权限即可。通过chmod命令把目录设置成可执行脚本,但不可以写入。这样可以一定程度防止一些文件上传攻击。(2)运行账户权限。建议使用nobody账号来运行Nginx,并且确认网站目录对于nobody的权限为可读可执行;对于上传目录或者写入文件的目录添加nobody的读取和写入权限,但不要给予执行权限。2.访问限制。主要是路径限制和日志文件限制。(1)路径限制。设置访问的IP地址;(2)日志文件限制。建议将日志存放在Web目录以外;(3)限制网站TXT文件被访问。主要是用于限制日志文件访问。

防止权限扩大

1.目录执行权限。在Web安全漏洞中,上传漏洞的占比非常大,其中主要问题在于上传的文件可以作为脚本执行。所以需要对上传目录配置限制。nginx.conf:location ~* ^/upload/. *. (php|php5)$ { deny all;} ; 2.限制账号目录权限。限制php-fpm运行账号的权限,让木马不能读取写Web目录意外的文件。(1)chmod o-r -R / 让该账户失去所有权限;(2)chmod o+r -R html/ 单独赋予WeB目录权限;取消shell命令:chmod 776 /bin/sh

WAF扩展

Nginx目前有3个比较常见的漏洞防御模块:modsecurity、Naxsi和ngx_lua_waf。
ngx_lua_waf是通过Lua语言开发的,所以需要使用前安装Lua环境:
wget http://luajit.org/download/LuaJIT-2.0.3.tar.gz
tar xf LuaJIT-2.0.3.tar.gz
cd LuaJIT-2.0.3 make && make install
ln -sv /usr/local/lib/libluajit-5.1.so.2.0.3 /lib64/libluajit-5.1.so.2
下载ngx_devel_kit:
wget https://github.com/simpl/ngx_devel_kit/archive/v0.2.17.tar.gz
tar xf v0.2.17.tar.gz

重新编译安装Nginx......

Nginx解析漏洞

在Nginx+PHP服务器中,如果PHP配置中cgi.fix_pathinfo=1,就会产生一个文件解析漏洞。例如,如果我们上传包含的一句话图片,然后访问地址http://192.168.0.132/uploadfiles/nginx.png/.php。就可以执行php语句了。

漏洞防御:1、 将php.ini文件中的cgi.fix_pathinfo的值设置为0,这样php再解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示404页面;2、 php-fpm.conf中的security.limit_extensions后面的值设置为.php
参考:地址1 | 测试




BypInformation