iptables删除IP地址

时间:2020-01-09 10:41:40  来源:igfitidea点击:

在Linux下,如何使用iptables命令阻止特定的IP地址或主机?
您需要使用以下语法通过iptables命令删除IP地址或主机。

阻止来自IP 1.2.3.4的传入请求

以下命令将丢弃来自IP地址1.2.3.4的所有数据包:

/sbin/iptables -I INPUT -s {IP-HERE} -j DROP
/sbin/iptables -I INPUT -s 1.2.3.4 -j DROP

您还可以指定一个接口,例如eth1,通过该接口接收数据包:

/sbin/iptables -I INPUT -i {INTERFACE-NAME-HERE} -s {IP-HERE} -j DROP
/sbin/iptables -I INPUT -i eth1 -s 1.2.3.4 -j DROP

请注意,当!参数在接口名称之前使用,含义相反:

/sbin/iptables -I INPUT ! -i {INTERFACE-NAME-HERE} -s {IP-HERE} -j DROP
/sbin/iptables -I INPUT ! -i eth1 -s 1.2.3.4 -j DROP

如果接口名称以+结尾,则任何以该名称开头的接口都将匹配。
如果省略此选项,则任何接口名称都将匹配:

/sbin/iptables -I INPUT  -i {INTERFACE-NAME-HERE}+ -s {IP-HERE} -j DROP
/sbin/iptables -I INPUT  -i br+ -s 1.2.3.4 -j DROP

您可以将-I INPUT(插入)替换为-A INPUT(追加)规则,如下所示:

/sbin/iptables -A INPUT  -s 1.2.3.4 -j DROP
/sbin/iptables -i eth1 -A INPUT  -s 1.2.3.4 -j DROP

如何阻止子网(xx.yy.zz.ww/ss)?

使用以下语法在eth1公共接口上阻止10.0.0.0/8:

# /sbin/iptables -i eth1 -A INPUT -s 10.0.0.0/8 -j DROP

如何阻止和记录丢弃的IP地址信息?

您可以使用LOG目标打开匹配数据包的内核日志记录,如下所示:

# /sbin/iptables -i eth1 -A INPUT -s 10.0.0.0/8 -j LOG --log-prefix "IP DROP SPOOF A:"

下一条规则实际上将删除ip /子网:

# /sbin/iptables -i eth1 -A INPUT -s 10.0.0.0/8 -j DROP

如何查看被阻止的IP地址?

只需使用以下命令:

# /sbin/iptables -L -v

或者

# /sbin/iptables -L INPUT -v

或者

# /sbin/iptables -L INPUT -v -n

输出示例:

Chain INPUT (policy ACCEPT 3107K packets, 1847M bytes)
pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  br+    any     1.2.3.4              anywhere            
    0     0 DROP       all  --  !eth1  any     1.2.3.4              anywhere            
    0     0 DROP       all  --  !eth1  any     1.2.3.4              anywhere

如何搜索被阻止的IP地址?

使用grep命令,如下所示:

# /sbin/iptables -L INPUT -v -n | grep 1.2.3.4

如何删除被阻止的IP地址?

首先,您需要显示被阻止的IP地址以及行号和其他信息,执行:

# iptables -L INPUT -n --line-numbers
# iptables -L INPUT -n --line-numbers | grep 1.2.3.4

输出示例:

num   pkts bytes target     prot opt in     out     source               destination
1        0     0 DROP       0    --  *      *       116.199.128.1        0.0.0.0/0
2        0     0 DROP       0    --  *      *       116.199.128.10       0.0.0.0/0
3        0     0 DROP       0    --  *      *       123.199.2.255        0.0.0.0/0

要删除行号3(123.199.2.255),请执行:

# iptables -D INPUT 3

验证相同,执行:

# iptables -L INPUT -v -n

您还可以使用以下语法:

# iptables -D INPUT -s 1.2.3.4 -j DROP

如何保存被阻止的IP地址?

如果您使用的是Redhat/RHEL/CentOS/Fedora Linux,请输入以下命令:

# iptables -D INPUT -s 1.2.3.4 -j DROP
##########################
#////// command to save iptables ///////#
##########################
# /sbin/service iptables save
# less /etc/sysconfig/iptables
# grep '1.2.3.4' /etc/sysconfig/iptables

对于所有"其他Linux发行版",请使用iptables-save命令将IP表的内容转储到文件中:

# iptables-save > /root/myfirewall.conf

请不要在添加或删除IP地址后立即运行iptables-save或service iptables保存。

有关还原防火墙的注意事项

要恢复防火墙,请使用iptables-restore命令从名为/root/myfirewall.conf的文件恢复IP表,执行:

# iptables-restore < /root/myfirewall.conf

如何阻止大量IP地址或子网?

您需要编写如下的shell脚本:

#!/bin/bash
_input="/root/blocked.ip.db"
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 "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

阻止来自局域网IP 192.168.1.200的发送请求?

使用以下语法:

# /sbin/iptables -A OUTPUT -s 192.168.1.200 -j DROP
# /sbin/service iptables save

当数据包通过另一个接口发送时,您也可以使用FORWARD默认链。
将Linux设置为路由器时通常使用FORWARD:

# /sbin/iptables -A FORWARD -s 192.168.1.200 -j DROP
# /sbin/service iptables save