# DenyIP

## 概述

`DenyIP` 是一个用于保护大陆服务器免受非本地业务访问的防火墙工具。通过结合 `libpcap`、`libipset`、`ip2region` 和 `Go ipquery`，该工具能够高效地捕获网络数据包、提取源IP地址、进行地理位置判断，并将非大陆IP地址添加到IP黑名单中，从而严格限制非大陆来源的访问。

## 特点

- **数据包捕获**：使用 `libpcap` 捕获网络数据包，提取源IP地址。
- **IP黑名单管理**：使用 `libipset` 管理IP黑名单，高效存储和匹配IP地址。
- **初步IP地域判定**：使用 `ip2region` 库进行初步的IP地理位置判断。
- **精确IP地理位置判断**：使用 `Go ipquery` 进一步精准识别IP地理位置。
- **灵活的命令行选项**：支持守护进程模式、指定网络接口、启用/禁用Iptables规则等。

## 安装

### 依赖项

在 Debian 系统上安装所需的开发工具和库：

```bash
sudo apt update
sudo apt install build-essential golang
sudo apt install libpcap-dev libcap-dev libipset-dev libsystemd-dev
```

在 Centos 7 系统上安装所需的开发工具和库：

```bash
yum groupinstall "Development Tools" -y
yum install ipset-devel libattr-devel libpcap-devel libcap-devel
```

### 下载项目

克隆项目仓库：

```bash
git clone https://git.aixiao.me/DenyIP.git
cd DenyIP
```

## 构建

编译项目：

```bash
cd DenyIP
make clean
make ipquery
make
```

## 使用方法

### 命令行选项

```bash
root@NIUYULING:/mnt/c/Users/root/Desktop/git.aixiao.me/DenyIP# ./denyip -h
DenyIP version 0.2
拒绝Linux服务器非大陆IP工具
MAIL: aixiao@aixiao.me
Date: 20241024
  Usage: denyip [-d] [-i <interface>] [-s <start|stop>] [-h|-?]
      -d --daemon         Daemon mode
      -i --interface      interface (default eth0)
      -l                  print iptables rule
      -s --signal         regular signal (default start|stop)
                              start Enable Iptables rule
                              stop  Disable Iptables rule
      -h|-?               Help Information

root@NIUYULING:/mnt/c/Users/root/Desktop/git.aixiao.me/DenyIP#
```

### 示例命令

- **启动守护进程**：

  ```bash
  ./denyip -d -i eth0
  ```

- **启用Iptables规则**：

  ```bash
  ./denyip -s start
  ```

- **禁用Iptables规则**：

  ```bash
  ./denyip -s stop
  ```

- **查看帮助信息**：

  ```bash
  ./denyip -h
  ```

- **关闭守护进程**：

  ```bash
  killall -15 denyip
  ```

## 贡献

欢迎贡献代码和提出改进建议！请通过 Pull Request 或 Issue 的方式提交。

## 联系信息

- **邮箱**：<aixiao@aixiao.me>
- **日期**：20241024

## 许可证

本项目遵循 GNU 许可证，详情参见 [LICENSE](LICENSE) 文件。

---

希望这个 `README.md` 文件能够帮助您更好地介绍和使用 `DenyIP` 项目。如果有任何其他需求或修改，请随时告知。
