IPTables 规则举例

删除现有的规则

用下面的命令来清空当前所设置的所有规则.

  1. iptables -F
  2. (or)
  3. iptables --flush

设置默认的链规则

默认的规则是允许通过, 如果你有特殊需求, 可以设置成拒绝:

  1. iptables -P INPUT DROP
  2. iptables -P FORWARD DROP
  3. iptables -P OUTPUT DROP

当你设置了默认的INPUT 和 OUTPUT 链为DROP时, 在你的所有防火墙上必须要再定义两条规则, 一个是入, 另一个是出.

下面的所有例子中, 每一个方案都定义了两条规则, 一条是入规则, 另一条则是出规则.(因为默认是拒绝通过出入包的.)

当然, 如果你足够相信你的用户, 也可以将默认的出站规则设置为接受, 允许所有的出站请求.这样的话, 防火墙就只需要一条入站规则了.

拒绝某个特定的ip地址

在列举更多的例子之前, 先来看一下怎样拒绝来自某个ip的全部请求:

  1. iptables -A INPUT -s "ip_address_to_block" -j DROP

当你在日志中发现某个ip异常时, 你就可以用这条规则来限制这个ip地址.

你也可以用下面的方式来拒绝eth0网卡上来自这个ip地址的tcp请求:

  1. iptables -A INPUT -i eth0 -s "ip_address_to_block" -j DROP
  2. iptables -A INPUT -i eth0 -p tcp -s "ip_address_to_block" -j DROP

允许所有的SSH入站请求

  1. iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  2. iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

上面的规则允许了所有eth0网卡上的SSH入站请求.

限制特定的ip建立SSH连接

  1. iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  2. iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

上面的例子仅允许来自192.168.100.*的连接.

当然也可以把192.168.100.0/24换成192.168.100.0/255.255.255.0, 如果你不嫌麻烦的话…

扩展阅读

都是英文的, 一点一点啃吧 :)