分类目录归档:个人折腾

AnyConnect ocserv搭建记录

记录一下,网上的介绍文章各有一些不正确的地方

20150816再次修正

系统版本 centos6

vps记得先开下tun/tap

基本的包

yum install autoconf automake gcc libtasn1-devel zlib zlib-devel trousers trousers-devel gmp-devel gmp xz texinfo libnl-devel libnl tcp_wrappers-libs tcp_wrappers-devel tcp_wrappers dbus dbus-devel ncurses-devel pam-devel readline-devel bison bison-devel flex gcc automake autoconf wget expat-devel openssl-devel

 

编译安装

nettle
wget http://www.lysator.liu.se/~nisse/archive/nettle-2.7.tar.gz
tar xvf nettle-2.7.tar.gz
cd nettle-2.7
./configure –prefix=/opt/
make && make install

unbound
wget http://unbound.nlnetlabs.nl/downloads/unbound-1.4.22.tar.gz
tar zxf unbound1.4.22.tar.gz && cd unbound1.4.22
./configure prefix=/opt && make && make install

libnl
wget http://www.carisma.slowglass.com/~tgr/libnl/files/libnl-3.2.24.tar.gz
tar xvf libnl-3.2.24.tar.gz
cd libnl-3.2.24
./configure –prefix=/opt/
make && make install

gnutls
wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.2/gnutls-3.2.12.tar.xz
tar xvf gnutls-3.2.12.tar.xz
cd gnutls-3.2.12
export LD_LIBRARY_PATH=/opt/lib/:/opt/lib64/
NETTLE_CFLAGS=”-I/opt/include/” NETTLE_LIBS=”-L/opt/lib64/ -lnettle” HOGWEED_CFLAGS=”-I/opt/include” HOGWEED_LIBS=”-L/opt/lib64/ -lhogweed” ./configure –prefix=/opt/
make && make install
cd ..

gnutls这里如果不用opt prefix的话 上面环境变量里面的/opt全部换成/usr/local,如果不是64位系统,那么上面环境变量里面的lib64的64去掉,如果你要手敲的话,注意上面的cflags里面是HIJK的I。下同

wget ftp://ftp.infradead.org/pub/ocserv/ocserv-0.10.7.tar.xz
tar xvf ocserv-0.10.7.tar.xz
cd ocserv-0.10.7
LIBGNUTLS_CFLAGS=”-I/opt/include/” LIBGNUTLS_LIBS=”-L/opt/lib/ -lgnutls” LIBNL3_CFLAGS=”-I/opt/include” LIBNL3_LIBS=”-L/opt/lib/ -lnl-3 -lnl-route-3″ ./configure –prefix=/opt/
make && make install

 

 

 

关于证书,使用自签的说明有很多,这里记录下使用正规证书的方法。

正规证书签下来crt和key两个文件,crt记得合并下中间人证书
cat ssl.crt > server-cert.pem;
cat sub.class1.server.ca.pem >> server-cert.pem;
cat ca.pem >> server-cert.pem

自己的证书在前,接下来是中间人证书、根证书,得到的是pem
私钥key文件也要转成pem
openssl rsa -in ssl.key -out server-key.pem

路由表配置参考
https://github.com/rankjie/anyconnect-gfw-list/blob/master/gfwiplist.txt

ipv4重定向系统配置、iptables nat配置 有这条配置好像不需要其他文章里面那两条针对网段的配置
iptables -t nat -A POSTROUTING -j MASQUERADE

sysctl里面打开ipv4包转发
/etc/sysctl.conf   net.ipv4.ip_forward = 1
sysctl -p生效

创建账户
/opt/bin/ocpasswd -c /opt/etc/ocserv/ocserv.passwd horsley

然后注意一下 通过supervisord来管理的时候 需要在supervisord配置里面添加环境变量导出
[program:ocserv]
environment=LD_LIBRARY_PATH=/opt/lib/:/opt/lib64/
command=/opt/sbin/ocserv -c /opt/etc/ocserv/ocserv.conf -f
autorestart=true

或者你把这一句写到.bash_profile里面也可以
export LD_LIBRARY_PATH=/opt/lib/:/opt/lib64/

客户端方面,要取消组织连接不安全的服务器的设置,如果使用自签证书

##关于使用证书免密码登录
网上大多是在说怎么用gnutls里面的certtool通过模板生成证书,而且都不怎么关注具体鉴权问题
配置项是cert-user-oid  这个oid表明了ocserv应该从客户端证书的哪个地方取用户名,在多用户的时候或者需要做管理的时候还是需要分开用户名,而不是一份客户端证书大家共用

下面有一个脚本说明了openssl如何生成客户端证书
https://gist.github.com/LimeQM/db93c17cc54e9b13e33e#file-createclientcert-sh

 

主参考文章
https://botu.me/install-ocserv-on-centos6/  (链接失效 使用下面那个)
https://botu.me/post/3960.html

https://blog.qmz.me/zai-vpsshang-da-jian-anyconnect-vpnfu-wu-qi/

其他参考  (可以不看)
https://www.stunnel.info/%E5%9C%A8centos-6-5%E4%B8%8A%E9%85%8D%E7%BD%AEcisco-anyconnect-vpn/
http://itony.me/765.html
http://imkevin.me/post/80157872840/anyconnect-iphone

PHP & Git 最简单的自动部署之二 Win系列服务器

上一回介绍了看起来挺高上大的PHP+git自动部署,之前一直是在linux平台上面使用的,用着还挺顺利的,今天很蛋疼的要做某个项目在windows服务器上面的自动部署,然后就有坑了。首先git在windows上面就是个问题了。msysgit?那家伙凑合能用,但是还是很多问题,还是上次的脚本,会出现无返回无错误进程没有启动的问题,如果你出现了找不到路径,不是可执行文件等提示,你可以试下制定好git的绝对路径,反正我这还是不行。

我换着用PHP的执行命令的方法,exec/system/passthru/shell_exec反正都是不行,出现无返回无错误进程没有启动,试着中间再套一层bat来调用,进程是起来了,但是不知道出什么错误一直不能结束,也就一直阻塞着。用ProcessExp看一下其实msysgit还真是个复杂而蛋疼的东西,一个简单的git pull 他会启动超过5级子进程,目测是sh,用来初始化环境,然后再在里面跑git。

于是我很蛋疼的想,我再写一个别的exe,把运行git pull并取结果包装起来,然后再让php来调用这个exe?结果还是不行,折腾了一天,突然一想不如自立门户,然后多了几行代码,把这个小程序改成了监听某个端口,接收到请求就git pull并把返回写到response,这个东西在go里面不难实现,最后做成这个样子,简单粗暴,有效。

这个程序实现的东西就是一个一个小的http server ,监听8124端口,有简单的http auth,auth通过了之后会调用gitPull,调用过程很复杂的样子,其实还好,他先是找到git的绝对路径,然后Chdir到文件所在目录(也就是说,最后这个程序编译出来,应该放在版本库根目录),然后执行git pull再返回响应。这已经挺完美了,但是还可能出现的一个问题是你的机器在防火墙之后。你开了8124端口外网访问不到怎么办?那还用80端口,还用上次的脚本,做一次中转,脚本里面执行的部分改成curl一下127.0.0.1:8124好了,记得带上auth。

另外提醒一点,这样把版本库放在web目录方便自动部署啥的,其实有安全性的问题,毕竟你有一些例如数据库密码你是硬编码在配置文件里面的,也在版本控制之中,简单地说,你要保护.git目录,最简单的办法RewriteRule ^..* – [F]

PHP 简单的文件kv cache

之前做一个小东西的时候随手写了下面这样的一个cache函数 [11.5增补]后来加了直接存储而不序列化的参数,之后这个函数就凌乱了,而且糅合读写在一个函数代码可读性也不好,得数参数才知道是读是写,用来存放一些小的信息,可以省掉数据库,kv方式,git风格文件存储,简单序列化变量数据写入文件。

使用起来很简单的,原本这个函数只有两个参数,k和v,后来发现如果想要清除某种特定类型的cache的时候拙计,因为都混在一个文件夹里面了,而跟很多kv的东西一样,不能列出来都有哪些k,所以后面加了第一个参数,分区,就是子目录存放。v留空为读取,v有值为写入,v为null删除。不序列化的选项就相当于简单的以某个key存放原信息,例如图像或者其他二进制、纯文本字符串等。PHP低版本还没有从变量(内存)获取图像的getimagesizefromstring,所以有时候必须传入文件名,而如果这些二进制文件被序列化过,那格式就对不上,而且对这些进行序列化也是没意义的。