Linux搭建IPSec/IKEv2 VPN服务器及客户端连接教程

ref:

https://blog.csdn.net/lai444132348/article/details/75578548

https://mpco.gitlab.io/2015/09/02/Centos%E6%90%AD%E5%BB%BAIPSEC%20IKEV2%20VPN%E6%9C%8D%E5%8A%A1%E5%99%A8/

https://hjc.im/shi-yong-strongswanda-jian-ipsecikev2-vpn/

一、确定虚拟云服务虚拟技术类型

  • 1、通过系统目录判断 执行命令:ls -al /proc 一般Openvz的话,则会有vz目录,Xen的话则会有xen目录。
  • 2、通过网卡信息判断 执行命令:ifconfig 一般Openvz的话,则会有venet0或venet0:x网卡标识,Xen的话一般则是eth0。
  • 3、通过VPS控制面板判断 流行的VPS面板包括SolusVM、vePortal等,会显示具体的虚拟技术。
  • 4、通过virt-what命令判断 CentOS或RedHat系统的话,执行命令:yum install -y virt-what ubuntu(debian系):sudo apt-get install virt-what
    virt-what是一个判断当前环境所使用的虚拟技术的脚本,常见的虚拟技术基本上都能正常识别出来。
    安装好virt-what后,执行命令:sudo virt-what 根据返回的信息,即可判断出当前VPS所使用的虚拟技术。

二、编译安装Strongswan

1,安装必须的库

Ubuntu:
apt-get update
apt-get install libpam0g-dev libssl-dev make gcc
CentOS:
yum update
yum install pam-devel openssl-devel make gcc

2,下载strongswan并解压(*代表当前Strongswan版本号)

wget http://download.strongswan.org/strongswan.tar.gz
tar xzf strongswan.tar.gz
cd strongswan-*

3,编译Strongswan:
Xen、KVM使用以下参数:

./configure  --enable-eap-identity --enable-eap-md5 \
--enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap  \
--enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap  \
--enable-xauth-pam  --enable-dhcp  --enable-openssl  --enable-addrblock --enable-unity  \
--enable-certexpire --enable-radattr --enable-tools --enable-openssl --disable-gmp

OpenVZ需额外增加一个 enable-kernel-libipsec:

./configure  --enable-eap-identity --enable-eap-md5 \
--enable-eap-mschapv2 --enable-eap-tls --enable-eap-ttls --enable-eap-peap  \
--enable-eap-tnc --enable-eap-dynamic --enable-eap-radius --enable-xauth-eap  \
--enable-xauth-pam  --enable-dhcp  --enable-openssl  --enable-addrblock --enable-unity  \
--enable-certexpire --enable-radattr --enable-tools --enable-openssl --disable-gmp --enable-kernel-libipsec

4,编译并安装:

make; make install

编译完成后如果没有报错,且使用ipsec version指令能出现版本信息,则表示安装成功.


三、配置证书

1,生成CA证书的私钥

ipsec pki --gen --outform pem > ca.pem

2,使用私钥,签名CA证书

ipsec pki --self --in ca.pem --dn "C=com, O=myvpn, CN=VPN CA" --ca --outform pem >ca.cert.pem

提示:多个vps使用同个CA根证书:
如果需要多个vps使用同一个CA根证书,则以上两步只执行一次,之后所有vps都使用上面生成的这两个ca.pem和ca.cert.pem文件进行后续的操作.
然后把多台vps解析到同一个域名的不同二级域名下.
这样客户端连接各个服务器时,只需要客户端安装一次根证书ca.cert.pem即可.

3,生成服务器证书所需的私钥

ipsec pki --gen --outform pem > server.pem

4,用CA证书签发服务器证书

请先确认你的服务器的IP地址或域名,以后客户端连接时只能使用证书中的地址连接(多服务器使用相同根证书CA的,请先做好服务器的域名解析),
然后将下面命令中的123.123.123.123替换为自己服务器的IP地址或域名,一共需要替换两处:

ipsec pki --pub --in server.pem | ipsec pki --issue --cacert ca.cert.pem \
--cakey ca.pem --dn "C=com, O=myvpn, CN=123.123.123.123" \
--san="123.123.123.123" --flag serverAuth --flag ikeIntermediate \
--outform pem > server.cert.pem

注意以上命令中的”C=”和”O=”的值要与第2步CA中的C,O的值保持一致.

5,生成客户端证书所需的私钥:

ipsec pki --gen --outform pem > client.pem

6,用CA签名客户端证书(C,O的值要与上面第2步CA的值一致,CN的值随意):

ipsec pki --pub --in client.pem | ipsec pki --issue --cacert ca.cert.pem --cakey ca.pem --dn "C=com, O=myvpn, CN=VPN Client" --outform pem > client.cert.pem

7,生成pkcs12证书:

openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name "client" -certfile ca.cert.pem -caname "VPN CA"  -out client.cert.p12

注意以上命令中的”-caname”后面的引号里的值必须要与第2步CA中的”CN=”的值保持一致.
此命令运行会让你输入:私钥密码

8,安装证书:

cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/
cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r server.pem /usr/local/etc/ipsec.d/private/
cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r client.pem  /usr/local/etc/ipsec.d/private/

四、配置Strongswan

1,编辑/usr/local/etc/ipsec.conf文件:

vim /usr/local/etc/ipsec.conf

修改为以下内容:

config setup
    uniqueids=never 

conn iOS_cert
    keyexchange=ikev1
    # strongswan version >= 5.0.2, compatible with iOS 6.0,6.0.1
    fragmentation=yes
    left=%defaultroute
    leftauth=pubkey
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    right=%any
    rightauth=pubkey
    rightauth2=xauth
    rightsourceip=10.31.2.0/24
    rightcert=client.cert.pem
    auto=add

conn android_xauth_psk
    keyexchange=ikev1
    left=%defaultroute
    leftauth=psk
    leftsubnet=0.0.0.0/0
    right=%any
    rightauth=psk
    rightauth2=xauth
    rightsourceip=10.31.2.0/24
    auto=add

conn networkmanager-strongswan
    keyexchange=ikev2
    left=%defaultroute
    leftauth=pubkey
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    right=%any
    rightauth=pubkey
    rightsourceip=10.31.2.0/24
    rightcert=client.cert.pem
    auto=add

conn windows7
    keyexchange=ikev2
    ike=aes256-sha1-modp1024!   # windows7的ikev2指定了DH group必须是modp1024
    rekey=no
    left=%defaultroute    # 通告默认路由,作为网关
    leftauth=pubkey
    leftsubnet=0.0.0.0/0
    leftcert=server.cert.pem
    right=%any
    rightauth=eap-mschapv2
    rightsourceip=10.31.2.0/24  # 分配给客户端ip的子网范围
    rightsendcert=never
    eap_identity=%any
    auto=add

2,使用vim编辑/usr/local/etc/strongswan.conf文件:

charon {
        load_modular = yes
        duplicheck.enable = no
        compress = yes
        plugins {
                include strongswan.d/charon/*.conf
        }
        dns1 = 8.8.8.8
        dns2 = 8.8.4.4
        nbns1 = 8.8.8.8
        nbns2 = 8.8.4.4
}
include strongswan.d/*.conf

3,使用vim编辑/usr/local/etc/ipsec.secrets文件:

: RSA server.pem
: PSK "myPSKkey"
: XAUTH "myXAUTHPass"
[用户名] %any : EAP "[密码]"

将上面的myPSKkey单词更改为你需要的PSK认证方式的密钥;
将上面的myXAUTHPass单词更改为你需要的XAUTH认证方式的密码,该认证方式的用户名是随意的;
将上面的[用户名]改为自己想要的登录名,[密码]改为自己想要的密码([]符号去掉),可以添加多行,得到多个用户,这即是使用IKEv2的用户名+密码认证方式的登录凭据.

提示:wp8.1客户端连接的用户名问题
由于wp8.1连接IKEv2的vpn时,默认会加上与手机名称相同的域,于是连接时会显示用户名或密码错误.这里有两种解决方法:
方法1:将上面/usr/local/etc/ipsec.secrets文件的最后一行改为%any %any : EAP “[密码]” ,这样就可以使用任意用户名登录,带上域也不会出错.
方法2:用FreeRADIUS过滤掉登录名的域,参考连接:让FreeRADIUS去掉登陆用户名中的Windows登录域


五、配置防火墙

1,编辑/etc/sysctl.conf

net.ipv4.ip_forward=1

执行

sysctl -p

 

 

如果出现错误信息:

error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key

error: "net.bridge.bridge-nf-call-iptables" is an unknown key

error: "net.bridge.bridge-nf-call-arptables" is an unknown key

net.netfilter.nf_conntrack_max = 64000

error: permission denied on key 'net.nf_conntrack_max'

则执行:

rm -f /sbin/modprobe

ln -s /bin/true /sbin/modprobe

rm -f /sbin/sysctl

ln -s /bin/true /sbin/sysctl

modprobe bridge

sysctl -p

2、配置iptables

一行前面的#号去掉(否则Ikev2 vpn连接上后将无法访问外网),保存后执行sysctl -p(如果执行后有报错的,重新打开sysctl.conf将报错的部分#注释掉保存,直到执行sysctl -p不再报错为止)。

2,配置iptables:

OpenVZ执行:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.31.0.0/24  -j ACCEPT
iptables -A FORWARD -s 10.31.1.0/24  -j ACCEPT
iptables -A FORWARD -s 10.31.2.0/24  -j ACCEPT
iptables -A INPUT -i venet0 -p esp -j ACCEPT
iptables -A INPUT -i venet0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i venet0 -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i venet0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i venet0 -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i venet0 -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o venet0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o venet0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o venet0 -j MASQUERADE

PS: 如果VPS有 static IP ,可将上述防火墙规则的最后3条NAT规则替换为以下3条来提升处理效率:

iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o venet0 -j SNAT --to-source ELASTIC_IP
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o venet0 -j SNAT --to-source ELASTIC_IP
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o venet0 -j SNAT --to-source ELASTIC_IP

 

注意将上述3条规则的ELASTIC_IP替换为vps的静态ip地址.

Xen、KVM则执行:

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.31.0.0/24  -j ACCEPT
iptables -A FORWARD -s 10.31.1.0/24  -j ACCEPT
iptables -A FORWARD -s 10.31.2.0/24  -j ACCEPT
iptables -A INPUT -i eth0 -p esp -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4500 -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j MASQUERADE

 

PS: 如果VPS有 static IP ,可将上述防火墙规则的最后3条NAT规则替换为以下3条来提升处理效率:

iptables -t nat -A POSTROUTING -s 10.31.0.0/24 -o eth0 -j SNAT --to-source ELASTIC_IP
iptables -t nat -A POSTROUTING -s 10.31.1.0/24 -o eth0 -j SNAT --to-source ELASTIC_IP
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o eth0 -j SNAT --to-source ELASTIC_IP

 

注意将上述3条规则的ELASTIC_IP替换为vps的静态ip地址.

3,开机自动载入iptables:

Ubuntu:

iptables-save > /etc/iptables.rules
cat > /etc/network/if-up.d/iptables<<EOF
#!/bin/sh
iptables-restore < /etc/iptables.rules
EOF
chmod +x /etc/network/if-up.d/iptables

 

CentOS:

service iptables save

 

至此,IPSec/IKEv2 VPN便搭建好了!现在启用服务就可以使用了:

ipsec start

 

启动及自启动

  1. 设置自启动

vim /etc/rc.d/rc.local

添加:

/usr/sbin/ipsec start

  1. 启动VPN

/usr/sbin/ipsec start


六、配置Win7客户端连接IPsec IKEV2 VPN

使用win7自带客户端(Agile):

1,导入证书

  • 开始菜单搜索“cmd”,打开后输入 mmc(Microsoft 管理控制台);
  • “文件”-“添加/删除管理单元”,添加“证书”单元;
    • 证书单元的弹出窗口中一定要选“计算机账户”,之后选“本地计算机”,确定;

  • 在左边的“控制台根节点”下选择“证书”-“个人”,然后选右边的“更多操作”-“所有任务”-“导入”打开证书导入窗口;

  • 选择刚才生成的 clientCert.p12 文件。下一步输入私钥密码。

  • 下一步“证书存储”选“个人”;
    导入成功后,把导入的 CA 证书剪切到“受信任的根证书颁发机构”的证书文件夹里面;

  • 打开剩下的那个私人证书,看一下有没有显示“您有一个与该证书对应的私钥”,以及“证书路径”下面是不是显示“该证书没有问题”;

  • 然后关闭 mmc,提示“将控制台设置存入控制台1吗”,选“否”即可;
    至此,证书导入完成。

2,建立连接:

  • “控制面板”-“网络和共享中心”-“设置新的连接或网络”-“连接到工作区”-“使用我的Internet 连接”;
  • Internet 地址写服务器地址或域名;
  • 目标名称随便写;
  • 用户名密码写之前配置的 EAP 的那个; ([用户名] %any : EAP “[密码]”)
  • 确定;
  • 点击右下角网络图标,在新建的 VPN 连接上右键属性然后切换到“安全”选项卡;
  • VPN 类型选 IKEv2;
  • 数据加密是“需要加密”;
  • 身份认证这里需要说一下,如果想要使用 EAP-MSCHAPV2 的话就选择“使用可扩展的身份认证协议”-“Microsoft 安全密码(EAP-MSCHAP v2)”,想要使用私人证书认证的话就选择“使用计算机证书”。

七、其他系统客户端连接IPsec IKEV2 VPN

  • 连接的服务器地址和证书保持一致,即取决于签发证书ca.cert.pem时使用的是ip还是域名;
  • Android/iOS/OSX 可使用ikeV1,认证方式为用户名+密码+预共享密钥(PSK);
  • iOS/OSX/Windows7+/WindowsPhone8.1+/Linux 均可使用IkeV2,认证方式为用户名+密码。使用SSL证书则无需导入证书;使用自签名证书则需要先导入证书才能连接,可将ca.cert.pem更改后缀名作为邮件附件发送给客户端,手机端也可通过浏览器导入,其中:

iOS/OSX 的远程ID和服务器地址保持一致,用户鉴定选择”用户名”.如果通过浏览器导入,将证书放在可访问的远程外链上,并在系统浏览器(Safari)中访问外链地址;

Windows PC 系统导入证书需要导入到“本地计算机”的”受信任的根证书颁发机构”,以”当前用户”的导入方式是无效的.推荐运行mmc添加本地计算机的证书管理单元来操作;

WindowsPhone8.1 登录时的用户名需要带上域信息,即wp”关于”页面的设备名称\用户名,也可以使用%any %any : EAP “密码”进行任意用户名登录,但指定了就不能添加其他用户名了.

WindowsPhone10 的vpn还存在bug(截至10586.164),ikeV2方式可连接但系统流量不会走vpn,只能等微软解决. (截至14393.5 ,此bug已经得到修复,现在WP10已经可以正常使用IkeV2.)
Windows10 也存在此bug,部分Win10系统连接后ip不变,没有自动添加路由表,使用以下方法可解决
—– 手动关闭vpn的split tunneling功能(在远程网络上使用默认网关);
—–也可使用powershell修改,进入CMD窗口,运行如下命令:

powershell    #进入ps控制台
get-vpnconnection    #检查vpn连接的设置(包括vpn连接的名称)
set-vpnconnection "vpn连接名称" -splittunneling $false    #关闭split tunneling
get-vpnconnection   #检查修改结果
exit   #退出ps控制台

Let’s Encrypt Wildcard Certificate(通配符证书)

ref:

https://certbot.eff.org/lets-encrypt/ubuntuxenial-apache.html

https://community.letsencrypt.org/t/getting-wildcard-certificates-with-certbot/56285

 

0.准备

Install

On Ubuntu systems, the Certbot team maintains a PPA. Once you add it to your list of repositories all you’ll need to do is apt-get the following packages.

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-apache

要求:certbot 0.22以上

开始使用

1.通配符证书申请

./certbot-auto certonly --manual -d *.mking007.com -d example.com --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
申请过程中需要修改DNS的TXT记录
验证TXT记录:
dig _acme-challenge.mking007.com txt

使用php反向代理使用Blogspot

代理

 

虽然Google的Blogspot在国内无法访问,但Blogspot依旧是国际上最大的BSP之一,其稳定性非常不错,支持域名绑定,并且完全免费,今天我就介绍一种方法,可以让中国的博客用户可以无障碍使用Google Blogger的独立域名,这个方法也可支持所有Google绑定域名的服务,例如Google App Engine、Google Sites等。

本文采用的方法是在国外虚拟主机上,使用php编写代码实现反向代理。(首先确保这部虚拟主机能访问Google,不过我想非天朝的虚拟主机应该都可以访问了,所以只要保证这台主机是海外虚拟主机就行了,本人测试使用的是godaddy的主机)

本文的例子是用blogger.hdq.me作为示范。

下面先就介绍一下详细步骤

1、在Google Blogger上设域名绑定,例如本人用的是二级域名deckenho.blogspot.com,当然你也可以绑定顶级域名。

代理

2、修改域名的解析地址,将其解析到自己的虚拟主机上。

代理

 

3、在虚拟主机上使用php配置一个网站,对Google目标网站进行反向代理。

下载php-dynamic-mirror,PHP的反向代理程序是基于php-dynamic-mirror这个项目的,这个项目就两个文件,非常简单,适合做网站的完全镜像,不过需要进行一些修改,原来的项目是直接反向代理目标网站,由于我们已经修改了Blogger的域名解析,因此需要将该php代码修改一行,将第一行$mirror = “the.site-you-want-to-mirror.com”;改成$mirror = “deckenho.blogspot.com”;即可。(红色部分为你刚才设置的Google Blogger二级域名,而不是你自己的域名)。改成之后就把它上传到主机里面吧。

4、搞完这些之后,你就可以试一下访问自己设置的域名(例如本例的blogger.hdq.me)。如果成功的话,网上的用户就可以使用自己的域名Google Blogger上的网站了,这时候,用户网站解析的IP并不是Google Blogger的IP,而是用户虚拟主机的IP地址,但是调用的程序却是Google Blogger的。
至于用户如何发布信息,由于目前Google Blogger支持https了,那么用户只要修改一下自己本地的hosts文件,将www.blogger.com的ip地址指向一个可用的ip,即可通过https的方式登录Blogger并发布信息。
这个方法不仅仅可以支持Google Blogspot,还可支持所有Google绑定域名的服务,例如Google App Engine、Google Sites等,应用范围广泛,彻底解决了中国网站管理员使用Google建站服务的可用性问题。

不知道这篇文章不知道会不会被CSDN删掉呢,上次发了一篇破解的文章被删掉了。委屈

ssh 代理详细解释

原文:http://www.cnblogs.com/wangkangluo1/archive/2011/06/29/2093727.html

ssh -qTfnN -D 7070 [email protected]

ssh -CfNg -R 1521:127.0.0.1:80 [email protected]

参考地址:

http://hi.baidu.com/edeed/item/e393cf34a76eb8f3e7bb7ab8

http://hi.baidu.com/step_1/blog/item/271f831bfbc198f1ae5133b7.html

http://hi.baidu.com/deyu260/blog/item/3be433093e5779a12eddd418.html

http://hi.baidu.com/laowuuser/blog/item/317647c7992a65de38db4946.html

参考文档:

1.

复制代码
SSH: Port Forwarding
1.正向隧道-隧道监听本地port,为普通活动提供安全连接
ssh -qTfnN -L port:host:hostport -l user remote_ip
2.反向隧道—-隧道监听远程port,突破防火墙提供服务
ssh -qTfnN -R port:host:hostport -l user remote_ip
3.socks代理
SSH -qTfnN -D port remotehost(用证书验证就直接主机名,没用的还要加上用户名密码)
-q Quiet mode. 安静模式,忽略一切对话和错误提示。
-T Disable pseudo-tty allocation. 不占用 shell 了。
-f Requests ssh to go to background just before command execution. 后台运行,并推荐加上 -n 参数。
-n Redirects stdin from /dev/null (actually, prevents reading from stdin). -f 推荐的,不加这条参数应该也行。
-N Do not execute a remote command. 不执行远程命令,专为端口转发度身打造。
复制代码
2.

复制代码
ssh实现转发, 只要用到以下两条命令:

# ssh -CfNg -L 6300:127.0.0.1:1521 [email protected]
# ssh -CfNg -R 1521:127.0.0.1:6300 [email protected]

不论是做跳板, 还是加密隧道, 还是加密其他的网络连接也都是这两条命令. 视具体情况而定, 有时只要用到其中一条, 有时两条都要用到.

命令解释:

1) -CfNg

C表示压缩数据传输
f表示后台用户验证,这个选项很有用,没有shell的不可登陆账号也能使用.
N表示不执行脚本或命令
g表示允许远程主机连接转发端口

2) -L 本地转发

# ssh -CfNg -L 6300:127.0.0.1:1521 [email protected]

本机(运行这条命令的主机)打开6300端口, 通过加密隧道映射到远程主机172.16.1.164的1521端口(使用远程主机oracle用户). 在本机上用netstat -an|grep 6300可看到. 简单说,本机的6300端口就是远程主机172.16.1.164的1521端口.

3) -R 远程转发

# ssh -CfNg -R 1521:127.0.0.1:6300 [email protected]

作用同上, 只是在远程主机172.16.1.164上打开1521端口, 来映射本机的6300端口.

4) 实用例子

有A,B,C 3台服务器, A,C有公网IP, B是某IDC的服务器无公网IP. A通过B连接C的80端口(A<=>B<=>C), 那么在B上执行如下命令即可:

$ ssh -CfNg -L 6300:127.0.0.1:80 userc@C
$ ssh -CfNg -R 80:127.0.0.1:6300 usera@A

服务器A和服务器C之间, 利用跳板服务器B建立了加密隧道. 在A上连接127.0.0.1:80, 就等同C上的80端口. 需要注意的是, 服务器B上的6300端口的数据没有加密, 可被监听, 例:

# tcpdump -s 0-i lo port 6300
复制代码
3.

复制代码
http://bianbian.org/technology/264.html

里有一些好用的网址,介绍ssh及其代理穿透防火墙的

http://www.inet.no/dante/

Dante — Proxy communication solution

ssh 是有端口转发功能的。(转)
http://doc.linuxpk.com/80817.html

ssh的三个强大的端口转发命令:

QUOTE:
ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -D listen_port user@Tunnel_Host
-f Fork into background after authentication.
后台认证用户/密码,通常和-N连用,不用登录到远程主机。

-p port Connect to this port. Server must be on the same port.
被登录的ssd服务器的sshd服务端口。

-L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-D port
指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

-C Enable compression.
压缩数据传输。

-N Do not execute a shell or command.
不执行脚本或命令,通常与-f连用。

-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接

Linux命令行下SSH端口转发设定笔记(转)

原文:http://be-evil.org/post-167.html

在Windows下面我们可以很方便的使用putty等ssh工具来实现将服务器上的端口映射到本机端口来安全管理服务器上的软件或者服务 那么我们换到在Liunx下我们应该怎么做呢?

ssh -L 本地端口:服务器地址:服务器端口 用户名@服务器地址 -N

参数详解:

-L 端口映射参数 本地端口 – 这个任意即可,只要本机没有其他的程序占用这个端口就行

服务器地址 – 你需要映射的服务器地址(名称/ip)

服务器端口 – 远程的服务器端口

-N – 不使用Shell窗口,纯做转发的时候用,如果你在映射完成后继续在服务器上输入命令,去掉这个参数即可

例子A:我们想远程管理服务器上的MySQL,那么使用下面命令

ssh -L 3306:127.0.0.1:3306 user@emlog-vps -N
运行这个命令之后,ssh将会自动将服务器的3306映射到本机的3306端口,我们就可以使用任意MySQL客户端连接 localhost:3306即可访问到服务器上的MySQL了。

例子B:一次同时映射多个端口

ssh -L 8888:www.host.com:80-L 110:mail.host.com:110 25:mail.host.com:25 user@host -N
这个命令将自动把服务器的80,110,25端口映射到本机的8888,110和25端口 以上命令在ubuntu 9.10 上测试通过…

关于ssh端口转发的深入实例[转]

http://blog.myhnet.cn/2009/01/08/deepin-instances-of-ssh-port-forwarding/

首先,认识下这三个非常强大的命令:

ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -D listen_port user@Tunnel_Host
相关参数的解释:
-f Fork into background after authentication.
后台认证用户/密码,通常和-N连用,不用登录到远程主机。

-L port:host:hostport
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-D port
指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

-C Enable compression.
压缩数据传输。

-N Do not execute a shell or command.
不执行脚本或命令,通常与-f连用。

-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。注:这个参数我在实践中似乎始终不起作用

实例说明:
一台服务器提供ftp服务,因为ftp传输是明文密码,如果不做ssh端口之前,我们可以通过tcpdump命令很容易的捕捉到明文信息。所以我们要对21端口进行转发:

ftp-server# ssh -CNfg -R 2121:localhost:21 [email protected]
然后登录到100.0.0.50机器,我们可以通过netstat -an|grep :2121查看端口已经侦听

100.0.0.50# ftp localhost 2121
就可以登录到ftp-server了,而且tcpdump无法捕获到有效的信息。
2121端口任意选择,只要是机器上没有占用的端口就行

来一个稍微复杂一点的,做网关的例子:
假如内网有一台提供ftp(linux,port is2121,称为A机器)的机器,通过网关服务器(linux,port is8888,称为B机器)进去,现在外网有一台C机器需要访问网关服务器的某个端口(port is21)来访问内网的ftp服务器。大家可以看到,其实这就像是一个基于ssh的防火墙程序,好,下面我们来具体操作:
1、login A 机器

# ssh -CNfg -R 8888:localhost:2121 root@B机器IP
这样我们就在B机器上开了一个8888->2121的端口转换,但是由于8888端口只能侦听在localhost主机上,因此,虽然我们已经可以在B机器上使用

# ftp localhost 8888
来访问真正的ftp服务器,但仍然无法提供给外网的机器访问

2、login B机器

# ssh -CNfg -L 21:localhost:8888 root@localhost
这样做,是做本地机器上的21->8888端口转换,可以侦听在任何地址上的请求。
2(1)。
如果C机器也是一台linux机器,那也可以这样设置:

# ssh -CNfg -R 21:localhost:8888 root@C机器IP
3。使用C机器,
可以是linux下的ftp命令,也可以是windows下的客户端软件都可以访问B机器的21端口来连接后台真正的ftp服务器(真正的端口是2121)
如果是按照2(1)中的设置,则访问的地址为本机IP。
复制代码

用”scp”拷贝文件
SSH提供了一些命令和shell用来登录远程服务器。在默认情况下它不允许你拷贝文件,但是还是提供
了一个”scp”命令。
假定你想把本地计算机当前目录下的一个名为”dumb”的文件拷贝到远程服务器www.foobar.com上你的
家目录下。而且你在远程服务器上的帐号名为”bilbo”。可以用这个命令:
scp dumb [email protected]:.
把文件拷贝回来用这个命令:
scp [email protected]:dumb .

godaddy主机使用cloudflare CDN服务

国外免费CDN加速及防护:CloudFlare注册使用教程 建站教程 第1张

参考:http://lusongsong.com/reed/1492.html

前半部分懒得写,直接复制了

国内也有很多免费CDN工具,都是需要网站备案后才能使用。网站没有备案的站长可以选择使用国外CDN工具,操作起来也没有我们想象的那么麻烦。

cloudflare是一款免费的CDN工具,CloudFlare可以帮助受保护站点抵御包括拒绝服务攻击(DenialofService)在内的大多数网络攻击,确保该网站长期在线,同时提升网站的性能、访问速度以改善访客体验。

这个教程教大家怎么简单注册和使用cloudflare。

1,注册登录cloudflare这里都是英文界面,但是不难读懂

国外免费CDN加速及防护:CloudFlare注册使用教程 建站教程 第1张

cloudflare注册教程

2,”add websites”添加网站域名,这里不要带www

国外免费CDN加速及防护:CloudFlare注册使用教程 建站教程 第2张

3, cloudflare扫描网站后或自动扫描出dns解析条目,可以再额外增加和删除解析。嫌麻烦的就直接点击”continue”

国外免费CDN加速及防护:CloudFlare注册使用教程 建站教程 第3张

4,选择”free plan”,使用免费版本的cloudflare

国外免费CDN加速及防护:CloudFlare注册使用教程 建站教程 第4张

5,修改dns服务

国外免费CDN加速及防护:CloudFlare注册使用教程 建站教程 第5张

 

———————————-以下为原创—————————————————-

修改godaddy域名服务器

1.登陆->选择产品->域名->管理

2.管理DNS(两步,根据图示进行)

3.选择自定义

4.添加cloudlare给出的域名服务器(不要抄我的,基本上不会一样)

5.完工大吉

 

wordpress修改主题为宽屏

来源:https://wordpress.org/support/topic/twenty-ten-how-can-i-make-the-display-wider-for-169-screens/

If you’re not using a Child Theme, and if the theme doesn’t have a designated section of the dashboard for CSS modifications then do the following:

Install this Custom CSS Manager plugin http://wordpress.org/plugins/custom-css-manager-plugin
use its “CSS Code” section of the dashboard to hold your CSS modifications:
(put this code in)
#access .menu-header,
div.menu,
#colophon,
#branding,
#main,
#wrapper {
width: 1280px;
}
Save
Alternatively use your Child Theme style.css file to hold your CSS modifications

cpanel主机解决403错误

虚拟主机用户建站时会出现网站访问403的错误,这是由于网站资源不可用,通常是由于服务器上的文件权限等问题造成的。具体可以分为以下几个方面。
1.目录禁止索引

一些用户在索引管理器(Index Manager)中设置目录禁止索引,而网站目录下又没有索引页,访问域名自然就出现了 403 禁止访问的提示。可以进入该项修改成Default System Setting设置:
图片1

2.IP 被 cPanel 禁止了

cPanel 的 IP 拒绝管理器(IP Deny Manager)可以禁止一些访客的 IP。如果通过 IP 拒绝管理器禁止了一些 IP,这些 IP 在访问网站就会提示 403 禁止访问错误。可以进入该项把禁止列表内的ip删除:

3.用户属性乱了

cPanel 服务器上,默认情况下,一个用户的所有者和所属组都是 cPanel 的用户名,一旦因为一些缘故如修改主域名或者 cPanel 用户名或者转移账户等导致用户和组乱了,这时候访问这个用户的网站根目录下的内容就会出现 403。试试下面的判断方法:用 IP 访问下看看能否访问正常。独立 IP 直接访问。共享 IP 用临时路径形式 http://共享 IP/~cPanel 用户名这种临时路径访问。如果 IP 访问也是 403,那应该就是属性问题。可以联系主机商给修改下就可以了。同时注意下 public_html 目录,它所属组必须是 nobody,否则访问就会是 403。public_html 目录里面的子目录和文件的所有者和所属组是否都是这个用户的 cPanel用户名。

4.Apache 配置文件损坏

如果是修改主域名等导致 Apache 的配置文件 httpd.conf 损坏, 而用户的属性(所有者和所属组都没问题),这时候可以通过执行下面两条命令修复下cPanel的配置文件:

/scripts/rebuildhttpdconf

/scripts/restartsrv_httpd

用wget建立网站镜像

为openwrt建立镜像
wget -c -r -np -k -L -p http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/nand/

以下为参考文章:http://www.cnblogs.com/lidp/archive/2010/03/02/1696447.html
需要下载某个目录下面的所有文件。命令如下
wget -c -r -np -k -L -p www.xxx.org/pub/path/

在下载时。有用到外部域名的图片或连接。如果需要同时下载就要用-H参数。

wget -np -nH -r –span-hosts www.xxx.org/pub/path/

-c 断点续传
-r 递归下载,下载指定网页某一目录下(包括子目录)的所有文件
-nd 递归下载时不创建一层一层的目录,把所有的文件下载到当前目录
-np 递归下载时不搜索上层目录,如wget -c -r www.xxx.org/pub/path/
没有加参数-np,就会同时下载path的上一级目录pub下的其它文件
-k 将绝对链接转为相对链接,下载整个站点后脱机浏览网页,最好加上这个参数
-L 递归时不进入其它主机,如wget -c -r www.xxx.org/
如果网站内有一个这样的链接:
www.yyy.org,不加参数-L,就会像大火烧山一样,会递归下载www.yyy.org网站
-p 下载网页所需的所有文件,如图片等
-A 指定要下载的文件样式列表,多个样式用逗号分隔
-i 后面跟一个文件,文件内指明要下载的URL

还有其他的用法,我从网上搜索的,也一并写上来,方便以后自己使用。

wget的常见用法

wget的使用格式
Usage: wget [OPTION]… [URL]…

* 用wget做站点镜像:
wget -r -p -np -k http://dsec.pku.edu.cn/~usr_name/
# 或者
wget -m http://www.tldp.org/LDP/abs/html/

* 在不稳定的网络上下载一个部分下载的文件,以及在空闲时段下载
wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC.avi -o down.log &
# 或者从filelist读入要下载的文件列表
wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linuxsoft -i filelist.txt -o
down.log &

上面的代码还可以用来在网络比较空闲的时段进行下载。我的用法是:在mozilla中将不方便当时下载的URL链接拷贝到内存中然后粘贴到文件filelist.txt中,在晚上要出去系统前执行上面代码的第二条。

* 使用代理下载
wget -Y on -p -k https://sourceforge.net/projects/wvware/

代理可以在环境变量或wgetrc文件中设定

# 在环境变量中设定代理
export PROXY=http://211.90.168.94:8080/
# 在~/.wgetrc中设定代理
http_proxy = http://proxy.yoyodyne.com:18023/
ftp_proxy = http://proxy.yoyodyne.com:18023/

wget各种选项分类列表

* 启动

-V, –version 显示wget的版本后退出
-h, –help 打印语法帮助
-b, –background 启动后转入后台执行
-e, –execute=COMMAND
执行`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc

* 记录和输入文件

-o, –output-file=FILE 把记录写到FILE文件中
-a, –append-output=FILE 把记录追加到FILE文件中
-d, –debug 打印调试输出
-q, –quiet 安静模式(没有输出)
-v, –verbose 冗长模式(这是缺省设置)
-nv, –non-verbose 关掉冗长模式,但不是安静模式
-i, –input-file=FILE 下载在FILE文件中出现的URLs
-F, –force-html 把输入文件当作HTML格式文件对待
-B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
–sslcertfile=FILE 可选客户端证书
–sslcertkey=KEYFILE 可选客户端证书的KEYFILE
–egd-file=FILE 指定EGD socket的文件名

* 下载

–bind-address=ADDRESS
指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, –tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O –output-document=FILE 把文档写到FILE文件中
-nc, –no-clobber 不要覆盖存在的文件或使用.#前缀
-c, –continue 接着下载没下载完的文件
–progress=TYPE 设定进程条标记
-N, –timestamping 不要重新下载文件除非比本地文件新
-S, –server-response 打印服务器的回应
–spider 不下载任何东西
-T, –timeout=SECONDS 设定响应超时的秒数
-w, –wait=SECONDS 两次尝试之间间隔SECONDS秒
–waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
–random-wait 在下载之间等待0…2*WAIT秒
-Y, –proxy=on/off 打开或关闭代理
-Q, –quota=NUMBER 设置下载的容量限制
–limit-rate=RATE 限定下载输率

* 目录

-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 允许/不允许服务器端的数据缓存 (一般情况下允许).
-E, –html-extension 将所有text/html文档以.html扩展名保存
–ignore-length 忽略 `Content-Length’头域
–header=STRING 在headers中插入字符串 STRING
–proxy-user=USER 设定代理的用户名为 USER
–proxy-passwd=PASS 设定代理的密码为 PASS
–referer=URL 在HTTP请求中包含 `Referer: URL’头
-s, –save-headers 保存HTTP头到文件
-U, –user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION.
–no-http-keep-alive 关闭 HTTP活动链接 (永远链接).
–cookies=off 不使用 cookies.
–load-cookies=FILE 在开始会话前从文件 FILE中加载cookie
–save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中

* FTP 选项

-nr, –dont-remove-listing 不移走 `.listing’文件
-g, –glob=on/off 打开或关闭文件名的 globbing机制
–passive-ftp 使用被动传输模式 (缺省值).
–active-ftp 使用主动传输模式
–retr-symlinks 在递归的时候,将链接指向文件(而不是目录)

* 递归下载

-r, –recursive 递归下载--慎用!
-l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷).
–delete-after 在现在完毕后局部删除文件
-k, –convert-links 转换非相对链接为相对链接
-K, –backup-converted 在转换文件X之前,将之备份为 X.orig
-m, –mirror 等价于 -r -N -l inf -nr.
-p, –page-requisites 下载显示HTML文件的所有图片

* 递归下载中的包含和不包含(accept/reject)

-A, –accept=LIST 分号分隔的被接受扩展名的列表
-R, –reject=LIST 分号分隔的不被接受的扩展名的列表
-D, –domains=LIST 分号分隔的被接受域的列表
–exclude-domains=LIST 分号分隔的不被接受的域的列表
–follow-ftp 跟踪HTML文档中的FTP链接
–follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表
-G, –ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表
-H, –span-hosts 当递归时转到外部主机
-L, –relative 仅仅跟踪相对链接
-I, –include-directories=LIST 允许目录的列表
-X, –exclude-directories=LIST 不被包含目录的列表
-np, –no-parent 不要追溯到父目录

cloudflare CDN ip range

原文:https://www.cloudflare.com/ips/

 

IP Ranges

Some applications or host providers might find it handy to know about Cloudflare’s IPs. This page is intended to be the definitive source of Cloudflare’s current IP ranges. IPv4

IPv4

103.21.244.0/22
103.22.200.0/22
103.31.4.0/22
104.16.0.0/12
108.162.192.0/18
131.0.72.0/22
141.101.64.0/18
162.158.0.0/15
172.64.0.0/13
173.245.48.0/20
188.114.96.0/20
190.93.240.0/20
197.234.240.0/22
198.41.128.0/17
199.27.128.0/21
IPv6

2400:cb00::/32
2405:8100::/32
2405:b500::/32
2606:4700::/32
2803:f800::/32
2c0f:f248::/32
2a06:98c0::/29