• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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

    上一篇:FreeBSD下zfs: failed with error 6错误如何解决?
    下一篇:FreeBSD如何添加硬盘?FreeBSD添加硬盘的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Freebsd PF 安装使用详解 Freebsd,安装,使用,详解,Freebsd,