Total Pageviews

Saturday, 16 December 2017

如何处理用wget对网站做镜像后,应用程序文件名的问题

在unix下,如何作网站的mirror呢?好多人并不是很清楚。其实在unix下作mirror的程序也很多,现在讲讲使用wget来mirror网站之后,如何转换应用程序文件名的问题。

wget的用法:

wget常用参数如下 (以下资讯亦可藉由执行 wget –help获得):
GNU Wget 1.5.3, 一个非交互式的网路抓档工具.
用法: wget [选项]… [URL]…
命令的引数使用长项目与短项目相同.
启动:
-V, –version 显示 Wget 的版本并且离开.
-h, –help 显示这个说明档.
-b, -background 在启动之後跳到背景去.
-e, -execute=COMMAND 执行一个 `.wgetrc' 里面的 COMMAND 指令.
纪录档与输入的档案:
-o, –output-file=FILE 纪录讯息到 FILE 去.
-a, -append-output=FILE 增加讯息到 FILE 去.
-d, –debug 显示除错的输出.
-q, –quiet 安静模式 (不输入任何讯息).
-v, –verbose 冗长模式 (这是内定值).
-nv, –non-verbose 关闭 verboseness, 但不是安静模式.
-i, –input-file=FILE 从 FILE 读取 URL .
-F, –force-html 把输入的档案当作 HTML.
下载:
-t, –tries=NUMBER 设定重复尝试 NUMBER 次 (0 是无限制).
-O –output-document=FILE 把文件写到 FILE 里.
-nc, –no-clobber 不破坏已经存在的档案.
-c, –continue 重新取得一个已经存在的档案.
–dot-style=STYLE 设定取回状况的显示风格.
-N, –timestamping 不取回比本地旧的档案.
-S, –server-response 显示伺服器回应状况.
–spider 不下载任何东西.
-T, –timeout=SECONDS 设定读取时超过的时间为 SECONDS 秒.
-w, –wait=SECONDS 在取回档案时等待 SECONDS 秒.
-Y, –proxy=on/off 开启或关闭 Proxy.
-Q, –quota=NUMBER 设定取回档案的定额限制为 NUMBER 个.
目录:
-nd –no-directories 不建立目录.
-x, –force-directories 强制进行目录建立的工作.
-nH, –no-host-directories 不建立主机的目录.
-P, –directory-prefix=PREFIX 把档案存到 PREFIX/…
–cut-dirs=NUMBER 忽略 NUMBER 个远端的目录元件.
HTTP 选项:
–http-user=USER 设 http 使用者为 USER.
–http-passwd=PASS 设 http 使用者的密码为 PASS.
-C, –cache=on/off 提供/关闭快取伺服器资料 (正常情况为提供).
–ignore-length 忽略 `Content-Length' 标头栏位.
–proxy-user=USER 设 USER 为 Proxy 使用者名称.
–proxy-passwd=PASS 设 PASS 为 Proxy 密码.
-s, –save-headers 储存 HTTP 标头成为档案.
-U, –user-agent=AGENT 使用 AGENT 取代 Wget/VERSION 作为识别代号.
FTP 选项:
–retr-symlinks 取回 FTP 的象徵连结.
-g, –glob=on/off turn file name globbing on ot off.
–passive-ftp 使用 “passive” 传输模式.
使用递回方式的取回:
-r, –recursive 像是吸入 web 的取回 – 请小心使用!.
-l, –level=NUMBER 递回层次的最大值 (0 不限制).
–delete-after 删除下载完毕的档案.
-k, –convert-links 改变没有关连的连结成为有关连.
-m, –mirror 开启适合用来映射的选项.
-nr, –dont-remove-listing 不要移除 `.listing' 档.
递回式作业的允许与拒绝选项:
-A, –accept=LIST 允许的扩充项目的列表.
-R, –reject=LIST 拒绝的扩充项目的列表.
-D, –domains=LIST 允许的网域列表.
–exclude-domains=LIST 拒绝的网域列表 (使用逗号来分隔).
-L, –relative 只跟随关联连结前进.
–follow-ftp 跟随 HTML 文件里面的 FTP 连结.
-H, –span-hosts 当开始递回时便到外面的主机.
-I, –include-directories=LIST 允许的目录列表.
-X, –exclude-directories=LIST 排除的目录列表.
-nh, –no-host-lookup 不透过 DNS 查寻主机.
-np, –no-parent 不追朔到起源目录.
范例一:mirror一个网站
 wget -r http://www.redhat.com
范例二:mirror一个网站下的某个目录:

 wget -r http://www.redhat.com/apps/download/

但是在实际中,现在的网站大多数是程序+数据库的模式,不象原来的那种单独的html方式,
那样get下来的文件名就是不能直接访问的。(如果没有试过mirror的,
估计不知我说的是怎么一回事)
我们举个以mirror 一个网站的子目录下的例子,来说说吧。此网站是一台Linux的机器,
在他们的上面用是jsp+mysql的模式。
一、
先在你的机器上输入
wget -m -r -k -np -b –user-agent=‘Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)’ http://www.mysite.com/solution/
^ ^ ^ ^ ^ ^ __欲mirror的网站的url
| | | | | |__访问网站使用的程序的标识(我不想让那个网站知道我用的是wget,要mirror他的站,所以就假冒ie4)
| | | | |_____放到后台运行 (我可不想傻等)
| | | |___ 限制在当前目录下的文件(如果不设,你就死定了)
| | |__转换连接(但是我没有感觉有多大的用)
| |__递归抓取

|__这个要用呀,是作mirror呀
然后你先出去转转,等时间差不多了,再回来吧
二、wget结束后,你会发现,那些list.jsp?id=什么什么的,都wget了下来,文件名就是list.jsp?id=xxx存放着。
类似这种:
-rw-r–r– 1 root root 30588 Jul 31 18:49 showfom.jsp?i=1525
wget到没有错,可是在我们的机器上是不能直接访问的,这种文件名在win下也不能使用。unix对它支持,可是在apache或别的web server上不能正常访问。
如访问 http://192.168.0.1/mirror/www.mysite.com/solution/showfom.jsp?i=1525,我们的web server会认为请求showfom.jsp文件,?后面是参数,所以造成我们不能直接访问。
说了这么半天,这才说到我要说的,就是我们如何处理这种情况。(唉,悲哀)
三、转换
经过对测试,发现可以通过把?转换成@后,webserver可以正常访问。
即http://192.168.0.1/mirror/www.mysite.com/solution/showfom.jsp?i=1525改成http://192.168.0.1/mirror/www.mysite.com/solution/showfom.jsp@i=1525
明白了这个,我们就可以编写两个脚本来实现。
1.批量改文件名
$cat >/var/tmp/s.sh

!/bin/sh

FILES=ls

for i in \(FILES ; do
j=`echo \)i | sed “s/?/@/”`

mv \(i \)j

done
2.替换掉文件内容中的提示
$cat >/var/tmp/s1.sh

!/bin/sh

cat \(1 |sed s/.jsp?/.jsp@/ >1.bak
mv 1.bak \)1
这两个脚本主要是利用sed的替换功能
sed s/.jsp?/.jsp@/
| | |__欲改成的信息
| |__须换掉的信息
|__发现并替换
如果是cgi?换成cgi@,asp?换成asp@,php?换成php@,具体看情况而变。

cd /www/mirror/solution/

先把文件名改过来

/var/tmp/s.sh

mv: historylist.jsp' andhistorylist.jsp' are the same file
mv: index.html' andindex.html' are the same file
hehe,这就是不用改名的文件,我们通过分析文件,了解通过这两个文件调用才能显示文章
把index.htm或个别文件的内容作过滤

/var/tmp/s1.sh index.html

/var/tmp/s1.sh historylist.jsp

过滤完后,我们现在输入http://192.168.0.1/mirror/www.mysite.com/solution/,然后看看,是不是出来了,再点links,都正常访问了,Ok.
在此先谢谢eist,e4gle的帮助。
注:此文很乱,可取的就只一点:就是把?替换成@,让web server能正常识别。hehe,大家不要笑我哟。

Kodi(XBMC)视频播放软件

Kodi 是视频播放软件, 很好支持流媒体播放, 据说是看电影,美剧,在线播放的神器. Kodi可以用于播放本地的视频/音乐文件, 也可以通过插件实现在线观看视频或收听音乐, 甚至支持字幕哦! 强大的功能是通过插件实现, 支持图片, 视频 (TV流, 电影, 电视剧), 音乐 程序, 字幕等插件. 最最关键的肯定是视频插件了. 插件这里叫Add-ons, 相关收录插件主要放在库Repository中, 而Repository可以通过zip文件加载, 也可以通过网上的源source来自动下载和更新. 当然选择Source网上加载比zip文件靠谱啦.
设置中文界面:
主界面—>点击Settings->点击 Appearance-> 左侧的 SKIN,然后选右边的 FONTS为 Arial based,注意本步骤应先操作,否则下一步选中文后就会变成不能识别的乱码!!!
点击左侧的International -> 然后选右边的 Language 为 Chinese (Simple) 、 Character set为 Chinese Simplified(GBK)
添加源和库
添加网上的源: 主界面-> System -> File Manager -> 左下的Add Source -> None双击, 开始输入相应网址, 并添加一个名字用于识别该源(随意起). 完成后可以双击点进去看看是不是像文件夹一样里面含有文件夹或者zip文件一类.
添加库: 主界面 -> System -> Add-ons -> Install from zip file (没有见到就后退(mac的delete或者Win的<-退回键), 推到见到这个) -> 选择源 (本地放zip源的文件夹或者网上源的源名) -> 找到相应的zip文件.
可以参考Genesis的库图文安装教程2. 更多库和源的安装(不停update)的可参考一个好博客3.
会设置源和加载库后, 就可以安装各种插件实现Kodi的强大功能了~~~
TVMC
Kodi一个预安装插件版, 非纯净版. 下载: http://www.tvaddons.ag/. 主要借用了fusion installer来方便安装插件. 可以在一般的Kodi中手动安装(源http://fusion.tvaddons.ag,可名为fusion), 用远程zip文件安装, 在start-here中可以找到Config Wizard, Addon Installer and Fresh Start三个插件,第一个是TVMC运行主要自动注册插件, 第二个是自行安装插件, 第三个是恢复Kodi. 理论上用第一个Config Wizard安装就可以完成Kodi->TVMC的过程, 但是在Mac上安装报错.Window版精测也挂了(14.2版的TVMC). 基本上TVMC难以安装使用. 还是要靠手动安装.
常用源及插件
安装插件可以在在视频里选插件, more… 去添加. 也可以在System-> Add-ons里面, 选择用库安装, 选择相应库再找. 一个安装很多插件的方法的视频(可能会过时)
TVAddons fusion
http://fusion.tvaddons.ag: TVAddons的主要源(也就是TVMC的主要源), 主要库zip在 xbmc-repos 内. 常见安装上面提及的Addon Installer. 貌似不太好使.
SuperRepo
http://srp.nu, 可命名SuperRepo -> 新加插件, 选zip方式再选源super->选helix->all->选repository.superrepo.helix.all-latest.zip. 这样, 号称最大的库源就加载了, 啥都有, 中文的库都有…建议最好再安装这个库…因为东西太多太杂了,貌似先安装的会影响后面的库出现插件?
建议安装1Channel, Genesis, Icefilms, Phoenix, Navi-X, Cartoon HD 和Cartoon HD extra等
MetalKettle
http://kodi.metalkettle.co. 内含著名的 Genesis 插件, 该插件有极其丰富的电影资源! 该插件按理也可以在Addon Installer中安装.
也可以手动安装, 图文安装参考2. 简而言之, 就是文件管理-> 添加源->输入http://kodi.metalkettle.co,起名例如MK Repo,随后在添加插件->Install from zip file->选MK Repo后->选1…Recommended Repositories->选repository.lambda-x.x.x.zip->然后Install from repository中选刚才加的lambda-> 选Video Add-ons->Genesis完成添加.
iwillfolo/iwf (SportDevil)
http://iwillfolo.com/iwf/, 一个看体育直播不错的源, 找到同名的库安装即可. 内有著名的 SportDevil 插件, 视频教程参看. 还有使用本地zip安装的例子4. 除此以外还有Genesis, Navi-X等.
Xunitytalk
http://xunitytalk.com/xfinity/, 可以添加其iSteam和XunityTalk. XunityTalk有如Cartoon HD 和Cartoon HD extra, Pak Hind, Pak India Live, Film on, Robinhood-people list, Vdubt25, World TV XunityTalk等.
noobsandnerds
http://noobsandnerds.com/portal原名为totalxbmc (原源 http://i.totalxbmc.tv/).
本地视频资源
这个本来貌似没啥特别的, 在图片/视频/音乐中进去后第一个菜单选照片/文件/Music, 或者对应本地位置(可选最后一个 添加照片/视频/音乐 -> 浏览 来添加本地目录) 来加载自己的媒体文件. 选择后就能添加本地源进行播放了, 很方便. 在选择视频添加本地源时, 会进入内容设置界面, 这里可以设置刮削器(从网上自动抓信息, 可以参考刮削器5 ). 自己尝试吧~
国内相关论坛: 原动力社区, 高清范论坛.

在 Vultr的vps上安装 Archlinux

在所有用过的 VPS服务商中,我一直信赖 Vultr,首先是日本线路质量比较可靠,其次价格平民,只要 5$/月(首次还送钱给你),最后就是最重要的,免费送你不限制的 Snapshot功能,让你克隆(备份)整机。

请一定使用我的链接:http://www.vultr.com/?ref=6813064 来注册试用( 双方获利)。

VPS 操作系统的选择

VPS有很多系统可选,通常都是用 Linux 的一些发行版,在这些发行版中,有一些虽然用的人多,可是安装软件后期分非常麻烦,例如 Debian 官方源里都是旧软件,这一点也不符合我们长期使用 VPS以及日后升级软件的需求,还有一些则要手动工作量多一点,比如 CentOS,还有活跃一点的 Ubuntu,但 Ubuntu多数是 deb分发,也不利于我们自定义。综合了很久,最后我将的 VPS操作系统从 FreeBSD 换到了 ArchLinux。这两个系统虽然分属于是 BSD-like Unix 和 Linux,不过理念非常像,有非常完备的官方手册,足以解决我们日常的问题。
所以下面的部分都是使用 ArchLinux 来进行,而这个系统是 Vultr 官方所以不支持的,所以此文的目的就教你如何在 Vultr 上使用 ArchLinux 。
你的收益: 一次付出,子嗣无忧 

下载 iso文件

登录你的 Vultr ,请不要关键是去点下图中的 “Deploy New Instance”,我们要先准备光盘,所以请你点击 ISOs 输入 iso的地址,让 Vultr给你下载好。

  ArchLinux 的光盘下载网址 https://www.archlinux.org/download/ ,找到你想要的节点,点进去,复制 ISO的 URL。
比如我使用的下载地址:
http://mirror.rackspace.com/archlinux/iso/2016.01.01/archlinux-2016.01.01-dual.iso
然后粘贴到上面ISOs 这个里面,这样 Vultr 就开始帮你下载了。

创建系统

点击Deploy New Instance。
  1. 建议你使用 SSD套餐
  2. 千万不要选 SATA (更多存储空间),因为有可能会莫名各种小毛病,影响后面的安装,会死得很惨
  3. 并且 SATA套餐不能使用Snapshot免费备份功能而SSD可以,基于此,相当于多了一个免费的备份镜像,数据是无价的。

  选择系统时,使用你刚才下载的 iso ( Custom > My ISOs > archlinux-XXXX.iso ),在创建好之后系统根本不会自动安装好 Arch Linux,只不过是用光盘启动了而已。


开始安装

我相信你应该是一个具有动手能力的人,因为接下来的安装需要使用很多命令行指令。请在 VPS控制台 上选使用 VNC Console的方式来使用新创建的 VPS。

硬盘分区

整个安装过程中最核心的地方就是硬盘分区。原因在于 Vultr是基于 KVM的虚拟机,而我们又是用的 SSD ,所以是基于 BIOS + GPT的系统。而在默认情况下咱们的引动器 Grub只能支持 BIOS+ MBR 或者 EFI + GPT 的方式。Vultr 恰是个混合模式,会导致 Grub不引导的。

1. 首先我们必须分出一个 bios安装分区,用于存放存放标准的 Grub 的引导文件。

2. 如果你要承载 Web类服务,例如网站或者私有云 ( owncloud),那么我们最好单独分一个 Swap 。

3. 默认情况下我们直接使用剩余的 SSD 作为整个系统磁盘,不单独分区了。

开始咯:
 gdisk /dev/vda
 n
 回车 (屏幕显示 1-28,Default 1 )
 回车 (屏幕显示 default = 2048, or {+-}size )
 +2M
 EF02 (类型代码默认为 8300,要手动改)

  剩下的空间就是你自己自由支配,我的就仅供参考(与平时的分区没有区别),注意看图片中一定会有一个 BIOS 分区,另外图片中冒号后面是空白的都表示是直接按了 回车,这是成功的关键。
  当然最后还要写盘,这个我就不说按哪个键了。

开始安装

分区已经分好了,并且已经使用 ISO光盘启动了,接下来就是分区了,Arch Linux也有类似于 FreeBSD的交互式安装过程,不过在这里还是要用手动的过程,毕竟我也是第一次安装 Arch Linux 。 Vultr因为可以使用镜像来克隆,所以一次安装,永远安逸。
  不过你需要注意的是,如果你的分区跟我不太一样,那接下来的步骤你需要有些调整,通常的调整就是 /dev/vda1 /dev/vda2 /dev/vda3这些编号有所不同。我只会依照我的来写。
 mkswap /dev/vda2 -L SWAP
 swapon /dev/vda2
 mkfs.ext4 /dev/vda3 -L ArchOS
 mount /dev/vda3 /mnt
好了,至此所有准备工作都已经完成了,我们开始安装系统核心了
pacstrap /mnt base base-devel net-tools

  这是要安装基本系统以及一些必要的套件,其中 net-tools是我额外加上的,因为这样可以在安装完使用诸如 ifconfig nslookup等等的小工具。经过等待(*通常为 2分钟 *左右),系统就已经完全OK了。
  不过此时的系统还没有引导器 bootloader ,因此我们需要为系统安装一下:
arch-chroot /mnt
pacman -Sy grub
mkinitcpio -p linux
grub-install /dev/vda
grub-mkconfig -o /boot/grub/grub.cfg

配置网络连接

  1. 其实操作上来说,以上安装就已经可以重启你的 VPS,享受乐趣,不过在此之前,先要做一些小的配置。
配置DHCP,这一步比较简单,在你的命令行下接着输入:
systemctl enable dhcpcd
或者是
systemctl enable dhcpcd@eth0
通常你会看到 ( Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpcd.service to /usr/lib/systemd/system/dhcpcd (或者@eth0).service.)
  1. 重启前,记得使用 passwd 修改一下你的 root 密码,以利于下一步 ssh从你的 PC上登录,摆脱网页登录的烦恼,请一定要记住此密码,这是用来管理系统的密码切记。
    passwd
    
    输入你的密码,在你输入的时候是不显示密码的,但是不用担心,这是 Linux / Unix 机制造成。
此时你修改的是 Root 用户的密码,但我们平时不应该使用此用户来登录,所以你需要创建一个普通用户以及设置用户密码,这个用户名及密码将会是你远程连接 VPS所使用的。使用用户 mylove 登录后,需要使用 sudo 来执行系统管理命令
  
  useradd -m -G wheel -s /bin/bash mylove
  passwd mylove
  

OK,启动你的机器试一下吧,并使用 mylove 登录一下吧!

远程连接

在机器重启的过程,你也不必闲着,准备一个工具,从现在开始,我们要用自己的电脑客户端来连接。如果你是 Linux / Unix / Mac ,就直接使用终端 ssh 命令 如果是 Windows 就使用 Putty 或者 Xshell ,两者都是免费的。
提醒,SSH 连接涉及你的服务器安全,请一定要去官方网站下载工具,不要去网上找什么汉化版、修改版,以免这些工具利用你的 ssh 连接获取你的服务器密码、植入木马、作为攻击跳板等
针对 Mac ,打开 终端,输入

ssh mylove@your.vps.ip.address

  使用你的 IP 地址替换后半部分,连接时会询问你是不是要添加 ( yes/no ),你就选 yes 。然后会让你登入普通用户 mylove 的密码,登入成功后,可能 再接着输入 su - 从成变身成管理员( 需要你输入管理员密码 )。
  • 安装后有还有些额外调整,但不是必需的例如 hostname, locale, timezone,你完全可以不设置重启后再慢慢调整
  • 以下命令是用于设置时区及改 VPS 主机名称,另外优选最快的软件安装源,井号 ( # )的部分不会影响命令执行,你可以直接复制粘贴的。
    rm /etc/localtime
    ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #设置时区
    hostnamectl set-hostname vps-jp  #设置主机名称叫 vps-jp
    
    

安装 yaourt

这部分是额外的设定,ArchLinux 使用 pacman来管理包,但是有时候这些包更新慢,我们可以使用___yaourt___ 来代替,可称为神器。我们需要修改 /etc/pacman.conf,使用 nano /etc/pacman.conf (你也可以使用 vi ) ,在文件最后加入以下代码:
[archlinuxfr]
SigLevel = Optional TrustAll
Server = http://repo.archlinux.fr/$arch
Control + X 保存( 选择 “yes ” ) ,并退出
然后使用 pacman -Syu yaourt 安装。此后,你就可以使用普通用户 mylove 登录然后直接 yaourt -Sy 软件包名称来帮你安装所需的软件, Enjoy~ it !
完结

额外的软件

这一部分主要是用来介绍如何安装一些常用软件,本身并没有想作为本文的主要内容,不过我想我就作为自己备忘来记录,如果你看不懂,甚至调试有问题, sorry 憋人不提供解答。

shandowsocks Strongswan Ocserv

安装过程非常简单,切换到普通用户 mylove 下,输入 yaourt -S shadowsocks-libev strongswan ocserv 然后就开始问你一些问题,然后就开始编译了,你根本不必担心什么,因为这是绝大多数用户都验证过的配置。只是你要看清楚问你的问题是“编辑 PKGUID”( 选 n)还是问你“是否继续构建” (选 yes),然后就会问你是否要安装。
  

备份你的 VPS

尽管你已经安装好了这些必备软件,但是请不要急着从网上找资料来配置它们,你首先要做的就是备份。记住,数据是无价的,而如果因为配置错了浪费太多重建时间更是无价的。
  Vultr 默认开放一个非常好用的主机克隆服务,叫“快照” Snapshot ,目前是免费向 SSD硬盘用户开放,所以你打开网页,先备份一下吧
  登录你的 VPS,点击 Snapshots

  你需要等待好久,所以请起身喝杯茶。

配置你的防火墙

要想使用 VPS必须要开防火墙,而且防火墙还有另一个用处,就是 VPN功能一定要依赖防火墙。为了避免太麻烦,我直接发我的配置。你可以自己导入
# Generated by iptables-save v1.4.21 on Mon Jan  4 16:27:39 2016
*filter
:INPUT DROP [267469:59409891]
:FORWARD ACCEPT [1527284:116084980]
:OUTPUT ACCEPT [551995:57041906]
:sshguard - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -m comment --comment "Allow Localhost Access" -j ACCEPT
-A INPUT -p tcp -m multiport --dports 20,21,22,43,53,80,443,500,3306,4500,4698,4430,8080 -m comment --comment "SSH/ HTTP/ Shadowsock/ IPSec/ Ocserv " -j ACCEPT
-A INPUT -p udp -m multiport --dports 20,21,22,43,53,80,443,500,3306,4500,4698,4430,8080 -m comment --comment "SSH/ HTTP/ Shadowsock/ IPSec/ Ocserv " -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22000,60223,21025,33925,33452 -m comment --comment "Syncthing TCP port" -j ACCEPT
-A INPUT -p udp -m multiport --dports 22000,60223,21025,33925,33452 -m comment --comment "Syncthing UDP port" -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -i eth0 -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -m limit --limit 5/min --limit-burst 7 -j LOG --log-prefix "Drop Sync"
-A INPUT -i eth0 -f -m limit --limit 5/min --limit-burst 7 -j LOG --log-prefix "Fragments Packets"
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -m recent --update --seconds 15 --name DEFAULT --mask 255.255.255.255 --rsource -j DROP
-A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -m recent --set --name DEFAULT --mask 255.255.255.255 --rsource -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m multiport --dports 60000:61000 -m comment --comment "Mosh server" -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 1701 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j sshguard
-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
-A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i tun0 -o eth0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -m comment --comment "Allow Localhost output" -j ACCEPT
-A OUTPUT -p udp -m multiport --dports 20,21,22,43,53,80,443,500,3306,4500,4698,4430,8080 -j ACCEPT
-A OUTPUT -p tcp -m multiport --dports 20,21,22,43,53,80,443,500,3306,4500,4698,4430,8080 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -m icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Mon Jan  4 16:27:39 2016
# Generated by iptables-save v1.4.21 on Mon Jan  4 16:27:39 2016
*mangle
:PREROUTING ACCEPT [649046914:490030784988]
:INPUT ACCEPT [458980340:332669236268]
:FORWARD ACCEPT [190065337:157361240288]
:OUTPUT ACCEPT [367048723:407521818509]
:POSTROUTING ACCEPT [557343262:564902311503]
-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
# Completed on Mon Jan  4 16:27:39 2016
# Generated by iptables-save v1.4.21 on Mon Jan  4 16:27:39 2016
*nat
:PREROUTING ACCEPT [2700413:236807688]
:INPUT ACCEPT [1160470:78636937]
:OUTPUT ACCEPT [1142833:89039918]
:POSTROUTING ACCEPT [224659:13609002]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Mon Jan  4 16:27:39 2016
将这段代码在你的 VPS 里新建一个文件 nano ~/firwall.txt ,然后粘贴进去。然后使用 iptables-restore < ~/firwall.txt
  以上的这个规则默认拒绝所有连接到你的 VPS的请求,只保留常用的端口,由于我的 shadowsocks使用 4689端口,因此我开放了这个特别端口,你可以改成自己的;同时,系统自动建立 nat,你可以自由地在你的 strongswan (前面刚安装的)里配置任意的 IP地址段,也可以在 ocserv里配置了。
  

配置Shadowsocks-libev

我特意安装了这个版本,你不必担心,这货只是 Shadowsocks众多分支里我觉得非常不错的一个,而配置文件则是完全相同的。
  nano /etc/shadowsocks/config.json ,然后粘贴上代码:
{
    "server":"0.0.0.0",
    "server_port":4698,
    "local_port":1080,
    "password":"YourPasswd",
    "timeout":60,
    "method":"aes-256-cfb"
    }
注意, 4698 要改成你自己的,并且要与防火墙里的配置相对应,至于 local port:1080 这个不起任何作用,仅当你用作客户端时才有用,但是保留它的好处是,你可以直接把这个配置文件复制到你电脑的客户端使用。
  接下来就是设置 Shadosocks的开机自动启动。ArchLinux的牛逼之处就是全程使用 systemd管理,非常省心。代码就是:
systemctl enable shadowsocks-libev@config #开机启动
systemctl start shadowsocks-libev@config  #立刻启动

systemctl restart shadowsocks-libev@config  #重启(用于改过配置)
netstat -npl | grep 4698   #查看配置有没有成功
ss | grep 4698    #查看有没有客户端成功连接

  以上代码直接复制执行就可以了。
  

剩下的工作就是你自己配置你的客户端,当客户端连接时,就在上面的图里就能看到了(图片的最后三行)

Strongswan 配置

接下来的这部分我就不多说了,非常麻烦,所以我只贴我的配置咯,入门级的教程你可能需要问别人啦~
  
  这是一个麻烦,因为涉及太多了,而且每个人配置还不一样,比如我始终只使用证书认证,最后被迫开放了密码认证。所以这里可能不见得每个人都一样,你一定不要惊讶。主要涉及到了的配置文件就是 strongswan.conf, ipsec.conf,ipsec.secrets 。
  首先编辑 strongswan.conf 加入 i_dont_care_about_security_and_use_aggressive_mode_psk = yes
duplicheck.enable = no 这两项一个是让你可以使用 ipsec + 密码来上网,一个是为了允许同一个用户名(或者证书)在多个终端登录。

Mac上,使用自动发布到github pages

理论上你有什么需要实时提交的 git repo 都可以使用这个方法,但为了节约,你需要设置 fswatch 的间隔时间
虽然我下面使用进行的时候使用的是 MyWeb ,其实你也可以换成其他的 Markdown 工具,效果应该差不多.

偶尔发个 blog 到 github pages (github.io)。但是 myweb 是个 GUI 工具,发布到 github要换到 iTerm里自己输入命令 git add && git commit ,非常的麻烦,所以就又一次偷懒写了一个烂脚本,原则上适合用于所有的 app 自动发布到 GitHub。

首先, 确认你要发布的目录

我的 mweb 发布到 Github 的文件夹是 blog,如下图所示:

 先在 blog 这个目录上右击生成网站,然后再点如下图所示,找到生成网站的位置:

然后生成的网站目录在 /Users/bao3/Library/Containers/com.coderforart.MWeb/Data/Documents/MWeb/LocalData/Site/blog/,所以我的目标就是每次文件有变化时,就自动将文章发布到 github ,记住,重点是 “有变化时” 实时更新。

其次,安装自动发布工具

我们需要用到 fswatch 这个命令,这需要使用brew install fswatch
  可选的一个 Shell 命令是 Proxychains4-ng,这个东西的主要用途是为 git 命令添加代理,以防止网络质量不佳。要使用这个命令就需要有一个 Socks 代理,如果你没有,就不要安装了,而我自己有一个shadowsocks-libev ,所以非常方便。

脚本主体

我不是个程序员,所以写出来的脚本有点“脏”,好在还能用,自己动手丰衣足食嘛;然后开始写我们的脚本吧:
找一个目录存放这个脚本,比如自己的 “/Users/`whoami`/ "下面,文件名字叫 gitblog.command ,重点是一定要是 *.command 这种结尾,后面有重要用途。

#!/bin/bash
#$wdir is where your github blog dir
wdir=/Users/bao3/Library/Containers/com.coderforart.MWeb/Data/Documents/MWeb/LocalData/Site/blog/
export cmd=/usr/bin/git

#locate the 'fswatch' command ,you should install it via "brew install fswatch"
export fsdog=`which fswatch`
export proxy=`which proxychains4`
args="-0 -a $wdir/atom.xml"
function gitpush() {
    $cmd add . ;
    reslut=$($cmd commit -a -m "`date`" | grep nothing)

    #when get $result length == zero ,means that there is new modified blog ,just git push  in next!
    if [ -z `$reslut` ] ; then

        #Note : proxychains4 is a proxy tools which would let "git " use your proxy ( shadowsocks e.g.),just brew install it OR it would skip auto.
        `$proxy -q  $cmd push -q` || `$cmd push -q`
    fi;
    return 0;
    }
cd $wdir;
#gitpush ;
export -f gitpush;
$fsdog $args | xargs -0 -n1 bash -c 'gitpush' &

exit

这段脚本实现的功能如下:

  1. 使用 fswatch 实时 检测 myweb 的 blog 目录
  2. 一旦发现有新的博客文章,则会自动提交,并添加当时的时间为标记
  3. 提交时会优先使用 Proxychains4 通过代理提交,如果没安装则自动使用 Git push 提交
  4. 只有变化的文章才会提交,所以非常省流量.

开机启动

在做这一步前,请先双击刚刚生成的 gitblog.command ,应该可以启动一个黑窗口然后又消失了。
接着,你打开 Terminal 输入下面的命令
$ ps waux | grep git | grep -v grep
bao3 20410 4:43下午 0:00.01 xargs -0 -n1 bash -c gitpush
这表示成功启动了。但如果没有,则表示你没有配置成功,多半是里面有什么特殊符号少了半边或者路径错了什么的,需要你自己调试了。
接下来就是在“系统偏好设置”里的“用户和群组”,加上 gitblog.command 的开机登录选项。



 至此,已经全部完成,每次对你的 blog 有任何更改,全都会自动更新到 github pages上,非常方便。

打造多用户的ShadowsocksR

核心功能 lnmp 和 resilio sync 使用 docker 实现,省太多事了。
主要功能是:建立一个网页客户界面,方便管理 SSR 参数;shadowsocksR 读取每一个用户独立的 SSR 参数并启动;数据库默认只能被本机使用;

安装 Docker

参考这里的文章 进行 Docker 安装,我使用的是 Ubuntu 所以要看这里 Docker for Ubuntu,请务必注意自己的系统版本:
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update -y && sudo apt-get install docker-ce -y 

   

安装 Resilio Sync

这是因为我偶尔有时候需要 VPS 跟我的笔记本同步一些数据,你不使用 Btsync 的话,就可以不安装,请跳过。
DATA_FOLDER=~/sync
WEBUI_PORT=8888
mkdir -p  $DATA_FOLDER/folders  
sudo docker run -d --name Sync  \
     -p 127.0.0.1:$WEBUI_PORT:8888 -p 55555 \
     -v $DATA_FOLDER:/mnt/sync \
     --restart=on-failure resilio/sync
然后在你自己的电脑上使用 :
ssh -N -L 9888:127.0.0.1:8888 username@your.vps.ip.or.domain
打开你的浏览器,网址输入 127.0.0.1:9888 就可以配置 Btsync 同步,从些之后你要跟你的 VPS 之间传输什么文件或者要做备份,就方便多了。

安装 lnmp

如果你要制作基于数据库的 shadowsocks 多用户使用,这一步建议你还是要进行的,这一步将会为你直接配置好数据库、web、php ,简单省事。
DOCKER_FOLDER=~/docker
cd $DOCKER_FOLDER\
    && git clone https://github.com/bao3/mini_lnmp.git \
    && cd mini_lnmp
接下来就是模仿 ~/mini_lnmp/nginx_conf/default.conf 写自己的网站配置,然后把自己的网站数据库放在 ~/mini_lnmp/sql ,把自己的网站证书放在 ssl 下面,将网站目录放在 webroot 。启动我们的网页服务器,记住 sql 里的数据库文件在第一次启动时,是自动导入,省心太多了,是不是?
docker run -d --restart=always -v ~/mini_lnmp:/mnt  \
        -p 127.0.0.1:1222:22 -p 80:80 -p 443:443   \
        -p 127.0.0.1:3306:3306 --name lnmp bao3/mini_lnmp

安装多用户版 shadowsocksr

十分建议你将 ss 服务端换成 shadowsocksR,也就是 SSR,主要是这个客户端既可以兼容旧的 SS 又支持新的混淆,非常的方便和安全,而且围绕它的周边软件非常多。
cd ~ \
    && git clone -b manyuser https://github.com/shadowsocksr-backup/shadowsocksr.git \
    && cd shadowsocksr \
    && bash initcfg.sh \
    && sed -i "s/API_INTERFACE =.*$/API_INTERFACE = 'sspanelv3ssr' /" userapiconfig.py \
    && sed -i 's/"host":.*/"host": "127.0.0.1" ,/' usermysql.json \
    && sed -i 's/"user":.*/"user": "sspanel" ,/' usermysql.json \
    && sed -i 's/"password":.*/"password": "sspanel" ,/' usermysql.json \
    && sed -i 's/"db":.*/"db": "sspanel" ,/' usermysql.json
然后修改 userapiconfig.py usermysql.json user-config.json等等,这个就属于 SSR 的配置问题咯。
但是 请确保你的系统安装了 python,pip,setuptools,然后还要安装 pip install cymysql 用以让 shadowsocksR 使用数据库方式来连接
sudo apt install python-pip -y
export LC_ALL=C
pip install cymysql
python server.py 看看能不能运行,OK 的话,就可以使用 supervisord 来保持后台了。

安装 Supervisor 保持后台运行

sudo apt install supervisor -y \
sudo  echo_supervisord_conf > /etc/supervisord.conf
sudo vim /etc/supervisord.conf   
在最后一行,加入:
  [program:ssr]
  command=/usr/bin/python /home/bao3/shadowsocksr/server.py
  user=root

完工.

美国安全战略报告将把中国定义为具有“经济侵略性”的国家

新浪美股讯 北京时间16日晚间消息 据英国《金融时报》报道,特朗普将在下周一发布的《国家安全战略报告》中将中国定义为具有”经济侵略性“的国家。
此举表明特朗普政府的对华立场将比往届美国政府都更加激进。消息人士称,《国家安全战略报告》或将把中国定义为各个领域的竞争对手,甚至是”威胁“
曾在布什政府中任职的Michael Allen认为,《国家安全战略报告》将是美国针对中国采取一系列经济“反制”措施的开始。
美国总统国家安全事务助理麦克马斯特12日表示,特朗普18日将发布上台后首份综合安全政策文件《国家安全战略报告》。
麦克马斯特指出,作为对美国的“威胁”,该战略报告不仅写入了朝鲜和伊朗,还提及了中国和俄罗斯。还有报道称,该战略报告将中国经济崛起视为美国的“威胁”,强调在国家安全上,经济竞争力很重要。
《国家安全战略报告》是作为美国核战略指针“核体制修改”等安全相关具体方针基础的重要文件。报告的焦点在于保护美国国民、促进美国的繁荣、坚持特朗普提出的“基于力量的和平”、扩大美国影响力。此外,预计报告也包含应对国际恐怖组织的措施。
在特朗普提出“美国优先”的政策下,美国与多个贸易伙伴之间的紧张关系加剧。特朗普政府不久前告知WTO,美国反对给予中国市场经济地位。欧盟对此表示支持。根据WTO条款,中国本应在去年获得市场经济地位.
-----------

"特朗普政府不久前告知WTO,美国反对给予中国市场经济地位。欧盟对此表示支持."-可见,美国和欧盟对共匪中国真是厌恶至极。

草莓、溫泉


培根肉里面包一颗草莓,然后放到烤箱里烤,这道‘料理’容易做。

work hard后,要学会enjoy life.