众所周知,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
添加iptables规则;
删除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规则就不会再失效了。