前言
Fail2ban是一个使用python编写的日志分析工具。可以根据自定的规则来自动封禁满足条件的IP地址。Fail2ban可以用于各种情况下,本文将专注于使用Fail2ban来自动封禁SSH暴力破解的IP地址。 Read more “Linux下使用Fail2ban来阻止SSH爆破”
It's dangerous to go alone! Take this.
Fail2ban是一个使用python编写的日志分析工具。可以根据自定的规则来自动封禁满足条件的IP地址。Fail2ban可以用于各种情况下,本文将专注于使用Fail2ban来自动封禁SSH暴力破解的IP地址。 Read more “Linux下使用Fail2ban来阻止SSH爆破”
最近把热备的vps迁移到了阿里云国际版$4.5刀上面. 由于阿里云本身不支持原生IPv6, 只能使用tunnelbroker提供的隧道来实现IPv6的支持. FreeBSD 11的API和之前版本有一些不同,因此写一篇blog来记录官方推荐的IPv6隧道的配置.
以下为tunnelbroker的信息页
请在/etc/rc.conf最后加入下列配置, 请根据自己的IPv6信息修改配置.
# IPv6 Tunnel Client ipv6_activate_all_interfaces="YES" ifconfig_vtnet0_ipv6="inet6 IPv6地址 prefixlen 64" cloned_interfaces="gif0" ifconfig_gif0="tunnel 本机IP 隧道服务器IPv4地址" ifconfig_gif0_ipv6="inet6 IPv6地址 IPv6网关IP prefixlen 128 mtu 1480" ipv6_defaultrouter="-iface gif0"
重启网络和路由
service netif restart && service routing restart
现在你的IPv6地址应该就可以使用了.
当在Linux下修改了某个文件(夹)之后,如果需要把修改的部分分享出去,可以使用diff命令来创建patch(补丁)文件.
在使用diff命令创建patch之前,我们需要修改之前的原始文件,和修改过的新文件.
当为一个文件创建patch的时候可以使用以下代码:
diff -Naru file_orig.c file_updated.c > file.patch
其中
当需要为整个文件夹创建patch的时候可以使用以下代码:
diff -crB dir_orig dir > dfile.patch
其中
当你需要应用这个patch的时候可以运行
patch -p1 --dry-run < file.patch
其中参数-p[n]中的n值为需要跳过的目录数.
以/usr/src/linux为例:
若-p0就是不跳过任何目录,
-p1将跳过/,得到usr/src/linux,
-p2将跳过/usr,得到src/linux
绝大多数情况下这个值应该为1.
删除–dry-run当你满意输出到屏幕上的结果.
在OpenSUSE下使用以下命令可以禁用掉系统自带的防火墙.
通过防火墙
/sbin/SuSEfirewall2 off
使用Systemd来禁用防火墙
systemctl -q is-enabled SuSEfirewall2 && systemctl disable SuSEfirewall2 systemctl -q is-active SuSEfirewall2 && systemctl stop SuSEfirewall2
因为FreeBSD base包中带的dhclient不支持IPv6, 所以FreeBSD原生不支持DHCPv6. 但是如果我们可以使用dual-dhclient来让FreeBSD支持DHCPv6.
通过Pkg安装dual-dhclient
pkg install dual-dhclient
在/etc/rc.conf中加入以下配置来启用dual-dhclient
ipv6_activate_all_interfaces="YES" dhclient_program="/usr/local/sbin/dual-dhclient" ifconfig_DEFAULT="DHCP accept_rtadv"
重启网络
service netif restart
稍等片刻即可成功获取到IPv6地址.
参考: https://forums.freebsd.org/threads/60168/
因为家中使用的树莓派意外损坏,使用NAS上的虚拟机来代替原来树莓派的工作.在配置Munin的时候出现错误,当更新网络设备数据时,munin服务器端报错
2016/12/20 17:30:05 [INFO] creating rrd-file for if_ens3->down: '/var/lib/munin/ARCHLINUX/mx.ARCHLINUX-if_ens3-down-d.rrd' 2016/12/20 17:30:05 [ERROR] Unable to create '/var/lib/munin/ARCHLINUX/mx.ARCHLINUX-if_ens3-down-d.rrd': min must be less than max in DS definition 2016/12/20 17:30:05 [ERROR] In RRD: Error updating /var/lib/munin/ARCHLINUX/mx.ARCHLINUX-if_ens3-down-d.rrd: opening '/var/lib/munin/ARCHLINUX/mx.ARCHLINUX-if_ens3-down-d.rrd': No such file or directory 2016/12/20 17:30:05 [INFO] creating rrd-file for if_ens3->up: '/var/lib/munin/ARCHLINUX/mx.ARCHLINUX-if_ens3-up-d.rrd' 2016/12/20 17:30:05 [ERROR] Unable to create '/var/lib/munin/ARCHLINUX/mx.ARCHLINUX-if_ens3-up-d.rrd': min must be less than max in DS definition 2016/12/20 17:30:05 [ERROR] In RRD: Error updating /var/lib/munin/ARCHLINUX/mx.ARCHLINUX-if_ens3-up-d.rrd: opening '/var/lib/munin/ARCHLINUX/mx.ARCHLINUX-if_ens3-up-d.rrd': No such file or directory
在做了一些搜索之后发现文章 https://github.com/mail-in-a-box/mailinabox/issues/896
执行munin-run if_ens3 config 后出现以下输出
graph_order down up graph_title ens3 traffic graph_args --base 1000 graph_vlabel bits in (-) / out (+) per ${graph_period} graph_category network graph_info This graph shows the traffic of the ens3 network interface. Please note that the traffic is shown in bits per second, not bytes. IMPORTANT: On 32-bitsystems the data source for this plugin uses 32-bit counters, which makes the plugin unreliable and unsuitable for most 100-Mb/s (or faster) interfaces, where traffic is expected to exceed 50 Mb/s over a 5 minute period. This means that this plugin is unsuitable for most 32-bit production environments. To avoid this problem, use the ip_ plugin instead. There should be no problems on 64-bit systems running 64-bit kernels. down.label received down.type DERIVE down.graph no down.cdef down,8,* down.min 0 up.label bps up.type DERIVE up.negative down up.cdef up,8,* up.min 0 up.max -1000000 up.info Traffic of the ens3 interface. Maximum speed is -1 Mb/s. down.max -1000000
根据文章的内容,应用munin-monitoring/munin@f982751到插件中即可修复这个问题.
使用以下patch可以解决问题
--- if_.orig 2016-08-02 23:52:05.691224811 +0200 +++ if_ 2016-08-02 23:52:49.563223127 +0200 @@ -91,7 +91,7 @@ # iwlist first) if [[ -r /sys/class/net/$INTERFACE/speed ]]; then SPEED=$(cat /sys/class/net/$INTERFACE/speed 2>/dev/null) - if [[ -n "$SPEED" ]]; then + if [ -n "$SPEED" -a "$SPEED" -gt "0" ]; then echo $SPEED return fi
越来越多的公司开始使用HTTP/2来提高他们网站的性能以及用户体验. 开启HTTP/2的方法很简单,但是如何开启在HTTP/2与SSL 当你使用Varnish? 正如我们所了解的,Varnish 4.*不支持SSL, 我们需要找到一个方法来让这些组件协同工作.
正如你所设想的, 互联网进步我们终于有了新版本的HTTP协议, 它主要的有点是:
-流与复用: 一个HTTP/2连接可以包含多个同时打开的流。请求的多路是由具有用它自己的流相关联的每个HTTP请求/响应交换实现的。流基本上是相互独立的,因此阻塞或失速请求或响应不会阻止上其他流的进展。
-报头压缩: 在HTTP / 1.1中,报头字段不被压缩,他们会不必要地占用带宽和增加延迟。在HTTP /2中,引入了一个新的压缩机制(HPACK)。它消除了冗余的报头字段,限制漏洞已知安全攻击,并具有在有限的环境使用有限的内存要求。
-服务器端推送: HTTP /2允许服务器先发制人发送(或“推”)的响应到客户端相关联地以前客户端发起的请求。当服务器知道客户端将需要具有以充分处理对原始请求的响应可用的那些响应这可能是有用的。
很多现代的浏览器已经支持HTTP/2, 在采取一些简单的操作开启HTTP/2之后,你将会收到预期的收益.
你也许可能能够在官方的文档中获取一些更多的点子:
– Hypertext Transfer Protocol Version 2 (HTTP/2) – RFC 7540
– HPACK: Header Compression for HTTP/2 – RFC 7541
以上所有的解释都是很好的,但是有一些人喜欢直接看到结果或者直接去感受,直到那时候他们才会受到启发. 我所找到的一个最好的,令人印象深刻的DEMO由Akamai创建. 在Akamai的DEMO中,对比了加载一张相同的图片使用HTTP/1/1和HTTP/2. 如果你的浏览器支持HTTP/2, 我建议你自己体验一下Akamai的DEMO. 此外,为了应对HTTP /2,你必须启用SSL,它会提高你的网站的安全性。
一般Varnish作为前端使用,在用户与Web Server之间,架构看起来像这样:
当我们有个客户请求了一个页面, 他的请求落到Varnish上(因为Varnish监听80端口), 然后Varnish检查这个对象是否已缓存,然后直接返回给客户不需要请求后端服务器或者请求后端服务器生成这个URL的页面.
现在的问题是 Varnish 4.*不支持浏览器所要求的 HTTP/2 SSL. 我们不能直接要求Varnish来监听443端口然后更改一些配置参数.
一个可能的方案就是在Varnish前增加Nginx. 它将会负责HTTP/2的请求, SSL以及发送请求到Varnish通过HTTP/1.1. 我们新的架构图将会看起来像这个样子:
最低版本要求为1.9.5(只有从这个版本开始ngx_http_v2_module 模块可用). 我是用的系统是Centos7, 因为Chrome最近移除了对SPDY的支持, 新的H2需要OpenSSL 1.0.2h才支持. Centos 7.x 源内自带的OpenSSL版本比较低并且Nginx不支持HTTP/2(包括Nginx的更新源). 想要使Nginx支持HTTP/2 我们使用以下脚本来编译自己的.src.rpm来增加HTTP/2的支持.
#!/bin/bash yum -y groupinstall 'Development Tools' yum -y install wget openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel OPENSSL="openssl-1.0.2h" NGINX="nginx-1.11.3-1" mkdir -p /opt/lib wget https://www.openssl.org/source/$OPENSSL.tar.gz -O /opt/lib/$OPENSSL.tar.gz tar -zxvf /opt/lib/$OPENSSL.tar.gz -C /opt/lib rpm -ivh http://nginx.org/packages/mainline/centos/7/SRPMS/$NGINX.el7.ngx.src.rpm sed -i "s|--with-http_ssl_module|--with-http_ssl_module --with-openssl=/opt/lib/$OPENSSL|g" /root/rpmbuild/SPECS/nginx.spec rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec rpm -ivh /root/rpmbuild/RPMS/x86_64/$NGINX.el7.centos.ngx.x86_64.rpm
另一个我们需要的就是SSL证书, 我们可以使用Let’s Encrpty的免费证书,不过在这里出于演示的目的,我们使用OpenSSL来创建一个证书
openssl req -newkey rsa:2048 -sha256 -keyout jzbk.key -nodes -x509 -days 365 -out jzbk.crt
另一个重要的事情,在创建证书的时候,请输入你的域名当 Common Name 出现的时候. 如果你使用这个证书,你的浏览器将会提示这个证书不可信,出于测试的目的,请忽略这个提示.
好了,现在我们将证书文件复制到/etc/nginx下,然后开始配置Nginx
server { # 443 - default port for SSL listen 443 ssl http2; server_name <SERVER NAME>; # Specify the certificate files ssl_certificate jzbk.crt; ssl_certificate_key jzbk.kry; location / { # Set recommended by Nginx version proxy_http_version 1.1; proxy_pass http://127.0.0.1:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Port 443; proxy_set_header Host $host; } }
一个最简单的VCL如下
vcl 4.0; backend local { .host = "127.0.0.1"; .port = "8080"; }
之后请修改使你的Varnish监听80端口.
WebServer我会选择Nginx, 我们已经设置了Varnish的后端服务器, 下面是一个最简单的Nginx配置Demo
server { # Listen the port configured in the Varnish *.vcl file. listen 8080; server_name <THE SAME SERVER NAME>; # Define trusted addresses that are known to send correct replacement addresses. set_real_ip_from 127.0.0.1; real_ip_header X-Forwarded-For; real_ip_recursive on; #... }
想要测试所有组件都正常工作,你可以安装一个Chrome的插件叫做 HTTP/2 and SPDY indicator
使用Nginx或者Varnish来缓存并不重要, 但是你必须需要配置HTTP/2, 因为它是一个可以轻易实现的目标.
原文链接(有少许修改): https://victor.4devs.io/en/architecture/varnish-cache-http2-with-nginx.html
在不接受注册的WordPress Multi User(WPMU)中在wp-config.php设置NOBLOGREDIRECT开启访问不存在的BLOG地址的时候进行跳转.
#跳转到主BLOG define( 'NOBLOGREDIRECT', '%siteurl%' ); #跳转到指定URL define( 'NOBLOGREDIRECT', 'http://www.example.com' );
当开启NOBLOGREDIRECT之后WPMU会出现所有站点的BLOG的404页面条船出错(跳转到NOBLOGREDIRECT置顶的地址)
根据官方给出的文档,修复的方法是,在WPMU的wp-content目录下创建mu-plugins文件夹[Muse Use Plugins(强制使用的插件)]
在mu-plugins内创建一个custom.php文件,内容如下
<?php remove_action( 'template_redirect', 'maybe_redirect_404' );
强制WPMU加载这一段代码,刷新页面之后WPMU即可正常显示404页面.
在varnish使用中会涉及代理多个后端域名(或网站)的情况,可通过判断请求的URL来设置对应backend即可解决问题。
以varnish官方文档中例子说明(https://www.varnish-cache.org/docs/trunk/reference/vcl.html#examples):
#后端服务器www backend www { .host = "www.example.com"; .port = "80"; } #后端服务器images backend images { .host = "images.example.com"; .port = "80"; } sub vcl_recv { #如果host为www.example.com,设置后端服务器为www,(?i)表示匹配模式为不区分大小写 if (req.http.host ~ "(?i)^(www.)?example.com$") { set req.http.host = "www.example.com"; set req.backend = www; #如果为images.example.com,设置后端服务器为images } elsif (req.http.host ~ "(?i)^images.example.com$") { set req.backend = images; } else { error 404 "Unknown virtual host"; } }
另外在vcl_hash函数中一定要加上
hash_data(req.http.host);