linux 端口流量监视 with Laravel
主要用于 socks5 传输的一种 纯 shell 统计端口流量的可行思路,主要为了交流和学习
该分支为 laravel 分支,对原本的 shell 脚本做了一次封装
如果需要查看 纯 Shell 的脚本,请访问 Shell 分支:Shell 分支
如果因为某些原因无法成功安装 php7 和 composer 的话,推荐使用 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 下的安装方法进行安装
- 在 linux/unix 下,可以使用指令
-
设置使用 CN Composer source
$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
在安装之前请确保已经安装 php,且 php 版本大于 7, 若未安装请参考以下指令安装
-
MasterNode
- 在
masterNode文件夹下,运行指令
$ composer update
若未报错,且
masterNode文件夹下下出现vendor文件夹下,则基本表示成功-
复制一份
masterNode文件夹下的.env.example文件,更名为.env -
在
masterNode文件夹下,运行指令php artisan key:generate
若未报错,且
.envline 3 的APP_KEY=后面有值,类似于APP_KEY=base64:9NJ4b06OA2GS3YAVMZ5eBu4w7EmtDuRD/u2J36ZOgG0=,则表示成功 -
填写
.envline 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.phpline 129 to line 132 的信息, e.g.'childNode' => [ 'ip' => '1.2.3.4' , 'port'=>'22' ] -
在
masterNode/app/Console/Kernel.phpline 36 行设置时间频率,即多久需要统计一次,默认为monthlyOn(1 , '00:11'),即每月一号的 00:11,如需调整,或者更换别的频率,可以参考 [laravel 手册 任务调度](https://d.laravel-china.org/docs/5.5/scheduling#Shell - 命令调度) -
在
masterNode/app/Http/Controllers/MainController.phpline 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.sh和generate_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
MIT