前言:

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

如仅仅对某端口做过滤,搜本博"iptables-ipset仅允许国内访问---端口白名单"篇

如需简单快捷的方式,搜本博“以错误路由方式禁止境外IP来访”篇 (缺点:主机也无法主动请求境外目标了)

创建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

reboot重启ipset集合消失,并且导致iptables启动失败

       因创建的 ipset 存于内存中

解决:

       yum  -y install ipset-service

       systemctl enable ipset

       ipset restore -f china_whitelist.txt

       service ipset save

sed -i 's/IPSET_SAVE_ON_STOP="no"/IPSET_SAVE_ON_STOP="yes"/' /etc/sysconfig/ipset-config

带时间的玩法

创建默认ip生效时间为1天的ipset集合

ipset create timeout_list hash:net timeout 86400

ipset add timeout_list  1.9.9.9  #继承集合默认生存时间

ipset add timeout_list  2.9.9.9  timeout 3600  #生存时间为1小时

ipset add timeout_list  3.9.9.9  timeout  0    #生效时间无限

查看

ipset  list  timeout_list

Name: timeout_list
----
Header: family inet hashsize 1024 maxelem 65536 timeout 86400
----(像redis一样显示时间倒计时)
1.9.9.9 timeout 86372
3.9.9.9 timeout 0
2.9.9.9 timeout 3572

关于删除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

尝试清空ipset的ip条目再删除

ipset flush

结果也是一样

尝试关闭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

添加连续ip范围到集合

ipset add a_list  1.1.2.1-1.1.2.64        

ipset list a_list

Name: a_list
Members:
1.1.2.2/31
1.1.2.1
1.1.2.16/28
1.1.2.32/27
1.1.2.64
1.1.2.8/29
1.1.2.4/30

详细应用移步

参考文献

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

iptables-ipset仅允许国内访问---DNAT入口相关推荐

  1. IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口)

    ########################## ## IP白名单(iptables + ipset :允许国内ip + 自定义ip 访问系统udp端口) #################### ...

  2. linux设置端口80禁止访问,linux iptables 设置仅22、80端口可访问

    linux iptables 设置仅22.80端口可访问 博客分类:linux 防火墙sshiptables [设置仅22.80端口可访问] 通过命令 netstat -tnl 可以查看当前服务器打开 ...

  3. 提升你的外国服务器网站国内访问速度~

    前言 由于众所周知的原因,国内访问国外的服务器速度较慢.在没有特殊线路(直连.CN2GIA等)的加持下,路由线路左绕右绕,严重影响国内访问速度. 能使用国内服务器当然是最好的,但是高昂的流量& ...

  4. 电脑软件:微软Windows官方电脑管家,仅针对国内用户?看看怎么说

    最近,有开发者发布了"微软电脑管家Windows Master"安装包,自称是微软官方开发的Windows桌面安全辅助产品,集成了Windows Defender杀毒引擎. 而有趣 ...

  5. 国内访问 Atom 源很慢 解决方案

    国内访问 Atom 源很慢 & 解决方案 参考文章: (1)国内访问 Atom 源很慢 & 解决方案 (2)https://www.cnblogs.com/bukekangli/p/5 ...

  6. iptables配置docker服务端口访问限制

    服务器系统为 CentOS 7 PS:CentOS 7自带iptables,但不自带iptables-services,你有需要可以装,也可以不装,不影响本文的操作和阅读 遇到了一个需求,需要用ipt ...

  7. linux关闭8080端口,Linux修改iptables,取消8080的访问限制

    安装JBoss后,在客户端输入地址http://xx.190.xx.25:8080/iNMS31Web,发现默认端口8080不能访问. 由于Linux防火墙默认是关闭8080端口.因此,若要能够访问8 ...

  8. 服务器在新加坡延迟,从国内访问新加坡服务器延迟多大?

    新加坡作为东南亚的核心发达地区,很多国内企业在选择出海发展业务时,都会将这里作为首选地.在互联网行业也一样,我们在租用东南亚服务器时,也会以这一核心来选择,以此为核心辐射至周边地区.电商.海外代购是东 ...

  9. nginx配置-根据UA进行域名跳转且仅限域名访问

    随着移动用户的增长,web应用中,根据用户UA进行PC端.移动端的跳转是必要的,常见的方式有三种:前端js根据UA做重定向,后端根据UA返回不同的路径,在nginx中处理,这里用的是第三种.还配置了 ...

最新文章

  1. CVPR2021 | 实现图像的“无限放大”,超详细局部隐式图像函数(LIIF)解读
  2. python闭包锁住女神的心
  3. SESSION存储于redis(CI3)
  4. Android测试中被测应用挂了怎么办?
  5. Orchard CMS前台页面为什么没有Edit链接?
  6. vue项目编写html,从头搭建、编写一个VUE项目
  7. js优化工具:ECMAScript Cruncher
  8. 别人运行的好好的R代码,到我这怎么就冲突了?
  9. JDK 15 正式发布,划时代的 ZGC 同时宣布转正!
  10. mysql的远程服务开启_mysql开启远程服务
  11. mysql redis binlog_基于binlog的canal到redis的同步
  12. 分赛区决赛见!2021eBay全国跨境电商创新创业大赛分赛区决赛晋级名单
  13. 打不开计算机或文件夹,求助:我的电脑文件夹打不开了
  14. java中的元音 辅音_元音辅音分类表
  15. word里输入向上或向下取整符号
  16. 试题 基础练习 字母图形
  17. 京淘商城后台管理系统
  18. 广告中的DSP、SSP和ADX
  19. 群晖 NAS DS218j的优秀与缺憾
  20. python自学网站免费-推荐几个适合小白学习Python的免费网站

热门文章

  1. ECS_FML——线性回归w矩阵
  2. MyEclipse CI 2018.12.0安装与激活(附安装包和激活工具)
  3. Flutter 3 相关介绍,包括Flutter桌面端、Flutter firebase 、Flutter游戏- 谷歌2022 I/O 大会,
  4. excel减法函数_关于excel求和, 你不知道的那些便捷技巧
  5. Java List Stream 去重
  6. dw网页设计期末设计一个网页_Dreamweaver 网页制作期末试题
  7. My SQL数据库基础知识点全面总结笔记(上)
  8. 公众号怎么引流推广?一文讲透个人公众号运营玩法
  9. Memory System
  10. 编程语言简史(转自码农)