Portflow-Monitor

linux 端口流量监视 with Laravel

简介

主要用于 socks5 传输的一种 纯 shell 统计端口流量的可行思路,主要为了交流和学习
该分支为 laravel 分支,对原本的 shell 脚本做了一次封装
如果需要查看 纯 Shell 的脚本,请访问 Shell 分支:Shell 分支

如果因为某些原因无法成功安装 php7composer 的话,推荐使用 Shell 分支,纯 Shell 脚本

安装和配置出现问题欢迎打开 issue 进行讨论和交流,欢迎提出各种建议和 PR

文件结构

-root | -childNode | | -dateProcessing.sh # 子节点每天生成日志的脚本 | | -generate_flowlog.sh # 子节点每小时收集的脚本 | -masterNode | | -app | | | -Console | | | | -Kernel.php # 设置了计划任务 | | | -Http | | | | -Controllers | | | | | -MainController.php # 主要逻辑 | | | -Mail | | | | - OrderShipped.php # 邮件发送类 | | -config | | | -mail.php # 邮件配置 | | -resources | | | -views | | | | -email | | | | | -index.blade.php # 邮件模板 | | -.env # 配置信息

安装与部署

在安装之前请确保已经安装 Composer,若未安装请参考以下指令安装

安装

在 linux/unix 下,可以使用指令 yum install composer -y(Centos 下, 别的 linux 发行版请使用相应的指令) 进行安装, window 下参考 composerCN 的 windows 下的安装方法进行安装

设置使用 CN Composer source

$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

在安装之前请确保已经安装 php,且 php 版本大于 7, 若未安装请参考以下指令安装

CentOS7yum 安装 PHP7


安装步骤如下:

MasterNode

masterNode 文件夹下,运行指令

$ composer update

若未报错,且 masterNode 文件夹下下出现 vendor 文件夹下,则基本表示成功

复制一份 masterNode 文件夹下的 .env.example 文件,更名为 .env

masterNode 文件夹下,运行指令

php artisan key:generate

若未报错,且 .env line 3 的 APP_KEY= 后面有值,类似于 APP_KEY=base64:9NJ4b06OA2GS3YAVMZ5eBu4w7EmtDuRD/u2J36ZOgG0=,则表示成功

填写 .env line 25 to line 31 的信息,例如

MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=yourUsername MAIL_PASSWORD=yourPassword MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=yourEmailAddress@gmail.com // 这里是邮件发送出去显示的 from Email MAIL_FROM_NAME=yourName // 这里是邮件发送出去显示的 from Name

** 这里如果是个人,推荐比如 sina 邮箱,gmail 会限制连续发送频率 **

填写 masterNode/config/mail.php line 129 to line 132 的信息, e.g.

'childNode' => [ 'ip' => '1.2.3.4' , 'port'=>'22' ]

masterNode/app/Console/Kernel.php line 36 行设置时间频率,即多久需要统计一次,默认为 monthlyOn(1 , '00:11'),即 每月一号的 00:11,如需调整,或者更换别的频率,可以参考 [laravel 手册 任务调度](https://d.laravel-china.org/docs/5.5/scheduling#Shell - 命令调度)

masterNode/app/Http/Controllers/MainController.php line 30 设置需要发送的地址

$userArr = [ 1234 => 'yourEmail@gmail.com' , ];// 用户 Email 地址与端口的对应

line 37 设置需要收集的子节点的路径, 在下面 yourdir 的位置

$scpResult = shell_exec("scp -P $targetPort root@$targetIP:/yourdir/{$lastMonth}_monthlog.txt /var/log/portflowMonitor/monthLog/" );

chileNode

修改 /chileNode/generate_flowlog.sh 文件

line 5 , 默认从 /home/ssr/mudb.json 中获取需要监控的端口,如需要监控别的端口,请修改相关代码, 若需要监控的是 /home/ssr/mudb.json 则无需变动,点击 此处 参见 mudb.json 文件例示

portlist= ` cat /home/ssr/mudb.json | grep port | sed -r 's/( )+"port": //g' | sed 's/,$//g' `

修改 /chileNode/dateProcessing.sh 文件

line 15, 因为也是从 /home/ssr/mudb.json 中获取需要监控的端口,如需要监控别的端口,请修改相关代码, 若需要监控的是 /home/ssr/mudb.json 则无需变动,点击 此处 参见 mudb.json 文件例示

代码同上


# 部署例示如下:

chileNode 文件夹内的文件放在子节点,也就是需要采集端口流量数据的服务器上
masterNode 文件夹内的文件放在主节点,也就是 scp 采集、计算流量以及发送邮件的服务器商

子节点 chileNode

dateProcessing.shgenerate_flowlog.sh 拷贝到 /root/flowCal/ 文件夹下.

可以根据自身需要放在别的文件夹下,这里只是做个例示

输入指令

vim /etc/crontab

添加 两条计划任务 ,输入完成后,文件大致为这样

SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr …… # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 0 */1 * * * root /usr/bin/sh /root/flowCal/generate_flowlog.sh 1 0 */1 * * root /usr/bin/sh /root/flowCal/dateProcessing.sh

使用 :wq 保存

主节点 masterNode

masterNode 拷贝到主服务器 /root/portflowMonitor/ 文件夹下.

可以根据自身需要放在别的文件夹下,这里只是做个例示 如果只有一台服务器,主节点脚本和副节点脚本放在同一台服务器上的问题也不大

输入指令

vim /etc/crontab

添加 一条计划任务 ,输入完成后,文件大致为这样

SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr …… # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed * * * * * root /usr/bin/php /root/portflowMonitor/artisan schedule:run >> /dev/null 2>&1 使用 :wq 保存 给 masterNode/storage 文件夹下的全部文件 777 权限

chmod -R 777 /root/portflowMonitor/storage
至此,部署完成

关于项目 实现思路 & 代码解析 参见 Doc

更新计划

Null

LICENSE

MIT

版权声明:

1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。
2、网站不提供资料下载,如需下载请到原作者页面进行下载。
3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考学习用!
4、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。