加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

安装使用 Freebsd PF详解

发布时间:2023-02-28 15:55:43 所属栏目:Unix 来源:
导读:Freebsd PF 安装使用

FreeBSD下的PF

FreeBSD下的包过滤工具有IPFW,IPF以及PF,它们各有特点。PF原本是OpenBSD下的包过滤工具,FreeBSD开发人员已经把PF移植到了FreeBSD上了。如果要在FreeBSD上使用PF,需如
Freebsd PF 安装使用
 
FreeBSD下的PF
 
FreeBSD下的包过滤工具有IPFW,IPF以及PF,它们各有特点。PF原本是OpenBSD下的包过滤工具,FreeBSD开发人员已经把PF移植到了FreeBSD上了。如果要在FreeBSD上使用PF,需如下操作:
 
1. 编译内核:
 
  cd /usr/src/sys/i386/conf
 
    cp GENERIC LOULAN
 
    编辑 LOULAN加入以下内容
 
    device pf
 
    device pflog
 
    device pfsync
 
    options ALTQ
 
    options ALTQ_CBQ
 
    options ALTQ_RED
 
    options ALTQ_RIO
 
    options ALTQ_HFSC
 
    options ALTQ_CDNR
 
    options ALTQ_PRIQ
 
    options ALTQ_NOPCC
 
    options ALTQ_DEBUG
 
    config LOULAN
 
    make depend&& make && make install && reboot
 
2. 编写防火墙规则pf.conf
 
  具体可以参考 man pf.conf ,根据实现需求编写防火墙规则。
 
    pfctl -f pf.conf      应用pf.conf的规则
 
    pfctl -sr            查看访问规则
 
    pfctl -sn            查看NAT规则
 
    pfctl -sa            查看所有PF信息
 
    pfctl -Rf pf.conf    重新加载访问规则
 
    pfctl -Nf pf.conf    重新加载NAT规则
 
    pfctl -Fa -f pf.conf 重新加载所有规则
 
Freebsd PF 安装使用
 
要在 FreeBSD 6.2 上使用 PF 防火墙,有二个方式,一个是编译进入核心,另外是以动态模块方式加载。
 
编译进入核心的方式
 
#FreeBSD log traffic,如果有使用 pflog,就要编译进核心
 
device bpf
 
#启动 PF Firewall
 
device pf
 
#启动虚拟网络设备来记录流量(经由 bpf)
 
device pflog
 
#启动虚拟网络设备来监视网络状态
 
device pfsync
 
以动态模块加载
 
vi /etc/rc.conf
 
加入下面四行
 
#启用 PF
 
pf_enable="YES"
 
#PF 防火墙规则的设定文件
 
pf_rules="/etc/pf.conf"
 
#启用 inetd 服务
 
inetd_enable="YES"
 
#启动 pflogd
 
pflog_enable="YES"
 
#pflogd 储存记录档案的地方
 
pflog_logfile="/var/log/pflog"
 
#转送封包
 
gateway_enable="YES"
 
#开启 ftp-proxy 功能
 
vi /etc/inetd.conf
 
把下面这一行最前面的 # 删除
 
ftp-proxy stream tcp nowait root /usr/libexec/ftp-proxy ftp-proxy
 
使用 sysctl 做设定(也可以重新开机让设定生效)
 
sysctl -w net.inet.ip.forwarding=1
 
vi /etc/pf.conf
 
#对外的网络卡
 
ext_if = "sis0"
 
#对内的网络卡
 
int_if = "rl0"
 
#频宽控管
 
#定义 std_out 总频宽 512Kb
 
#altq on $ext_if cbq bandwidth 512Kb queue { std_out }
 
#定义 std_out 队列频宽 256Kb,使用预设队列
 
#queue std_out bandwith 256Kb cbq (default)
 
#定义 std_in 总频宽 2Mb
 
#altq on $int_if cbq bandwidth 2Mb queue { std_in }
 
#假设频宽足够的话,可以从父队列借用额外的频宽
 
#queue std_in bandwidth 768Kb cbq (brrrow)
 
#对外开放的服务
 
open_services = "{80, 443}"
 
#内部私有的 IP
 
priv_nets = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }"
 
# options
 
#设定拒绝联机封包的处理方式
 
set block-policy return
 
#
 
set optimization aggressive
 
#纪录 $ext_if
 
set loginterface $ext_if
 
# scrub
 
#整理封包
 
scrub in all
 
#nat
 
#NAT 地址转译处理
 
nat on $ext_if from $int_if:network to any -> $ext_if
 
#ftp-proxy
 
#ftp-proxy 重新导向
 
rdr on $int_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021
 
#rdr on $ext_if proto tcp from any to 140.111.152.13 port 21 -> 192.168.13.253 port 21
 
#Transparent Proxy Server
 
rdr on rl0 proto tcp from 192.168.13.0/24 to any 80 -> 127.0.0.1 port 3128
 
#阻挡可疑封包在 $ext_if 网卡进出
 
antispoof log quick for $ext_if
 
#阻挡所有进出的封包
 
block all
 
#开放 loopback
 
pass quick on lo0 all
 
#拒绝内部私有 IP 对 $ext_if 网络卡联机
 
block drop in quick on $ext_if from $priv_nets to any
 
block drop out quick on $ext_if from any to $priv_nets
 
#开放对外的 80, 443 埠
 
pass in on $ext_if inet proto tcp from any to $ext_if port $open_services flags S/SA keep state
 
#只容许 140.111.152.0/24 网段对本机做 22 埠联机
 
pass in on $ext_if inet proto tcp from 140.111.152.0/24 to $ext_if port 22 flags S/SA keep state
 
#开放内部网络对外联机
 
#pass in on $inf_if proto rcp from any to any queue std_in
 
pass in on $int_if from $int_if:network to any keep state
 
 
pass out on $int_if from any to $int_if:network keep state
 
#开放对外网络的联机
 
#pass out $ext_if proto tcp from any to any queue std_out
 
pass out on $ext_if proto tcp all modulate state flags S/SA
 
pass out on $ext_if proto { udp, icmp } all keep state
 
启动 PF,并读取 pf 规则
 
pfctl -e;pfctl -f /etc/pf.conf
 
PF 指令的用法
 
#启动 PF
 
pfctl -e
 
#加载 PF 规则
 
pfctl -f /etc/pf.conf
 
#检查 PF 语法是否正确 (未加载)
 
pfctl -nf /etc/pf.conf
 
#停用 PF
 
pfctl -d
 
#重读 PF 设定档中的 NAT 部分
 
pfctl -f /etc/pf.conf -N
 
#重读 PF 设定档中的 filter rules
 
pfctl -f /etc/pf.conf -R
 
#重读 PF 设定文件中的选项规则
 
pfctl -f /etc/pf.conf -O
 
#查看 PF 信息
 
#显示现阶段过滤封包的统计资料
 
pfctl -s info
 
pfctl -si
 
pfctl -s memory
 
#显示现阶段过滤的规则
 
pfctl -s rules
 
pfctl -sr
 
pfctl -vs rules
 
#显示现阶段过滤封包的统计资料
 
pfctl -vsr
 
#显示现阶段 NAT 的规则
 
pfctl -s nat
 
pfctl -sn
 
#检视目前队列
 
pfctl -s queue
 
#显示现阶段所有统计的数据
 
pfctl -s all
 
pfctl -sa
 
#清除 PF 规则
 
#清空 NAT 规则
 
pfctl -F nat
 
#清空队列
 
pfctl -F queue
 
#清空封包过滤规则
 
pfctl -F rules
 
#清空计数器
 
pfctl -F info
 
pfctl -F Tables
 
#清空所有的规则
 
pfctl -F all
 
#PF Tables 的使用
 
#显示 table 内数据
 
pfctl -t ssh-bruteforce -Tshow
 
pfctl -t table_name -T add spammers.org
 
pfctl -t table_name -T delete spammers.org
 
pfctl -t table_name -T flush
 
pfctl -t table_name -T show
 
pfctl -t table_name -T zero
 
过滤扫描侦测软件
 
block in quick proto tcp all flags SF/SFRA
 
block in quick proto tcp all flags SFUP/SFRAU
 
block in quick proto tcp all flags FPU/SFRAUP
 
block in quick proto tcp all flags /SFRA
 
block in quick proto tcp all flags F/SFRA
 
block in quick proto tcp all flags U/SFRAU
 
block in quick proto tcp all flags P
 
如果防火墙和 Proxy Server 不在同一台主机
 
Proxy Server:192.168.13.250
 
no rdr on rl0 proto tcp from 192.168.13.250 to any port 80
 
rdr on rl0 proto tcp from 192.168.13.0/24 to any port 80 -> 192.168.13.250 port 3128
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章