IPFW和IPFlinux
1、IPFW
IPFW意思能够理解为ip防火墙,主要做用是拦截设定规则外的ip包。你能够把这个理解为linux下的iptables,可是,ipfw要比iptables简单易用。
freebsd系统默认是不安装ipfw或者ipf的,你须要在内核配置文件中启用并从新编译内核。因此,你须要先运行sysinstall-->Distribution->src->选择base,sys,而后安装系统内核源码。
而后进行下列步骤
#cd /usr/src/sys/amd64/conf #cp GENERIC IPFW #vi IPFW
在最下面加入如下内容
options IPFIREWALL options IPFIREWALL_VERBOSE options IPFIREWALL_VERBOSE_LIMIT=10
options IPFIREWALL_DEFAULT_TO_ACCEPT
粗体字十分重要,若是你不加上的话,IPFW将默认关闭全部连结,至关于物理隔离了,你将没法远程登陆维护。
而后编译内核。注,你必须安装源码中的base,不然你将没法编译任何东西
#cd /usr/src #make buildkernel KERNCONF=IPFW #make installkernel KERNCONF=IPFW
而后进入/etc
#vi rc.conf 加入如下内容
firewall_enable="YES" firewall_type="open" #open或规则文件绝对路径
以后等待编译并安装完成。IPFW就启用了,而后重启就能够开始配置IPFW的规则了。你过去的kernel将放在/boot/kernel.old,若是你编译后有任何启动方面的问题,能够在刚开始启动的选择菜单选择Load Prompt选项,而后打boot kernel.old启动你原来没有问题的内核。
相比于iptables那种-m -d的选项方式的命令行,IPFW的配置更接近于人类的语言。其实目前有不少防火墙或者流控系统都是是基于FreeBSD的IPFW或IPF的,只是作了一个网页的界面,便于不太熟悉命令行操做的人使用,好比panabit或者m0n0wall。不过我以为,其实命令行更灵活和方便简单。
ipfw份内规则和外规则两种,设定规则时,你须要给定规则编号,10000之内为内规则,以上是外规则。固然你也能够给10000之内的,只要你本身看得懂就行,一条规则ID能够分配多个规则使用。关于规则ID,若是你学习过路由交换和cisco的acl,应该是比较容易理解的。实际上Cisco的IOS就是基于BSD系统作嵌入式开发的。若是实在没有概念,你能够把规则ID理解为key,规则内容就是key对应的value。
ipfw基本语法以下
ipfw 操做(添加|删除) 规则编号 动做(容许|拒绝) 地址(All) from 地址(IP|ANY) to 地址(IP|ANY) 端口号
示例以下
#ipfw add 10001 deny all from any to 192.168.1.10 22
注意,请不要将这行代码放入你的服务器里,不然你将没法访问。
按照人类语言的描述就是,
ipfw 添加 10001 拒绝 全部 从 任意地址 到 192.168.1.10的22端口。若是你须要去掉这条规则,就把add换成delete,ipfw的使用方法写出来有好几页,能够去查看FreeBSD的中文手册,BSD这点很是好,手册很是详细。
你也能够用ipfw作nat转发,示例以下
#ipfw nat 1 config redirect_addr 10.0.0.1 10.0.0.66 #ipfw nat 2 config redirect_port tcp 192.168.0.1:80 500 #ipfw nat 3 config redirect_proto udp 192.168.1.43 192.168.1.1
这样来讲,ipfw能够完成的事情很是多,并不比iptables差,而且因为tcp/ip协议是在bsd上先实现的,因此,效率更高。并且语法更简单明了。也一样能够对二层地址(MAC)进行访问控制。
使用ipfw list查看当前规则
2、IPF
IPFW和IPF是两个彻底不一样的东西,可是功能和性能很接近,没有谁好谁坏,看使用习惯了,可是一样都须要从新编译内核才能够生效。前面几步跟IPFW同样。
#cp GENERIC IPF #vi IPF
插入如下内容
options IPFILTER options IPFILTER_LOG
编辑/etc/rc.conf
#vi /etc/rc.conf
加入
ipfilter_enable="YES" #打开ipfilter ipfilter_rules="/etc/ipf.rules" #ipfilter规则文件绝对路径 gateway_enable="YES" #做为网关使用 ipnat_enable="YES" #nat转发打开 ipnat_rules="/etc/ipnat.rules" #nat 规则文件绝对路径
而后从新编译,安装内核,重启。
典型命令以下
#ipf -l pass in quick on lo0 all #ipf -l block in quick on em0 from any to 192.168.0.0/16
解释一下:
ipf 容许 进入 在 lo0(环回地址) 所有
ipf 锁定 进入 在em0 从 任意 到 192.168.0.0/16(B类)
很是简单
ipnat是ipf下能够作nat转发的工具,我通常会把nat规则写入到一个文件里,这样启动的时候会自动加载不少规则,不用一个一个去执行。
典型文件内容以下
map bce1 192.168.10.0/25 -> 211.103.xxx.xx1/32
#将bce1地址192.168.10.0/25(VLSM)转发到211.103.xxx.xx1/32(固定地址)
map bce1 192.168.20.111/32 -> 211.103.xxx.xx2/32
#将bce1地址192.168.20.111/32(固定地址)转发到211.103.xxx.xx2/32(固定地址)
rdr bce1 192.168.10.2/32 port 80 -> 211.103.xxx.xx2/32 port 8100 tcp
#端口转发(rdr) bce1 地址192.168.10.2/32(固定地址)的80端口 转发到 211.103.xxx.xx2/32的8100端口。
ipfw和ipf大体就是这样,还有一个过滤工具叫pf,全称为packet filter,那个不是很熟,就不写了。有任何疑问能够参看BSD的手册,解说很是详细。
options ACCEPT_FILTER_DATA options ACCEPT_FILTER_HTTP options ACCEPT_FILTER_DNS