使用VPS的时候肯定也会考虑到安全上的问题,简单配置一下iptables。直接贴一下我自己写的2个设置脚本。首先得写一个清理规则、重置默认策略的脚本放crontab里面,以免自己设置错了策略造成自己不能登录。

清理规则脚本:

#!/bin/bash
source /etc/profile
DIR=$(dirname $0)
LOG=$DIR/clean.log
iptables -F
iptables -X
iptables -Z # reset counter
iptables -P INPUT ACCEPT # set default action for INPUT packages
date > $LOG
echo "clean the iptables rule" >> $LOG

iptables 规则设置脚本:

#!/bin/bash
# for my vps
iptables -F # remove all rules
iptables -X # remove all chains defined by myself
iptables -Z # reset counter
iptables -P INPUT DROP # set default action for INPUT packages
iptables -P OUTPUT ACCEPT # set default action for OUTPUT packages
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT # allow all traffic through lo
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # allow all established and related INPUT

for port in 22 80 443
do
    iptables -A INPUT -p tcp --dport $port -m state --state NEW -j ACCEPT
done

iptables -A INPUT -p icmp -m limit --limit 20/m -j ACCEPT

查看规则:

# iptables -L -n -v

输出示例:

Chain INPUT (policy DROP 551 packets, 28376 bytes)
pkts bytes target     prot opt in     out     source               destination
6   300 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
64949 8740K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
34  1884 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22 state NEW
6564  367K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:80 state NEW
72  3952 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:443 state NEW

默认策略就是所有主动入站的DROP掉,然后出去的都允许,使用 -m state --state ESTABLISHED,RELATED -j ACCEPT 可以把自己的配置规则处理的非常简洁。如果不使用state模块的话,为了VPS自己能打开80,443端口还得单独写规则,允许sport是80、443的进入,但是这样实际就是有安全上的漏洞了。另外就是需要注意每个端口的顺序,自己可以先跑一段时间后运行一下 iptables -L -n -v 看看,尽量让匹配得多的规则排在前面,这样可以提高效率。