核心需求
- 指定端口只对自己开放,自动更新IP
- 基于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 2END
代码未开源,所有代码都有Codex编写,AI时代开源已不再是必须,Code Agent可以根据你的需求写出你需要的软件,以上功能只是我需要的,你也可以写出你需要的