Sunday, May 21, 2017

Squid反向代理简介 - Ubuntu

ifconfig

inet addr:172.31.64.201  Bcast:172.31.79.255  Mask:255.255.240.0
sudo su
vi /etc/network/interfaces

iface lo inet static
 address 172.31.64.201
 netmask 255.255.240.0
 network 172.31.79.0
 broadcast 172.31.79.255
 gateway 172.31.79.1
 dns-nameservers 172.31.79.1 8.8.8.8


use ec2 console to reboot (status changed in 4 mins)

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install squid3

sudo nano /etc/squid3/squid.conf

--------------------------------------------------------
Ctrl+W search/next search result
Ctrl+X exit
Ctro+O write

(cache is disable by default)
visible_hostname testproxy
http_port 3128
acl network src 172.31.0.0/20
http_access allow network
(http_access allow all, http://ipcalc.nmonitoring.com/)

cache_peer 10.1.2.3 parent 80 0 no-query default login=my_username:my_password
never_direct allow all
--------------------------------------------------------

sudo service squid3 stop
sudo service squid3 start

inbound TCP rule: 3128 source: 0.0.0.0/0

Firefox:
in setting: 172.31.64.201(privite IP in AWS) and port 3128
in browser link type 172.31.64.201->see Access Denial page

Connection to 172.31.64.201 failed -> good

Log file:
/var/log/squid/access.log


Proxy:
Install node.js
sudo apt-get install build-essential curl git m4 ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev

54.211.223.78



https://www.youtube.com/watch?v=iKtkp80gV04

http://www.cnblogs.com/derekchen/archive/2011/02/25/1964909.html

Thursday, May 18, 2017

AWS EC2和VPC简介

SSH连接EC2步骤:

1. 下载ppk文件(私钥文件)
2. 用PuTTYgen转化成Putty能读的私钥文件my-key-pair
3. 用PuTTY输入用户名ubuntu@DNS,SSH->Auth引入步骤2产生的文件作为密码。不同的EC2可以share同一个key,但用putty登录时同样要SSH->Auth引入步骤2产生的文件作为密码。
更多

模板

用现有instance模板产生更多此类实例(比如已经安装了很多软件)
1. 在“实例”页面上,选择要使用的实例。
2. 选择 Actions,然后选择 Launch More Like This。
更多
或者创建一个实例模板AMI(amazon machine image)
1. 在“实例”页面上,选择要使用的实例。
2. 选择 Actions,然后选择 Images->Create image。
这样创建实例时候可以从my AMIs中创建
更多


terminate vs stop

区别在于stop只是关机,硬盘(EBS)还在,terminate就是整个instance都会被删掉

界面GUI

1. 安装
sudo -s
sudo apt-get update
sudo apt-get install ubuntu-desktop
sudo apt-get install vnc4server
sudo apt-get install gnome-panel

2. 初始化进程
vncserver
vncserver -kill :1

3. 修改config
vi .vnc/xstartup
删掉第一行注释:
unset SESSION_MANAGER
加入
gnome-session -session=gnome-classic &
gnome-panel&

4. 开始进程
vncserver

5. 打开5901端口
在security groups中的inbound规则加入5901端口,而source为0.0.0.0/0。有一点要特别注意的是,一定要在该instance对应的security group加入端口,若不在正确的security group上加,就不能被访问。

6. TightVPC
连接publicIP::5901

https://www.youtube.com/watch?v=ljvgwmJCUjw (最好的指南)
http://stackoverflow.com/questions/25657596/how-to-set-up-gui-on-amazon-ec2-ubuntu-server

VPC:

如果EC2只是内部资源,不需要暴露在public(如非网站)。如果给ec2一个public IP,这样很容易被攻击,所以可以只给ec2内部IP,确保它在VPC内部,然后加入带public IP的bastion host作为进入VPC的入口。

bastion host: public IP, sg1->只允许公司内部IP的端口22的访问(不要开放给所有IP)
vm01:, private IP, sg2->只允许sg1的端口22的访问,且outbound允许所有IP的80和443端口流出

Putty只要登录bastion host,登陆后再ssh 到vm01。至于bastion host的设置在SSH->Auth中要勾上Allow agent forwarding并且留空Private key file for authentication,并且开着Pageant(windows service),把key放入即可(原理是把key放入内存中). 参见教程


















在private的EC2默认不能访问Internet,所以可以在VPC中的Elastic IPs创建一个分配给该EC2。private的EC2默认没有outbound rule,与public的EC2默认允许All trafic, all ports完全不同。所以对每种服务都要加入到outbound,如EC2要读写RDS,就要允许通过3306访问RDS的security group。

如下表,ec2的outbound和mysql的inbound对接起来,这样ec2就可以顺利访问RDS

security group Inbound Outbound IsPublic
bastion SSH:devIP ALL Yes
ec2 SSH:bastion HTTP(s):ALL
MySql:mysql
no
mysql MySql:ec2
MySql:devIP
ALL yes

Monday, May 15, 2017

AWS CodeCommit

如何在windows安装aws codecommit
http://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-https-windows.html?icmpid=docs_acc_console_connect#setting-up-https-windows-install-git

主要分为
1. 创建IAM用户gcen作为git的credential,权限加入
   AWSCodeCommitFullAccess, IAMSelfManageServiceSpecificCredentials, IAMReadOnlyAccess并且获得Access Key ID和Secret Access Key相当于git访问密码
2. 安装git,注意不能勾选Git Credential Manager utility,它与CodeCommit不兼容,否则会有     403错误
3. 安装aws cli,最简单是下载MSI安装包或者python的pip安装。安装完毕后,输入aws configure输入Access Key ID和Secret Access Key,地区与CodeCommit上的repository地区保持一致us-east-1(从CodeCommit可得到),否则会有403错误。
4. 本地文件夹git clone https://git-codecommit.us-east-2.amazonaws.com/v1/repos/demo demo同时更改git显示的用户名和邮箱。git https可以在IAM产生username和password绕过SSH

git config --global user.name "Gary"
git config --global user.email "gary@gmail.com"


ref:
codecommit的git命令

Wednesday, May 10, 2017

Machine learning简介



关联规则学习Apriori先验算法:用于发现变量间的关系,比如超市中同一次购买的产品间关系。
数据:
TID 网球拍 网 球 运动鞋 羽毛球
1 1 1 1 0
2 1 1 0 0
3 1 0 0 0
4 1 0 1 0
5 0 1 1 1
6 1 1 0 0
结论:
关联规则网球拍=>网球是有趣的,认为购买网球拍和购买网球之间存在强关联。


机器学习流程

以分类问题为例。这个例子的数据是通过多个因素来判断学生期末考试成绩合格与否。
目标:期末考试G3>=10即为及格,否则不及格,所以是Binary的分类问题
输入:包括32个attributes,比如famsize家庭大小,Mjob母亲工作,Fjob父亲工作,reason选择此校原因,G1和G2为前两次小测的成绩(对结果有重大影响的attribute)。

数据(http://archive.ics.uci.edu/ml/datasets/Student+Performance):

sex age address famsize Mjob Fjob reason G1 G2 G3
F 18 U GT3 at_home teacher course 0 11 11
F 17 U GT3 at_home other course 9 11 11
F 15 U LE3 at_home other other 12 13 12
F 15 U GT3 health services home 14 14 14


总体流程还包括前期数据收集(预测产品销售:季节,promotion,历史销售,价格;广告是否点击:广告位置,用户性别,广告颜色,价钱)、清理(null用mean代替)、sanity check(平均值,方差),后期就是在prod应用model计算新数据的目标值。























Feature extraction特征数值化:上例如Fjob是String,可以取这列的distinct数值(N个),按1-N编号,再建立一个map把特征string和编号对应起来。即使numeric的列也需要做同一处理以缩小值的范围。而目标列就按二值处理。

Feature selection特征选择:有些特征对目标预测有强关联关系,比如G1、G2对G3,而有些特征如age对G3可能弱关联。选择合适的特征对预测结果score(准确度)有至关重要的作用。至于哪些特征对目标有影响,可以通过关联规则来确定。

Split data训练测试数据分离:一般采用10次交叉验证10-fold cross-validation,随机分成10份样品,9份训练,一份测试,进行10次这样的训练取平均结果。

Fit model训练模型:就是用训练数据去训练model。每种model都会有自己的参数(比如决策树的深度max_depth=5)。这个过程需要parameter tuning。

Predict预测测试数据:用训练好的model去计算测试数据的目标特征值G3.

Score计算分数(准确度):用测试数据实际结果G3和model计算出来的G3比较,看false positive和false negative的数量确定分数。


机器学习问题分类

回归预测:预测产品销售
分类问题:产品分类,错误订单,用户会否点击广告
推荐系统:推荐产品
NLP: 产品是否重复
http://docs.aws.amazon.com/zh_cn/machine-learning/latest/dg/types-of-ml-models.html


Model应用场合

Supervised Learning适用与已知LABEL的情况.
Semi-supervised Learning适用于有Latent Variable的情况
Unsupervised Learning适用于有Latent Variable的情况


数据维度易受攻击简介场景
随机森林random forest不高决策树的进阶版,集成算法,不容易被攻击。不需要很多参数调整就可以达到不错的效果。首选尝试几乎所有
支持向量机SVM极不找到不同类别之间的分界面。第二选择
神经网络Neural network利用训练样本(training sample)来逐渐地完善参数。如预测身高,若输入的特征中有一个是性别,而输出的特征是身高。那么当训练样本是有大部分高的男生,在神经网络中,从“男”到“高”的路线就会被强化。有很多很多层。受限于计算机的速度。数据量庞大,参数之间存在内在联系。以及生成数据,用来做降维
近邻KNN找到离它最近的几个数据点,根据它们的类型决定待判断点的类型。它的特点是完全跟着数据走,没有数学模型可言。容易解释的模型。推荐算法
贝叶斯Bayesian根据条件概率计算待判断点的类型垃圾邮件过滤器
决策树Decision tree它总是在沿着特征做切分。随着层层递进,这个划分会越来越细。一些更有用的算法的基石。N/A
逻辑斯蒂回归Logistic regression回归方法的核心就是为函数找到最合适的参数,使得函数的值和样本的值最接近。例如线性回归(Linear regression)就是对于函数f(x)=ax+b,找到最合适的a,b。它拟合的是一个概率学中的函数。虽然效果一般,却胜在模型清晰



应用场景
https://www.zhihu.com/question/26726794

classification->random forest, SVM, neural
clustering
regression
recommendation
spam detection
NLP

推荐系统
https://www.zhihu.com/question/19971859
https://jlunevermore.github.io/2016/06/25/36.python%E5%AE%9E%E7%8E%B0%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F/
http://blog.csdn.net/u012050154/article/details/51438906

评估分类器
https://www.zybuluo.com/littlekid/note/66980#评估分类器

Thursday, May 4, 2017

AWS RDS

Relational Database大家应该比较熟悉,这里主要讲述配置问题

新建一个数据库实例一定要注意security groups,publicly accessible选yes
如果create new security group的话,本地客户端MySql Workbench就可以直接访问,但是它不能其他AWS资源如lambda访问,所以不推荐
这里推荐用default(VPC), 这时候其他AWS可以访问,但本地默认不能访问,这时候就要点击security groups中的default进入EC2的security group,在inbound rules加入TCP 3306(MySql)允许My IP访问即可。