Compare commits

...

5 Commits

Author SHA1 Message Date
ab10389228 Merge branch 'master' into dev 2024-07-18 17:58:26 +08:00
99893d8c3d 优化 2024-07-18 17:04:00 +08:00
6f25fb3672 修改配置 2024-07-18 16:29:32 +08:00
967922012c 优化 2024-07-18 16:27:53 +08:00
d8f7c47faa 修复内存泄漏 2024-07-05 09:25:44 +08:00
7 changed files with 588 additions and 600 deletions

View File

@ -89,22 +89,20 @@ May 22 2024 15:05:59 Compile、link.
```text ```text
配置文件 配置文件
global { global {
DAEMON = "off"; // on开启后台运行,off不开启(弃用) DAEMON = "off"; // on开启后台运行,off不开启
TIME = "1"; // 睡眠时间(大于等于1,单位秒) TIME = "1"; // 睡眠时间(大于等于1,单位秒)
PUBLIC_IP = "http://inet-ip.info"; // 获取公网IP PUBLIC_IP = "http://inet-ip.aixiao.me/"; // 获取公网IP
IS_DISK = 1; // 磁盘使用率(1开启,非1关闭) IS_DISK = 1; // 磁盘使用率(1开启,非1关闭)
DISK_USE = 50; // 任意某块磁盘使用率告警(大于等于1) DISK_USE = 50; // 任意某块磁盘使用率告警(大于等于1)
IS_BLOCKED = 1; // 是否封禁攻击IP(1开启,非1关闭)
IS_MAIL = 0; // 开启邮件告警(1开启,非1关闭)
CLAMAV = 1; // clamav 是否扫描病毒(1开启,非1关闭) CLAMAV = 1; // clamav 是否扫描病毒(1开启,非1关闭)
CLAMAV_ARG = "-r / --exclude-dir=^/sys|^/dev|^/proc|^/opt/infected|^/root|^/home|^/mnt|^/usr|^/var --move=/opt/infected --max-filesize 1024M -l clamscan.log"; CLAMAV_ARG = "-r / --exclude-dir=^/sys|^/dev|^/proc|^/opt/infected|^/root|^/home --move=/opt/infected --max-filesize 1024M -l clamscan.log";
CLAMAV_TIME = "* 45 11 * * *"; // clamav 扫描时间(Cron格式, 秒 分 时 天 月 周) CLAMAV_TIME = "* 45 11 * * *"; // clamav 扫描时间(Cron格式, 秒 分 时 天 月 周)
IS_BLOCKED = 1; // 是否封禁攻击IP(1开启,非1关闭)
IPV4_RESTRICTION = 1; // 是否启用IP白名单(1开启,非1关闭) IPV4_RESTRICTION = 1; // 是否启用IP白名单(1开启,非1关闭)
IPV4_WHITE_LIST = "1.1.1.1 2.2.2.2 "; // IP白名单(空格隔开) IPV4_WHITE_LIST = "1.1.1.1 2.2.2.2 "; // IP白名单(空格隔开)
@ -113,16 +111,15 @@ global {
IP2REGION = 1; // 是否使用本地 ip2region 地址定位库(1使用,非1不使用) IP2REGION = 1; // 是否使用本地 ip2region 地址定位库(1使用,非1不使用)
REGION_LIST = "河南 郑州 上海"; // 地域列表(空格隔开) REGION_LIST = "河南 郑州 上海"; // 地域列表(空格隔开)
NGINX = 1; // 是否启用Nginx白名单 NGINX = 1; // 是否启用Nginx白名单
#NGINX_LOG_FILE= "/var/log/nginx/access.log"; // Nginx 日志文件 NGINX_LOG_FILE= "/usr/local/nginx/logs/access.log"; // Nginx 日志文件
NGINX_LOG_FILE= "/opt/nginx/logs/access.log"; // Nginx 日志文件 NGINX_REGION_LIST = "中国 河南 郑州 上海 内网"; // 地域列表(空格隔开)
NGINX_REGION_LIST = "中国 河南 郑州 上海 内网"; // 地域列表(空格隔开)
IS_DING_WEBHOOK = 1; // 开启叮叮告警(1开启,非1关闭) IS_DING_WEBHOOK = 0; // 开启叮叮告警(1开启,非1关闭)
PHONE = "15565979082"; // @的人手机号 PHONE = "15565979082"; // @的人手机号
DING_WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token=396bce0384cded025087cff3c176ea5e9afb9bd8fcaa46d6fa8c51dd172ba513"; // 钉钉WEBHOOK DING_WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token=396bce0384cded025087cff3c176ea5e9afb9bd8fcaa46d6fa8c51dd172ba513"; // 钉钉WEBHOOK
IS_QQMAIL = 1; // 开启QQ邮箱告警(默认使用gomail: https://git.aixiao.me/aixiao/gomail.git)(1开启,非1关闭) IS_MAIL = 0; // 开启QQ邮箱告警(默认使用gomail: https://git.aixiao.me/aixiao/gomail.git)(1开启,非1关闭)
RECV_MAIL = "1605227279@qq.com"; // 接收者邮箱 RECV_MAIL = "1605227279@qq.com"; // 接收者邮箱
} }

48
conf.c
View File

@ -120,11 +120,6 @@ static void parse_global_module(char *content, conf * conf)
return; return;
} }
if (strcasecmp(var, "IS_QQMAIL") == 0) {
val_begin_len = val_end - val_begin;
conf->IS_QQMAIL = atoi(val_begin);
}
if (strcasecmp(var, "RECV_MAIL") == 0) { if (strcasecmp(var, "RECV_MAIL") == 0) {
val_begin_len = val_end - val_begin; val_begin_len = val_end - val_begin;
if (copy_new_mem(val_begin, val_begin_len, &conf->RECV_MAIL) != 0) if (copy_new_mem(val_begin, val_begin_len, &conf->RECV_MAIL) != 0)
@ -277,31 +272,29 @@ void read_conf(char *filename, conf * configure)
void free_conf(conf * conf) void free_conf(conf * conf)
{ {
if (conf->DAEMON) if (conf->PHONE != NULL)
free(conf->DAEMON);
if (conf->PHONE)
free(conf->PHONE); free(conf->PHONE);
if (conf->DING_WEBHOOK) if (conf->DING_WEBHOOK != NULL)
free(conf->DING_WEBHOOK); free(conf->DING_WEBHOOK);
if (conf->RECV_MAIL) if (conf->RECV_MAIL != NULL)
free(conf->RECV_MAIL); free(conf->RECV_MAIL);
if (conf->PUBLIC_IP) if (conf->PUBLIC_IP != NULL)
free(conf->PUBLIC_IP); free(conf->PUBLIC_IP);
if (conf->IPV4_WHITE_LIST) if (conf->IPV4_WHITE_LIST != NULL)
free(conf->IPV4_WHITE_LIST); free(conf->IPV4_WHITE_LIST);
if (conf->REGION_LIST) if (conf->REGION_LIST != NULL)
free(conf->REGION_LIST); free(conf->REGION_LIST);
if (conf->CLAMAV_TIME) if (conf->CLAMAV_TIME != NULL)
free(conf->CLAMAV_TIME); free(conf->CLAMAV_TIME);
if (conf->CLAMAV_ARG) if (conf->CLAMAV_ARG != NULL)
free(conf->CLAMAV_ARG); free(conf->CLAMAV_ARG);
// NGINX // NGINX
if (conf->NGINX_LOG_FILE) if (conf->NGINX_LOG_FILE != NULL)
free(conf->NGINX_LOG_FILE); free(conf->NGINX_LOG_FILE);
if (conf->NGINX_REGION_LIST) if (conf->NGINX_REGION_LIST != NULL)
free(conf->NGINX_REGION_LIST); free(conf->NGINX_REGION_LIST);
return; return;
@ -309,37 +302,36 @@ void free_conf(conf * conf)
void ptintf_conf(conf * conf) void ptintf_conf(conf * conf)
{ {
if (conf->DAEMON) if (conf->DAEMON != NULL)
printf("DAEMON %s\n", conf->DAEMON); printf("DAEMON %s\n", conf->DAEMON);
printf("TIME %d\n", conf->TIME); printf("TIME %d\n", conf->TIME);
printf("IS_MAIL %d\n", conf->IS_MAIL); printf("IS_MAIL %d\n", conf->IS_MAIL);
printf("IS_DING_WEBHOOK %d\n", conf->IS_DING_WEBHOOK); printf("IS_DING_WEBHOOK %d\n", conf->IS_DING_WEBHOOK);
if (conf->PHONE) if (conf->PHONE != NULL)
printf("PHONE %s\n", conf->PHONE); printf("PHONE %s\n", conf->PHONE);
if (conf->DING_WEBHOOK) if (conf->DING_WEBHOOK != NULL)
printf("DING_WEBHOOK %s\n", conf->DING_WEBHOOK); printf("DING_WEBHOOK %s\n", conf->DING_WEBHOOK);
printf("IS_QQMAIL %d\n", conf->IS_QQMAIL);
if (conf->RECV_MAIL) if (conf->RECV_MAIL != NULL)
printf("RECV_MAIL %s\n", conf->RECV_MAIL); printf("RECV_MAIL %s\n", conf->RECV_MAIL);
if (conf->PUBLIC_IP) if (conf->PUBLIC_IP != NULL)
printf("PUBLIC_IP %s\n", conf->PUBLIC_IP); printf("PUBLIC_IP %s\n", conf->PUBLIC_IP);
printf("IPV4_RESTRICTION %d\n", conf->IPV4_RESTRICTION); printf("IPV4_RESTRICTION %d\n", conf->IPV4_RESTRICTION);
if (conf->IPV4_WHITE_LIST) if (conf->IPV4_WHITE_LIST != NULL)
printf("IPV4_WHITE_LIST %s\n", conf->IPV4_WHITE_LIST); printf("IPV4_WHITE_LIST %s\n", conf->IPV4_WHITE_LIST);
printf("REGION %d\n", conf->REGION); printf("REGION %d\n", conf->REGION);
if (conf->REGION_LIST) if (conf->REGION_LIST != NULL)
printf("REGION_LIST %s\n", conf->REGION_LIST); printf("REGION_LIST %s\n", conf->REGION_LIST);
if (conf->CLAMAV_ARG) if (conf->CLAMAV_ARG != NULL)
printf("CLAMAV_ARG %s %d\n", conf->CLAMAV_ARG, conf->CLAMAV_ARG_LEN); printf("CLAMAV_ARG %s %d\n", conf->CLAMAV_ARG, conf->CLAMAV_ARG_LEN);
// Nginx // Nginx
if (conf->NGINX_LOG_FILE) if (conf->NGINX_LOG_FILE != NULL)
printf("CLAMAV_ARG %s %d\n", conf->NGINX_LOG_FILE, conf->NGINX_LOG_FILE_LEN); printf("CLAMAV_ARG %s %d\n", conf->NGINX_LOG_FILE, conf->NGINX_LOG_FILE_LEN);
if (conf->NGINX_REGION_LIST) if (conf->NGINX_REGION_LIST != NULL)
printf("CLAMAV_ARG %s %d\n", conf->NGINX_REGION_LIST, conf->NGINX_REGION_LIST_LEN); printf("CLAMAV_ARG %s %d\n", conf->NGINX_REGION_LIST, conf->NGINX_REGION_LIST_LEN);
} }

6
conf.h
View File

@ -45,8 +45,6 @@ typedef struct CONF
int NGINX_LOG_FILE_LEN; int NGINX_LOG_FILE_LEN;
char *NGINX_REGION_LIST; char *NGINX_REGION_LIST;
int NGINX_REGION_LIST_LEN; int NGINX_REGION_LIST_LEN;
int IS_MAIL;
// 钉钉 // 钉钉
int IS_DING_WEBHOOK; int IS_DING_WEBHOOK;
@ -54,9 +52,7 @@ typedef struct CONF
char *DING_WEBHOOK; char *DING_WEBHOOK;
// 第三方邮箱 // 第三方邮箱
int IS_QQMAIL; int IS_MAIL;
//char *SEND_QQ;
//char *QQMAIL_KEY;
char *RECV_MAIL; char *RECV_MAIL;
} conf; } conf;

View File

@ -58,10 +58,14 @@ static int Handle_IP(char *string, conf *config)
//printf(RED "%s Nginx Ip Address: %s, 属于地域白名单: %s\n" COLOR_NONE, t, IP, area); //printf(RED "%s Nginx Ip Address: %s, 属于地域白名单: %s\n" COLOR_NONE, t, IP, area);
} else { } else {
my_printf(RED "%s Nginx 封禁 Ip Address: %s, 地址: %s!!!\n" COLOR_NONE, t, IP, area); my_printf(RED "%s Nginx 封禁 Ip Address: %s, 地址: %s!!!\n" COLOR_NONE, t, IP, area);
nginx_iptc(IP); nginx_iptc(IP);
} }
} }
if (t)
free(t);
return 0; return 0;
} }

1078
rhost.c

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,18 @@
global { global {
DAEMON = "off"; // on开启后台运行,off不开启(弃用) DAEMON = "off"; // on开启后台运行,off不开启
TIME = "1"; // 睡眠时间(大于等于1,单位秒) TIME = "1"; // 睡眠时间(大于等于1,单位秒)
PUBLIC_IP = "http://inet-ip.info"; // 获取公网IP PUBLIC_IP = "http://inet-ip.aixiao.me/"; // 获取公网IP
IS_DISK = 1; // 磁盘使用率(1开启,非1关闭) IS_DISK = 1; // 磁盘使用率(1开启,非1关闭)
DISK_USE = 50; // 任意某块磁盘使用率告警(大于等于1) DISK_USE = 50; // 任意某块磁盘使用率告警(大于等于1)
IS_BLOCKED = 1; // 是否封禁攻击IP(1开启,非1关闭)
IS_MAIL = 0; // 开启邮件告警(1开启,非1关闭)
CLAMAV = 1; // clamav 是否扫描病毒(1开启,非1关闭) CLAMAV = 1; // clamav 是否扫描病毒(1开启,非1关闭)
CLAMAV_ARG = "-r / --exclude-dir=^/sys|^/dev|^/proc|^/opt/infected|^/root|^/home|^/mnt|^/usr|^/var --move=/opt/infected --max-filesize 1024M -l clamscan.log"; CLAMAV_ARG = "-r / --exclude-dir=^/sys|^/dev|^/proc|^/opt/infected|^/root|^/home --move=/opt/infected --max-filesize 1024M -l clamscan.log";
CLAMAV_TIME = "* 45 11 * * *"; // clamav 扫描时间(Cron格式, 秒 分 时 天 月 周) CLAMAV_TIME = "* 45 11 * * *"; // clamav 扫描时间(Cron格式, 秒 分 时 天 月 周)
IS_BLOCKED = 1; // 是否封禁攻击IP(1开启,非1关闭)
IPV4_RESTRICTION = 1; // 是否启用IP白名单(1开启,非1关闭) IPV4_RESTRICTION = 1; // 是否启用IP白名单(1开启,非1关闭)
IPV4_WHITE_LIST = "1.1.1.1 2.2.2.2 "; // IP白名单(空格隔开) IPV4_WHITE_LIST = "1.1.1.1 2.2.2.2 "; // IP白名单(空格隔开)
@ -23,15 +21,14 @@ global {
IP2REGION = 1; // 是否使用本地 ip2region 地址定位库(1使用,非1不使用) IP2REGION = 1; // 是否使用本地 ip2region 地址定位库(1使用,非1不使用)
REGION_LIST = "河南 郑州 上海"; // 地域列表(空格隔开) REGION_LIST = "河南 郑州 上海"; // 地域列表(空格隔开)
NGINX = 1; // 是否启用Nginx白名单 NGINX = 1; // 是否启用Nginx白名单
#NGINX_LOG_FILE= "/var/log/nginx/access.log"; // Nginx 日志文件 NGINX_LOG_FILE= "/usr/local/nginx/logs/access.log"; // Nginx 日志文件
NGINX_LOG_FILE= "/opt/nginx/logs/access.log"; // Nginx 日志文件 NGINX_REGION_LIST = "中国 河南 郑州 上海 内网"; // 地域列表(空格隔开)
NGINX_REGION_LIST = "中国 河南 郑州 上海 内网"; // 地域列表(空格隔开)
IS_DING_WEBHOOK = 1; // 开启叮叮告警(1开启,非1关闭) IS_DING_WEBHOOK = 0; // 开启叮叮告警(1开启,非1关闭)
PHONE = "15565979082"; // @的人手机号 PHONE = "15565979082"; // @的人手机号
DING_WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token=396bce0384cded025087cff3c176ea5e9afb9bd8fcaa46d6fa8c51dd172ba513"; // 钉钉WEBHOOK DING_WEBHOOK = "https://oapi.dingtalk.com/robot/send?access_token=396bce0384cded025087cff3c176ea5e9afb9bd8fcaa46d6fa8c51dd172ba513"; // 钉钉WEBHOOK
IS_QQMAIL = 1; // 开启QQ邮箱告警(默认使用gomail: https://git.aixiao.me/aixiao/gomail.git)(1开启,非1关闭) IS_MAIL = 0; // 开启QQ邮箱告警(默认使用gomail: https://git.aixiao.me/aixiao/gomail.git)(1开启,非1关闭)
RECV_MAIL = "1605227279@qq.com"; // 接收者邮箱 RECV_MAIL = "1605227279@qq.com"; // 接收者邮箱
} }

4
rule.c
View File

@ -33,7 +33,6 @@ static int Handle_IP(conf *conf, char *ip)
if (conf->REGION == 1) { if (conf->REGION == 1) {
if (conf->IP2REGION == 1) { if (conf->IP2REGION == 1) {
//printf("%s Use ip2region !!!\n", t);
if (access(xdb_path, F_OK) == -1) { if (access(xdb_path, F_OK) == -1) {
xdb_path = "ip2region/ip2region.xdb"; xdb_path = "ip2region/ip2region.xdb";
@ -67,6 +66,9 @@ BLOCKED:
if (area != NULL) { if (area != NULL) {
free(area); free(area);
} }
if (t)
free(t);
} }
return 0; return 0;