centos系统下使用iptables配置只允许中国或指定IP访问服务器

管理员
2023-05-22 / 1 评论 / 16 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年05月23日,已超过278天没有更新,若内容或图片失效,请留言反馈。

很多时候我们的服务器被DDOS攻击,我们通过查看大部分攻击的IP都是国外的,如果我们的站点只想在国内使用可以通过下面这个方法来实现,首先,想屏蔽某个国家的IP,首先需要得到国家IP段,下载地址:http://www.ipdeny.com/ipblocks/

下面案例配置只允许中国的IP访问网站

iptables屏蔽来自某个国家的 IP
安装ipset、iptables服务

CentOS系统

yum -y install ipset 

安装或更新服务

yum install iptables-services 

启用iptables

systemctl enable iptables 

启动iptables

systemctl start iptables

CentOS 7还需要关闭firewall防火墙:

停止firewall

systemctl stop firewalld.service

禁止firewall开机启动

systemctl disable firewalld.service

查看默认防火墙状态(关闭后显示not running,开启后显示running)

firewall-cmd --state 

如发现service iptables save 无效,而且报错
原因是iptables的服务没有安装,按上步安装。
清空之前的规则

防止设置不生效,建议清空下之前的防火墙规则

iptables -P INPUT ACCEPT
iptables -F

创建新规则

创建一个名为cnip的规则

ipset -N cnip hash:net

下载国家IP段,这里以中国为例

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

将IP段添加到cnip规则中(过程可能会较慢)

for i in $(cat /root/cn.zone ); do ipset -A cnip $i; done

如果要添加其他国家的IP段只需要下载后再添加到cnip即可
设置IP段白名单

放行IP段

iptables -A INPUT -p tcp -m set --match-set cnip src -j ACCEPT

关掉所有端口

iptables -P INPUT DROP

这时候就只有中国的IP能访问服务器了。
如果你在国内,网站不允许被国内人访问,建议别关所有端口,这样你的SSH会上不去,我们可以只关闭80/443端口,上面关掉所有端口的命令就不用执行了。

关闭指定端口,比如80/443

iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -A INPUT -p tcp --dport 443 -j DROP

这时候其他国家的IP是无法访问你服务器的80/443端口,等于无法访问你的网站,其它端口还是可以访问的。

如果要删除规则,删除后恢复所有地区可访问

将参数里的-A改成-D就是删除规则了,如

iptables -D INPUT -p tcp -m set --match-set cnip src -j ACCEPT
iptables -D INPUT -p tcp --dport 443 -j DROP

保存规则
使用命令iptables-save来保存规则。一般用

iptables-save > /etc/sysconfig/iptables

生成保存规则的文件 /etc/sysconfig/iptables,
也可以用

service iptables save

它能把规则自动保存在/etc/sysconfig/iptables中。

当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。

0

打赏

评论 (1)

取消
  1. 头像
    无名
    Windows 10 · Google Chrome

    貌似不错哦

    回复