my blog my blog

Tag: Linux
Linux使用Curl并启用cookie功能

奶牛最近发现有的网站为了阻止第7层网络的攻击,选择了使用cookie进行阻止恶意攻击。比如Voxility在防护启用的时候,就会用如下的方式:

<html>
<head><meta http-equiv="refresh" content="1" /><meta http-equiv="cache-control"                                                                                                                                                              content="max-age=0" /><meta http-equiv="cache-control" content="no-cache" /><met                                                                                                                                                             a http-equiv="expires" content="-1" /><meta http-equiv="expires" content="Tue, 0                                                                                                                                                             1 Jan 1980 1:00:00 GMT" /><meta http-equiv="pragma" content="no-cache" /></head>
<script type="text/javascript">
<!--
function getCookie(w){
        cName = "";
        pCOOKIES = new Array();
        pCOOKIES = document.cookie.split('; ');
        for(bb = 0; bb < pCOOKIES.length; bb++){
                NmeVal  = new Array();
                NmeVal  = pCOOKIES[bb].split('=');
                if(NmeVal[0] == w){
                        cName = unescape(NmeVal[1]);
                }
        }
        return cName;
}
function printCookies(w){
        cStr = "";
        pCOOKIES = new Array();
        pCOOKIES = document.cookie.split('; ');
        for(bb = 0; bb < pCOOKIES.length; bb++){
                NmeVal  = new Array();
                NmeVal  = pCOOKIES[bb].split('=');
                if(NmeVal[0]){
                        cStr += NmeVal[0] + '=' + unescape(NmeVal[1]) + '; ';
                }
        }
        return cStr;
}
function setCookie(name, value, expires, path, domain, secure){
        var vlad = name + "=" + escape(value);
        if(expires){
                expires = setExpiration(expires);
                vlad += ";expires=" + expires;
        }
        if(path){
                vlad += ";path=" + path;
        }
        if(domain){
                vlad += ";domain=" + domain;
        }
        if(secure){
                vlad += ';secure';
        }
document.cookie = vlad;
}
function setExpiration(cookieLife){
    var today = new Date();
    var expr = new Date(today.getTime() + cookieLife * 24 * 60 * 60 * 1000);
    return  expr.toGMTString();
}
function delete_cookie(name){
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
// -->
</script>
<script type="text/javascript">
<!--
delete_cookie('hasVisitedSite');
setCookie('hasVisitedSite', 'Yes', '3', '/', '300', '');
delete_cookie('fb624561f4f8b25819e9b3c4fad70f85');
setCookie('fb624561f4f8b25819e9b3c4fad70f85', 'Yes', '3', '/', '300', '');
-->
</script><body></body></html>

如果我们直接curl加网址的话得到的就是这种情况。如果我们想访问真实内容需要启用cookie。

curl -c cookie.txt www.nenew.net
curl -b cookie.txt www.nenew.net

当第一次访问的时候,奶牛保存cookie信息在cookie.txt中,第二次访问包含cookie.txt中的信息,就可以访问到真实页面了。

Ubuntu安装配置Linux性能实时监测工具NetData

最近测试了ntopng,虽然普通版本的也还凑合,但是还是企业版的实时展示奶牛更喜欢,可是普通版本就没有实时功能了,所以就又找了一下,发现在github上这个netdata的star最多,目前已经达到了28.9K,感兴趣的朋友可以去https://github.com/topics/monitor看看。

言归正传,奶牛来说说netdata的安装过程。

安装:

curl -Ss 'https://raw.githubusercontent.com/firehol/netdata-demo-site/master/install-required-packages.sh' >/tmp/kickstart.sh && bash /tmp/kickstart.sh -i netdata-all

安装netdata编译所需组件,这里奶牛以全监控安装方式安装

git clone https://github.com/firehol/netdata.git --depth=1
cd netdata
./netdata-installer.sh --dont-start-it

这里根据提示进行安装即可,安装完成后我们可以通过service netdata start 来启动。

配置:

这里有个有趣的现象,在/etc/netdata/netdata.conf文件中并没有配置选项,而是需要从web下载配置文件,当然这个web是localhost了。

#  wget -O /etc/netdata/netdata.conf http://localhost:19999/netdata.conf
#  curl -o /etc/netdata/netdata.conf http://localhost:19999/netdata.conf

所以呢,就按照这个说明把netdata.conf文件下载下来就可以配置了。

在此,奶牛更希望我们以反向代理的方式进行访问netdata,所以奶牛并不推荐直接将netdata端口暴露出来,所以我们将netdata.conf文件中的

[web]
	bind to = 127.0.0.1

修改为绑定到本地地址。最后我们可以通过Nginx反向代理来进行访问,或者如果你不介意,不这样配置也无所谓。

VPS磁盘空间大小调整小记

MySQL的日志文件又一次把奶牛博客的磁盘撑爆了,今天一下班发现网站挂了,然后ping还可以通,就进ssh看看究竟,然后很无语,mysql无法关闭也无法启动,df -h看了一下,发现/目录已经爆满。之前已经遇到过一次这种情形了,所以直接去看MySQL的日志文件,果然,几个G在那里堆着,删删删,反正也懒得去分析日志找原因了。删了之后发现/目录还是占用了近80%的空间,呃,这就有点儿纠结了吧,然后仔细看了一下df -h,我去,VPS还自带分区的,两块盘,一块30G的盘竟然挂载到了/mnt目录下,好吧,还有这种玩儿法。然后就想把这个vdb的硬盘给挂载到/目录下,但是回头一想,LVM貌似也不合适,没法直接加的,因为/是vda1这个主分区在挂载,所以,好吧,直接把vdb分给/usr目录吧,反正一般的东西也就扔这里面的,比如那个可恶的MySQL日志文件。

cp -Rf -p /usr /mnt

其中的-p参数是为了保证文件的uid和gid都保持不变,当然,这里是使用root帐号来操作的。

然后

umount /dev/vdb
mount /dev/vdb /usr
df -h

查看下确实挂载没有问题了,然后程序也都正常运行,之后再修改fstab

vim /etc/fstab

将原先挂载在/mnt目录下的vdb修改为挂载在/usr目录下。

最后再说下MySQL的日志,配置文件在/etc/my.cnf下,可以进行自动过期处理等操作,也可以直接注释掉不记录日志。

军哥LNMP下typecho的rewrite配置隐藏index.php

最近新建了站点优推网并且开始使用typecho,安装配置过程中发现自带的rewrite无法隐藏index.php,解决方案是修改

/usr/local/nginx/conf/vhost/www.affu.net.conf

配置文件,将include enable-php.conf;修改为include enable-php-pathinfo.conf;

然后再在typecho的设置中启用固定链接即可正常显示。

最近打算将博客转入Sharktech的服务器,并且将使用7年的wordpress更换为typecho,wordpress不可说不好,但是现在感觉太臃肿了,对于一个写博客的感觉还是不太需要这么臃肿,轻便最好,再续…

Ubuntu下安装Intel 9260AC无线网卡教程

奶牛很久没有写ubuntu的文章了,虽然自己的服务器依然是使用ubuntu server,但是比较懒,也没有太多折腾,今天记录一下intel最新的9260ac无线网卡在ubuntu下的安装与使用。

Intel的中文支持页面更新还是有些缓慢,所以驱动程序我们可以在英文页面找到。Linux* Support for Intel® Wireless Adapters

官方页面给出的安装介绍如下

To install firmware:

    Copy the files into the distribution-specific firmware directory, /lib/firmware.
    If the directory does not work, consult your distribution documentation.
    If you configure the kernel yourself, make sure firmware loading is enabled.

首先是下载驱动程序:Intel 9260AC驱动

官方提到intel无线网卡驱动是依赖iwlwifi来加载驱动的,但是安装官方的方法将驱动文件解压后拷贝至/lib/firmware文件夹中重启是无法实现加载的,至少奶牛这里不行,也许你们把内核更新到最新大概可能会实现自动识别吧,但是奶牛把自己折腾的过程分享下。

DeviceKernelsFirmware
Intel® Wireless-AC 92604.14+iwlwifi-9260-th-b0-jf-b0-34.618819.0.tgz

官方的说明是内核要在4.14+,现在内核已经到了4.15RC版本了,4.14也更新到了4.14.10,奶牛第一次是安装的4.14版本内核,结果发现设备可以识别了,但是无法使用。然后找到iwlwifi的支持页面

页面中又说到iwlwifi-fixes with fixes for the current kernel release cycle,所以我们又去看iwlwifi-fixes,在2017-12-05这天更新了内容iwlwifi: add new cards for 9260 and 22000 series

好吧,看样子内核需要在12.05之后,奶牛这里安装的是4.14.10,看日期4.14.04也是12.05日,所以就索性当4.14.04之后的内核版本才支持吧。更新内核也很简单

mkdir kernel
cd kernel
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.10/linux-headers-4.14.10-041410_4.14.10-041410.201712291810_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.10/linux-headers-4.14.10-041410-generic_4.14.10-041410.201712291810_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.10/linux-image-4.14.10-041410-generic_4.14.10-041410.201712291810_amd64.deb
dpkg -i *.deb

奶牛这里是安装的64位ubuntu操作系统,32位操作系统的同志自己去http://kernel.ubuntu.com/~kernel-ppa/mainline下面找对应的内核版本就好了。

更新内核后重启系统,安装wicd进行无线网卡管理,不要问奶牛为啥要装wicd,因为奶牛发现系统自带的那个管理器还是识别不了。。。好吧,就此折腾完毕。

 

 

关于iptables过滤关键词网站的原理和方法解读

服务器上有时候难免做些限制,比如说一个游戏加速器可能会禁止用来网站访问,但是问题来了,我们并不能简单的禁止一个80或者443来达到目的,因为有些游戏会从网站上去获取一些信息,比如现在最火的绝地求生大逃杀,吃个鸡却要先从一个网页进行登录,所以禁止80/443端口的方案我们可以直接否掉,奶牛的方法是用iptables进行关键词和网站过滤。

iptables过滤关键词网站的原理解读

INPUT,OUTPUT,FORWARD选哪个?

使用iptables过滤关键词和网站,我们需要对进出服务器的流量都进行过滤,当然也有人建议在传输层过滤,那奶牛就来谈谈自己的理解。首先INPUT,OUTPUT,FORWARD三个分别对应进、出、传输。如果我们在FORWARD过滤,应该可以达到预期效果,但是如果我们的服务器是用作转发的呢?比如一个请求发送过来,我们允许INPUT进入,然后我们的转发服务器会先将请求转发出去,再接收转发内容,最后在转发回程的过程中过滤拦截,这样子,服务器的流量带宽资源就会被浪费,也许你会说在接收到请求之后关键词和网站就已经过滤了,其实不然,很多关键词是包含在请求获得的内容中的,所以不可能在转发之前就过滤掉,我们需要的结果是在转发之前过滤掉。那么我们就用INPUT进行限制?通过实测,发现单单用INPUT也不能过滤干净,奶牛的理解是INPUT不会拒绝请求的结果,所以我们还需要和OUTPUT配合使用。

DROP,REJECT选哪个?

奶牛选择的是DROP。我们说说DROP和REJECT的区别,当我们使用REJECT的时候,如果拒绝请求,在iptables中输入

iptables -L -nv

可以看到拒绝的请求会reject-withicmp-port-unreachable,也就是会通过一个icmp包来告诉目标请求被拒绝了,这个资源也是属于浪费的,如果我们直接用DROP丢弃,则不会有这个回包。

iptables过滤关键词网站的方法

首先备份好我们的iptables规则,避免操作失误。备份和还原的命令如下:

iptables-save > iptables_origin_rules
iptables-restore > iptables_origin_rules

然后我们的规则这样写

iptables -A INPUT -m string --string "xxx.com" --algo bm --to 65535 -j DROP
iptables -A OUTPUT -m string --string "xxx.com" --algo bm --to 65535 -j DROP

其中的xxx.com就是关键词,可以写网站域名,也可以写关键词,但是关键词一定要想好,否则可能会导致很多东西都无法访问的。如果规则写错了,可以通过命令删除规则:

iptables -D INPUT -m string --string "xxx.com" --algo bm --to 65535 -j DROP
iptables -D OUTPUT -m string --string "xxx.com" --algo bm --to 65535 -j DROP

过滤需谨慎,特别是一些国cdn、公共库、ssl、dns等一定要谨慎处理,否则可能会导致很多服务无法访问严重后果。

黑群辉Docker折腾记

 

同事年前入了一个群晖NAS,前两天看H大大也入了群晖,好吧,奶牛就黑一个吧,淘宝买了一个黑群晖机,2*4T西数红盘,开始折腾。

黑群晖是要有引导U盘来带着启动的,机器自带,无非就是改改vid pid什么的小操作,不讨论,装系统也不讨论。奶牛想讨论下Docker,对Docker!

系统软件版本:DSM 5.2-5592

NAS> docker version
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): a263667
OS/Arch (client): linux/amd64
Server version: 1.6.2
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): a263667
OS/Arch (server): linux/amd64
NAS> cat /proc/version
Linux version 3.10.35 ([email protected]) (gcc version 4.7.3 20130102 (prerelease) (crosstool-NG 1.18.0) ) #1 SMP Mon Aug 3 15:44:49 UTC 2015

群晖就是个linux系统,所以回归老本行。奶牛也是这周才接触Docker的,这个虚拟机很给力,奶牛欣喜之极,因为比起VM啊KVM之类的虚拟机,这个简直就是资源压缩机,因为共用系统的内核,所以,一个ubuntu的bash才耗费几M的系统资源,而且只要有个镜像,自己创建一个容器,可以算是无所不能了吧。对于网上有的那些迅雷远程下载xware啊,迅雷快鸟加速啊,还有那些bt下载奶牛不想讨论,没什么意思,因为有一个虚拟机系统了,你可以完成linux下的所有操作了。

先说说这个版本Docker的一个bug,就是在pull官方源的时候有的源没法在网页版中pull,提示命令执行错误。奶牛在6.X版本中测试发现没有此问题。不过,这都是小事儿不是?

开启NAS的ssh,直接命令行上去,默认的用户名和密码就是你设置的用户名和密码,而我们需要的是root,root密码其实也是你用户设置的那个密码。。。。汗。用root登录,可以直接用linux命令来操作docker。奶牛现在跑着kcptun来不间断代理ss,效果不错。再实现什么功能呢?还没想好,现在是只做了ddns到自有域名然后设置好了kcptun的客户端。这个Docker真的是太强大了,强烈推荐。

  
Linux下shell小数运算的笔记

 

首先,linux shell下默认变量的计算小数都省略掉了,也就是0.99999其实就是0,这个很不好,有时候我们需要统计小数的。

好了,用echo + bc的组合可以实现。

  1. echo "scale=4; $BYTES_SENT/1024/1024"|bc 

scale可以设置小数点后保留4位。

但是问题又出来了,如果是0.9999则显示的是.9999,小数点前面的0又不显示了,bc也是够了逗比了,好吧,继续折腾。

  1. echo "scale=4; $BYTES_SENT/1024/1024"|bc|awk '{printf "%.4f", $0}' 

这样子下来,用awk再来格式化下,只怪奶牛shell学得很渣,但是很多东西查到了还是很好学习的,记录下。

Ubuntu下shadowsocks多用户后端manyuser+前端sspanel搭建教程

 

好吧,很多东西还是有个前端管理起来比较方便,奶牛今天也配了个,写下过程记录下。

安装shadowsocks支持

  1. apt-get install python-pip python-m2crypto
  2. pip install cymysql

安装LNMP

  1. wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp

后端安装配置

  1. git clone -b manyuser https://github.com/mengskysama/shadowsocks.git 
  2. cd ./shadowsocks/shadowsocks 
  3. vim Config.py 
  4.     #Config 
  5.     MYSQL_HOST = 'localhost' #这一行是服务器IP,127.0.0.1表示本机 
  6.     MYSQL_PORT = 3306 #数据库端口号 
  7.     MYSQL_USER = 'nenew' #数据库用户名 
  8.     MYSQL_PASS = 'nenew' #数据库密码 
  9.     MYSQL_DB = 'shadowsocks' #数据库名称 
  10.  
  11.     MANAGE_PASS = 'ss233333333' 
  12.     #if you want manage in other server you should set this value to global ip 
  13.     MANAGE_BIND_IP = '127.0.0.1' 
  14.     #make sure this port is idle 
  15.     MANAGE_PORT = 23333 
  16.  
  17. python server.py 

在mysql数据库中新建数据库shadowsocks,并添加用户nenew,导入manyuser中的sql文件,然后执行python server.py。如果没有异常,则表示已经安装成功后端。

前端安装:

  1. lnmp vhost add 

添加虚拟主机,然后进入虚拟主机目录

  1. wget https://github.com/orvice/ss-panel/archive/master.zip 
  2. unzip master.zip 
  3. rm master.zip 
  4. mv -f ss-panel-master/* ./ 
  5. mv lib/config-simple.php lib/config.php 
  6. vim lib/config.php 

编辑配置信息,然后将lib文件夹下的sql文件都导入到nenew数据库中。

添加守护进程supervisor:

  1. apt-get install supervisor 
  2. echo_supervisord_conf > /etc/supervisor/supervisord.conf 
  3. vim /etc/supervisor/supervisord.conf 

将文件最后添加

  1. [program:shadowsocks] 
  2. command=python /root/shadowsocks/shadowsocks/server.py -c /root/shadowsocks/shadowsocks/config.json 
  3. autorestart=true 
  4. user=root 

其中的目录自己根据实际情况设置,重启即可。

前端github:https://github.com/orvice/ss-panel

后端github:https://github.com/mengskysama/shadowsocks

顺带广告,ss服务器150元每年,需要者联系,联系方式见杂货铺。

linux下命令行上传下载测速

 

好吧,最近搞了个香港服务器,但是香港带宽限制比较严格,当然不能吃亏了,测速,必须测速。

今天主角出场speedtest-cli,它工作在Python 2.4-3.4

安装:

  1. pip / easy_install 
  2.  
  3. pip install speedtest-cli 
  4.  
  5. or 
  6.  
  7. easy_install speedtest-cli 
  8.  
  9. Github 
  10.  
  11. pip install git+https://github.com/sivel/speedtest-cli.git 
  12.  
  13. or 
  14.  
  15. git clone https://github.com/sivel/speedtest-cli.git 
  16. python speedtest-cli/setup.py install 
  17.  
  18. Just download (Like the way it used to be) 
  19.  
  20. wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest_cli.py 
  21. chmod +x speedtest-cli 
  22.  
  23. or 
  24.  
  25. curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest_cli.py 
  26. chmod +x speedtest-cli 

功能和使用:

  1. $ speedtest-cli -h 
  2. usage: speedtest-cli [-h] [--bytes] [--share] [--simple] [--list] 
  3.                      [--server SERVER] [--mini MINI] [--source SOURCE] 
  4.                      [--timeout TIMEOUT] [--version] 
  5.  
  6. Command line interface for testing internet bandwidth using speedtest.net. 
  7. -------------------------------------------------------------------------- 
  8. https://github.com/sivel/speedtest-cli 
  9.  
  10. optional arguments: 
  11.   -h, --help         show this help message and exit 
  12.   --bytes            Display values in bytes instead of bits. Does not affect 
  13.                      the image generated by --share 
  14.   --share            Generate and provide a URL to the speedtest.net share 
  15.                      results image 
  16.   --simple           Suppress verbose output, only show basic information 
  17.   --list             Display a list of speedtest.net servers sorted by 
  18.                      distance 
  19.   --server SERVER    Specify a server ID to test against 
  20.   --mini MINI        URL of the Speedtest Mini server 
  21.   --source SOURCE    Source IP address to bind to 
  22.   --timeout TIMEOUT  HTTP timeout in seconds. Default 10 
  23.   --version          Show the version number and exit 

简单测速,奶牛是在ubuntu下进行的测试:

  1. apt-get install python-pip 
  2. pip install speedtest-cli 

安装完成后执行:

  1. speedtest 

测试结果如下:

  1. [email protected]:~# speedtest  
  2. Retrieving speedtest.net configuration...  
  3. Retrieving speedtest.net server list...  
  4. Testing from Shanghai Anchnet Network Technology (XXX.XXX.XXX.XXX)...  
  5. Selecting best server based on latency...  
  6. Hosted by Shanghai Branch, China Unicom (Shanghai) [19.64 km]: 29.249 ms  
  7. Testing download speed........................................  
  8. Download: 18.84 Mbit/s  
  9. Testing upload speed..................................................  
  10. Upload: 1.51 Mbit/s