老高以前免费分享的ss服务器 免费shadowsocks ,被攻击了。。。后台检测到有大量的垃圾邮件,是我大意了,忘记了给做一些保护措施,赶紧补上。

2015-11-13更:

参考了Securing Public Shadowsocks Server一文,好好整理了一下,分享给大家

查看并修改文件打开数

ulimit -a
ulimit -n
ulimit -n 51200

限制连接数

iptables -A INPUT -p tcp --syn --dport ${SHADOWSOCKS_PORT} -m connlimit --connlimit-above 32 -j REJECT --reject-with tcp-reset

禁止链接localhost

运行时加入--forbidden-ip 127.0.0.1,::1参数。

添加非root用户

sudo useradd ssuser
sudo ssserver [other options] --user ssuser

# ubuntu 创建一个安全用户
adduser --system --disabled-password --disabled-login --no-create-home ssuer

# centos 创建一个安全用户
useradd -s /usr/sbin/nologin -r -M -d /dev/null ssuer

禁止非WEB流量

iptables -t filter -A OUTPUT -d 127.0.0.1 -j ACCEPT
iptables -t filter -m owner --uid-owner ssuser -A OUTPUT -p tcp --sport 1080 -j ACCEPT
iptables -t filter -m owner --uid-owner ssuser -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -m owner --uid-owner ssuser -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -m owner --uid-owner ssuser -A OUTPUT -p tcp -j REJECT --reject-with tcp-reset

禁止BT下载

安装nginx

apt-get install nginx

配置服务器

server {
    listen 0.0.0.0:3128;
    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_buffering off;
    }
}

将80端口的流量导入3128端口

iptables -t nat -m owner --uid-owner ssuser -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 3128

配置防火墙

# 出口
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# limit
iptables -A OUTPUT -m limit --limit 30/s -j ACCEPT
iptables -P OUTPUT DROP

# 进入
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport XXX -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -P INPUT DROP


iptables -A FORWARD -j REJECT
iptables -P FORWARD DROP

# 邮件
iptables -I FORWARD -p tcp --dport 25 -j DROP
iptables -I INPUT -p tcp --dport 25 -j DROP
iptables -I OUTPUT -p tcp --dport 25 -j DROP

随机端口

服务端

随机端口可以有效的避免被认证… ss监听在23,将81-1023端口的流量转发到23端口。

iptables -t nat -A PREROUTING -p tcp -m multiport --dport 81:1023 -j REDIRECT --to-ports 23
iptables -t nat -A PREROUTING -p udp -m multiport --dport 81:1023 -j REDIRECT --to-ports 23

客户端

客户端是openwrt上的ss,我们希望将目标是vps ip,端口23的流量,随机拆成端口范围81-1023的流量。

iptables -t nat -I OUTPUT 1 -d [VPS] -p tcp --dport 23 -j DNAT --to-destination [VPS]:81-1023 --random
iptables -t nat -I OUTPUT 1 -d [VPS] -p udp --dport 23 -j DNAT --to-destination [VPS]:81-1023 --random

运行

ssserver --workers 10 --pid-file /tmp/ss.pid --log-file /tmp/ss.log --user nobody -c /root/config.json -v --forbidden-ip 127.0.0.1,::1 -d start

Refer:

shadowsocks的优化和安全设置总结