pfSense QoS IDS
pfSense QoS IDS
来源 https://blanboom.org/2018/pfsense-setup/
之前我使用的无线路由器是 RT1900ac,其内置了 QoS 和 IDS/IPS 功能,但由于 CPU 性能有限,在百兆宽带的情况下,两者均会对网络性能造成一定的影响。
前段时间,群晖在 DSM 中推出了 Virtual Machine Manager 工具,可以在 NAS 中运行虚拟机。由于我的 NAS 中恰好有两个以太网接口,就准备在 NAS 中,通过虚拟机实现软路由,并体验一下这两项功能。
简单了解和试用 RouterOS, OpenWrt x86, VyOS, pfSense 等软路由系统后,考虑到功能丰富程度和易用性,最终选择了 pfSense.
本文主要记录我的 pfSense 关键配置。由于大多数配置在网上都能找到完整的配置步骤,文章中将不会过于详细地介绍配置步骤。

通过 ELK Stack 收集并显示路由器中的日志

我的家庭网络拓扑图
QoS

家中的 NAS 上经常进行 PT 下载,另外还有一台迅雷的玩客云,两个设备经常占满上传带宽。使用 RT1900ac 路由器的时候,想开 QoS,降低 BT/PT 协议、以及玩客云设备的优先级,但发现打开 QoS 之后,CPU 负载过高,甚至影响到了整体网速。
对于软路由来说,性能就不会是大问题了。在 pfSense 上,我首先尝试了使用 FAIRQ + CoDel 的方式,来模拟 fq_codel 实现流量整形,而不需要手动配置复杂的规则。如果体验一段时间后,发现效果不太理想,再尝试手动配置规则。
参考资料:
- HOW I MAXIMIZED THE SPEED OF MY NON-GIGABIT INTERNET CONNECTION (我的配置主要参考本文)
- 可能是家庭路由里最好的QoS——在线游戏者的福音
- Playing with fq_codel in 2.4 (pfSense 采用的 FreeBSD 内核已支持 fq_codel,但 UI 上暂时无法设置。考虑到稳定性等因素,我这次暂不手动设置)
- Traffic shaping/prioritization in PfSense
- Topic: Traffic shaper question
- QoS – Hack Sphere Labs Wiki
- CODELQ: PFSENSE
- Bufferbloat.net
- QUEUEING IN THE LINUX NETWORK STACK
- Controlling Queue Delay
Suricata IDS

Suricata 基础设置
Suricata 是一款 IDS/IPS 工具,能够检测网络中可疑的流量,例如下载恶意软件、端口扫描等。在 RT1900ac 上,Intrusion Prevention 工具也是基于 Suricata 的,但由于这款路由器内存太小,运行后占用资源过多,影响网速。
由于 pfSense 相对于 RouterOS 等操作系统,更侧重于防火墙,所以已经有功能较为全面的 Suricata 软件包,除了命令行工具外,还能在网页上方便地进行配置、更新规则、查看告警等。安装后即可使用。
参考资料:
使用 Kibana 可视化 Suricata 日志
RT1900ac 上的 Intrusion Prevention,拥有比较漂亮的 GUI 界面,能够将 Suricata 状态信息、攻击来源等以直观的形式显示出来。对于 pfSense,想要这样的功能,就需要其他工具了。
经过查找,我发现了 kibana 工具,能够分析 Suricata 的日志信息,并对日志信息进行可视化。初步看来,其可视化的界面效果比 Intrusion Prevention 还要好。
由于 kibana 及相关的工具安装较为复杂,暂时没有可以一键使用的 Docker 镜像,所以暂时还没有配置安装完毕。准备在 NAS 上再开一台 Ubuntu Server 虚拟机,运行 kibana,并尝试在后面有时间的时候,制作一个整合了 Syslog Server、ELK Stack 的 Docker 镜像,使 kibana 直接在 Docker 容器中运行。
Update(2018-06-15):
已制作了一个 Docker 镜像,能够直接收集 pfSense 和 Suricata 的日志信息,并可视化。具体请参考:https://github.com/blanboom/docker-elk-suricata
参考资料:
- pf (Firewall logs w/Suricata) + Elasticsearch + Logstash + Kibana
- Pfsense, Suricata and Kibana
- PFSense Snort Logstash
- StamusNetworks/Amsterdam: Docker based Suricata, Elasticsearch, Logstash, Kibana, Scirius aka SELKS
- Containerizing my NSM stack — Docker, Suricata and ELK
- Elasticstack (ELK), Suricata and pfSense Firewall – Part 2: Elasticstack Installation and Config
- pf (Firewall logs w/Suricata) + Elasticsearch + Logstash + Kibana
- sebp/elk – Docker Hub (适用于 Synology NAS 的版本:andig/syno-elk-docker)
流量监控

ntopng 控制面板
在我的 pfSense 中,安装有 ntopng 和 bandwidthd,用于监控网络中各个设备的流量。其中,bandwidthd 用于快速查看各设备的流量使用情况,ntopng 则提供了更为详细的流量使用信息。
NAT 设置

对于部分需要在内外网使用同一个 IP 访问的服务,需要在内网 LAN 口,通过 WAN 口 IP 地址,访问已经映射到公网的服务。对于之前的路由器,默认就可以在 LAN 口直接访问 WAN 口 IP,但在 pfSense 中,需要做一下特殊的设置,具体见这篇文章:
=========== End
pfSense QoS IDS的更多相关文章
- pfsense 企业应用实例
从萌生更换公司网关的想法,到选择.测试.部署陆陆续续用时两个月有余.选择的标准是open and free.这期间不断在查阅一些资料,测试了7.8个各开源防火墙产品.这些产品中大多是基于linux,少 ...
- pfsense下的流量管理(转)
http://www.pppei.net/blog/post/331 在作流量管理时,这些概念很重要,不要迷失.. 这里再对Limiter 的源地址和目的地址做个说明,因为limiter是被应用在La ...
- 提升网速的路由器优化方法(UPnP、QoS、MTU、交换机模式、无线中继)
在上一篇<为什么房间的 Wi-Fi 信号这么差>中,猫哥从微波炉.相对论.人存原理出发,介绍了影响 Wi-Fi 信号强弱的几大因素,接下来猫哥再给大家介绍几种不用升级带宽套餐也能提升网速的 ...
- MongoDB replica set IDs do not match
在搭建MongoDB(版本 3.2.9)的Replica Set时,使用 rs.status() 查看Replica Set的状态,发现一个成员异常:replica set IDs do not ma ...
- java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext问题原因及解决方法
一.错误信息 java.lang.ClassCastException: org.slf4j.impl.Log4jLoggerFactory cannot be cast to ch.qos.logb ...
- H3C qos 简单配置
qos 有三种服务模型 Best-Effort service(尽力而为服务模型) Integrated service(综合服务模型,简称Int-Serv) Differentiated servi ...
- rabbitmq qos prefetch count的设置与作用
因为原来使用了MQ作为rpc机制,随着客户交易量越来越大,很多服务器推送行情的压力很大,最近打算重写为批量模式,又重新看了下qos和prefetch设置的作用以确定优化的具体细节. 消费者在开启ack ...
- iOS不同IDS说明
1.Vindor标识符 identifierForVendor 一个英文字符串,对于相同的产品商(这里指com.zhang.*,也就是前缀一样),其唯一的标识设备. * 这个值对于相同的产品商在相同 ...
- 实时视频应用之QoS关键技术分析
转自:http://www.aiweibang.com/m/detail/104476372.html?from=p 随着WebRTC标准的逐步推广,实时音视频通讯技术受到越来越多公司和技术人员的关注 ...
随机推荐
- MYSQL Packet for query is too large (12054240 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.
MYSQL Packet for query is too large (12054240 > 4194304). You can change this value on the server ...
- kubernetes 亲和性调度详解
文章目录 1 概述: 2 场景一:调度到一组具有相同特性的主机上(label+nodeSelector) 3 场景二:部署的应用不想调度到某些节点上(nodeaffinity) 4 场景三:部署的应用 ...
- Web Service 和 WCF的比较
Web Service 和WCF的比较 Web Service 的工作原理 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intra ...
- Elasticsearch集成Hadoop最佳实践.pdf(内含目录)
Elasticsearch服务器开发(第2版) 介绍: ElasticSearch是一个开源的分布式搜索引擎,具有高可靠性,支持非常多的企业级搜索用例.ElasticsearchHadoop作为一个完 ...
- fa-list-alt
你可以用 <i> 标签把 Font Awesome 图标放在任意位置. <i class="fa fa-list-alt" aria-hidden="t ...
- linux中查看端口号
linux中查看端口号 yum install lsof -y [root@test1 ~]# lsof -i :80 COMMAND PID USER FD TYPE DEVICE SIZE/OFF ...
- LODOP计算结果值的合计
LODOP中可以通过表达式等方式,计算结果并显示在LODOP预览打印的表格里,计算的是table中本来存在的数据,可以用tindex指定合计哪一列(相关博文:)那一列的数值是table中实际存在的,如 ...
- html div高度100%无效
移动端相关: div高度继承自父元素——>body——>html 解决方案: html,body { height: 100%;margin: 0; padding: 0;} 然后对应的d ...
- app--Android 稳定性测试方案
标准的崩溃日志:Android 应用一般使用 Java 语言开发,在不作特殊处理的情况下,遇到未处理的异常时,会弹框提示“程序遇到异常,即将退出”(有些手机框中提示语不同, 或不弹框).同时会将异常的 ...
- 如何在Java中编写一个线程安全的方法?
线程安全总是与多线程有关的,即一个线程访问或维护数据时遭到了其它线程的“破坏”,为了不被破坏,就要保持所维护变量的原子性: 1 局部变量总是线程安全的,因为每个线程都有自己的栈,而在方法中声明的变量都 ...