FreeBSD 自带防火墙 ipfw 简单介绍

Pader2016年3月20日 发表于 系统与硬件 FreeBSD ipfw 防火墙

最近 FreeBSD 的 VPS 总是有些奇怪的链接,不得不了解一下 FreeBSD 的防火墙了。在网上找了多处的资料,发现资料都很老或者非常混乱,所以稍微整理了下做个记录分享,可以帮助大家快速上手吧。

FreeBSD 下首选的无疑是 ipfw 了,在官方的文档中有这么一段关于启用 ipfw 的说明:

IPFW 是基本的 FreeBSD 安装的一部分, 以单独的可加载内核模块的形式提供。 如果在 rc.conf 中加入 firewall_enable="YES" 语句, 就会自动地加载对应的内核模块。 除非您打算使用由它提供的 NAT 功能, 一般情况下并不需要把 IPFW 编进 FreeBSD 的内核。

启用

那么在 /etc/rc.conf 中加入以下配置则代表启用防火墙,使用 service ipfw start 启动:

注意:如果在线上直接启用的话很可能一不小心导致无法再连接,因为默认就是禁止所有连接,所以最好在本地或者虚拟机里先测试熟悉

firewall_enable="YES"

firewall_type="/etc/ipfw.rules"

#firewall_script="/etc/ipfw.conf"

其中 firewall_type 可以指定多种类型的值,如:

open ── 允许所有流量通过。

client ── 只保护本机。

simple ── 保护整个网络。

closed ── 完全禁止除回环设备之外的全部 IP 流量。

UNKNOWN ── 禁止加载防火墙规则。

filename ── 到防火墙规则文件的绝对路径。

上面示例指定 /etc/ipfw.rules 文件来作为规则

firewall_script 代表使用脚本来添加规则,区别是脚本可以执行命令,变量等组合规则,更加灵活(需要使用 ipfw add.. 来添加规则)

firewall_type 指定的规则文件则纯粹存放规则,一行一个,比较简单直观

修改规则后可以使用 service ipfw restart 生效


规则示例

(注意优先级是从上到下,一旦匹配到规则,则后面的规则都不再匹配,所以一般情况下禁止的应该先放上面):


#拒绝任何 IP 192.168.56.2 到本机的请求
#注意这里 10000 的这个数字是必须指定的一个规则编号,范围 1-65535,详情见手册

add 10000 deny ip from 192.168.56.1 to me

#允许任何请求
#因为默认是禁止任何请求的,若上面的规则没匹配到,则后面仍会禁止请求,所以要允许一下没有匹配到规则的请求
#具体是否要此条规则根据白名单形式还是黑名单形式而定

add 20000 allow all from any to any

#允许本机 UDP 协议使用 53 端口向外发出的请求(UDP 53 端口一般是 DNS 解析请求)
add allow udp from me to any 53 out

#同上,区别是允许解析结果返回到本机
add allow udp from any 53 to me in

#DHCP
ipfw add allow udp from me 68 to any 67 out
ipfw add allow udp from any 67 to me 68 in
# ipfw add allow udp from any 68 to 255.255.255.255 67 out
# ipfw add allow udp from any 67 to 255.255.255.255 68 in

#允许本机对外部的主机运行ping命令,并得到相应的应答
ipfw add allow icmp from me to any icmptypes 8 out
ipfw add allow icmp from any to me icmptypes 0 in

#允许别人ping我
ipfw add allow icmp from any to me icmptype 8 in
ipfw add allow icmp from me to nay icmptype 0 out

#允许我运行traceroute命令
ipfw add allow icmp from any to any icmptypes 11 in

#允许SSH等各种端口的服务
ipfw add allow tcp from any to me 21,22,80,3306 in
ipfw add allow tcp from me 22 to any out

注意很多示例中没有编号,最好加上


其它

可使用 ipfw -q -f flush 清除 ipfw 命令动态添加的规则


部分资料参考自:http://blog.haohtml.com/archives/9309

官方手册:https://www.freebsd.org/doc/zh_CN/books/handbook/firewalls-ipfw.html

评论 共有 0 条评论

暂无评论,快发表你的评论吧。