一、环境介绍
来自:https://blog.wamoyu.com/archives/7ghN4NEo
家里自组了一个飞牛NAS,为了访问安全以及审计NAS的流量日志,咸鱼购买了一个FortiGate-50E设备,通过双网口配置实现NAS访问外网走防火墙侧,内网设备访问走另一个网口,这样NAS访问外网或外网访问NAS的流量全过防火墙,通过飞塔防火墙配置IPS和AV进行流量清洗转发给NAS虚拟机中的1P,然后流量会在过一遍雷池WAF和1p专业版WAF后才正常转发给飞牛OS。


因为飞塔50E只能把日志存内存,所以会话日志这种大量的在管理界面中查询不到历史日志,需要把日志推送到syslog里面查询。家用的话感觉使用传统的ELK太重了,所以这里使用轻量化日志服务平台OpenObserve。
OpenObserve、Vectro均使用docker搭建。syslog使用rsyslog作为服务器收集日志,vectro处理日志并且推送到openobserve。
最终实现效果如图





二、rsyslog部署和配置
2.1 安装
apt install rsyslog -y
2.2 修改配置文件
开启udp 514端口监听
vim /etc/rsyslog.conf

修改日志存放配置
vim /etc/rsyslog.d/default.conf
打开配置文件后复制以下内容到default.conf
# 1. 原始日志模板(只存原始内容,无时间、无IP前缀)
$template RawMsg,"%msg%\n"
# 2. 日志存储路径(按IP+日期创建文件)
$template RemoteLogs,"/var/log/syslog/%FROMHOST-IP%/%FROMHOST-IP%-%$YEAR%-%$MONTH%-%$DAY%.log"
# 3. 应用规则(核心:用原始格式写入)
*.* ?RemoteLogs;RawMsg
& stop
重启rsyslog服务
systemctl restart rsyslog
# 设置开机自启
systemctl enable rsyslog
2.3 测试
通过以下命令测试看看是否正常
logger -n 127.0.0.1 -P 514 "这是一条来自本机的测试日志"

三、openobserve部署
这里使用docker搭建,需要二机制部署的也可以自行参考官网文档。https://openobserve.ai/docs/
直接在1panel面板创建新的容器,主要是注意添加环境变量(邮箱和密码)就行,这里测试就使用sqlit了。
启动后访问http://即可。
sudo docker run -d \
--name openobserve \
-v /app/openobserve/data:/data \
-p 80:5080 \
-e ZO_ROOT_USER_EMAIL="root@example.com" \
-e ZO_ROOT_USER_PASSWORD="Complexpass#123" \
--restart=on-failure:5 \
openobserve/openobserve:0.70.0
四、vectro部署
4.1 配置文件
vectro可以处理多个来源文件,这样就可以实现针对不同类型设备日志进行处理,例如防火墙、交换机日志个性化处理等。
# 全局数据目录
data_dir: "/var/lib/vector"
# ======================输入
sources:
fw_log_in:
type: file
include: ["/logs/192.168.10.110/*.log"]
# ======================转换:remap
transforms:
fw_log:
type: remap
inputs: [ "fw_log_in" ]
source: |
# 把输入内容转成字符串,用于存储原始日志
msg = string!(.message)
.message = msg
# 把输入内容转成json
parsed = parse_key_value!(.message)
# 修复:使用正确的变量名parsed,而不是错误的parsed_fields
. = merge(., parsed)
# 删除vector自动生成的字段
del(.host)
del(.source_type)
del(.timestamp)
# ================================输出
sinks:
openobserve:
type: "http"
inputs: ["fw_log"]
uri: "http://openobserve:5080/api/default/fortinet_50e-Test/_json"
method: "post"
auth:
strategy: "basic"
user: "xxxxxxx"
password: "xxxxxxxxxxxxx"
compression: "gzip"
encoding:
codec: "json"
timestamp_format: "rfc3339"
healthcheck:
enabled: false
4.2 启动vectro容器
sudo docker run -d \
--name vector \
-v /app/vector/config/vector.yaml:/etc/vector/vector.yaml \
-v /logs:/logs \
-v /app/vector/data:/var/lib/vector \
--restart=on-failure:5 \
timberio/vector:0.54.0-debian
四、网络设备添加日志服务器
其他也差不多,防火墙中添加日志服务器即可。

五、飞塔配置安全策略及飞牛导入证书

这里为了对https流量也进行防护,所以SSL这选择了深度检测,选择该选项需要将飞塔的CA证书导入到飞牛中才行。
否则默认访问https站点会有问题


将证书到处后执行以下命令导入证书到fnos(如果不识别直接改后缀为crt)
# 复制证书到系统证书目录
cp Fortinet_CA_SSL.crt /usr/local/share/ca-certificates/
# 更新系统证书库
update-ca-certificates
六、WAF配置
关于雷池WAF和1panelWAF配后请参考该文章配置:https://www.zway.top/archives/1panel-lei-chi-waf-pang-lu-jie-ru-2.0-v2-8.0.0-lts-bu-shu
按照上述文章配置后2个waf就是协调使用了,而不是通过反向代理套娃。

七、测试效果
7.1 防病毒AV测试
防病毒可以通过导入NAS后使用以下命令测试:
wget http://www.csm-testcenter.org/csm-eicar.co



可以看到下不动,查看ob和飞塔日志可以看到直接被飞塔50E拦截了
7.2 IPS测试
这里直接使用豆包生成的脚本简单测试了一下
import requests
target = "NAS外网访问地址"
payloads = [
"/?id=1' OR 1=1--",
"/?q=<script>**('xss')</script>",
"/?exec=id;uname -a",
"/../../etc/passwd",
]
eicar_url = "http://www.eicar.org/download/eicar.com"
print("===== WAF/IPS 测试 =====")
for p in payloads:
try:
r = requests.get(target + p, timeout=3)
print(f"{p[:50]:<60} STATUS={r.status_code}")
except Exception as e:
print(f"{p[:50]:<60} BLOCKED (拦截成功)")
print("\n===== AV 测试 EICAR =====")
try:
r = requests.get(eicar_url, timeout=3)
if "X5O!P%" in r.text:
print("AV 未拦截 —— 检测失败")
else:
print("AV 拦截正常")
except:
print("AV 拦截正常")



7.3 WAF测试
脚本里面的攻击特征很明显,直接被ips拦截了,这里临时关闭ips防护,看看waf拦截效果

可以看到雷池WAF拦截了


再把雷池WAF关了,试试1pWAF

这次则被1pWAF拦截

