保护你的VPS之 iptables

linux平台最常见的网络包管理工具,最常用的场景是NAT和防火墙,对于它的介绍,详情请见维基百科.

我用它来做我的VPS防火墙,我的VPS是debian,已经内置了这个服务,只是默认规则为空白,也就和没有防火墙一样的效果,所以无法感知其存在。 在开始之前,先规划下自己需要的规则:

  • 开放http/https端口
  • 开放ssh端口,没有这个就无法做远程管理了
  • 开放shadowsocks端口,科学上网就靠它了
  • 开放vpn端口,科学上网需要
  • 开放其他一些特殊的自己需要的服务端口
  • 开放ping回显,诊断网络状况时会用到
  • 除以上服务端口外,其余的一律屏蔽
    这里要提一下,将你的服务的端口设置为其他特殊的端口,不能带来任何的安全性,随便找个scan工具,你开放了那些端口就一目了然了。 首先添加规则,使用的命令是iptables -A
  1. 开放本机向外的所有访问
iptables -A OUTPUT -j ACCEPT
2. 开放本机到本机的内部访问
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
3. 开放22端口,否则ssh没法管理了
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
4. 开放80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
5. 参照上几条规则,开放自己需要的服务端口,比如FTP、VPN等 6. 允许其它机器ping通本机
iptables -A INPUT -p icmp -j ACCEPT
7. 最后两条,禁止所有未允许的访问,禁止所有未允许的转发 以上规则添加之后会立即生效,可以使用以下命令查看当前生效的规则
iptables -L -n --line-numbers
如果需要对其中某一条删除,可以使用以下命令
iptables -D INPUT lineNum
这里需要特别注意,这些规则是有顺序的,尤其是最后两条禁止规则,如果将这两条放在最开始,所有访问都将被拒绝。 有关iptable的详细规则定义以及原理,可以参考[鸟哥的文章](http://linux.vbird.org/linux_server/0250simple_firewall.php#netfilter_iptables)。 在Debian或ubuntu系统,这些规则是不会自动保存的,重启系统或者重启网络服务后将全部丢失,所以还需要保存下来并在下次启动时自动载入。 所以需要添加网络服务启动和停止时的执行脚本。 创建
/etc/network/if-post-down.d/iptables
添加如下内容:
#!/bin/bash
iptables-save > /etc/iptables.rules
创建
/etc/network/if-pre-up.d/iptables
添加如下内容:
#!/bin/bash
iptables-restore < /etc/iptables.rules
执行:
chmod +x /etc/network/if-post-down.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables
为这两个脚本添加可执行权限 然后重新启动网络服务,你会发现/etc/iptables.rules 文件被创建,里面就是你的规则。下次需要添加或者删除规则时不要直接修改这个文件,方法依然是上面提到的命令,也无需再做任何保存操作。 如果发现一些IP恶意攻击,可以用以下规则丢弃其发来的数据包
#丢弃202.45.16.7发来的数据包
iptables -I INPUT -s 202.45.16.7 -j DROP
#丢弃202.45.16.0 - 202.45.16.254发来的数据包
iptables -I INPUT -s 202.45.16.0/24 -j DROP

==================2013-10-28更新==================
按照以上方式配置iptables后发现wordpress后台超慢,后来发现是iptables的问题,因为从vps上无法ping、wget(http、https)、域名解析。
添加以下规则后恢复正常

iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --sport 443 -j ACCEPT
iptables -A INPUT -p tcp --sport 80 -j ACCEPT