FreeBSD配置防火墙并开启SSH服务的完整教程
1. 配置 FreeBSD 防火墙:从零开始设置网络防护
首先讲解防火墙的整体配置流程。核心配置文件是 /etc/rc.conf,使用编辑器打开该文件,在末尾追加以下配置项:
firewall_enable="yes" # 开启防火墙 net.inet.ip.fw.verbose=1 # 启用防火墙日志功能 net.inet.ip.fw.verbose_limit=5 # 日志条目数量限制 natd_enable="YES" # 开启防火墙NAT功能 natd_interface="rl0" # 指定公网接口 natd_flags="-dynamic -m" firewall_script="/etc/ipfw.rules" # 自定义防火墙规则路径
保存操作同样重要——按下 Esc 键,输入冒号,然后回车,即可完成写入。
2. 添加 IPFW 防火墙规则:精细管控内外网流量
规则文件指向 /etc/ipfw.rules,创建或编辑该文件,将下方脚本粘贴进去。注意,这套规则设计得相当详尽,全面覆盖了内外网通信、服务端口以及安全过滤策略。不过,在复制之前,有几个关键参数必须根据你的实际网络环境进行调整。
#!/bin/sh ################ Start of IPFW rules file #################### # Flush out the list before we begin. ipfw -q -f flush # Set rules command prefix cmd="ipfw -q add" skip="skipto 800" pif="rl0" # 公网接口名称,务必改成你实际使用的网卡 ################################################################## # No restrictions on Inside LAN Interface for private network # 修改 xl0 为你的内网接口名称 ################################################################## $cmd 005 allow all from any to any via xl0 ################################################################## # No restrictions on Loopback Interface ################################################################## $cmd 010 allow all from any to any via lo0 ################################################################## # check if packet is inbound and nat address if it is ################################################################## $cmd 014 divert natd ip from any to any in via $pif ################################################################## # Allow the packet through if it has previous been added to the # the "dynamic" rules table by a allow keep-state statement. ################################################################## $cmd 015 check-state ################################################################## # Interface facing Public Internet (Outbound Section) # Check session start requests originating from behind the # firewall on the private network or from this gateway server # destined for the public Internet. ################################################################## # Allow out access to my ISP's Domain name server. # x.x.x.x 必须填你 ISP 的 DNS 服务器 IP # 如果有多个 DNS,复制这几行即可 $cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep-state $cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep-state $cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state $cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state $cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state $cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state $cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root $cmd 080 $skip icmp from any to any out via $pif keep-state $cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state $cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state $cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state $cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state $cmd 130 $skip udp from any to any 123 out via $pif keep-state ################################################################## # Interface facing Public Internet (Inbound Section) # Check packets originating from the public Internet # destined for this gateway server or the private network. ################################################################## # Deny all inbound traffic from non-routable reserved address spaces $cmd 300 deny all from 192.168.0.0/16 to any in via $pif $cmd 301 deny all from 172.16.0.0/12 to any in via $pif $cmd 302 deny all from 10.0.0.0/8 to any in via $pif $cmd 303 deny all from 127.0.0.0/8 to any in via $pif $cmd 304 deny all from 0.0.0.0/8 to any in via $pif $cmd 305 deny all from 169.254.0.0/16 to any in via $pif $cmd 306 deny all from 192.0.2.0/24 to any in via $pif $cmd 307 deny all from 204.152.64.0/23 to any in via $pif $cmd 308 deny all from 224.0.0.0/3 to any in via $pif $cmd 315 deny tcp from any to any 113 in via $pif $cmd 320 deny tcp from any to any 137 in via $pif $cmd 321 deny tcp from any to any 138 in via $pif $cmd 322 deny tcp from any to any 139 in via $pif $cmd 323 deny tcp from any to any 81 in via $pif $cmd 330 deny all from any to any frag in via $pif $cmd 332 deny tcp from any to any established in via $pif $cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep-state $cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2 $cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2 $cmd 390 allow tcp from any to me 23 in via $pif setup limit src-addr 2 $cmd 400 deny log all from any to any in via $pif $cmd 450 deny log all from any to any out via $pif $cmd 800 divert natd ip from any to any out via $pif $cmd 801 allow ip from any to any $cmd 999 deny log all from any to any ################ End of IPFW rules file ############################
需要特别留意的地方:
如果你的内网地址是 192.168.21.173(即落在 192.168.0.0/16 网段内),那么 $cmd 300 这一行必须注释掉,否则本机也将无法访问外网——这是典型的“拦截了所有私有地址却忘记放行自身”的错误。
$cmd 380 这行负责开放 SSH 默认端口 22,便于远程安全管理服务器。
3. 重启网络服务,使防火墙规则立即生效
规则编辑完成后,接下来就是激活配置。请按顺序执行以下命令:
/etc/netstart # 重启网络 /etc/rc.d/ipfw start # 开启防火墙 ipfw disable firewall # 关闭防火墙(如果需要) ipfw enable firewall # 重新开启 /etc/rc.d/ipfw restart # 重启防火墙 sh /etc/ipfw.rules # 手动加载自定义规则
如需彻底关闭防火墙,可使用 ipfw disable firewall,但在生产环境中建议始终保持开启,确保系统安全。
4. 开启 SSH 服务,实现远程安全登录
防火墙配置完成后,接下来配置 SSH 服务。整个流程分为三步:
第一步:编辑 /etc/inetd.conf,找到下面这行,去掉行首的 # 注释符号(若已被注释):
ssh stream tcp nowait root /usr/sbin/sshd sshd -i -4
第二步:编辑 /etc/rc.conf,追加以下内容:
sshd_enable="yes"
第三步:编辑 SSH 配置文件 /etc/ssh/sshd_config,设置以下参数确保远程连接可用:
PermitRootLogin yes # 允许 root 登录 PasswordAuthentication yes # 使用密码验证 PermitEmptyPasswords no # 不允许空密码登录
最后启动或重启 SSH 守护进程:
/etc/rc.d/sshd start /etc/rc.d/sshd restart
至此,所有配置完成。现在可以使用 Putty 等 SSH 客户端工具尝试连接,验证是否能够正常远程管理 FreeBSD 服务器。
扩展阅读:IPFW 规则加载的两种常用方式
两种方法均可正常工作,取决于个人习惯。第一种是直接设置 firewall_type 变量,使其指向一个只包含规则的文本文件(不包含 ipfw 命令选项)。例如:
firewall_type="open" # 允许所有流量 firewall_type="client" # 只保护本机 firewall_type="simple" # 保护整个网络 firewall_type="closed" # 禁止除回环外的所有 IP 流量 firewall_type="UNKNOWN" # 不加载规则 firewall_type="/path/to/file" # 绝对路径
第二种方式就是本文采用的方法:使用 firewall_script 变量指向一个可执行的 Shell 脚本,系统启动时会自动运行该脚本加载规则。系统自带的示例规则文件位于 /etc/rc.firewall 和 /etc/rc.firewall6,可作为学习参考。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Mac隐藏左上角菜单栏苹果图标
先直接告诉你答案:Mac电脑屏幕左上角的那个苹果标志,既无法关闭,也无法隐藏。它是系统级的固定入口,所有macOS版本都会强制显示。苹果既没有提供开关选项,也没有预留终端命令,更不可能在系统偏好设置里让你找到隐藏开关。如果有人声称能用第三方工具或修改系统文件来删除它,千万别相信——结果很可能是系统不
Win11切换输入法的几种常用方法和快捷键设置
写文档写得正顺,突然要敲几个英文单词,或者打代码时想切回中文拼音——手指条件反射地按下Ctrl+Space,光标却纹丝不动。这种场景你应该不陌生。Windows 11其实准备了五种互不干扰的切换方式,有些连锁屏界面都能响应,关键是你得选对场景来用。下面把这五种路径挨个拆开,看完你就能找到最适合自己的
电脑开机黑屏提示未检测到启动盘修复方法
电脑开机直接黑屏,屏幕上孤零零地显示一句“No boot disk has been detected”——别紧张,这并非系统崩溃,也不是常见的蓝屏代码,而是主板在告诉你:“我没有找到硬盘。”换句话说,电脑连BIOS自检阶段都没能通过。 这属于硬件层面的硬中断,与引导损坏、系统文件丢失完全不是一回事
Windows 11更改默认音频采样率级别的详细方法
Windows 11 用户在播放音频时,偶尔会遇到爆音、杂音甚至声音动态被压缩得干瘪的情况。这种问题通常并非硬件损坏,而是系统在音频采样率设定上“擅作主张”了。例如某次系统更新后,默认格式可能被悄然重置为 24 位 192000 Hz——一个不少声卡难以稳定运行的高规格,结果导致 DMA 缓冲溢出、
Win11如何查看笔记本实时充电功率
对于笔记本充电功率的实时监测,系统自带的电池图标只能显示“正在充电”或“已充满”,却无法告知具体的瓦数。要获得实时数值,需要绕过默认界面直接读取硬件传感器。这里直接给出结论:最可靠的工具是HWiNFO64,其次是BatteryInfoView,而powercfg只能用于间接验证。无论你遇到插着65W
- 日榜
- 周榜
- 月榜
相关攻略
2026-07-02 07:30
2026-07-02 07:29
2026-07-02 07:29
2026-07-02 07:29
2026-07-02 07:29
2026-07-02 07:29
2026-07-02 07:29
2026-07-02 07:28
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

