初始化:
首先进行一些初始化,清空所有现有的规则:
iptables -F
#清空所有链
iptables -X
#清空所有自定义链
定义规则:
由于我们的目的是放弃所有无关于shadowsocks的数据,也就是说默认丢弃所有数据,只接受满足条件的数据,无疑是一种很安全的做法。
首先添加ssh端口:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#22自行修改
添加以下六条规则:
iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
#允许icmp包进入
iptables -A INPUT -s localhost -d localhost -j ACCEPT
#允许本地的数据包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许已经建立和相关的数据包进入
iptables -A OUTPUT -p icmp --icmp any -j ACCEPT
#允许icmp包出去
iptables -A OUTPUT -s localhost -d localhost -j ACCEPT
#允许本地数据包
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许已经建立和相关的数据包出去
需要注意的是,以上的七条基本上是必须添加的;下面开始添加其他必要端口:
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
#打开DNS需要用到的53端口
iptables -A OUTPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
#允许80端口tcp协议的第一个数据包
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#允许ESTABLISHED
和RELATED
状态的包
iptables -A INPUT -P tcp --dport 443 -j ACCEPT
#打开https需要用到的443端口
前面说到ss-bash自动添加ssserver端口到iptables中,我们便不再考虑ssserver的端口问题;此时还需要丢弃其他不在规则中的所有包:
iptables -P INPUT DROP
#默认丢弃input包
iptables -P OUTPUT DROP
#默认丢弃output包