iptables-ipset仅允许国内访问

news/2024/7/7 22:01:51

前言:

    境外肉鸡攻击有点多,并业务无境外访问需求,IDC机房网络防火墙无法实现8K多条的china大陆地址导入;为实现仅china大陆地址访问,在业务入口主机(DNAT端口映射或DNAT端口转发),使用iptables防火墙+ipset过滤实现访问控制,对于访问量不大的业务可考虑使用。

创建ipset得到的备份文件,便于批量添加8k条地址

创建一个ipset

 ipset create whitelist hash:net maxelem 1000000

加入一个名单ip

ipset add whitelist 9.9.9.9

查看已经ipset配置内容

ipset list

Name: whitelist
Type: hash:net
Revision: 3
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 16816
References: 0
Members:
9.9.9.9

将ipset规则保存到文件

ipset save whitelist -f whitelist.txt

查看备份内容

more  whitelist.txt

create whitelist hash:net family inet hashsize 1024 maxelem 1000000
add whitelist 9.9.9.9

下载china大陆地址集合并处理格式

curl -# -O http://ftp.apnic.net/stats/apnic/delegated-apnic-latest

cat delegated-apnic-latest | awk -F '|' '/CN/&&/ipv4/ {print $4 "/" 32-log($5)/log(2)}'|cat >ip.txt

head -n 2 ip.txt   

1.0.1.0/24
1.0.2.0/23

设置符合ipset备份文件格式

sed 's/^/&add whitelist /g'  ip.txt  >  add-ip.txt

cat  add-ip.txt   >> whitelist.txt;  cp whitelist.txt  china_whitelist.txt

head -n 4   china_whitelist.txt         

create whitelist hash:net family inet hashsize 1024 maxelem 65536
add whitelist 9.9.9.9
add whitelist 1.0.1.0/24
add whitelist 1.0.2.0/23

先删除前面创建的ipset

ipset destroy whitelist

导入ipset规则

ipset restore -f china_whitelist.txt

查看目前应用的ipset内容

ipset list | head -n 12

Name: whitelist
Type: hash:net
Revision: 3
Header: family inet hashsize 2048 maxelem 1000000
Size in memory: 126736
References: 0
Members:
202.118.64.0/18
223.212.0.0/15
103.217.56.0/22
150.242.184.0/22
43.246.76.0/22

去除名单ip

ipset del whitelist 9.9.9.9

导入完毕

禁用centos7firewalld,安装iptables

systemctl stop firewalld

systemctl disable firewalld

yum -y  install iptables-services

systemctl start iptables

systemctl enable iptables

操作

service  iptables status

service  iptables stop

service  iptables restart

iptables -F

先放行SSH,以免无法远程

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

service iptables save

修改内核参数,开启转发功能

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p

开启DNAT

 iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.53.22:80

 iptables -t nat -L -n

(后端主机看实际情况做返程路由,这里不做赘述,当然阿里云等不适用自建DNAT端口映射,可改用DNAT的端口转发,主要看后端有没获取客户端源IP需求)

应用ipset规则实现白名单,禁止境外ip

在dnat的端口用FORWARD

iptables -t filter -I  FORWARD  -m set --match-set  whitelist  src -p tcp --dport 80  -j  ACCEPT

iptables -t filter -A  FORWARD -p tcp --dport  80 -j DROP

iptables  -L -n

使用国内与境外地址分别测试通达性

curl -I  http://ip+端口

如实现预期,保存规则永久生效

service iptables save

关于删除ipset和DNAT

因地址条目过多引发的索引过大,带来的删除ipset和DNAT失败

删除DNAT异常

iptables -t nat -L -n --line-numbers

iptables -t nat  -D POSTROUTING 

iptables: Index of deletion too big.

删除ipset异常

ipset destroy whitelist

ipset v7.1: Set cannot be destroyed: it is in use by a kernel component

尝试关闭iptables再删除ipset

service iptables stop

ipset destroy whitelist

随后发现service iptables restart失败 ,提示找不到whitelist,需要导入回去再重启恢复。

ipset restore -f china_whitelist.txt

service iptables restart

最终的清理方式

iptables  -F

ipset destroy whitelist

service iptables save

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

service iptables save

详细应用移步

参考文献

ipset详解 使用ipset提高iptables的控制效率 - 快乐嘉年华 - 博客园


http://lihuaxi.xjx100.cn/news/133248.html

相关文章

快速傅里叶变换(FFT),离散傅里叶变换(DFT)

快速傅里叶变换(FFT),离散傅里叶变换(DFT) 傅里叶变换 离散傅里叶变换(DFT)用于将一般时间序列变换到频域(即使它们是非周期的),即计算频谱。 计算DFT所需的DFT长度LDFT…

Linux(12)进程间通信之管道

文章目录匿名管道pipe通信基本过程父进程控制子进程父进程控制多个子进程管道特点总结命名管道进程是具有独立性的,进程间想要交互数据,成本会非常高进程间通信的目的: 数据传输:一个进程需要将它的数据发送给另一个进程资源共享…

快速记忆杂乱无章

章节章节01 - 计算机组成原理与体系结构07 - 法律法规与标准化与多媒体基础02 - 操作系统基本原理08 - 设计模式03 - 数据库系统09 - 软件工程04 - 计算机网络10 - 面向对象05 - 数据结构与算法11 - 结构化开发与UML06 - 程序设计语言与语言处理程序基础12 - 下午题历年真题End…

【一文讲明白什么是云原生,有什么优势】

目录 什么是云原生? 云原生有什么优势? 云原生时代开发者必须掌握哪些能力? 微服务 网关 Kubernetes DevOps ServiceMesh 十二要素应用程序 总结 什么是云原生? 最近看见云原生比较火,越来越多的编程语言、框架开…

中英文说明书丨艾美捷MAPT单克隆抗体

艾美捷MAPT单克隆抗体英文说明书: Specification: Product Description:Mouse monoclonal antibody raised against a partial recombinant MAPT. Immunogen:MAPT (NP_058519.2, 167 a.a. ~ 266 a.a) partial recombinant protein with GST tag. MW o…

Spring 事务编程实践

Spring 事务实战 文章目录Spring 事务实战什么是 Spring 事务?声明式事务使用举例编程式事务使用举例声明式事务常见问题事务不生效Case1:类内部访问Case2:非 public 可重载方法Case3:异常不匹配(重点)Case4:多线程Cas…

LeetCode-754. 到达终点数字【数学】

LeetCode-754. 到达终点数字【数学】题目描述:解题思路一:三行代码。发现规律,将target取绝对值不影响结果。若未到达终点继续走即可。情况一:若最后s-target为偶数或0,我们发现可以在之前里面反走一步即可&#xff08…

MySQL系列-高级-深入理解Mysql事务隔离级别与锁机制01

MySQL系列-高级-深入理解Mysql事务隔离级别与锁机制1. 概述2.事务及其ACID属性1. ACID2. 并发事务处理带来的问题3. 事务隔离级别3. 锁1. 锁分类2. MylSAM表读/写锁案例分析1. 读锁操作2. 写锁操作3. InnoDB行锁案例分析行锁介绍行锁演示演示一演示二演示三演示2和演示3的问题本…