[toc]
前言
无论是出于什么原因,屏蔽和阻止特定地区和国家的 IP 访问都是我们日常建站中经常要用到的。
如果网站是 Nginx,则可以直接使用 Nginx-ngx_http_geoip_module 模块,该模块可以精确到国家、省、市等一级的 IP,并且全部由 Nginx 执行识别和阻止访问,所以相对于 PHP 来说比较省资源,但是 Nginx 编译起来比较费事。
如果网站是搭建在 VPS 或者独立服务器上,那么可以直接使用 Linux 防火墙,利用 iptables 规则来阻止特定国家和省份的 IP 访问。
iptables 规则来阻止特定 IP 访问
- 安装 iptables 防火墙
1 2
| # CentOS yum install iptables
|
- 清除已有 iptables 规则
1 2 3
| iptables -F iptables -X iptables -Z
|
- 屏蔽指定 IP
1 2 3 4
| #屏蔽单个IP的命令是 iptables -I INPUT -s 123.45.6.7 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是 iptables -I INPUT -s 123.45.6.0/24 -j DROP
|
- 查看已添加的 iptables 规则
1 2 3 4
| iptables -L -n v:显示详细信息,包括每条规则的匹配包数量和匹配字节数 x:在 v 的基础上,禁止自动单位换算(K、M) n:只显示IP地址和端口号,不将ip解析为域名
|
- iptables 的开机启动及规则保存
1 2 3 4 5
| chkconfig –level 345 iptables on systemctl enable iptables.service # 如果配置文件里面设置了开机启动,systemctl enable命令相当于激活开机启动。 # CentOS service iptables save <--保存规则
|
- 重启后生效
1 2
| 开启:chkconfig iptables on 关闭:chkconfig iptables off
|
- 即时生效,重启后失效
1 2
| 开启:service iptables start 关闭:service iptables stop
|