一.系统安装
安装FB的时候选择最小化安装还需要选上源代码.或者在安装完成之后执行sysinstall命令.选择configure->Distributions->src->sys安装内核代码
二.cvsup升级
在安装完系统以后的第一件事情是升级ports对.安装cvsup不再赘述,cd /usr/ports/net/cvsup && make install clean进行安装.并更新ports树
三.内核配置
# cd sys/i386/conf
# cp GENERIC KERNEL_IPFW
#取消控制台按Ctrl+Alt+Del重启
options SC_DISABLE_REBOOT
#启用内核防火墙
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
#options IPFIREWALL_DEFAULT_TO_ACCETP
IPV6的options
options IPV6FIREWALL
options IPV6FIREWALL_VERBOSE
options IPV6FIREWALL_VERBOSE_LIMIT
options IPV6FIREWALL_DEFAULT_TO_ACCEPT
这些选项与 IPv4 的对应选项功能一样, 它们是针对 IPv6 的。 如果不使用 IPv6,则不带任何规则的 IPV6FIREWALL 将阻止所有的 IPv6 包。
options IPDIVERT //这一选项启用 NAT 功能
另外,防火墙编译进去后,默认是拒绝所有连接得,即它当中最后有一条默认的规则编号65535这一条:deny ip from any to any是启用的。
但是我们可以在编译内核时加上:
options IPFIREWALL_DEFAULT_TO_ACCETP,IPV6则是
options IPV6FIREWALL_DEFAULT_TO_ACCEPT,这样默认情况下,防火墙时对外开放的,不过我们这里没有把这个编译进去,需要时自己修改防火墙的设置吧,这样比较放心,^_^ 因为我们这里不做网关,其他的的详细设置也就不加进去
编辑完成之后执行:
# /usr/sbin/config/kernel_ipfw
# cd ../compile/kernel_ipfw
# make celandepend && make depend
# make && make install clean
内核编译需要一段时间.完成后执行reboot.使用uname -a可以看到内核编译是否成功.以下是我完成后的显示
# uname -a
FreeBSD openvpn.tenda 6.1-RELEASE FreeBSD 6.1-RELEASE #0: Sat Mar 31 20:11:41 CST 2007 net@openvpn.tenda:/usr/src/sys/i386/compile/KERNEL_IPFW i386
net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=5
加入下面内容:
sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enbale="NO"
sendmail_msp_queue_enable="NO"
#因为我们不配置mail服务器,也用不着sendmail就全部禁用吧。
update_motd="NO"
# 启动登录时老出现这个信息界面,比较烦人,去掉,顺便把etc目录下面的motd文件里面的东西清光
firewall_enable="YES"
firewall_quiet="NO"
firewall_logging="YES"
tcp_drop_synifn="NO" 做web服务器时这项要改成NO,而不能是YES.
tcp_restric_rst="YES"
tcpdrop_redirect="YES"
firewall_type="open" 这条命令是在6.x上面新增的,配置了这条参数后防火墙就是对外开放了
五、ipfw基本规则设置
上面我们设置了firewall_type="open"
这个是让防火墙完全开放,现在我们来具体设置防火墙的规则:
增加下面内容:
#!/bin/sh
# DNS服务器与客户端的通讯端口都是udp的53号端口,因此我们只有开放自己与DNS服务器之间的53号端口进行通信即可,如果你知道自己的DNS服务器的ip地址可以把下面的any改成你的DNS地址。
# DNS
ipfw add allow udp from me to any 53 out
ipfw add allow udp from any 53 to me in
# DHCP的服务器与客户端的通讯端口是udp 67、68端口,其工作原理这里不多做介绍,如果你知道自己的DHCP服务器地址可以把其中的any改成你的DHCP服务器地址,前面两条是正常情况下的规则,如果你的DHCP服务器不是很可靠,你可以加上下面注释掉的两条,当然一般情况下这两条可以不加。
# 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
# 在创建与ICMP有关的规则时,只能指定ICMP数据包的type而不能指定它的code。
# 允许接受一些ICMP types (不支持codes)
###########允许双向的path-mtu
ipfw add allow icmp from any to any icmptypes 3
ipfw add allow icmp from any to any icmptypes 4
我需要考虑是否需要ping我的网络之外的主机或运行traceroute命令,由于二者都需要,并希望收到相应的应答,但我并不希望互联网上的所有用户都可以对我运行ping 或traceroute命令,因此,我需要添加下面的规则:
###########允许我对外部的主机运行ping命令,并得到相应的应答
ipfw add allow icmp from me to any icmptypes 8 out
ipfw add allow icmp from any to me icmptypes 0 in
###########允许我运行traceroute命令
ipfw add allow icmp from any to any icmptypes 11 in
# ICMP type 8是一个查询请求,ICMP type 0是对查询请求的应答。由于我只允许反复地发出请求并接受应答,从而我可以ping别人而别人不能ping我。
如果想别人也能ping到自己的话,只需要把上面的规则相对设置一下:
ipfw add allow icmp from any to me icmptype 8 inipfw add allow icmp from me to any icmptype 0 out
# 在运行traceroute命令时,就会向外发出UDP数据包。如果希望能够获得所有应答信息,我还必须允许系统接受所有的CMP type 11数据包。
####### TCP类型服务 ##########
# 只允许向外发送信息包
ipfw add check-state
ipfw add deny tcp from any to any in established
ipfw add allow tcp from any to any out setup keep-state
# 允许ssh等tcp端口的服务
ipfw add allow tcp from any to me 21,22,80,3306 in
ipfw add allow tcp from me 22 to any out
# 由于web服务通过80端口进来,但是出去的数据是随机的,所以还得再加一条:
ipfw add allow tcp from me to any out