iptables-ipset仅允许国内访问---DNAT入口

这篇具有很好参考价值的文章主要介绍了iptables-ipset仅允许国内访问---DNAT入口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

    境外肉鸡攻击有点多,并业务无境外访问需求,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的控制效率 - 快乐嘉年华 - 博客园文章来源地址https://www.toymoban.com/news/detail-459061.html

到了这里,关于iptables-ipset仅允许国内访问---DNAT入口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • iptables 防火墙(二)SNAT/DNAT

    目录 一:SNAT原理与应用 1.SNAT介绍 2.SNAT 应用环境 3.SNAT原理 二:SNAT配置 第一步:设置各个端口的网卡   1.先准备客户机、web服务器、网关服务器   2.网关服务器设置 (1)添加网卡 (2)修改ens32 为网关服务器的内网网卡 ​(3)修改新加网卡ens33为外网网卡  3.客户机设置

    2024年02月06日
    浏览(39)
  • 【Windows防火墙配置Windows Server服务器只允许国内IP访问】

    由于是 Windows Server 不像宝塔直接带有防火墙功能,只能自己想办法 明明轻而易举能做到事, 就是不做为! 使用Windows自带防火墙,配置规则达到目标 这个网络上比较多,却存在ip地址量的不同 有6000条+的国内ip, 也有8000条+的, 最终选择了8000+的版本 网站: https://www.ipdeny.com 下载IP地址

    2024年02月04日
    浏览(74)
  • Nodejs和python 设置 openai 的API正向代理和反向代理入口链接连接方式,用于国内访问openAI接口

    由于国内对openai的API接口网址进行了屏蔽,因此需要科学上网或对API进行反向代理才能使用API接口,那么该怎么使用反向代理的API接口呢? 1.1 方法一:使用自己反向代理的API地址 在Configuration列表中添加一项basePath即可,下面是代码: 1.2 方法二:在Nodejs中使用正向代理 在

    2024年02月06日
    浏览(54)
  • 【隧道篇 / SSL】(7.4) ❀ 01. 只允许国内IP通过SSL VPN访问内网 ❀ FortiGate 防火墙

    【简介】SSL VPN可以让公司员工远程访问公司内网的服务器,发现有些国外IP也在尝试登录SSL VPN,领导要求,只允许国内IP可以登录SSL VPN,如何解决这个问题?   SSL VPN配置条件 要想成功的配置SSL VPN,首先需要有一条可以远程访问的宽带,然后是验证用的用户名和密码,以及

    2024年01月19日
    浏览(46)
  • iptables只允许指定IP调用所有端口

            首先需要设置一下允许所有ip访问22端口,要不然ssh就连不上了         当本机允许程序时,可能会访问到本机mysql、redis等数据库,所以需要允许本机ip访问

    2024年02月10日
    浏览(351)
  • iptables拒绝所有端口放开特定端口方法流程,iptables允许ping和拒绝ping、hosts阻止所有ip指定放开ip方法流程、脚本检测日志异常并自动执行封堵

    收到下面一封邮件,简单来说就是需要一个虚拟机,外网能ping同,但端口全封,给他们做渗透用。 问了需求 不需要登录,封死所有端口。 所以 就用下面2个方式双重封死。 命令: iptables -P INPUT DROP 【我这就执行了这个进的】 iptables -P FORWARD DROP iptables -P OUTPUT DROP 注:上面执

    2024年02月05日
    浏览(45)
  • iptables指定ip访问指定端口

    2024年02月08日
    浏览(53)
  • Linux 使用 iptables 禁止某些 IP 访问

    在Linux服务器被攻击的时候,有的时候会有几个主力IP。如果能拒绝掉这几个IP的攻击的话,会大大减轻服务器的压力,说不定服务器就能恢复正常了。 在Linux下封停IP,有封杀网段和封杀单个IP两种形式。一般来说,现在的攻击者不会使用一个网段的IP来攻击(太招摇了),

    2024年02月08日
    浏览(42)
  • iptables 限制所有ip访问22端口,仅开放个别ip访问 持续更新

    查看当前iptables 规则 添加已经建立tcp连接,就开放网络访问 添加允许访问22端口的ip 拒绝所有ip访问22端口 新加一个ip访问该主机22端口 保存iptables规则 参数详解 效果 本文参考:https://blog.csdn.net/zhougubei/article/details/120350467 本文参考:https://blog.csdn.net/qq_44273583/article/details/116661

    2024年02月07日
    浏览(50)
  • 禁止IP访问、只允许域名访问设置方法

    联网信息系统需设置只允许通过域名访问,禁止使用IP地址直接访问,建议同时采用云防护技术隐藏系统真实IP地址且只允许云防护节点IP访问服务器,提升网络安全防护能力。 修改配置文件nginx.conf,在server段里插入正则表达式,以只允许server.web.cn域名访问为例,代码如下:

    2024年02月04日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包