iptables如何指定一个范围内的IP地址或端口

NIX CRAFT

最近有人问我一个问题:
我使用iptables怎样才能节省时间和脚本大小通过指定范围的IP地址或端口?

在旧版本的iptables的IP地址范围唯一有效是nat表(见下面的例子)。但是较新的版本不支持选项,使您可以指定一个范围内的IP地址或端口的常规表输入。

iptables设置IP地址范围

您需要使用下列选项与匹配扩展(-m Ex)。

iprange :这符匹配一个给定的任意范围的IPv4地址。

  [!]--src-range ip-ip: 匹配指定范围内的源IP。
  [!]--dst-range ip-ip: 匹配指定范围内目标IP。

语法:
  -m iprange --src-range IP-IP -j ACTION
  -m iprange --dst-range IP-IP -j ACTION

例如,
允许端口22上的传入请求中只有192.168.1.100-192.168.1.200范围内的源IP。您需要添加如下的东西给你的iptables的脚本:

  iptables -A INPUT -p tcp --destination-port 22 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT

端口范围

如果支持--protocol tcp (-p tcp),您可以使用下面的语法指定源端口范围:
  
  --source-port port:port
  --sport port:port

目标端口范围规范使用以下选项:

  --destination-port port:port
  --dport port:port

例如块锁定所有传入的SSH访问的端口22,源端口范围513:65535:

  iptables -A INPUT -p tcp -s 0/0 --sport 513:65535 -d 195.55.55.78 --dport 22 -m state --state NEW,ESTABLISHED -j DROP

在另一方面,只允许传入以下端口范围的SSH请求:

  iptables -A INPUT -p tcp -s 0/0 -d 195.55.55.78 --sport 513:65535 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  iptables -A OUTPUT -p tcp -s 195.55.55.78 -d 0/0 --sport 22 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT

NAT表 - 范围选项

如果您使用的是NAT表的选项 --to-source 和 --to-destination。IP地址范围的实例:

iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.100-192.168.1.200

或者,尝试端口范围:

iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.100:2000-3000

京ICP备14008139号-1