一个基于iptables、ipset,由Go开发的端口防火墙程序

26 年 4 月 10 日 星期五 (已编辑)
552 字
3 分钟

核心需求

  1. 指定端口只对自己开放,自动更新IP
  2. 基于ASN、省级、市级IP规则的防火墙

架构设计

客户端、服务端模式 客户端发送认证信息之后,发送需要服务器开放的端口,服务器认证通过之后修改自身防火墙规则,通过iptables、ipset

核心功能

服务端

trigger:  
	- type: http  
	  port: __HTTP_PORT__  
	  path: __HTTP_PATH__  
	  key: __HTTP_KEY__
	- type: tcp  
	  port: __TCP_PORTS__  
	  key: __TCP_KEY__
client_rule_ttl: 30s

客户端

servers:  
	- type: tcp  
	  server: 1.1.1.1  
	  port: __TCP_PORTS__  
	  key: __TCP_KEY__  
	  interval: 30s  
	  client_rules:  
		- port: 443  
		  protocol: tcp  
	    - port: 8443  
          protocol: udp
  
	- type: tcp  
	  server: 1.1.1.1  
	  port: 32454,44452,12134  
	  key: __TCP_KEY__  
	  interval: 30s  
	  client_rules: 
	    - prot: 5000
	      asn: 4837
		- prot: 5000
		  country: US
		- prot: 5000
		  city: 5391959

两种触发模式

  • 服务端监听指定http端口,客户端请求指定key+path,key+path匹配之后,解析body数据或获取客户端IP,修改iptables规则
  • 服务器监听多个端口,客户端按照顺序或携带需要依次向这些端口发送TCP数据包,数据包中包含key、指定顺序+多个端口接收到数据时候,认证通过,解析客户端发送数据,修改iptables规则

刷新/失效 服务端配置规则失效时间client_rule_ttl,到达此时间之后,规则失效,添加的规则会被移除,客户端每次间隔interval或重新请求,更新客户端IP

ASN规则

mmdb:  
  asn_mmdb_url: "https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb"  
  country_mmdb_url: "https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-Country.mmdb"  
  city_mmdb_url: "https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb"  
  mmdb_update_interval_hours: 24

服务端配置mmdb数据库地址,程序启动时自动下载文件,客户端传入asn、国家代码、geo城市ID后,服务端从mmdb中查询对应ip段,之后更新ipset规则

静态规则 使用类似ufw命令,直接修改服务端防火墙规则,修改指定端口配置,修改后自动更新到配置文件中

p rule ls
p rule add allow 443 tcp from 203.0.113.0/24
p rule add deny 23 tcp from any
p rule insert 1 allow 8080
p rule add allow 1231 from 1.1.1.1
p rule delete 2

END

代码未开源,所有代码都有Codex编写,AI时代开源已不再是必须,Code Agent可以根据你的需求写出你需要的软件,以上功能只是我需要的,你也可以写出你需要的

文章标题:一个基于iptables、ipset,由Go开发的端口防火墙程序

文章作者:violet

文章链接:https://www.vio.vin/posts/yi-ge-ji-yu-iptables-ipset-you-go-kai-fa-de-duan-kou-fang-huo-qiang-cheng-xu[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。