如何在Linux上的iptables源或目标中使用或指定多个IP地址

时间:2020-01-09 10:39:51  来源:igfitidea点击:

如何使用Linux脚本在iptables中指定多个IP地址。
如何创建使用多个源或目标IP地址的规则?
您可以使用以下易于使用的语法设置多个源(" -s"或" --source"或目标(" -d"或" --destination")IP范围。

本教程向您展示如何在Linux上的IPtables中使用源或目标中的多个IP地址。

如何在单个iptables命令中添加多个源

语法为:

iptables -A INPUT -s ip1,ip2,ip3 -j ACCEPT
iptables -A INPUT -s ip1,ip2,ip3 -j DROP
iptables -I INPUT -s ip1,ip2,ip3 -d ip2 -j DROP

要接受92.168.1.5和192.168.1.6,请运行:

iptables -A INPUT -s 192.168.1.5,192.168.1.6 -d 192.168.1.254 -j ACCEPT

另一个例子:

iptables -A INPUT -s 192.168.1.5,192.168.1.6 -d 192.168.1.254 -p tcp --dport 443 -j ACCEPT

在此示例中,两个IP地址的端口80的DROP数据包:

iptables -A INPUT -s 192.168.1.5,192.168.1.6 -d 192.168.1.254 -p tcp --dport 80 -j DROP

在此示例中,将流量转发到内部主机以获取两个源IP地址:

source="139.59.1.155,23.239.7.187"
dest="104.20.187.5"
port=443
redirect="10.105.28.43:443"
iptables -A PREROUTING -s ${source} -d ${dest} -p tcp --dport ${port} -j DNAT --to-destination ${redirect}

可以使用新链来删除给定的IP地址,如下所示:

#!/bin/bash
_input="/root/block.ip.address.list.txt"
IPT=/sbin/iptables
$IPT -N droplist
egrep -v "^#|^$" x | while IFS= read -r ip
do
	$IPT -A droplist -i eth1 -s $ip -j LOG --log-prefix " myBad IP BlockList  "
	$IPT -A droplist -i eth1 -s $ip -j DROP
done < "$_input"
# Drop it 
$IPT -I INPUT -j droplist
$IPT -I OUTPUT -j droplist
$IPT -I FORWARD -j droplist

如何在单个iptables命令中添加多个目标

语法为:

iptables -A INPUT -d ip1,ip2,ip3 -j ACCEPT
iptables -A INPUT -d ip1,ip2,ip3 -j DROP
iptables -I INPUT -d ip1,ip2,ip3 -s ip2 -j DROP

一些例子:

iptables -A INPUT -d 192.168.1.5,192.168.1.6 -j ACCEPT
iptables -A INPUT -d 192.168.1.5,192.168.1.6 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -d 192.168.1.5,192.168.1.6 -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

要查看添加的规则运行:

iptables -t filter -L INPUT -n -v

输出示例:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         
5632 6156K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
    1    80 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
  553  128K INPUT_direct  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  553  128K INPUT_ZONES_SOURCE  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
  553  128K INPUT_ZONES  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID
  551  128K REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
    0     0 ACCEPT     tcp  --  *      *       192.168.1.0/24       192.168.1.5          tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       192.168.1.0/24       192.168.1.6          tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.5          tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.1.6          tcp dpt:22
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            192.168.1.5         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            192.168.1.6         
    0     0 ACCEPT     tcp  --  *      *       192.168.1.5          192.168.1.254        tcp dpt:443
    0     0 ACCEPT     tcp  --  *      *       192.168.1.6          192.168.1.254        tcp dpt:443

关于用户定义链的注释

可以如下创建新的用户定义链:

iptables -N ALLOWED
iptables -A ALLOWED -d 127.0.0.0/8 -j RETURN
iptables -A ALLOWED -d 192.168.1.0/24 -j RETURN
iptables -A ALLOWED -d 205.54.1.5 -j RETURN
iptables -A INPUT -j ALLOWED