为了上线OPNsense,转个B乎姿势贴:OPNSense 的安装与规则设置

pfsense稳定是稳定,操作也不算难,比ros好很多。但大牌子都这样,驱动更新贼慢,无法识别2.5G螃蟹卡8125B,不得已,只能换opnsense。

(顺便测试下万事屋的引用功能):

%title插图%num
%title插图%num

圈子话题

18年就上线的pfsense,居然至今木有螃蟹壳8125B的驱动 ……

虽然云服务越来越流行,但是最近还是想学习一下如何从零开始架设一个网站。为了防止以后遗忘一些细节,决定把自己实验的东西记录下来作为以后的参考,顺便也为其他有需要的同学们作个参考。

个人觉得,自己架设网站的最总要的东西就是安全防护。网站程序能不能正常运行先放一边,服务器被人黑、数据库被人搞,用户信息泄露弄不好要惹上官司的。所以第一步先把防火墙弄好,安全第一。墙里面随便怎么搞都是自己的事。

开源防火墙最火的莫过于 pfsense,网络上大多数教程和讨论也都是围绕 pfsense 的。但是在考虑了诸多因素(穷)之后,我还是毅(Wan)然(Ban)决(Wu)然(Nai)的选择的 pfsense 的分支,OPNSense。这其中,最重要的原因就是 pfsense 需要支持 AES-NI 的 CPU,然而我只有一块上古时期的 Core E6300(泪目)。其他有条件的同学可以使用 Intel i3/5/7系列的 CPU,或者 AMD 的 CPU,基本都支持 AES-NI。

OPNSense 是开源防火墙,可以在官方下载页面(opnsense.org/download/)免费下载最新版的安装包。安装包有不同版本,我因为日常用水果电脑,所以下载的 VGA 版本,文件后缀名为.img。官网页面中也有详细的、针对不同平台的启动 U 盘制作方法。对 OSX 来说:1. 用 diskutil list 命令找出 U 盘的盘号;2. 用 sudo dd if=OPNsense-XXXX-OpenSSL-vga-amd64.img of=/dev/rdiskXXXX bs=64k 命令制作启动 U 盘。

开机设置 u 盘启动,等它加载系统文件。如果电脑配置像我这样比较老的话,用时可能会比较长,但是千万别走开,因为一会儿它会要求“5秒之内按任意键跳过自动设置”。OPNSense 的自动设置比较迷,在我的印象里从来没正确过。所以如果不想一会儿自己再重新弄一次的话,就老老实实等在屏幕前面。

为了上线OPNsense,转个B乎姿势贴:OPNSense 的安装与规则设置-1

进入手动配置之后,首先屏幕上会列出本机安装的所有网卡的编号、MAC 地址和芯片名。如果是单插口网卡或者各个网卡芯片不一样的话,还好分辨编号所对应的插口。如果像我这样插了一个多口网卡,又完全不知道每个插口的 MAC 地址,就会比较2。对此我的解决方案是,挨个试。网线插入不同接口的时候,屏幕上会显示出来 “XX 接口上线”。试的过程中建议把编号和 MAC 地址都记下来,以后可能会用到。

为了上线OPNsense,转个B乎姿势贴:OPNSense 的安装与规则设置-2

第一项设置是“是否要设置虚拟局域网”,输入 n,先跳过去;第二项是输入互联网网线插口;第三项是输入局域网网线插口;第四项是输入其他插口,跳过去。系统一通操作之后,如果顺利,屏幕上会显示防火墙的外网地址和内网地址。

登陆 root 用户(默认密码 opnsense),如果有问题或者之前手滑了,现在可以再重新设置。我们选择选项7,输入百度或者谷歌的 IP 地址,如果没有丢包,说明我们的防火墙已经顺利连接到了互联网。

为了上线OPNsense,转个B乎姿势贴:OPNSense 的安装与规则设置-3

注意,到现在安装还没有完成,现在还都是演示模式。要登陆安装器才开始安装到硬盘上,否则下次开机还得从头再来。登陆用户名 installer,密码opnsense,然后一路回车搞定重启。重启后按照 LAN 口的网址访问 OPNSense 的网页。

第一次进入 OPNSense 会显示启动向导,可以直接将语言调为中文。绝大多数选项下方都会有相应的说明,设置起来没有太多障碍。OPNSense 允许我们针对每一个子网络设定不同的规则,同时还有作用于多个子网络的优先规则。但是如何撰写这些去规则,以及用什么顺序去排列它们就要我们去开动脑筋了。简单记录一下我对于设置各个子网络间访问规则的经验。

我简单规划了3个子网:家庭(em1_vlan1003),访客(em1)和试验用小白鼠(em2)。我希望达到的效果是所有子网都可以访问公网,互相之间不能访问对方,但是我从家庭网络可以通过22端口 ssh 到任意一台试验网络中的服务器。

我首次尝试规则时的想法很直接:

  1. 允许来自其他网段从特定端口的穿透,比如 ssh 22;
  2. 禁止来自其他网段的所有流量;
  3. 允许从当前网段访问任意地址,达到访问公网的目的。

于是我制定了以下规则:

为了上线OPNsense,转个B乎姿势贴:OPNSense 的安装与规则设置-4
为了上线OPNsense,转个B乎姿势贴:OPNSense 的安装与规则设置-5
为了上线OPNsense,转个B乎姿势贴:OPNSense 的安装与规则设置-6

然而,理想是丰满的,现实是骨感的。这样设置的结果就是访客可以随意访问其他子网,包括 ssh 到试验网络。在谷歌上百度了一下午后,终于理解了 OPNSense,以及同源的 pfsense 是如何把 GUI 里面的规则转化为 FreeBSD 的 pfctl 规则:

  1. 防火墙系统首先构建一系列默认规则,保证流量可以进出;
  2. 按照接口名称的顺序编排规则,以我的情况为例,WAN(em0),Guest(em1),Home(em1_vlan1003),Work(em2);
  3. 在每个接口中,按 GUI 页面里规则的排列顺序编排。

按照这种规则的排列方式,“允许 Guest 网络访问所有网络”的规则排在了“禁止其他网络访问 Home”之前。但是“”允许本网络访问其他所有网络“”又是接入公网所必需的,造成了矛盾。要解除这个矛盾也容易,把流量限定在除其他子网络以外的所有网络就好了。

在重新思考以及参考网上讨论过后,我使用了如下思路:

  1. 允许当前网段访问其他网段的特定端口,比如 ssh 22;
  2. 禁止本网段访问其他子网段;
  3. 允许从当前网段访问任意地址。

搞定,收工!

本文转自B乎:阅读原文

给TA打赏
共{{data.count}}人
人已打赏
技术宅

程序猿可以看看的转载~一个小时内创建一个 CentOS 家庭实验室

2022-1-2 16:35:09

技术宅

不是吐槽,是转载技术干货!CMD命令大全之个人笔记

2022-1-3 21:20:05

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索