Linux 防火墙iptables 禁止某些 IP访问

作者:袖梨 2022-11-14

方法一,过滤一些IP访问本服务器

要封停一个IP,使用下面这条命令:

代码如下 复制代码

iptables -I INPUT -s ***.***.***.*** -j DROP

要解封一个IP,使用下面这条命令:

代码如下 复制代码
iptables -D INPUT -s ***.***.***.*** -j DROP

参数-I是表示Insert(添加),-D表示Delete(删除)。后面跟的是规则,INPUT表示入站,***.***.***.***表示要封停的IP,DROP表示放弃连接。

此外,还可以使用下面的命令来查看当前的IP规则表:

代码如下 复制代码

iptables -list

比如现在要将123.44.55.66这个IP封杀,就输入:

代码如下 复制代码

iptables -I INPUT -s 123.44.55.66 -j DROP

要解封则将-I换成-D即可,前提是iptables已经有这条记录。如果要想清空封掉的IP地址,可以输入:

代码如下 复制代码

iptables -flush

要添加IP段到封停列表中使用下面的命令:

代码如下 复制代码

iptables -I INPUT -s 121.0.0.0/8 -j DROP

其实也就是将单个IP封停的IP部分换成了Linux的IP段表达式。关于IP段表达式网上有很多详细解说的,这里就不提了。

方法二,使用脚本来进行屏蔽


1.先下载ip地址文件

我们先到IPdeny下载以国家代码编制好的ip地址列表,比如下载cn.zone:

wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone


现在有了国家的所有IP地址,要想屏蔽这些 IP 就很容易了,直接写个脚本逐行读取cn.zone文件并加入到iptables中:

iptables屏蔽某个国家ip段

代码如下 复制代码

#!/bin/bash
# Block traffic from a specific country
# written by blog.slogra.com

COUNTRY = "cn"
IPTABLES = /sbin/iptables
EGREP = /bin/egrep

if [ "$(id -u)" != "0" ]; then
echo "you must be root" 1>&2
exit 1
fi

resetrules() {
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
}

resetrules

for c in $COUNTRY
do
country_file = $c.zone

IPS = $($EGREP -v "^#|^$" $country_file)
for ip in $IPS
do
echo "blocking $ip"
$IPTABLES -A INPUT -s $ip -j DROP
done
done

exit 0

方法三,上面两个实例都可以但都不简明,下面我来介绍一下


在iptables中,添加两个常用的IP段,其他网段的数据包都DROP了,而不是REJECT(REJECT还要发送ICMP回应包给连接方)。

代码如下 复制代码

# iptables -A INPUT -p tcp --dport 22 -s 120.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 183.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP


测试:

在另外一个机子连接这个VPS,数据包被成功DROP了。

代码如下 复制代码

root@293621:~# iptables -vL
Chain INPUT (policy ACCEPT 36 packets, 6257 bytes)
pkts bytes target prot opt in out source destination
222 16280 ACCEPT tcp -- any any 120.0.0.0/8 anywhere tcp dpt:ssh
0 0 ACCEPT tcp -- any any 183.0.0.0/8 anywhere tcp dpt:ssh
4 240 DROP tcp -- any any anywhere anywhere tcp dpt:ssh

又一次体会到iptables的威力,看来这块的内容,得找个时间好好加强下,好用啊

相关文章

精彩推荐