隐藏nginx、openresty版本号

隐藏nginx、openresty的版本号有什么用?
假设一个场景,nginx被爆出0.9-1.5的版本被爆出一个0day漏洞,
攻击者会先大量扫描匹配的nginx版本,然后实施攻击。
如果事先隐藏了会降低第一时间被攻击的风险

在 http {} 中间配置增加

在http头中从原来的
Server: nginx/1.0.15 变为 Server: nginx
Server: openresty/1.11.2.3 变为 Server: openresty

nginx 日志格式化完整增强版

本完整增强版主要解决了后端执行时间的记录、哪台后端处理的、日志集中化后日志来自于哪台服务器ip、cdn传过来的客户端ip等扩展等问题。

在默认的nginx日志上,扩展增加了http头中代理服务器ip($http_x_forwarded_for)、
http头中cdn保存的客户端用户真实IP($http_x_real_ip)、服务端ip($server_addr)、http头中host主机($host)、
请求时间($request_time)、后端返回时间($upstream_response_time)、后端地址($upstream_addr)、
URI($uri)、ISO 8601标准时间($time_iso8601)

nginx日志滚动切割

繁忙的nginx服务器每天都会产生大量的web日志,所以每天需要切割。
每天切割的日志需要保留一段时间,更老的日志需要删除,专业叫法叫做日志滚动类似于视频监控,
所需要保留一定时间的日志还需要删除更老的日志。

很多人喜欢手动用bash shell去写nginx的日志切割滚动配合定时计划任务执行执行。
其实用系统自带的logrotate更好。
新建文件

写入

elastic stack elk日志系统

采集的日志需要格式化格式,要么在采集端做,要么在入库elasticsearch的时候做。
在nginx中直接配置输出的日志就是json格式,可以减少格式化日志的cpu开销
在日志采集端,用filebeat、或者logstash作为日志采集工具可以不做任务的格式化处理,
仅仅采集json格式的文本即可。

apache ab

yum install apr-util

webench

wget http://blog.zyan.cc/soft/linux/webbench/webbench-1.5.tar.gz
tar zxvf webbench-1.5.tar.gz
cd webbench-1.5
make && make install

wrk

Modern HTTP benchmarking tool
https://github.com/wg/wrk

gatling

Async Scala-Akka-Netty based Load Test Tool http://gatling.io
https://github.com/gatling/gatling

sniper

A powerful & high-performance http load tester
https://github.com/btfak/sniper

hey

HTTP load generator, ApacheBench (ab) replacement, formerly known as rakyll/boom
https://github.com/rakyll/hey

Siege

Siege is an http load tester and benchmarking utility
https://github.com/JoeDog/siege

http_load

http_load runs multiple http fetches in parallel, to test the throughput of a web server.
http://www.acme.com/software/http_load/

vegeta

HTTP load testing tool and library. It’s over 9000!
https://github.com/tsenart/vegeta/

t50

mixed packet injector tool
https://github.com/fredericopissarra/t50

GoReplay

GoReplay is an open-source tool for capturing and replaying live HTTP traffic into a test environment in order to continuously test your system with real data. It can be used to increase confidence in code deployments, configuration changes and infrastructure changes.
https://goreplay.org
https://github.com/buger/goreplay

tcpcopy

An online request replication tool, also a tcp stream replay tool, fit for real testing, performance testing, stability testing, stress testing, load testing, smoke testing, etc
https://github.com/session-replay-tools/tcpcopy

gryphon

Gryphon是由网易自主研发的能够模拟千万级别并发用户的一个软件,目的是能够用较少的资源来模拟出大量并发用户,并且能够更加真实地进行压力测试, 以解决网络消息推送服务方面的压力测试的问题和传统压力测试的问题。Gryphon分为两个程序,一个运行gryphon,用来模拟用户,一个是 intercept,用来截获响应包信息给gryphon。Gryphon模拟用户的本质是用一个连接来模拟一个用户,所以有多少个连接,就有多少个用户,而用户的素材则取自于pcap抓包文件。值得注意的是,Gryphon架构类似于tcpcopy,也可以采用传统使用方式和高级使用方式。
https://github.com/wslfa/gryphon

locust.io

An open source load testing tool.
Define user behaviour with Python code, and swarm your system with millions of simultaneous users.
http://locust.io/

需求

当前php-fpm进程是不是不够了,一通命令一打,也只能看当前情况。
熟话说无监控无度量就无诊断。
市面上有成熟的php-fpm status状态采集,展示工具那就是elasti stack全家桶
目标采集分析php-fpm status 状态数据

选型

Elastic公司全家桶之Beats(PHP-FPM Module@Metricbeat) + Elasticsearch + Kibana

Metricbeat 是 Beats 的一个采集组件
PHP-FPM Module 是 Metricbeat 的一个采集模块

整体的数据流方式

方式1 : Beats (Metricbeat )>Elasticsearch>Kibana
方式2: Beats (Metricbeat )>Logstash>[直连,redis队列,Kafka队列]>Elasticsearch>Kibana

先讲方式1

配置php-fpm

php-fpm.conf

[www] [u] 是独立的php-fpm pool 进程池,每个池子的pm.status_path是需要单独设置的

测试配置文件是否正确

重启php-fpm

配置nginx

phpfpm.conf

只给本地访问,这里监听的是localhost,也可用nginx allow deny的方式

测试配置文件是否正确

重启nginx

用curl测试php-fpm status状态是否可以获取

配置Metricbeat

Metricbeat Reference [5.3] » Modules » PHP-FPM Module

/etc/metricbeat/metricbeat.yml

测试配置文件是否正确

给metricbeat创建Elasticsearch的Index Template
Loading the Index Template in Elasticsearch

给metricbeat创建Kibana Dashboards
Loading Sample Kibana Dashboards

metricbeat中phpfpm模块,没有elastic官方的 Sample Kibana Dashboard
所以需要分析什么数据的自己在Kibana中自己创建visualize然后做成Dashboard

启动metricbeat

配置Kibana

Management / Kibana / Indices > Add New
Index name or pattern 填写 “metricbeat-*”
Time-field name 选 “@timestamp”
Alt text

分享我做的 metricbeat phpfpm kibana dashboard (不完整)
export.json

补充logstash采集数据(方式2)

配置Metricbeat

/etc/metricbeat/metricbeat.yml

output输出到logstash的input tcp 5044上
input输入参考上面方式1 Metricbeat 的配置方法

配置logstash2.x

Logstash Reference [2.4] » Input plugins » beats

/etc/logstash/conf.d/beats.conf

input输入tcp 5044 监听本机
output输出,根据自己环境来

测试配置文件是否正确

启动logstash

提示

  • 使用测试配置文件的功能测试配置文件是否书写正确
  • 使用tail -f 日志的方式查错
  • 注意tcp监听的安全问题,别暴露到公网IP上

保存为 “WPS Office 2016 10.1.0.6135 个人版一键去广告.bat” bat批处理,右键用超级管理员权限执行

简介

Prometheus

Prometheus 是一个开源的服务监控系统和时间序列数据库。作为容器领域的监控比较热门。
Prometheus 采用 PULL 拉的方式进行监控,如果不在一个网络中可以采用 Push gateway 作为中间件来被 PULL 拉。
架构图为

Prometheus 官方提供常用的 exporters 。
blackbox_exporter 是 Prometheus 官方提供的 exporter之一,可以提供 http、dns、tcp、icmp(ping)的监控数据采集。

Grafana

Grafana 是开源的,功能齐全的度量仪表盘和图形编辑器,支持 Graphite,OpenTSDB,Elasticsearch,Cloudwatch,Prometheus,InfluxDB,小米监控
等。

安装

分别安装grafana、prometheus、blackbox_exporter,安装文档参考官网。

配置

prometheus 配置和运行

在prometheus的配置文件 prometheus.yml 中增加一个新的job

顺序运行 blackbox_exporter,prometheus

grafana 配置和运行

运行grafana
在 grafana中增加 Data Sources 选 prometheus
然后按照grafana的文档新定制一个面板
ROW中指标选probe_duration_seconds{job=”ping_all”}

grafana prometheus ping监控

起始

软件、资料、代码、照片等越来越多,好几台电脑需要共享。
公有网盘哪怕说稳定提供服务,实际上也保不齐那一天突然就要下线了。
所以干脆上个NAS吧。
选硬件,作为家用的NAS,群晖家庭版配置又看不上,企业版又贵了一些。
路由器跑NAS,性能也太差了,定位到X86平台。看了一些DIY方案,并不是很完美,最后
看上了万由的的整体解决方案,算了下价格,自己DIY的也便宜不到哪里去,机箱还是大问题。

硬件方案

万由HomeNASV3
主板:华擎J3710-ITX
机箱:410
内存:4G * 2
系统盘:128G SSD
数据盘: WD 4TB NAS红盘 * 2 + 已有2TB * 1

软件方案

母系统: Windows Server 2016
虚拟机:Hyper-V(群晖在虚拟机中)

上图

万由Home NAS V3

万由Home NAS V3

万由Home NAS V3

万由Home NAS V3

Windows Server 2016

Windows Server 2016

image-002

image-003

问答

母系统用 Windows Server 2016?
和win10一样的内核,功能更全
母系统如果用群晖会有数据安全顾虑
Windows系统自由度非常高

2个盘是否有阵列什么的?
见过有些人直接把物理盘挂在Hyper-V中,暴露给群晖做软Raid1
我不做整列,软整列我是不敢用的,还不如直接跑裸盘
在Win母系统下,硬盘NTFS分区,用NFS服务暴露给群晖用

为什么大家都虚拟化群晖用?
因为群晖有丰富和便捷的功能,可以方便的实现诸多功能,如下载,音乐,影视等
周边配套也非常全,如有手机客户端等

2个盘是如何做数据保护?
盘A,盘B
用软件定时同步 盘A 到 盘B,如按天同步
不开实时同步,可延长盘B的寿命
软件使用
方案1 FastCopy-M command模式 + 系统计划任务
方案2 傲梅轻松备份,既可以备份系统,也可以同步备份文件

设置WOL网络唤醒

需要设置2个地方
①BIOS设置
PCIE Device Power On (PCIE设备开机) 打开
②Windows Server 2016系统中设置
控制面板\所有控制面板项\网络连接
以太网>右键>属性>配置>高级
关机 唤醒 > 选 开启
魔术封包唤醒 > 选 开启
此时可LAN内网唤醒

支持WAN公网唤醒
* 启用DDNS(必须,域名解析动态IP)
* DHCP分配NAS机固定IP或NAS机设置固定IP(必须,固定NAS机内网IP)
* ARP静态绑定IP和MAC(必须,路由器自带功能IP和MAC绑定,启用静态 ARP 绑定,或在路由器自定义开机后运行绑定脚本一般是 arp -s ip mac)
* 端口映射:(任意源IP:协议UDP:端口9)=>(目标NAS的IP:协议UDP:端口9) (必须,UDP端口号可以任意,使用能记住的就ok)
* WOL客户端软件(可选,使用WOL客户端,用DDNS域名+端口9+NAS机MAC唤醒)

Tips:
可以使用wireshark抓wol包,进行检查测试。
WOL客户端使用手机APP更方便,ANDROID APP推荐Fing、PingTools。

参考教程

万由NAS,傻瓜式安装win10+hyper-v虚拟机+洗白黑群晖流程
DSM 5.2升级6.02-8451成功,附升级教程 目前黑6.x系列用的人还不错,建议成熟后再弄
华擎J3710-ITX主板官网
华擎J3710-ITX UEFI BIOS 设置