保护自己的VPS
这段时间,我的VPS服务器也还是只部署了一套SS在网上裸奔。今天琢磨着,这样太危险了。只要有黑客扫到我的服务器,简直伸手就可以拿来用。为了给小黑制造点麻烦(真正NB的黑客是挡不住的,当然他们也不大会看得上的我的VPS),我在网上查找资料,利用iptables
设置了一套简单的防火墙。
学习资料
- iptables - ArchWiki
- Simple stageful firewall - ArchWiki
- netfilter/iptables全攻略
- iptables详解
- linux下IPTABLES配置详解
- Iptables入门教程
建立规则
和上篇一样,我把这个过程写成了Bash脚本文件,代码如下:
(我的代码重度参考了文章Linux上iptables防火墙的基本应用教程)
#!/bin/bash
# 清除已有iptables规则
iptables -F
iptables -X
iptables -Z
# 开放本机向外的所有访问
iptables -A OUTPUT -j ACCEPT
# 允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 开放ssh端口
echo Input Server SSH port
read ServerSSHport
iptables -A INPUT -p tcp --dport $ServerSSHport -j ACCEPT
# 开放ShadowSocks Server端口
echo Input ShadowSocks Server port
read ShadowSocksServerPort
iptables -A INPUT -p tcp --dport $ShadowSocksServerPort -j ACCEPT
# 参照上几条规则,开放自己需要的服务端口,比如HTTP、FTP、VPN等
# 不允许其它机器ping通本机
iptables -A INPUT -p icmp -j REJECT
# 最后两条,禁止所有未允许的访问,禁止所有未允许的转发
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT
查看状态
运行脚本后,防火墙规则就建立好了。执行代码iptables -L -n
可以查看当前规则。
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:SSH_PORT
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:SS_PORT
REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
自动保存
在Ubuntu环境下,iptables代理规则是没法自动保存。网上资料推荐的方法是:修改脚本执行权限让网卡关闭是保存iptables规则,启动时加载iptables规则。DigitalOcean则很用心的写了一篇iptables设置教程推荐了iptables-persistent
deb包。在安装deb包时会自动检测当前的iptables规则,并生成文件在下次重启时自动加载。
sudo apt-get install iptables-persistent