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
若未报错,且
.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.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