在VPS上搭建自己的ss服务端 | 第二天堂

在VPS上搭建自己的ss服务端 | 第二天堂

乱谈在前

搭建时使用的shadowsocks-libev

该版本的特点是内存占用小(600k左右),低 CPU 消耗,甚至可以安装在基于 OpenWRT 的路由器上。

Go 版是二进制安装,无需编译,非常简单快捷。

Python版的Shadowsocks易部署,后期升级维护都非常方便,相当适合新手,支持的特性也最多,稳定性好,运行效率高。

而目前只有 Python 和 Go 版是支持在配置文件里直接设置多端口的,至于 libev 版则需要使用多个配置文件并开启多个实例才行。

1

2

3

4

5

6

7

8

9

10

11

{

"server":"0.0.0.0",

"port_password":{

"8388":"password1",

"8389":"password2",

"8390":"password3",

"8391":"password4"

},

"timeout":300,

"method":"aes-256-cfb"

}

所谓的多用户,其实就是把不同的端口给不同的人使用,每个端口则对应不同的密码。Python 和 Go 版通过简单的修改单一配置文件,然后重启程序即可。
自用的话,没必要使用多用户了。占用内存小的,满适合的。适合的,才是最好的。

Python版的Shadowsocks部署:
史上最详尽Shadowsocks从零开始一站式FQ教程(G+)需FQ

网络上还有各种一键安装脚本,可以使用。

自用VPS
HK
1核CPU、256MB内存、256MB vSwap、10GB SSD硬盘、500GB/月流量,1Gbps端口、1个IPv4、4个IPv6 $25每年,可月付$2.95
1核CPU、512MB内存、512MB vSwap、15GB SSD硬盘、750GB/月流量,1Gbps端口、1个IPv4、4个IPv6 $35每年,可季付$10
2核CPU、768MB内存、768MB vSwap、30GB SSD硬盘、2TB/月流量,1Gbps端口、1个IPv4、4个IPv6 $48每年,可季付$15
US 洛杉矶&亚特兰大&达拉斯
HostUS US LEB OVZ Special – 768MB RAM – 2048 GB/月流量 $10每年

HK 一般没货 看到就抢吧
1核CPU、512MB内存、512MB vSwap、10GB SSD硬盘、750GB/月流量,1Gbps端口、1个IPv4、4个IPv6 $25每年
1核CPU、768MB内存、768MB vSwap、20GB SSD硬盘、2000GB/月流量,1Gbps端口、1个IPv4、4个IPv6 $35每年

搬瓦工便宜型号没货了

archlinux维基ss详细安装)

安装SHADOWSOCKS服务端

CentOS:

使用CentOS,版本最好是CentOS 6.x 32或64位

  1. 先安装必须的包:

1

2

3

yum install -y gcc automake autoconf libtool make build-essential autoconf libtool gcc

yum install -y curl curl-devel zlib-devel openssl-devel perl perl-devel cpio expat-devel gettext-devel

yum install -y git

  1. 然后通过git下载源码:

1

git clone https://github.com/madeye/shadowsocks-libev.git

  1. 从源码编译安装:

1

2

3

4

cd shadowsocks-libev

./configure

make

make install

同样在源码目录下,执行以下命令卸载

1

2

make uninstall

make clean

其他Unix-like的系统,特别是Debian-based的Linux发行版如: Ubuntu, Debian or Linux Mint

1

2

3

4

5

6

apt-get install build-essential autoconf libtool libssl-dev

git clone https://github.com/madeye/shadowsocks-libev.git

cd shadowsocks-libev

./configure

make

make install

Ubuntu/Debian:

  1. 先安装必须的包:

1

apt-get install build-essential autoconf libtool libssl-dev gawk debhelper git

  1. 然后通过git下载源码:

1

git clone https://github.com/shadowsocks/shadowsocks-libev.git

  1. 然后生成deb包并安装,一步步执行(留意是否出错 如果出错需要检查系统或者之前的步骤):

1

2

3

4

cd shadowsocks-libev

dpkg-buildpackage -us -uc

cd ..

dpkg -i shadowsocks-libev*.deb

直接从作者提供的软件源安装(Ubuntu/Debian)

由于作者更新源码后并不一定更新这些预编译的包,所以无法保证最新版本,但步骤比较简单。不推荐这种方式。

先添加GPG Key:

1

wget -O- http://shadowsocks.org/debian/1D27208A.gpg | sudo apt-key add -

Ubuntu 12.04 / Debian Wheezy以上版本(libssl 1.0.1以上):

在/etc/apt/sources.list末尾添加:

1

Ubuntu 11.04 / Debian Squeeze(libssl 0.9.8~1.0.0):

在/etc/apt/sources.list末尾添加:

1

最后安装

1

2

apt-get update

apt-get install shadowsocks-libev

配置与启动

配置

配置文件为:/etc/shadowsocks-libev/config.json,格式说明:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# 如果etc目录没有权限,需要命令解除限制

restorecon -R -v /etc

# 如果文件权限问题

chattr -i config.json

# 如果etc下没有shadowsocks-libev目录

mkdir shadowsocks-libev

cat > /etc/shadowsocks-libev/config.json << EOF

# 也可以直接建立配置文件

cat << "EOF" > /etc/shadowsocks.json

{

"server":"my_server_ip",

"server_port":8388,

"local_address": "127.0.0.1",

"local_port":1080,

"password":"mypassword",

"timeout":300,

"method":"aes-256-cfb",

"fast_open": false,

"workers": 1

}

其中:

1

2

3

4

5

6

7

8

9

server:主机域名或者IP地址,尽量填IP

server_port:服务器监听端口

password:密码

method:加密方式 默认为table,其他有rc4,rc4-md5,aes-128-cfb, aes-192-cfb, aes-256-cfb,bf-cfb, camellia-128-cfb, camellia-192-cfb,camellia-256-cfb, cast5-cfb, des-cfb

如果客户端有OpenWRT路由器等设备,或者路由器性能较弱,推荐rc4-md5,性能更好;否则可以选用安全性更好的aes-256-cfb等,虽然计算复杂度上升,会有性能的损失,不过对于PC机以及现在的智能手机来说没有任何问题。性能没多大损失。

timeout:连接超时时间,单位秒。要适中。

fast_open: use [TCP_FASTOPEN](https://github.com/shadowsocks/shadowsocks/wiki/TCP-Fast-Open), true / false

workers: number of workers, available on Unix/Linux

注意引号。

启动

Ubuntu/Debian 通过deb包安装的(deb包安装的默认会开启自启):

1

service shadowsocks-libev restart

CentOS,拷贝启动脚本shadowsocks-libev到/etc/init.d/目录下后,启动:

1

2

3

ssserver -c /etc/shadowsocks.json -d start

ssserver -c /etc/shadowsocks.json -d stop

shadowsocks-libev脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

cat << "EOF" > /etc/init.d/

#!/bin/sh

NAME=shadowsocks

PIDFILE=/var/run/$NAME.pid

DAEMON=/usr/local/bin/ssserver

DAEMON_OPTS="-c /etc/shadowsocks-libev/config.json"

start() {

echo -n "Starting daemon: "$NAME

touch $PIDFILE

chown root:root $PIDFILE

start-stop-daemon --make-pidfile --bashadowsocks ckground --start --quiet --pidfile $PIDFILE --chuid root:root --exec $DAEMON -- $DAEMON_OPTS || true

echo "."

}

stop() {

echo -n "Stopping daemon: "$NAME

start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE || true

echo "."

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

echo -n "Restarting daemon: "$NAME

stop

sleep 1

start

;;

*)

echo "Usage: "$1" {start|stop|restart}"

exit 1

esac

exit 0

EOF

1

2

3

4

5

6

chmod u+x /etc/init.d/shadowsocksd

# update-rc.d shadowsocksd defaults

启动:/etc/init.d/shadowsocksd start

停止:/etc/init.d/shadowsocksd stop

重启:/etc/init.d/shadowsocksd restart

查看状态:/etc/init.d/shadowsocksd status

需要开机自启的,可以建立符号连接到/etc/rc.d/SXXshadowsocks-libev
ln -s /etc/init.d/shadowsocksd /etc/rc.d/rc3.d/S100shadowsocksd
/sbin/chkconfig —add shadowsocksd
或者直接调用ss-server命令运行,

直接使用下面的简单命令启动

1

setsid ss-server -c /etc/shadowsocks-libev/config.json -u

查看shadowsocks是否正确启动并监听相应端口,看到有ss-server进程LISTEN正确的端口就表示成功:

也可以用

1

ps -ef | grep ss-server | grep -v ps | grep -v grep

查看进程是否存在。

升级/优化

升级/卸载

已安装旧版本的 shadowsocks 需要升级的话,需下载本脚本的最新版,运行卸载命令后,再次执行本脚本即可安装最新版。

1

./shadowsocks-libev.sh uninstall

GoAgent与Shadowsocks混合代理

Chrome+SwitchSharp实现GoAgent与Shadowsocks混合代理
在SwitchSharp的配置中新建情景模式,HTTP、FTP为未加密连接可填入Goagent的代理端口配置,而在SOCKS代理中填入Shadowsocks的端口号,如此一来,HTTPS就会自动走shadowsocks,未加密流量就会走goagent,从而不用导入GoAgent CA证书,解决某些强迫症患者的特殊需求。
不过使用此方法带来的问题就是HTTPS的降速,除非你有速度良好的国外VPS,因为大部分国外服务器代理速度都拼不过GAE的。
原链接

Shadowsocks优化方案:

搬瓦工优化方案:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

rm -f /sbin/modprobe

ln -s /bin/true /sbin/modprobe

rm -f /sbin/sysctl

ln -s /bin/true /sbin/sysctl

vi /etc/sysctl.conf

fs.file-max = 51200

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 0

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 1200

net.ipv4.ip_local_port_range = 10000 65000

net.ipv4.tcp_max_syn_backlog = 8192

net.ipv4.tcp_max_tw_buckets = 5000

net.ipv4.tcp_fastopen = 3

net.core.rmem_max = 67108864

net.core.wmem_max = 67108864

net.ipv4.tcp_rmem = 4096 87380 67108864

net.ipv4.tcp_wmem = 4096 65536 67108864

net.core.netdev_max_backlog = 250000

net.ipv4.tcp_mtu_probing=1

sysctl -p

reboot

apt-get install libnet1

apt-get install libpcap0.8

apt-get install libnet1-dev

apt-get install libpcap0.8-dev

wget https://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz

tar zxvf net_speeder-v0.1.tar.gz

sh ./net_speeder/build.sh -DCOOKED

./net_speeder/net_speeder venet0 "tcp" > netlog &

注意!

关于apt-get install libnet1报错..
先执行一下

1

2

apt-get update

apt-get upgrade

更新完成再安装libnet1试试看..
我在搬瓦工上实测不会报错..
还有..如果是centos的话..是不能这样安装的..

安装Net_speeder
由于TCP的特性导致,每个包发一次,容易掉包。干脆就一个包发两次,有效降低掉包率。

debian/ubuntu安装libnet:

安装libpcap:

1

apt-get install libpcap0.8

编译需要安装libnet和libpcap对应的dev包
debian/ubuntu安装libnet-dev:

1

apt-get install libnet1-dev

安装libpcap-dev:

1

apt-get install libpcap0.8-dev

centos安装:

1

2

3

4

5

6

7

8

9

10

下载epel:https://fedoraproject.org/wiki/EPEL/zh-cn

例:CentOS6 64位:wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

如果是centos5,则在epel/5/下

然后安装epel:rpm -ivh epel-release-X-Y.noarch.rpm

然后即可使用yum安装:yum install libnet libpcap libnet-devel libpcap-devel

下载net-speeder:wget https://net-speeder.googlecode.com/files/net_speeder-v0.1.tar.gz

解压缩:tar -zxvf net_speeder-v0.1.tar.gz

使用方法(需要root权限启动):

参数:./net_speeder 网卡名 加速规则(bpf规则)

最简单用法:

Do优化方案:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

vi /etc/sysctl.d/local.conf

fs.file-max = 51200

net.core.rmem_max = 67108864

net.core.wmem_max = 67108864

net.core.rmem_default = 65536

net.core.wmem_default = 65536

net.core.netdev_max_backlog = 4096

net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 0

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 1200

net.ipv4.ip_local_port_range = 10000 65000

net.ipv4.tcp_max_syn_backlog = 4096

net.ipv4.tcp_max_tw_buckets = 5000

net.ipv4.tcp_fastopen = 3

net.ipv4.tcp_rmem = 4096 87380 67108864

net.ipv4.tcp_wmem = 4096 65536 67108864

net.ipv4.tcp_mtu_probing = 1

net.ipv4.tcp_congestion_control = htcp

sysctl –system

ulimit -n 51200

reboot

锐速(可选..且只能安装在DO主机上..搬瓦工不支持):

首先去 http://www.serverspeeder.com/ 免费注册

1

2

3

4

5

6

7

8

9

10

wget http://dl.serverspeeder.com/d/ls/serverSpeederInstaller.tar.gz

tar xzvf serverSpeederInstaller.tar.gz

bash serverSpeederInstaller.sh

vi /serverspeeder/etc/config

rsc="1"

maxmode="1"

advinacc="1"

./serverspeeder/bin/serverSpeeder.sh restart

使用国外 DNS 造成国内网站访问慢的解决方法

强大虚拟机
听说过 VirtualBox 吗?开源、免费、强大的虚拟机软件。可以装个最配置非常低下的虚拟机,比如 32 MiB 内存甚至 16 MiB 内存的虚拟机(要知道 64M 内存的 Linux 已经可以跑 WordPress 这庞然大物了),装个最简单的小 Linux,比如只有 37M 的 Ubuntu Core,然后装上依赖包几乎没有的 dnsmasq,再把 Windows / OS X 的 DNS 设为虚拟机的 IP 地址,于是便可以用了。在当今内存动辄 4 GiB 的情况下,拿 16MiB 内存出来换个更舒畅的上网体验,还是很不错的。

解决方法详情

非越狱苹果iphone/ipad使用shadowsocks

直接安装Shadowsocks App

由于iOS自身的限制和Shadowsocks app代理方式的限制,我们必须得让Shadowsocks app一直保持开启才可以实现全局代理。如果通常十分钟以后iOS就会自动退出后台的一些第三方应用,那么Shadowsocks app自然也会被退出。这就导致了我们需要过一会就去打开一次Shadowsocks app。

iOS 非越狱的话,可以直接安装 Shadowsocks 的 app,下载地址请摸我
中国商店如果已经没有的话,需要切换国别/地区,切换时需账户内余额为0。
可使用美国账号登陆,想要用中国区itunes的时候,可以随时转回来。

  • 先到设置里边,iTunes Store 和 App Store,点击你的apple id,进入
  • 点击查看apple id
  • 输入密码登陆
  • 点进去 country/region那里选取美国,然后点 change country or region,一路点agree
  • 然后还有account setting,重点是city,state,zip,只要这三项对了就没问题了
  • 再是确定啊,什么的你就成功转成美国账号了

美国App Store中Shadowsocks还在,下载地址请摸我

WiFi设置中,http代理地址http://127.0.0.1:8090/proxy.pac

与电脑中同一局域网内,实现iPhone/iPad全局自动翻墻。

  • 勾选电脑客户端的“允许来自局域网的连接”。
  • 获取Pac地址,也很简单。打开我们浏览器,找到这个菜单:工具-Internet选项-链接-局域网设置
  • 获取本机局域网IP地址。快捷操作方法:WIN+R,输入cmd回车,输入ipconfig回车。找到IPv4地址——— 192.168.1.* 那个,就是你本机ip地址。
  • ipad配置和手机配置。找到WiFi设置,点击你连接上的WiFi后面那个感叹号图标,在最下面,HTTP代理的地方,选择自动,然后在下面填上如 http://你电脑的ip:1080/pac(一般自建端口没改,默认为1080),接着返回。例如http://192.168.1.228:1080/pac

提醒:1、不要把ip地址填错了,是填你小飞机那台电脑的ip;2、国内网站不会翻墻,只是Google、YouTube这些常见的网站会翻墻;3、自定义需要翻墻的网站请手动添加到“小飞机右键-PAC-编辑本地PAC文件”,然后替换掉里面一个网址就行了。4、开小飞机的电脑关机后,需要关闭掉iPhone/iPad的HTTP代理,不然上不去网。

另外,还可以用百度云存储或者自己的网站空间存储pac文件
编辑pac文件,由于iphone/ipad不支持socks代理,我们这里要自己编辑pac文件。新建proxy.pac文件,写入以下代码:

function FindProxyForURL(url, host) { return “SOCKS 192.168.xxx.xxx:yyyy”; }

192.168.xxx.xxx就是你电脑的ip,yyyy是你刚才配置shadowsocks客户端的那个重要端口。
将proxy上传到云存储,并且复制公开分享的连接,或者你的网站目录中(www.url.com/proxy.pac
设置 -> 无线局域网-> 点击你连接的无线,在最下边的http代理,选择自动,输入你刚才放置pac文件的地址

pac文件放在云盘上是不可以的啊!

Linux VPS 服务器后简单的安全设置

查看尝试暴力破解IP

1

cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}'

查询出来的结果中包含了“ip地址=数量”就是攻击者信息

修改默认端口号22

找到#port 22
将前面的#去掉,然后修改端口 port 12345 (这里的端口可以自己根据实际情况定义)
为了保险起见,可以将“#port 22”修改为两行“port 22”“port 1234”,1234测试无误后再删掉”port 22″
然后重启ssh服务

禁用远程root登录

root登录直接就获得权限,而且root这个用户名太常见了。在禁用root登录前首先一定要先增加一个普通权限的用户,并设置密码:

1

2

useradd test

passwd test

然后禁止ROOT远程SSH登录:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

vi /etc/ssh/sshd_config

#把其中的

PermitRootLogin yes

#改为

PermitRootLogin no

#如果PermitRootLogin前面的有#的话也一定要删除掉,否则无法生效。

#再重启sshd服务

service sshd restart

#以后我们便可以通过普通权限的ssh账户连接我们的vps,如果需要管理权限的话,可以用下面命令提升到root权限

su root

如果root用户有另外一套密码的话会更加有效。

使用SSH Key登录VPS,关闭密码登录

1、把自己的公匙放在 https://launchpad.net/ 网站,并得到类似 https://launchpad.net/~showfom/+sshkeys 这样的地址,然后通过以下命令导入你的 Key

1

2

3

4

5

curl https://launchpad.net/~showfom/+sshkeys > ~/.ssh/authorized_keys

mkdir .ssh

2、也可以直接写入 authorized_keys 文件

1

2

3

4

cat >>/root/.ssh/authorized_keys<<EOF

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAna/D52fTZ1YNjxnwAJAUhxRdPCwar8ZfWLdwHEmT64Zqtxrz65KRxesHFRVND8Xn1GKtuQIQMu/d5fFhEajFbjoSw/n+Mz58irzUXDbE34Y/nxy1/iWc6aJz6lX6wT7nnDcVoqX8Be8j/8sjS7cMFarn3Iy+0bSQNON3681+hEFM7mpoYyqrCVBpARfiiEZb8tNkfzrKJFrciZ87yaKkncPeDCIbYKjuJY2hciK+Y+IptLdoMj5kQkSXStJFQUfFg+s3FQJ9Istu4C7BF3ZafD4mEupA7P90RRUjLj95mUW/P/ebWGsMVbnxz/Xmq3OL/TOuo85umbSN44DmSB3NEQ== showfom-rsa-key-20130701

EOF

shadowsocks的timeout设置

good, 你已经有了一个自己的shadowsocks代理了,现在想要把这个代理公布出去给所有人分享。
但是没有两个小时,代理就没法使用了,为什么?因为你需要额外注意以下事项(以下步骤需要比较高的linux技能)
本文只关注于确保shadowsocks服务还“活着”,如果你希望让其跑得更快,请参考
https://github.com/clowwindy/shadowsocks/wiki/Optimizing-Shadowsocks

超时时间越长,连接被保持得也就越长,导致并发的tcp的连接数也就越多。对于公共代理,这个值应该调整得小一些。推荐60秒。

检查操作系统的各种限制

对于openvz的vps,特别需要检查一下
shell# cat /proc/user_beancounters
Version: 2.5
uid resource held maxheld barrier limit failcnt
1005: kmemsize 6499239 34332672 50331648 50331648 0
lockedpages 0 0 12288 12288 0
privvmpages 20185 89959 9223372036854775807 9223372036854775807 0
shmpages 654 670 9223372036854775807 9223372036854775807 0
dummy 0 0 9223372036854775807 9223372036854775807 0
numproc 26 102 9223372036854775807 9223372036854775807 0
physpages 12181 24887 0 24576 536
vmguarpages 0 0 9223372036854775807 9223372036854775807 0
oomguarpages 7054 30538 9223372036854775807 9223372036854775807 473
numtcpsock 52 1500 1500 2000 21583239
numflock 1 5 9223372036854775807 9223372036854775807 0
numpty 1 16 9223372036854775807 9223372036854775807 0
numsiginfo 0 63 9223372036854775807 9223372036854775807 0
tcpsndbuf 7497680 29165536 104857600 209715200 0
tcprcvbuf 18891984 88633288 104857600 209715200 0
othersockbuf 39304 386848 9223372036854775807 9223372036854775807 0
dgramrcvbuf 0 166480 9223372036854775807 9223372036854775807 0
numothersock 27 37 1500 2000 0
dcachesize 2293779 25165824 25165824 25165824 0
numfile 362 1910 9223372036854775807 9223372036854775807 0
dummy 0 0 9223372036854775807 9223372036854775807 0
dummy 0 0 9223372036854775807 9223372036854775807 0
dummy 0 0 9223372036854775807 9223372036854775807 0
numiptent 30 30 9223372036854775807 9223372036854775807 0
其中 numtcpsock 表示 tcp 连接数。像上面这样的情况,就不适合用于公共代理,因为vps商限制了并发的tcp连接数。
shell# ulimit -n
1024
这个命令检查默认的一个进程可以打开的文件数。1024这个默认值是不够的。推荐设置为8000
shell# ulimit -n 8000
shell# ss-server -s 0.0.0.0 -p 1080 -k xxxx -m rc4
上面启动ss-server的命令只是示意性的,请替换成你自己的启动命令。ulimit的设置是一次性的,每次启动ss-server之前都要设置一下。

防止vps被用于暴力破解ssh密码等非法行为

只要shadowsocks被公开出去,肯定会有人拿代理用于暴力破解ssh的密码。
推荐你把shadowsocks限制为只允许访问443和80两个端口。如果你不添加这样的限制,
很多vps商都会因为ssh连接开得太多而暂停对你的服务。
shell# adduser http-ss
shell# su http-ss -c “ss-server -s 0.0.0.0 -p 1080 -k xxxx -m rc4”
让ss-server以特定的用户启动
shell# iptables -t filter -A OUTPUT -d 127.0.0.1 -j ACCEPT
shell# iptables -t filter -m owner —uid-owner http-ss -A OUTPUT -p tcp —sport 1080 -j ACCEPT
shell# iptables -t filter -m owner —uid-owner http-ss -A OUTPUT -p tcp —dport 80 -j ACCEPT
shell# iptables -t filter -m owner —uid-owner http-ss -A OUTPUT -p tcp —dport 443 -j ACCEPT
shell# iptables -t filter -m owner —uid-owner http-ss -A OUTPUT -p tcp -j REJECT —reject-with tcp-reset
对于http-ss用户,限制其不能访问80,443之外的端口

防止DMCA Compliant

虽然你已经把shadowsocks限制为只能访问80/443端口,但是对于美国的vps,仍然有额外的一点需要注意。
因为美国的vps需要遵从美国的DMCA版权法律,如果该vps被用于bt下载,而且正好遇上了电影公司设置的蜜罐的话,
你的vps的ip就会被记录下来。然后DMCA Compliant律师函会被送往你的vps商那,然后就会被停止服务。
为了避免shadowsocks帐号被用于bt下载,你不得不对80端口的流量再进一步进行限制
shell# apt-get update && apt-get install -y nginx
安装nginx
server {
listen 127.0.0.1:3128;
server_name localhost;
resolver 8.8.8.8;
location / {
set $upstream_host $host;
if ($request_uri ~ “^/announce.“) {
return 403;
}
if ($request_uri ~ “^.
torrent.*”) {
return 403;
}
proxy_set_header Host $upstream_host;
proxy_pass http://$upstream_host;
proxy_buffers 8 32k;
proxy_buffering off;
}
}
然后配置nginx的server
shell# iptables -t nat -m owner —uid-owner http-ss -A OUTPUT -p tcp —dport 80 -j REDIRECT —to-port 3128
把所有的80端口流量转到nginx来处理

denyhosts 防 ssh 破解密码

考虑到很多人看不懂 user_beancounters 各项的含义,可以解释一下 numtcpsock 表示 tcp 连接数
防 ssh 破解密码可以 apt-get install denyhosts
denyhosts
通过DenyHosts阻止SSH暴力攻击教程
很多人用的是网上找的一键安装脚本或者傻瓜教程,他们可能没有能力在此基础上再做其它的修改。不如直接提供一个优化好的一键安装脚本。 或许你可以直接改一改我的这个脚本把端口限制加进去。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#!/bin/bash

apt-get update

apt-get install -y -qq python-pip python-m2crypto supervisor

pip install shadowsocks

PORTS_USED=`netstat -antl |grep LISTEN | awk '{ print $4 }' | cut -d: -f2|sed '/^$/d'|sort`

PORTS_USED=`echo $PORTS_USED|sed 's/s/$|^/g'`

PORTS_USED="^${PORTS_USED}$"

SS_PASSWORD=`dd if=/dev/urandom bs=32 count=1 | md5sum | cut -c-32`

SS_PORT=`seq 1025 9000 | grep -v -E "$PORTS_USED" | shuf -n 1`

wget https://raw.githubusercontent.com/shadowsocks/stackscript/master/shadowsocks.json -O /etc/shadowsocks.json

wget https://raw.githubusercontent.com/shadowsocks/stackscript/master/shadowsocks.conf -O /etc/supervisor/conf.d/shadowsocks.conf

wget https://raw.githubusercontent.com/shadowsocks/stackscript/master/local.conf -O /etc/sysctl.d/local.conf

sed -i -e s/SS_PASSWORD/$SS_PASSWORD/ /etc/shadowsocks.json

sed -i -e s/SS_PORT/$SS_PORT/ /etc/shadowsocks.json

sysctl --system

service supervisor stop

echo 'ulimit -n 51200' >> /etc/default/supervisor

service supervisor start

supervisorctl reload

查看TCP连接数

通过iptables来实现,比如你的shadowsocks本地地址192.168.0.4和端口2009120091端口的统计命令:sudo iptables -I OUTPUT -s 192.168.0.4 -p tcp —sport 20091然后去查看统计tcp连接数信息:sudo iptables -n -v -L -t filter

正常情况下,Shadowsocks服务监听着外网IP的端口,出网,入网IP均为公网IP,如果可以使Shadowsocks使用独立的IP做出网和入网IP,那要准确统计流量就毫无困难了。

每个Shadowsocks都分配公网IP,明显不现实。免费且不限制无限使用的IP,恐怕只有内网的IP段了。配合NAT转发,即可通过公网IP链接至Shadowsocks服务。

步骤:

  1. 添加一个loop back用的内网IP,例如10.10.10.10:

ifconfig eth0:ss1 10.10.10.10 netmask 255.255.255.0 up
如果你的网卡不是eth0,就自行修改为其他的。

  1. 修改Shadowsocks的配置文件,更改server的IP为内网IP,例如10.10.10.10:

“server”:”10.10.10.10”,

  1. 重新启动Shadowsocks服务
  1. 修改/etc/sysctl.conf,确保:

net.ipv4.ip_forward
的值为1,且未被注释。

修改完毕后保存,执行

sysctl -p

  1. 因为Shadowsocks服务监听的是内网IP,直接通过公网IP链接至Shadowsocks的端口是不行的,因此这里需要使用NAT进行转发,执行:

iptables -t nat -I PREROUTING -p tcp —dport SHADOWSOCKS监听的端口 -j DNAT —to-destination 10.10.10.10

  1. 执行下面两个命令,统计Shadowsocks出网和入网的流量:

iptables -I INPUT -d 10.10.10.10
iptables -I OUTPUT -s 10.10.10.10
其中INPUT是入网流量,也就是用户连接Shadowsocks后,给服务器发送的数据。OUTPUT是出网流量,也就是服务器给用户发送的数据。

完成上面的步骤后,执行iptables,使用-v参数即可查看流量使用情况:

iptables -L -n -v

最后提醒一下:

  1. 使用ifconfig添加的IP只是临时的,重启后会消失,可以修改网卡的配置文件(/etc/network/interfaces或/etc/sysconfig/network-scripts/)添加IP,或者把添加IP的命令加到/etc/rc.local里面。

  2. iptables添加的规则要保存,否则重启后会消失。

安装 CSF 防火墙屏蔽尝试入侵服务器的 IP

CSF 防火墙安装略简单,几个命令即可搞定:

1

2

3

4

5

rm -fv csf.tgz

wget http://www.configserver.com/free/csf.tgz

tar -xzf csf.tgz

cd csf

sh install.sh

然后运行

1

perl /usr/local/csf/bin/csftest.pl

检测是否安装成功

为了防止系统误屏蔽本地 IP,可以修改 /etc/csf/csf.allow 和 /etc/csf/csf.ignore 文件加入你需要的白名单 IP ,然后用

命令重启读取配置文件即可。

用 iptables 只开启常规端口

一般我们只需要开启 22, 53, 80, 443 这三个常见的对外开放端口,可以使用如下命令

清空 iptables 默认规则

允许 22 端口进入和返回

允许 53 端口,一般作为 DNS 服务使用

允许本机访问本机

1

2

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

允许所有 IP 访问 80 和 443 端口,一般作为 http 和 https 用途

保存配置

1

iptables-save > /etc/sysconfig/iptables

重新加载 iptables

安装 fail2ban 屏蔽并举报扫描 SSH 端口的 IP

安装 fail2ban ,屏蔽之余,还能自动写举报信给 IP 所在的 ISP。

CentOS 下安装:

导入 epel 源:

CentOS 6.x 32 位:

1

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

CentOS 6.x 64 位:

1

rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

安装 fail2ban

1

2

3

yum -y install fail2ban

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

service fail2ban start

Ubuntu / Debian 下安装:

1

apt-get install fail2ban -y

通过查看 /var/log/fail2ban.log 文件即可知道有哪些精力过剩的家伙在整天扫描你的 SSH 了。