SS公共服务器的基本安全措施
老高以前免费分享的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:
请问nginx那一项,能不能作一些修改让这个SS只能上指定的网站?如google,twitter,facebook等。谢谢
可以的
求指导例句或者方向。谢谢
可以的,需要修改一下tcprelay.py, 在resolve方法中加上检查域名的逻辑就可以了
老高你这个防火墙规则我再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
=================================================
[root@lib6 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,限制连接数啥的,规则我都没执行。
请问80流量转入3128再通过NG反代理隔离BT功能,会不会影响网站功能?我用了ss-panel,所以需要有网页访问。另外会不会影响普通http下载种子文件?谢谢。
80端口你准备全转?
为什么用了nagix 都不能翻墙了
不会的,可能是你的端口被占用了
没啊 端口都是正常
你有没有环聊啊 聊天方便些
adduser --system --disabled-password --disabled-login --no-create-home ssuser,这一步提示adduser: unrecognized option '--disabled-password'。用-h来查,貌似是没有了这个参数?瓦工自带的Centos 6 x86 系统+LNMP环境。
那个是ubuntu系统的命令,我更新一下
心塞,也被攻击了,但是为什么我一恢复,重装系统然后又被攻击,一下午3次机会用完了,搬瓦工直接给我封杀到明年1月1号
安全第一
这些都是防火墙规则,直接执行,然后保存就行!如果不懂什么事iptables,那么你需要西安了解一下
老高同志,打字太快了吧。 什么事(是)iptables, 那么你需要西安(先)了解一下。 仅此指出,请更正。 对了,老高,你有没有兴起了解一下五笔打字,五笔输入法。
多谢
因为西安两个字打得太多,你懂得。
哦。
http://www.phpgao.com/duoshuo_user_agent.html
评论可以显示OS了哇?多说还没有被你折腾坏啊。。。
多说的服务器经常抽风
ok~不太接触防火墙,我上Arch wiki了解一下,给vps改改吧。
我搞到七牛了,把css截断了也放到七牛了,好用多了。这个显示OS信息以及浏览器内核以及版本的是怎么实现的?Linux识别不了发行版的具体名称么?
咋用?