老高以前免费分享的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的优化和安全设置总结

标签: iptables, shadowsocks, server, safe

已有 25 条评论

  1. BlackWind BlackWind

    请问nginx那一项,能不能作一些修改让这个SS只能上指定的网站?如google,twitter,facebook等。谢谢

    1. 可以的

      1. BlackWind BlackWind

        求指导例句或者方向。谢谢

        1. 可以的,需要修改一下tcprelay.py, 在resolve方法中加上检查域名的逻辑就可以了

  2. disqus_WpgE2YcHI8 disqus_WpgE2YcHI8

    老高你这个防火墙规则我再centos6下,保存了重启防火墙报错。以下是我修改后的麻烦您帮忙看看

    # 出口
    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 22 -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

    =================================================
    [[email protected] sysconfig]# service iptables restart
    iptables: Setting chains to policy ACCEPT: filter [ OK ]
    iptables: Flushing firewall rules: [ OK ]
    iptables: Unloading modules: [ OK ]
    iptables: Applying firewall rules: Bad argument `iptables'
    Error occurred at line: 7
    Try `iptables-restore -h' or 'iptables-restore --help' for more information.
    [FAILED]
    ------------------------------------------------------------------------
    说明:我只复制是本帖子里的防火墙那一块的代码,其他比如禁止BT,限制连接数啥的,规则我都没执行。

  3. blackwind blackwind

    请问80流量转入3128再通过NG反代理隔离BT功能,会不会影响网站功能?我用了ss-panel,所以需要有网页访问。另外会不会影响普通http下载种子文件?谢谢。

    1. 80端口你准备全转?

  4. 卵用没有 卵用没有

    为什么用了nagix 都不能翻墙了

    1. 不会的,可能是你的端口被占用了

      1. 卵用没有 卵用没有

        没啊 端口都是正常

        你有没有环聊啊 聊天方便些

  5. blackwind blackwind

    adduser --system --disabled-password --disabled-login --no-create-home ssuser,这一步提示adduser: unrecognized option '--disabled-password'。用-h来查,貌似是没有了这个参数?瓦工自带的Centos 6 x86 系统+LNMP环境。

    1. 那个是ubuntu系统的命令,我更新一下

  6. Hades Hades

    心塞,也被攻击了,但是为什么我一恢复,重装系统然后又被攻击,一下午3次机会用完了,搬瓦工直接给我封杀到明年1月1号

  7. 这些都是防火墙规则,直接执行,然后保存就行!如果不懂什么事iptables,那么你需要西安了解一下

    1. Winter Winter

      老高同志,打字太快了吧。 什么事(是)iptables, 那么你需要西安(先)了解一下。 仅此指出,请更正。 对了,老高,你有没有兴起了解一下五笔打字,五笔输入法。

    2. 多谢

    3. 因为西安两个字打得太多,你懂得。

    4. Winter Winter

      哦。

    5. http://www.phpgao.com/duoshuo_user_agent.html

    6. 评论可以显示OS了哇?多说还没有被你折腾坏啊。。。

    7. 多说的服务器经常抽风

    8. ok~不太接触防火墙,我上Arch wiki了解一下,给vps改改吧。

    9. 我搞到七牛了,把css截断了也放到七牛了,好用多了。这个显示OS信息以及浏览器内核以及版本的是怎么实现的?Linux识别不了发行版的具体名称么?

  8. 咋用?

添加新评论