Ipfilter心得集
吴德辉
2023-12-01
首先,编译内核,添加如下两行:
options IPFILTER
options IPFILTER_LOG
##另外有:options IPFILTER_DEFAULT_BLOCK,但是我个人认为没有什么用处。
然后,修改你的/etc/rc.conf文件,添加:
####################################
gateway_enable="YES"
ipfilter_enable="YES"
ipfilter_program="/sbin/ipf"
ipfilter_rules="/etc/ipf.rules"
ipfilter_flags=""
##起动包过滤功能
ipnat_enable="YES"
ipnat_program="/sbin/ipnat"
ipnat_rules="/etc/ipnat.rules"
ipnat_flags="CF"
##起动地址翻译功能
ipmon_enable="YES"
ipmon_program="/sbin/ipmon"
ipmon_flags="-Ds"
##起动日志记录功能
######################################
然后在/etc目录下建立ipf.rules ipnat.rules两个文件
在/etc下面建立的两个文件就是ipfilter的规则文件现在开始修改规则文件
先说 :我的外网卡:rl0 *.*.*.45/24
我的内网卡:dc0 192.168.0.1/24
先是 ipf.rules:
block in quick all with short #丢弃短小的包
block in quick all with ipopts #丢弃自身带有路由功能的包
pass in quick on lo0
pass out quick on lo0 all #在本地回环上面,一律通过
###############
#然后给自己的网卡分组#
###############
block in quick on dc0 all head 100 #如果分组100没有允许,则BLOCK
block out quick on dc0 all head 150 #如果分组150没有允许,则BLOCK
block in quick on rl0 all head 200 #如果分组200没有允许,则BLOCK
block out quick on rl0 all head 250 #如果分组250没有允许,则BLOCK
#在内网卡的IN为分组100
#在内网卡的OUT为分组150
#在外网卡的IN为分组200
#在外网卡的OUT为分组250
####################
#首先编辑内网卡的IN规则
####################
pass in quick proto tcp from 192.168.0.0/24 to any keep state group 100
pass in quick proto udp from 192.168.0.0/24 to any keep state group 100
pass in quick proto icmp from 192.168.0.0/24 to any keep state group 100
psss in quick proto esp from 192.168.0.0/24 to any keep state keep flags group 100
pass in quick proto gre from 192.168.0.0/24 to any keep state group 100
#分别允许tcp,udp,icmp,esp(ipsec),gre(pptp)协议通过.
#################################################
.
.
.
按照类似规则,编辑其他分组
.
.
.
#################################################
#最后,应有阻止10.0.0.0/8 127.0.0.0/8 172.16.0.0/12 192.168.0.0/16的规则
block in quick from 10.0.0.0/8 to any group 200
block in quick from 127.0.0.0/8 to any group 200
block in quick from 172.16.0.0/12 to any group 200
block in quick from 192.168.0.0/16 to any group 200
#################################################
#最终明确阻止
blocl in quick all
block out quick all
#################################################
然后,看ipnat.rules规则
#############
map rl0 192.168.0.0/24 -> *.*.*.45/32 proxy port ftp ftp/tcp
#作用是对有写需要主动端口的ftp的代理
map rl0 192.168.0.0/24 -> *.*.*.45/32 portmap tcp/udp 10000:65000
map rl0 192.168.0.0/24 -> *.*.*.45/32 #对icmp协议的转换
rdr rl0 *.*.*.45 port -> 192.168.0.2 port 80
#对于内网提供web服务的端口映射,其他比如ftp,dns抗议参照这个来设定
###########################################
到此,利用ipfilter来完成防火墙的设定完成。
我觉得,首先 ,要规划好自己的网络 ,一般拥有两个if(或许你有第三个DMZ),但是原理是一样的 ,首先,分组自己的IF,在没个分组里面,设置自己的规则,这样,就不是那样的混乱,先通过,最后,一切阻止,这是一般的作法,可是有的时候,你要这样作,先阻止,然后通过一切,但最终的目的都是一样的 。
然后规划自己要向外提供的服务,这就需要ipnat.rules规则来详细的划分,如果你有第三块网卡,那么可以为自己提供非军事区口,可是到最终的原理还是一样的 ,一个map,一个rdr,这个文件其实没有太多可以控制的东西。
防火墙最大的作用就是访问控制,简单点说,就是ipf.rules中的规则你设置的如何。在pass,block里面,象flags s/safp 等的参数,可是我现在还没有用到,所以,他的具体用法我还不太清楚,用实践的话,在给大家提供。
############
最终还有几条命令:ipnat ,ipf ,他们的具体使用可以看man,可是如果你要看当前的状态表的话,那么 #ipfstat -t 一定回满足你的要求的。