折腾阿里云笔记
近期洒家买了个阿里云云服务器ECS玩玩,虽然国内的服务器网速快,但是毕竟在天朝,有的地方玩得也是有些不爽。以下是洒家这两天折腾的记录。
域名
洒家只是搞一个自己用的服务器,因此只需一个免费域名: http://www.freenom.com/ ,用Freenom DNS Server 填上自己的IP即可。
绕过备案
洒家弄好之后,用域名访问,出现了喜闻乐见的温馨提示:
尊敬的用户,您好
很抱歉,该网站暂时无法访问,可能由以下原因导致:
原因一:未备案或未接入;根据《非经营性互联网信息服务备案管理办法》,网站需要完成备案或接入。请登录代备案管理系统进行操作。
原因二:网站内容与备案信息不符或备案信息不准确;根据《非经营性互联网信息服务备案管理办法》,网站内容需要与备案信息一致,且备案信息需真实有效。建议网站管理员尽快修改网站信息。
工信部备案查询点此进入,购买云计算产品可领取优惠券
备案?备个屁!
由于众所周知的原因,天朝的网站需要备案,但是过程极其繁琐。如果不备案,通过域名访问就会出现有一定概率干扰正常访问。
不管为了自由或者省事,想绕过备案干扰访问的话,可以(不知道能不能从原理上干掉过滤):
1. HTTP服务器监听其他的端口。目前来看好像只过滤80端口。
缺点:影响美观
2. 用HTTPS,加密流量就不会被搞(如果过滤发生在“中间人”位置)
搞一个HTTPS证书
仍然为了免费,洒家选择了 https://startssl.com/
参考这篇教程,内容有点过时,但是过程基本一致: http://www.oschina.net/translate/switch-to-https-now-for-free?cmp
然而洒家做完了之后点击原文发现了2016年的更新: https://konklone.com/post/switch-to-https-now-for-free ,原作者现在已经不推荐使用startssl,转而推荐SSLMate等。各位看官可以考虑一下。
基本流程大概就是注册,安装两个客户端证书,然后选择 Web Server SSL/TLS Certificate。为了验证网站所有权,有两种方式:(假如你的域名为example.com)
1. 向 [email protected] 等邮箱地址发一封邮件
2. 下载一个 example.com.html 放到网站根目录,startssl 会发出请求验证你的控制权
显然2更简单,然而由于上述备案的干扰,洒家尝试了很多遍都无法正常验证通过(似乎是100%失败的节奏)。无奈开始搭邮件服务器。
搭邮件服务器
由于毫无经验,瞎JB折腾一晚上 Postfix + dovecot + mysql,总是收不到邮件,总是被退信。一筹莫展之际,洒家考虑到目的只是接收一封邮件,想到有没有轻量级的程序实现了SMTP协议?随便一搜(https://muffinresearch.co.uk/fake-smtp-server-with-python/),得到了一条命令:
sudo python -m smtpd -n -c DebuggingServer localhost:25
关掉postfix、devecot服务,启动命令,还是收不到,于是洒家凭感觉改成:
sudo python -m smtpd -n -c DebuggingServer 0.0.0.0:25
发送邮件,验证码瞬间出现在终端上。
。 。 。 。 。 。
十多个配置文件瞎折腾一晚上,竟然不敌一条命令。
心疼运维。
可见对于只是接收一封邮件这种小事就不要挑战杂乱无章的各种配置文件了。
继续申请证书
下面只需要粘贴一份CSR即可。用openssl的命令,或者startssl提供的工具生成:
程序会得到一个私钥,保存好备用。把CSR粘贴到网站上,即可下载证书。
安装证书
**Apache的SSL模块,配置/etc/apache2/mods-enabled/ssl.conf。(略)
继续搞配置文件,以Apache为例,编辑 /etc/apache2/sites-enabled/000-default.conf
SSLCertificateChainFile 中继证书
SSLCertificateFile 服务器证书
SSLCertificateKeyFile 私钥文件
配置完上传私钥和证书,重启HTTP服务软件。
Let's Encrypt 更推荐的免费证书
2017年2月22日
由于谷歌已经不信任沃通的证书,洒家今日在StartCom上申请的证书直接验证失败。折腾了两天浏览器才发现是证书本身的问题,只好另请高明使用Let's Encrypt的证书。
Let's Encrypt 的玩法非常简单,有官方推荐的工具使用ACME协议,也有其他的一些工具。
官方的工具: https://certbot.eff.org/
以Ubuntu 16.04 为例,安装:
$ sudo apt-get install python-letsencrypt-apache
使用:
$ sudo letsencrypt --apache
另外洒家用的版本并不能识别/etc/apache2/sites-enabled/里面一个文件多个Virtual Host的情况,所以洒家把它们分成了多个文件,一个文件一个ServerName,就可以识别了。
网络上的爬虫和恶意攻击者
洒家查看日志发现,网络上有很多乱七八糟的爬虫和恶意的攻击者(弱口令攻击SSH)。
下图:远程登录SSH失败的:
下图:网站上线就受到了来自世界各地的HTTP访问
缓解方法:
/robots.txt 防止有道德的爬虫
SSH尝试弱口令的:屏蔽某些IP
Visual Attacker
为了方便地查看,洒家造了个轮子 Visual Attacker (前端使用百度Echarts)
洒家写了4个功能:
- HTTP 访问(按IP地址记次数)
- HTTP 访问(按地理位置记次数)
- 成功远程登录(按IP地址记次数)
- 失败远程登录(按IP地址记次数)
实现不难,此处洒家就不贴代码了。
autoBanIp
[2016年9月16日 Update]洒家看着攻击者心痒痒,写了个自动ban ssh 弱口令的脚本:
等几天看看效果如何。
2016-9-20 Update
自动封IP脚本还是有效果的,活捉一只中国上海的攻击者。
还有一些国外的攻击者,今天每个IP只尝试3次。为了不干扰洒家自己的正常使用,必须写更复杂的规则才能处理。
2016年10月7日 Update
最近了解到,有个更完备的程序叫 fail2ban http://www.fail2ban.org/wiki/index.php/Main_Page 。有了这个就不用重复制造轮子了。
绑定多个域名
2016-9-19 Update
洒家前几天收到阿里云邮件,免费送 .top 域名,就搞了一个玩玩。 万网规定:
2016年7月18日8点起,.com/.net域名注册成功后必须进行域名实名认证,否则域名会处于Serverhold状态,无法正常使用。
似乎并不影响 .top 域名,反正洒家做完也能正常解析。
瞎填了一通信息模板,申请了一个域名,然后加了几个子域名。洒家又申请了一张证书,搞到服务器上。
Apache设置,以Ubuntu为例,只需要设置
/etc/apache2/sites-enabled/000-default.conf,增加:
<VirtualHost *:443> ServerName MyDomain.top DocumentRoot /var/www/html SSLEngine on SSLCertificateChainFile /path/to/chain.crt SSLCertificateFile /path/to/top.crt SSLCertificateKeyFile /path/to/top.key ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
然后重启 apache2 服务即可访问。
总结
经过洒家一番折腾,挂上很多实验的网站,加上favicon.ico,最后弄出个花花绿绿的手机页面。
代理服务器
有时候洒家用手机不方便科学上网,一台代理配上自己搞的代理自动配置(英语:Proxy auto-config,简称PAC)是极好的。
洒家使用了某敌对势力做的某知名软件的Linux版,监听0.0.0.0
随时随地想翻就翻。感觉洒家的手机翻墙瞬间方便了很多。
自动ban HTTP访问的IP
2016年10月7日 Update
各位小朋友乱开扫描器是不好的行为。洒家又造了个轮子:
这个脚本的原理和上文提到的禁止ssh**的脚本相同,都是利用inotify监控日志文件,发生变动的时候读取、分析日志,屏蔽IP。