ipfw 简单介绍

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.conf"
#firewall_script="/etc/ipfw.rules"

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


open ── 允许所有流量通过。
client ── 只保护本机。
simple ── 保护整个网络。
closed ── 完全禁止除回环设备之外的全部 IP 流量。
UNKNOWN ── 禁止加载防火墙规则。
filename ── 到防火墙规则文件的绝对路径。

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

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 命令动态添加的规则

参考文档:官方手册FreeBSD 自带防火墙 ipfw 简单介绍

FreeBSD定期创建快照

1、安装sysutils/freebsd-snapshot


portmaster sysutils/freebsd-snapshot

2、配置cron


sudo crontab -e

添加


# /etc/crontab
0 * * * * root /usr/local/sbin/periodic-snapshot hourly
0 0 * * * root /usr/local/sbin/periodic-snapshot daily
0 0 * * 0 root /usr/local/sbin/periodic-snapshot weekly

编辑/etc/periodic.conf

sudo vim /etc/periodic.conf

添加

snapshot_enable="YES"
snapshot_schedule="/home:2:10:0"

上述snapshot_schedule变量值必须符合以下语法:

<schedule>
::= <entry>*
<entry>
::= <fs> (", <fs>)* : <spec>
<fs>
::= /^.*$/
<spec>
::= <gen_weekly> : <gen_daily> : <gen_hourly> <gen_weekly> 
::= <generation>
<gen_daily>
::= <generation> <gen_hourly> 
::= <generation> ("@ <hour> (", <hour>)*)? <generation> 
::= /^[0-9]+$/
<hour>
::= /^(0?[0-9]|1[0-9]|2[0-3])$/

FreeBSD 11发布

FreeBSD项目正式发布了11分支的第一个稳定版本。

主要新特性包括:

  • OpenSSH默认禁用DSA密钥生成,移除 Protocol 1支持;
  • OpenSSH更新到7.2p2;
  • 无线支持IEEE 802.11n;
  • 支持AArch64 (arm64) 架构;
  • 从NetBSD项目移植了libblacklist(3)库和应用;
  • 其它包括性能改进和支持更多无线芯片组等等。

转载自Solidot

portmaster使用介绍

portmaster是一个用来升级ports的工具,它并不依赖于其他的数据库去追踪你已经安装的软件,而仅仅利用现有的ports架构,比如是/var/db/pkg

portmaster的特点是通过port的依赖追踪而保持你的port随时更新到最新,这能够允许你去安全的更新某一特定的port而不必不得不更新基于这个port的其他软件,当然,在极少的情况下,你有重新编译那些依赖于你更新port的软件的需求,因此你可以用-r选项来完成。

portmaster默认更新那些你在命令中指定的port,portmaster会去查询是否存在软件的最新版本,然后通过make config命令遍历指定的port和它所依赖port的编译选项,假如你从来没有安装过port或者更改了编译选项,将会有编译选项窗口来提示选择编译选项,当然,如果你想要默认提示所有的选项,可以使用—force-dialog选项

当portmaster在遍历port的依赖关系的时候,假如你没有使用—packages*选项,portmaster会在后台默认启动一个make checksum进程去检查和验证已经下载和软件包,如果你在此时按了ctrl+c,会默认终止这个检查

下面介绍一些常用的选项:


--force-config //为所有的ports执行make config,会覆盖-G选项
-G //阻止make config,也就是使用默认选项
-B //不为已经安装的ports做备份
-b //为已经安装的ports做备份
--update-if-newer //当软件已经是最新了,就不再重新安装,只在命令行后跟软件包才执行
-P //使用package来安装,假如没有合适的package,也可以用ports替换
-PP //只使用package安装,假如没有合适的,就放弃安装或者升级
-a //检查所有的ports,假如有必要就执行升级
-l //根据ports的分类列出所以已经安装的port
--index //只使用INDEX-[7-9]去检查port是否已经是最新了
--no-confirm //在将要执行升级或者安装之前,不询问用户,直接执行
--package-build //使用package来安装编译过程的一些依赖
--delete-build-only //当一个port安装完之后,删除只在编译过程中使用依赖ports

举个例子:假如我想更新或者新安装nginx,然后使用package安装编译过去依赖的包,并且在编译完成之后删除它们

portmaster --packages-build delete-build nginx

假如我要更新所有的包