众所周知,Iptables 是一个很NB的很强大的工具,它能做到的很多东西。
今天就来介绍一下其中一个功能——使用Iptables来限制访问特定网站或IP。
一、iptables 禁止访问指定 IP。
如果想要禁止访问某个IP,例如:1.1.1.1这个IP,使用以下命令:
iptables -I INPUT -s 1.1.1.1 -j DROP

二、iptables 禁止访问指定域名。
如果想要禁止访问某个域名,例如:www.baidu.com这个域名,使用以下命令:
iptables -A OUTPUT -p tcp -d www.baidu.com --dport 443 -j DROP

以下规则是屏蔽以 youtube.com 为主的所有一级 二级 三级等域名。

iptables -A OUTPUT -m string --string "youtube.com" --algo bm --to 65535 -j DROP

添加屏蔽规则

iptables -D OUTPUT -m string --string "youtube.com" --algo bm --to 65535 -j DROP

删除屏蔽规则,上面添加的代码是什么样,那么删除的代码就是把 -A 改成 -D

-A

添加iptables规则;

-D

删除iptables规则(把添加防火墙规则时代码中的 -A 改成 -D 即可删除添加的规则);

-m string

指定模块;

--string "youtube.com"

指定要匹配的字符串(域名、关键词等);

--algo bm

指定匹配字符串模式/算法(还有一种更复杂的算法:kmp);

--to 65535

指定端口,这里代表所有端口(1-65535);

-j DROP

指匹配到数据包后处理方式,这里是丢弃数据包。

三、iptables 禁止访问指定 IP段。
如果想要禁止访问某个IP,例如:1.1.1.0这个IP段,使用以下命令:
iptables -I INPUT -s 1.1.1.0/24 -j DROP
如果想要禁止访问某个IP,例如:1.1.0.0这个IP段,使用以下命令:
iptables -I INPUT -s 1.1.0.0/16 -j DROP
如果想要禁止访问某个IP,例如:1.0.0.0这个IP段,使用以下命令:
iptables -I INPUT -s 1.0.0.0/8 -j DROP

四、iptables 只能访问指定IP。
1.首先,要添加一个允许访问的IP,如192.168.1.1,使用以下命令:
iptables -I INPUT -s 192.168.1.1 -j ACCEPT
2.然后,设置禁止访问所有IP,使用以下命令:
iptables -I INPUT -s 0.0.0.0/8 -j DROP

五、清除规则
清除所有规则:iptables -F
重启也可以,因为没保存规则重启失效。

Debian系统默认不会保存iptables规则,重启后所有设置过的iptables会失效。解决方法是:设置好iptables规则后,使用iptables-save保存规则到文件;然后设置开机时使用iptables-restore导入这个文件。

具体执行命令:

touch /etc/network/if-pre-up.d/iptables

chmod +x /etc/network/if-pre-up.d/iptables

然后编辑这个文件:vi /etc/network/if-pre-up.d/iptables

输入以下内容:

#!/bin/sh 

/sbin/iptables-restore < /etc/iptables

然后,配置iptables规则。我自己设置的规则是一个端口转发(在单IP独服上开小鸡用):

iptables -t nat -A POSTROUTING -s '10.20.20.20/24' -o vmbr0 -j MASQUERADE

iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 7894 -j DNAT --to 10.20.20.100:3389

配置完毕后,把规则保存到文件:iptables-save > /etc/iptables

这样设置,重启系统iptables规则就不会再失效了。

最后修改:2021 年 11 月 10 日 10 : 29 AM