afsharsafavi / firewall_cidr
Requires
- ext-curl: *
This package is auto-updated.
Last update: 2024-09-30 01:47:02 UTC
README
这个PHP项目帮助系统管理员通过限制对特定国家CIDR或甚至ISP的公共端口的访问,最小化对其服务的攻击。目前它生成IPTables规则和Mikrotik访问列表。此外,您还可以接收您建议的国家或ISP的CIDR的原始格式,以便在不受支持的防火墙或其他程序中使用。
假设您有一个受到攻击的SSH服务器。您在您的端没有静态IP地址来阻止所有IP,除了您的白名单(您的静态IP地址)。您还需要通过您的手机热点访问此服务器。使用此项目,您可以生成规则,以便仅允许访问该端口的22(或其他端口)仅对您的国家IP范围或甚至您的ISP和运营商IP范围。
另一个例子是IP PBX,如Asterisk或Issabel。有时您需要允许您的用户通过特定国家的手机SIM卡访问您的PBX。您可以找出您国家的运营商IP范围并将它们添加到您的白名单中,在其他地方阻止。
通过Docker运行
docker pull afsharsafavi/cidr docker run -v ./Output:/myapp/Output -v ./Data/:/myapp/Data --network host -it --rm afsharsafavi/cidr
或
git clone git@github.com:afsharsafavi/Firewall_CIDR.git cd Firewall_CIDR docker build -t myapp . docker run -v ./Output:/myapp/Output -v ./Data/:/myapp/Data --network host -it --rm myapp
安装
依赖关系:您只需要PHP CLI版本8.2和php-curl扩展
对于Ubuntu
apt update && apt upgrade -y
add-apt-repository ppa:ondrej/php
apt update
apt install php8.2 php8.2-curl
对于RHEL和CentOS
dnf install php8.2 php8.2-cli php8.2-curl
接下来,您需要根据“示例”文件夹中的文档填写configuration.json
文件并运行示例
git clone git@github.com:afsharsafavi/Firewall_CIDR.git
或通过composer
composer create-project afsharsafavi/firewall_cidr
运行
cd Firewall_CIDR
php src/Examples/example1.php
首先,它下载与您选择的国家的所有相关的CIDR。然后找出每个CIDR的whois信息。(这可能需要很长时间)。最后,它将根据您编写的配置生成规则或访问列表。(请参阅“示例”文件夹中的configuration.json
)
文档
CIDR_Lookup::setConfig()静态方法接受一个具有以下规范的json数组。之后,只需运行CIDR_Lookup::run()即可
主要配置
ISP标签
为了找到您需要的ISP IP范围,您应该给我您的ISP标签。每个ISP或组织CIDR可以具有多个标签,您可以给每个ISP提供一个数组。例如,伊朗的ITC ISP有ADSL和移动范围的2个CIDR标签。您可以通过此数组传递它
"ITC": [ "Iran Telecommunication Company PJS", "Mobile Communication Company of Iran PLC" ],
您可以在顶部指定不同的ISP标签(本节),并为每个防火墙配置仅使用它们的标签。如果您不指定ISP标签,我将返回所选国家的所有CIDR范围。您可以通过获取目标ISP的一些样本的Whois来找出此标签。为了接近,您可以一次通过指定国家代码来运行项目,然后从以下路径找出确切的标签
src/Data/{Country Code}_CIDR_Data
运行此项目后,上述路径将包含所有CIDR标签。根据您国家CIDR范围的数量,运行可能需要很长时间。
ISP查找驱动程序
为了找出每个CIDR范围标签,我使用不同的服务。它们位于src/class/CIDR_Lookup_Drivers
。您可以编写自己的自定义驱动程序并将其名称作为数组传递到本节。
系统可以接受多个驱动程序(推荐)并按您在数组中给出的顺序使用它们。
有时驱动程序会返回错误或null,或者可能因为免费服务的速率限制而禁止您的IP。在这种情况下,我将使用下一个驱动程序。
✨提供更多的sock5代理可以帮助降低禁止率。
代理
要查找CIDR标签,我们使用不同的免费whois服务。如果你的选定国家有大量的CIDR范围,你可能会因为向他们的API端点发送大量请求而被封禁。目前最好的解决方案是给我提供不同的socks5代理。它可以通过不同的IP地址来提高请求,从而降低被封禁的比率。
我建议至少提供3个socks5代理。
自定义CIDR数据
有时某些CIDR有错误的whois数据或它们的whois数据,如国家代码错误。您可以将自定义CIDR添加到配置中。当我想创建防火墙规则时,我会考虑它们。
它可以是以下格式的CIDR数组
"custom_CIDR_data": {
"1.234.56.0\/22": {
"c": "IR",
"o": "MY custom Organization label 1"
},
"2.355.56.0\/22": {
"c": "IR",
"o": "MY custom Organization label 2"
}
"3.234.56.0\/22": {
"c": "IR",
"o": "MY custom Organization label"
}
},
防火墙
目前我支持IPTables和Mikrotik。
我为iptables生成“接受规则”,为Mikrotik设备生成地址列表。您可以在Mikrotik winbox的许多地方使用这些地址列表。
您可以传递您需要的所有防火墙配置。我将生成它们的规则,并将每个防火墙规则分别放在src/Output/
文件夹中的文件中。
防火墙字段接受防火墙数组。每个数组节的结构应遵循以下规则
IPTables
您可以指定TCP或UDP端口(s)和端口范围。我将为它们编写“接受规则”。TCP和UDP端口可以是单个端口号(如22用于SSH)或范围,也可以是它们的组合。例如,对于PBX,您可以有这个数组
"udp": [
"10000:20000",
"5060"
]
Mikrotik
对于Mikrotik设备,我将根据您的配置编写地址列表。
如果您指定了ISP,该地址列表将仅包括您所选的ISP CIDR。否则,该地址列表将包括您所选国家的CIDR。
您还可以设置comment
以填写Mikrotik中的注释字段。(可选)
如果您写入标签字段,则规则将以您的自定义标签写入,否则,标签字段将写入为CIDR_{country code}
,当您想写入整个国家CIDR时,以及CIDR_{country code}_custom
,当您指定您的目的ISP时。
原始
在原始类型中,我只为您编写CIDR地址,以便您可以在不受支持的防火墙或接受CIDR地址的任何程序中使用它们。如果需要,您可以在CIDR列表中添加一些代码、前缀和/或后缀,以根据您的需求使用它们。
免责声明
本项目从第三方服务收集国家CIDR和whois数据,无法保证100%的数据准确性。在应用此项目生成的规则之前,您应双重检查数据和规则,并了解您的防火墙策略和担忧。