2009-08-18 16:13:59 +00:00
|
|
|
.\" $OpenBSD: pfctl.8,v 1.138 2008/06/10 20:55:02 mcbride Exp $
|
2004-02-28 16:52:45 +00:00
|
|
|
.\"
|
|
|
|
.\" Copyright (c) 2001 Kjell Wooding. All rights reserved.
|
|
|
|
.\"
|
|
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
|
|
.\" modification, are permitted provided that the following conditions
|
|
|
|
.\" are met:
|
|
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
|
|
.\" 3. The name of the author may not be used to endorse or promote products
|
|
|
|
.\" derived from this software without specific prior written permission.
|
|
|
|
.\"
|
|
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
|
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
|
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
|
|
.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
|
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
|
|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
|
|
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
|
|
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
|
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
.\"
|
2005-07-14 20:29:08 +00:00
|
|
|
.\" $FreeBSD$
|
|
|
|
.\"
|
2011-06-28 11:57:25 +00:00
|
|
|
.Dd June 21, 2011
|
2004-02-28 16:52:45 +00:00
|
|
|
.Dt PFCTL 8
|
|
|
|
.Os
|
|
|
|
.Sh NAME
|
|
|
|
.Nm pfctl
|
2008-12-10 21:08:42 +00:00
|
|
|
.Nd control the packet filter (PF) device
|
2004-02-28 16:52:45 +00:00
|
|
|
.Sh SYNOPSIS
|
|
|
|
.Nm pfctl
|
|
|
|
.Bk -words
|
2011-06-13 20:11:28 +00:00
|
|
|
.Op Fl AdeghmNnOPqRrvz
|
2005-05-03 16:47:37 +00:00
|
|
|
.Op Fl a Ar anchor
|
2007-07-03 12:30:03 +00:00
|
|
|
.Oo Fl D Ar macro Ns =
|
|
|
|
.Ar value Oc
|
2004-02-28 16:52:45 +00:00
|
|
|
.Op Fl F Ar modifier
|
2004-06-16 23:26:00 +00:00
|
|
|
.Op Fl f Ar file
|
|
|
|
.Op Fl i Ar interface
|
2007-07-03 12:30:03 +00:00
|
|
|
.Op Fl K Ar host | network
|
2008-12-10 21:08:42 +00:00
|
|
|
.Xo
|
|
|
|
.Oo Fl k
|
|
|
|
.Ar host | network | label | id
|
|
|
|
.Oc Xc
|
2008-12-10 20:54:37 +00:00
|
|
|
.Op Fl o Ar level
|
2004-06-16 23:26:00 +00:00
|
|
|
.Op Fl p Ar device
|
2004-02-28 16:52:45 +00:00
|
|
|
.Op Fl s Ar modifier
|
2008-12-10 20:54:37 +00:00
|
|
|
.Xo
|
|
|
|
.Oo Fl t Ar table
|
2005-05-03 16:47:37 +00:00
|
|
|
.Fl T Ar command
|
2012-09-14 13:14:48 +00:00
|
|
|
.Op Ar address ...
|
|
|
|
.Oc Xc
|
2004-02-28 16:52:45 +00:00
|
|
|
.Op Fl x Ar level
|
|
|
|
.Ek
|
|
|
|
.Sh DESCRIPTION
|
|
|
|
The
|
|
|
|
.Nm
|
|
|
|
utility communicates with the packet filter device using the
|
|
|
|
ioctl interface described in
|
|
|
|
.Xr pf 4 .
|
|
|
|
It allows ruleset and parameter configuration and retrieval of status
|
|
|
|
information from the packet filter.
|
|
|
|
.Pp
|
|
|
|
Packet filtering restricts the types of packets that pass through
|
|
|
|
network interfaces entering or leaving the host based on filter
|
|
|
|
rules as described in
|
|
|
|
.Xr pf.conf 5 .
|
|
|
|
The packet filter can also replace addresses and ports of packets.
|
|
|
|
Replacing source addresses and ports of outgoing packets is called
|
|
|
|
NAT (Network Address Translation) and is used to connect an internal
|
|
|
|
network (usually reserved address space) to an external one (the
|
|
|
|
Internet) by making all connections to external hosts appear to
|
|
|
|
come from the gateway.
|
|
|
|
Replacing destination addresses and ports of incoming packets
|
|
|
|
is used to redirect connections to different hosts and/or ports.
|
|
|
|
A combination of both translations, bidirectional NAT, is also
|
|
|
|
supported.
|
|
|
|
Translation rules are described in
|
|
|
|
.Xr pf.conf 5 .
|
|
|
|
.Pp
|
2005-05-03 16:47:37 +00:00
|
|
|
When the variable
|
|
|
|
.Va pf
|
|
|
|
is set to
|
|
|
|
.Dv YES
|
|
|
|
in
|
2012-01-05 23:11:05 +00:00
|
|
|
.Xr rc.conf 5 ,
|
2005-05-03 16:47:37 +00:00
|
|
|
the rule file specified with the variable
|
|
|
|
.Va pf_rules
|
2004-02-28 16:52:45 +00:00
|
|
|
is loaded automatically by the
|
|
|
|
.Xr rc 8
|
|
|
|
scripts and the packet filter is enabled.
|
|
|
|
.Pp
|
|
|
|
The packet filter does not itself forward packets between interfaces.
|
|
|
|
Forwarding can be enabled by setting the
|
|
|
|
.Xr sysctl 8
|
|
|
|
variables
|
|
|
|
.Em net.inet.ip.forwarding
|
|
|
|
and/or
|
2005-05-03 16:47:37 +00:00
|
|
|
.Em net.inet6.ip6.forwarding
|
2004-02-28 16:52:45 +00:00
|
|
|
to 1.
|
|
|
|
Set them permanently in
|
|
|
|
.Xr sysctl.conf 5 .
|
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Nm
|
|
|
|
utility provides several commands.
|
|
|
|
The options are as follows:
|
|
|
|
.Bl -tag -width Ds
|
2004-06-16 23:26:00 +00:00
|
|
|
.It Fl A
|
|
|
|
Load only the queue rules present in the rule file.
|
|
|
|
Other rules and options are ignored.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl a Ar anchor
|
2004-02-28 16:52:45 +00:00
|
|
|
Apply flags
|
|
|
|
.Fl f ,
|
2005-05-03 16:47:37 +00:00
|
|
|
.Fl F ,
|
2004-02-28 16:52:45 +00:00
|
|
|
and
|
|
|
|
.Fl s
|
|
|
|
only to the rules in the specified
|
2005-05-03 16:47:37 +00:00
|
|
|
.Ar anchor .
|
2004-02-28 16:52:45 +00:00
|
|
|
In addition to the main ruleset,
|
|
|
|
.Nm
|
2005-05-03 16:47:37 +00:00
|
|
|
can load and manipulate additional rulesets by name,
|
|
|
|
called anchors.
|
|
|
|
The main ruleset is the default anchor.
|
|
|
|
.Pp
|
|
|
|
Anchors are referenced by name and may be nested,
|
|
|
|
with the various components of the anchor path separated by
|
|
|
|
.Sq /
|
|
|
|
characters, similar to how file system hierarchies are laid out.
|
|
|
|
The last component of the anchor path is where ruleset operations are
|
|
|
|
performed.
|
|
|
|
.Pp
|
2004-02-28 16:52:45 +00:00
|
|
|
Evaluation of
|
|
|
|
.Ar anchor
|
|
|
|
rules from the main ruleset is described in
|
|
|
|
.Xr pf.conf 5 .
|
2005-05-03 16:47:37 +00:00
|
|
|
.Pp
|
|
|
|
For example, the following will show all filter rules (see the
|
|
|
|
.Fl s
|
|
|
|
flag below) inside the anchor
|
2007-07-03 12:30:03 +00:00
|
|
|
.Dq authpf/smith(1234) ,
|
|
|
|
which would have been created for user
|
|
|
|
.Dq smith
|
|
|
|
by
|
2005-05-03 16:47:37 +00:00
|
|
|
.Xr authpf 8 ,
|
|
|
|
PID 1234:
|
2004-02-28 16:52:45 +00:00
|
|
|
.Bd -literal -offset indent
|
2005-05-03 16:47:37 +00:00
|
|
|
# pfctl -a "authpf/smith(1234)" -s rules
|
2004-02-28 16:52:45 +00:00
|
|
|
.Ed
|
|
|
|
.Pp
|
2005-05-03 16:47:37 +00:00
|
|
|
Private tables can also be put inside anchors, either by having table
|
2004-02-28 16:52:45 +00:00
|
|
|
statements in the
|
|
|
|
.Xr pf.conf 5
|
2005-05-03 16:47:37 +00:00
|
|
|
file that is loaded in the anchor, or by using regular table commands, as in:
|
2004-02-28 16:52:45 +00:00
|
|
|
.Bd -literal -offset indent
|
2005-05-03 16:47:37 +00:00
|
|
|
# pfctl -a foo/bar -t mytable -T add 1.2.3.4 5.6.7.8
|
2004-02-28 16:52:45 +00:00
|
|
|
.Ed
|
|
|
|
.Pp
|
|
|
|
When a rule referring to a table is loaded in an anchor, the rule will use the
|
2005-05-03 16:47:37 +00:00
|
|
|
private table if one is defined, and then fall back to the table defined in the
|
2004-02-28 16:52:45 +00:00
|
|
|
main ruleset, if there is one.
|
2005-05-03 16:47:37 +00:00
|
|
|
This is similar to C rules for variable scope.
|
2004-02-28 16:52:45 +00:00
|
|
|
It is possible to create distinct tables with the same name in the global
|
|
|
|
ruleset and in an anchor, but this is often bad design and a warning will be
|
|
|
|
issued in that case.
|
2007-07-03 12:30:03 +00:00
|
|
|
.Pp
|
|
|
|
By default, recursive inline printing of anchors applies only to unnamed
|
|
|
|
anchors specified inline in the ruleset.
|
|
|
|
If the anchor name is terminated with a
|
|
|
|
.Sq *
|
|
|
|
character, the
|
|
|
|
.Fl s
|
|
|
|
flag will recursively print all anchors in a brace delimited block.
|
|
|
|
For example the following will print the
|
|
|
|
.Dq authpf
|
|
|
|
ruleset recursively:
|
|
|
|
.Bd -literal -offset indent
|
|
|
|
# pfctl -a 'authpf/*' -sr
|
|
|
|
.Ed
|
|
|
|
.Pp
|
|
|
|
To print the main ruleset recursively, specify only
|
|
|
|
.Sq *
|
|
|
|
as the anchor name:
|
|
|
|
.Bd -literal -offset indent
|
|
|
|
# pfctl -a '*' -sr
|
|
|
|
.Ed
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl D Ar macro Ns = Ns Ar value
|
2004-02-28 16:52:45 +00:00
|
|
|
Define
|
|
|
|
.Ar macro
|
|
|
|
to be set to
|
|
|
|
.Ar value
|
|
|
|
on the command line.
|
|
|
|
Overrides the definition of
|
|
|
|
.Ar macro
|
|
|
|
in the ruleset.
|
2004-06-16 23:26:00 +00:00
|
|
|
.It Fl d
|
|
|
|
Disable the packet filter.
|
2004-02-28 16:52:45 +00:00
|
|
|
.It Fl e
|
|
|
|
Enable the packet filter.
|
|
|
|
.It Fl F Ar modifier
|
|
|
|
Flush the filter parameters specified by
|
|
|
|
.Ar modifier
|
|
|
|
(may be abbreviated):
|
|
|
|
.Pp
|
|
|
|
.Bl -tag -width xxxxxxxxxxxx -compact
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl F Cm nat
|
2004-02-28 16:52:45 +00:00
|
|
|
Flush the NAT rules.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl F Cm queue
|
2004-02-28 16:52:45 +00:00
|
|
|
Flush the queue rules.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl F Cm rules
|
2004-02-28 16:52:45 +00:00
|
|
|
Flush the filter rules.
|
2008-12-10 20:54:37 +00:00
|
|
|
.It Fl F Cm states
|
2004-02-28 16:52:45 +00:00
|
|
|
Flush the state table (NAT and filter).
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl F Cm Sources
|
2004-06-16 23:26:00 +00:00
|
|
|
Flush the source tracking table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl F Cm info
|
2004-02-28 16:52:45 +00:00
|
|
|
Flush the filter information (statistics that are not bound to rules).
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl F Cm Tables
|
2004-02-28 16:52:45 +00:00
|
|
|
Flush the tables.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl F Cm osfp
|
2004-02-28 16:52:45 +00:00
|
|
|
Flush the passive operating system fingerprints.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl F Cm all
|
2004-02-28 16:52:45 +00:00
|
|
|
Flush all of the above.
|
|
|
|
.El
|
2004-06-16 23:26:00 +00:00
|
|
|
.It Fl f Ar file
|
|
|
|
Load the rules contained in
|
|
|
|
.Ar file .
|
|
|
|
This
|
|
|
|
.Ar file
|
|
|
|
may contain macros, tables, options, and normalization, queueing,
|
|
|
|
translation, and filtering rules.
|
|
|
|
With the exception of macros and tables, the statements must appear in that
|
|
|
|
order.
|
2004-02-28 16:52:45 +00:00
|
|
|
.It Fl g
|
|
|
|
Include output helpful for debugging.
|
2004-06-16 23:26:00 +00:00
|
|
|
.It Fl h
|
|
|
|
Help.
|
|
|
|
.It Fl i Ar interface
|
|
|
|
Restrict the operation to the given
|
|
|
|
.Ar interface .
|
2007-07-03 12:30:03 +00:00
|
|
|
.It Fl K Ar host | network
|
|
|
|
Kill all of the source tracking entries originating from the specified
|
|
|
|
.Ar host
|
|
|
|
or
|
|
|
|
.Ar network .
|
|
|
|
A second
|
|
|
|
.Fl K Ar host
|
|
|
|
or
|
|
|
|
.Fl K Ar network
|
|
|
|
option may be specified, which will kill all the source tracking
|
|
|
|
entries from the first host/network to the second.
|
2008-12-10 21:08:42 +00:00
|
|
|
.It Xo
|
|
|
|
.Fl k
|
|
|
|
.Ar host | network | label | id
|
|
|
|
.Xc
|
|
|
|
Kill all of the state entries matching the specified
|
|
|
|
.Ar host ,
|
|
|
|
.Ar network ,
|
|
|
|
.Ar label ,
|
2007-07-03 12:30:03 +00:00
|
|
|
or
|
2008-12-10 21:08:42 +00:00
|
|
|
.Ar id .
|
|
|
|
.Pp
|
|
|
|
For example, to kill all of the state entries originating from
|
|
|
|
.Dq host :
|
|
|
|
.Pp
|
|
|
|
.Dl # pfctl -k host
|
|
|
|
.Pp
|
2004-02-28 16:52:45 +00:00
|
|
|
A second
|
|
|
|
.Fl k Ar host
|
2007-07-03 12:30:03 +00:00
|
|
|
or
|
|
|
|
.Fl k Ar network
|
2004-02-28 16:52:45 +00:00
|
|
|
option may be specified, which will kill all the state entries
|
2007-07-03 12:30:03 +00:00
|
|
|
from the first host/network to the second.
|
2004-02-28 16:52:45 +00:00
|
|
|
To kill all of the state entries from
|
2007-07-03 12:30:03 +00:00
|
|
|
.Dq host1
|
2004-02-28 16:52:45 +00:00
|
|
|
to
|
2007-07-03 12:30:03 +00:00
|
|
|
.Dq host2 :
|
|
|
|
.Pp
|
|
|
|
.Dl # pfctl -k host1 -k host2
|
|
|
|
.Pp
|
|
|
|
To kill all states originating from 192.168.1.0/24 to 172.16.0.0/16:
|
|
|
|
.Pp
|
|
|
|
.Dl # pfctl -k 192.168.1.0/24 -k 172.16.0.0/16
|
|
|
|
.Pp
|
|
|
|
A network prefix length of 0 can be used as a wildcard.
|
|
|
|
To kill all states with the target
|
|
|
|
.Dq host2 :
|
|
|
|
.Pp
|
|
|
|
.Dl # pfctl -k 0.0.0.0/0 -k host2
|
2008-12-10 21:08:42 +00:00
|
|
|
.Pp
|
|
|
|
It is also possible to kill states by rule label or state ID.
|
|
|
|
In this mode the first
|
|
|
|
.Fl k
|
|
|
|
argument is used to specify the type
|
|
|
|
of the second argument.
|
|
|
|
The following command would kill all states that have been created
|
|
|
|
from rules carrying the label
|
|
|
|
.Dq foobar :
|
|
|
|
.Pp
|
|
|
|
.Dl # pfctl -k label -k foobar
|
|
|
|
.Pp
|
|
|
|
To kill one specific state by its unique state ID
|
|
|
|
(as shown by pfctl -s state -vv),
|
|
|
|
use the
|
|
|
|
.Ar id
|
|
|
|
modifier and as a second argument the state ID and optional creator ID.
|
|
|
|
To kill a state with ID 4823e84500000003 use:
|
|
|
|
.Pp
|
|
|
|
.Dl # pfctl -k id -k 4823e84500000003
|
|
|
|
.Pp
|
|
|
|
To kill a state with ID 4823e84500000018 created from a backup
|
|
|
|
firewall with hostid 00000002 use:
|
|
|
|
.Pp
|
|
|
|
.Dl # pfctl -k id -k 4823e84500000018/2
|
|
|
|
.Pp
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl m
|
|
|
|
Merge in explicitly given options without resetting those
|
|
|
|
which are omitted.
|
|
|
|
Allows single options to be modified without disturbing the others:
|
|
|
|
.Bd -literal -offset indent
|
|
|
|
# echo "set loginterface fxp0" | pfctl -mf -
|
|
|
|
.Ed
|
2004-02-28 16:52:45 +00:00
|
|
|
.It Fl N
|
|
|
|
Load only the NAT rules present in the rule file.
|
|
|
|
Other rules and options are ignored.
|
2004-06-16 23:26:00 +00:00
|
|
|
.It Fl n
|
|
|
|
Do not actually load rules, just parse them.
|
|
|
|
.It Fl O
|
|
|
|
Load only the options present in the rule file.
|
|
|
|
Other rules and options are ignored.
|
2008-12-10 20:54:37 +00:00
|
|
|
.It Fl o Ar level
|
|
|
|
Control the ruleset optimizer, overriding any rule file settings.
|
2007-07-03 12:30:03 +00:00
|
|
|
.Pp
|
|
|
|
.Bl -tag -width xxxxxxxxxxxx -compact
|
|
|
|
.It Fl o Cm none
|
|
|
|
Disable the ruleset optimizer.
|
|
|
|
.It Fl o Cm basic
|
|
|
|
Enable basic ruleset optimizations.
|
2008-12-10 20:54:37 +00:00
|
|
|
This is the default behaviour.
|
2007-07-03 12:30:03 +00:00
|
|
|
.It Fl o Cm profile
|
|
|
|
Enable basic ruleset optimizations with profiling.
|
|
|
|
.El
|
2008-12-10 20:54:37 +00:00
|
|
|
For further information on the ruleset optimizer, see
|
|
|
|
.Xr pf.conf 5 .
|
2011-06-13 20:11:28 +00:00
|
|
|
.It Fl P
|
|
|
|
Do not perform service name lookup for port specific rules,
|
|
|
|
instead display the ports numerically.
|
2004-06-16 23:26:00 +00:00
|
|
|
.It Fl p Ar device
|
|
|
|
Use the device file
|
|
|
|
.Ar device
|
|
|
|
instead of the default
|
|
|
|
.Pa /dev/pf .
|
2004-02-28 16:52:45 +00:00
|
|
|
.It Fl q
|
|
|
|
Only print errors and warnings.
|
|
|
|
.It Fl R
|
|
|
|
Load only the filter rules present in the rule file.
|
|
|
|
Other rules and options are ignored.
|
2004-06-16 23:26:00 +00:00
|
|
|
.It Fl r
|
|
|
|
Perform reverse DNS lookups on states when displaying them.
|
2004-02-28 16:52:45 +00:00
|
|
|
.It Fl s Ar modifier
|
|
|
|
Show the filter parameters specified by
|
|
|
|
.Ar modifier
|
|
|
|
(may be abbreviated):
|
|
|
|
.Pp
|
2004-06-16 23:26:00 +00:00
|
|
|
.Bl -tag -width xxxxxxxxxxxxx -compact
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm nat
|
2004-02-28 16:52:45 +00:00
|
|
|
Show the currently loaded NAT rules.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm queue
|
2004-02-28 16:52:45 +00:00
|
|
|
Show the currently loaded queue rules.
|
|
|
|
When used together with
|
|
|
|
.Fl v ,
|
|
|
|
per-queue statistics are also shown.
|
|
|
|
When used together with
|
|
|
|
.Fl v v ,
|
|
|
|
.Nm
|
|
|
|
will loop and show updated queue statistics every five seconds, including
|
|
|
|
measured bandwidth and packets per second.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm rules
|
2004-02-28 16:52:45 +00:00
|
|
|
Show the currently loaded filter rules.
|
|
|
|
When used together with
|
|
|
|
.Fl v ,
|
|
|
|
the per-rule statistics (number of evaluations,
|
|
|
|
packets and bytes) are also shown.
|
2005-05-03 16:47:37 +00:00
|
|
|
Note that the
|
|
|
|
.Dq skip step
|
|
|
|
optimization done automatically by the kernel
|
2004-02-28 16:52:45 +00:00
|
|
|
will skip evaluation of rules where possible.
|
|
|
|
Packets passed statefully are counted in the rule that created the state
|
|
|
|
(even though the rule isn't evaluated more than once for the entire
|
|
|
|
connection).
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm Anchors
|
|
|
|
Show the currently loaded anchors directly attached to the main ruleset.
|
2004-02-28 16:52:45 +00:00
|
|
|
If
|
|
|
|
.Fl a Ar anchor
|
2005-05-03 16:47:37 +00:00
|
|
|
is specified as well, the anchors loaded directly below the given
|
|
|
|
.Ar anchor
|
|
|
|
are shown instead.
|
|
|
|
If
|
|
|
|
.Fl v
|
|
|
|
is specified, all anchors attached under the target anchor will be
|
|
|
|
displayed recursively.
|
2008-12-10 20:54:37 +00:00
|
|
|
.It Fl s Cm states
|
2004-02-28 16:52:45 +00:00
|
|
|
Show the contents of the state table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm Sources
|
2004-06-16 23:26:00 +00:00
|
|
|
Show the contents of the source tracking table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm info
|
2004-02-28 16:52:45 +00:00
|
|
|
Show filter information (statistics and counters).
|
2004-06-16 23:26:00 +00:00
|
|
|
When used together with
|
|
|
|
.Fl v ,
|
|
|
|
source tracking statistics are also shown.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm labels
|
2007-07-03 12:30:03 +00:00
|
|
|
Show per-rule statistics (label, evaluations, packets total, bytes total,
|
2008-12-10 21:08:42 +00:00
|
|
|
packets in, bytes in, packets out, bytes out, state creations) of
|
2004-02-28 16:52:45 +00:00
|
|
|
filter rules with labels, useful for accounting.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm timeouts
|
2004-02-28 16:52:45 +00:00
|
|
|
Show the current global timeouts.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm memory
|
2004-02-28 16:52:45 +00:00
|
|
|
Show the current pool memory hard limits.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm Tables
|
2004-02-28 16:52:45 +00:00
|
|
|
Show the list of tables.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm osfp
|
2004-02-28 16:52:45 +00:00
|
|
|
Show the list of operating system fingerprints.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm Interfaces
|
2004-06-16 23:26:00 +00:00
|
|
|
Show the list of interfaces and interface drivers available to PF.
|
2007-07-03 12:30:03 +00:00
|
|
|
When used together with
|
2004-06-16 23:26:00 +00:00
|
|
|
.Fl v ,
|
2007-07-03 12:30:03 +00:00
|
|
|
it additionally lists which interfaces have skip rules activated.
|
|
|
|
When used together with
|
|
|
|
.Fl vv ,
|
2004-06-16 23:26:00 +00:00
|
|
|
interface statistics are also shown.
|
|
|
|
.Fl i
|
|
|
|
can be used to select an interface or a group of interfaces.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl s Cm all
|
2004-06-16 23:26:00 +00:00
|
|
|
Show all of the above, except for the lists of interfaces and operating
|
|
|
|
system fingerprints.
|
2004-02-28 16:52:45 +00:00
|
|
|
.El
|
|
|
|
.It Fl T Ar command Op Ar address ...
|
|
|
|
Specify the
|
|
|
|
.Ar command
|
|
|
|
(may be abbreviated) to apply to the table.
|
|
|
|
Commands include:
|
|
|
|
.Pp
|
|
|
|
.Bl -tag -width xxxxxxxxxxxx -compact
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl T Cm kill
|
2004-02-28 16:52:45 +00:00
|
|
|
Kill a table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl T Cm flush
|
2004-02-28 16:52:45 +00:00
|
|
|
Flush all addresses of a table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl T Cm add
|
2004-02-28 16:52:45 +00:00
|
|
|
Add one or more addresses in a table.
|
|
|
|
Automatically create a nonexisting table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl T Cm delete
|
2004-02-28 16:52:45 +00:00
|
|
|
Delete one or more addresses from a table.
|
2007-07-03 12:30:03 +00:00
|
|
|
.It Fl T Cm expire Ar number
|
|
|
|
Delete addresses which had their statistics cleared more than
|
|
|
|
.Ar number
|
|
|
|
seconds ago.
|
|
|
|
For entries which have never had their statistics cleared,
|
|
|
|
.Ar number
|
|
|
|
refers to the time they were added to the table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl T Cm replace
|
2004-02-28 16:52:45 +00:00
|
|
|
Replace the addresses of the table.
|
|
|
|
Automatically create a nonexisting table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl T Cm show
|
2004-02-28 16:52:45 +00:00
|
|
|
Show the content (addresses) of a table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl T Cm test
|
2004-02-28 16:52:45 +00:00
|
|
|
Test if the given addresses match a table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl T Cm zero
|
2004-02-28 16:52:45 +00:00
|
|
|
Clear all the statistics of a table.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl T Cm load
|
2004-02-28 16:52:45 +00:00
|
|
|
Load only the table definitions from
|
|
|
|
.Xr pf.conf 5 .
|
|
|
|
This is used in conjunction with the
|
|
|
|
.Fl f
|
|
|
|
flag, as in:
|
|
|
|
.Bd -literal -offset indent
|
|
|
|
# pfctl -Tl -f pf.conf
|
|
|
|
.Ed
|
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
For the
|
2005-05-03 16:47:37 +00:00
|
|
|
.Cm add ,
|
|
|
|
.Cm delete ,
|
|
|
|
.Cm replace ,
|
2004-02-28 16:52:45 +00:00
|
|
|
and
|
2005-05-03 16:47:37 +00:00
|
|
|
.Cm test
|
2004-02-28 16:52:45 +00:00
|
|
|
commands, the list of addresses can be specified either directly on the command
|
|
|
|
line and/or in an unformatted text file, using the
|
|
|
|
.Fl f
|
|
|
|
flag.
|
2005-05-03 16:47:37 +00:00
|
|
|
Comments starting with a
|
|
|
|
.Sq #
|
|
|
|
are allowed in the text file.
|
2004-02-28 16:52:45 +00:00
|
|
|
With these commands, the
|
|
|
|
.Fl v
|
|
|
|
flag can also be used once or twice, in which case
|
2004-06-16 23:26:00 +00:00
|
|
|
.Nm
|
2004-02-28 16:52:45 +00:00
|
|
|
will print the
|
|
|
|
detailed result of the operation for each individual address, prefixed by
|
|
|
|
one of the following letters:
|
|
|
|
.Pp
|
|
|
|
.Bl -tag -width XXX -compact
|
|
|
|
.It A
|
|
|
|
The address/network has been added.
|
|
|
|
.It C
|
|
|
|
The address/network has been changed (negated).
|
|
|
|
.It D
|
|
|
|
The address/network has been deleted.
|
|
|
|
.It M
|
2005-05-03 16:47:37 +00:00
|
|
|
The address matches
|
|
|
|
.Po
|
|
|
|
.Cm test
|
|
|
|
operation only
|
|
|
|
.Pc .
|
2004-02-28 16:52:45 +00:00
|
|
|
.It X
|
|
|
|
The address/network is duplicated and therefore ignored.
|
|
|
|
.It Y
|
2005-05-03 16:47:37 +00:00
|
|
|
The address/network cannot be added/deleted due to conflicting
|
|
|
|
.Sq \&!
|
|
|
|
attributes.
|
2004-02-28 16:52:45 +00:00
|
|
|
.It Z
|
|
|
|
The address/network has been cleared (statistics).
|
|
|
|
.El
|
|
|
|
.Pp
|
2008-12-10 21:08:42 +00:00
|
|
|
Each table can maintain a set of counters that can be retrieved using the
|
2004-02-28 16:52:45 +00:00
|
|
|
.Fl v
|
|
|
|
flag of
|
2004-06-16 23:26:00 +00:00
|
|
|
.Nm .
|
2004-02-28 16:52:45 +00:00
|
|
|
For example, the following commands define a wide open firewall which will keep
|
|
|
|
track of packets going to or coming from the
|
|
|
|
.Ox
|
2005-05-03 16:47:37 +00:00
|
|
|
FTP server.
|
|
|
|
The following commands configure the firewall and send 10 pings to the FTP
|
2004-02-28 16:52:45 +00:00
|
|
|
server:
|
|
|
|
.Bd -literal -offset indent
|
2008-12-10 21:08:42 +00:00
|
|
|
# printf "table <test> counters { ftp.openbsd.org }\en \e
|
2007-07-03 12:30:03 +00:00
|
|
|
pass out to <test>\en" | pfctl -f-
|
2004-02-28 16:52:45 +00:00
|
|
|
# ping -qc10 ftp.openbsd.org
|
|
|
|
.Ed
|
|
|
|
.Pp
|
|
|
|
We can now use the table
|
2005-05-03 16:47:37 +00:00
|
|
|
.Cm show
|
2004-02-28 16:52:45 +00:00
|
|
|
command to output, for each address and packet direction, the number of packets
|
|
|
|
and bytes that are being passed or blocked by rules referencing the table.
|
|
|
|
The time at which the current accounting started is also shown with the
|
2005-05-03 16:47:37 +00:00
|
|
|
.Dq Cleared
|
2004-02-28 16:52:45 +00:00
|
|
|
line.
|
|
|
|
.Bd -literal -offset indent
|
|
|
|
# pfctl -t test -vTshow
|
2004-06-16 23:26:00 +00:00
|
|
|
129.128.5.191
|
|
|
|
Cleared: Thu Feb 13 18:55:18 2003
|
|
|
|
In/Block: [ Packets: 0 Bytes: 0 ]
|
|
|
|
In/Pass: [ Packets: 10 Bytes: 840 ]
|
|
|
|
Out/Block: [ Packets: 0 Bytes: 0 ]
|
|
|
|
Out/Pass: [ Packets: 10 Bytes: 840 ]
|
2004-02-28 16:52:45 +00:00
|
|
|
.Ed
|
|
|
|
.Pp
|
|
|
|
Similarly, it is possible to view global information about the tables
|
|
|
|
by using the
|
|
|
|
.Fl v
|
|
|
|
modifier twice and the
|
2005-05-03 16:47:37 +00:00
|
|
|
.Fl s
|
|
|
|
.Cm Tables
|
2004-02-28 16:52:45 +00:00
|
|
|
command.
|
|
|
|
This will display the number of addresses on each table,
|
|
|
|
the number of rules which reference the table, and the global
|
|
|
|
packet statistics for the whole table:
|
|
|
|
.Bd -literal -offset indent
|
|
|
|
# pfctl -vvsTables
|
2008-12-10 21:08:42 +00:00
|
|
|
--a-r-C test
|
2004-06-16 23:26:00 +00:00
|
|
|
Addresses: 1
|
|
|
|
Cleared: Thu Feb 13 18:55:18 2003
|
|
|
|
References: [ Anchors: 0 Rules: 1 ]
|
|
|
|
Evaluations: [ NoMatch: 3496 Match: 1 ]
|
|
|
|
In/Block: [ Packets: 0 Bytes: 0 ]
|
|
|
|
In/Pass: [ Packets: 10 Bytes: 840 ]
|
|
|
|
In/XPass: [ Packets: 0 Bytes: 0 ]
|
|
|
|
Out/Block: [ Packets: 0 Bytes: 0 ]
|
|
|
|
Out/Pass: [ Packets: 10 Bytes: 840 ]
|
|
|
|
Out/XPass: [ Packets: 0 Bytes: 0 ]
|
2004-02-28 16:52:45 +00:00
|
|
|
.Ed
|
|
|
|
.Pp
|
2004-06-16 23:26:00 +00:00
|
|
|
As we can see here, only one packet \- the initial ping request \- matched the
|
2005-05-03 16:47:37 +00:00
|
|
|
table, but all packets passing as the result of the state are correctly
|
2004-02-28 16:52:45 +00:00
|
|
|
accounted for.
|
|
|
|
Reloading the table(s) or ruleset will not affect packet accounting in any way.
|
|
|
|
The two
|
2005-05-03 16:47:37 +00:00
|
|
|
.Dq XPass
|
2004-02-28 16:52:45 +00:00
|
|
|
counters are incremented instead of the
|
2005-05-03 16:47:37 +00:00
|
|
|
.Dq Pass
|
|
|
|
counters when a
|
|
|
|
.Dq stateful
|
|
|
|
packet is passed but doesn't match the table anymore.
|
|
|
|
This will happen in our example if someone flushes the table while the
|
|
|
|
.Xr ping 8
|
2004-02-28 16:52:45 +00:00
|
|
|
command is running.
|
|
|
|
.Pp
|
|
|
|
When used with a single
|
|
|
|
.Fl v ,
|
2004-06-16 23:26:00 +00:00
|
|
|
.Nm
|
2004-02-28 16:52:45 +00:00
|
|
|
will only display the first line containing the table flags and name.
|
|
|
|
The flags are defined as follows:
|
|
|
|
.Pp
|
|
|
|
.Bl -tag -width XXX -compact
|
|
|
|
.It c
|
|
|
|
For constant tables, which cannot be altered outside
|
|
|
|
.Xr pf.conf 5 .
|
|
|
|
.It p
|
2005-05-03 16:47:37 +00:00
|
|
|
For persistent tables, which don't get automatically killed when no rules
|
2004-02-28 16:52:45 +00:00
|
|
|
refer to them.
|
|
|
|
.It a
|
|
|
|
For tables which are part of the
|
2005-05-03 16:47:37 +00:00
|
|
|
.Em active
|
2004-02-28 16:52:45 +00:00
|
|
|
tableset.
|
|
|
|
Tables without this flag do not really exist, cannot contain addresses, and are
|
|
|
|
only listed if the
|
|
|
|
.Fl g
|
|
|
|
flag is given.
|
|
|
|
.It i
|
|
|
|
For tables which are part of the
|
2005-05-03 16:47:37 +00:00
|
|
|
.Em inactive
|
2004-02-28 16:52:45 +00:00
|
|
|
tableset.
|
|
|
|
This flag can only be witnessed briefly during the loading of
|
|
|
|
.Xr pf.conf 5 .
|
|
|
|
.It r
|
|
|
|
For tables which are referenced (used) by rules.
|
|
|
|
.It h
|
|
|
|
This flag is set when a table in the main ruleset is hidden by one or more
|
2005-05-03 16:47:37 +00:00
|
|
|
tables of the same name from anchors attached below it.
|
2008-12-10 21:08:42 +00:00
|
|
|
.It C
|
|
|
|
This flag is set when per-address counters are enabled on the table.
|
2004-02-28 16:52:45 +00:00
|
|
|
.El
|
2004-06-16 23:26:00 +00:00
|
|
|
.It Fl t Ar table
|
|
|
|
Specify the name of the table.
|
2004-02-28 16:52:45 +00:00
|
|
|
.It Fl v
|
|
|
|
Produce more verbose output.
|
|
|
|
A second use of
|
|
|
|
.Fl v
|
|
|
|
will produce even more verbose output including ruleset warnings.
|
2005-05-03 16:47:37 +00:00
|
|
|
See the previous section for its effect on table commands.
|
2004-02-28 16:52:45 +00:00
|
|
|
.It Fl x Ar level
|
|
|
|
Set the debug
|
|
|
|
.Ar level
|
|
|
|
(may be abbreviated) to one of the following:
|
|
|
|
.Pp
|
|
|
|
.Bl -tag -width xxxxxxxxxxxx -compact
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl x Cm none
|
2004-02-28 16:52:45 +00:00
|
|
|
Don't generate debug messages.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl x Cm urgent
|
2004-02-28 16:52:45 +00:00
|
|
|
Generate debug messages only for serious errors.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl x Cm misc
|
2004-02-28 16:52:45 +00:00
|
|
|
Generate debug messages for various errors.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Fl x Cm loud
|
2004-02-28 16:52:45 +00:00
|
|
|
Generate debug messages for common conditions.
|
|
|
|
.El
|
|
|
|
.It Fl z
|
|
|
|
Clear per-rule statistics.
|
|
|
|
.El
|
|
|
|
.Sh FILES
|
|
|
|
.Bl -tag -width "/etc/pf.conf" -compact
|
|
|
|
.It Pa /etc/pf.conf
|
|
|
|
Packet filter rules file.
|
2005-05-03 16:47:37 +00:00
|
|
|
.It Pa /etc/pf.os
|
|
|
|
Passive operating system fingerprint database.
|
2004-02-28 16:52:45 +00:00
|
|
|
.El
|
|
|
|
.Sh SEE ALSO
|
|
|
|
.Xr pf 4 ,
|
|
|
|
.Xr pf.conf 5 ,
|
|
|
|
.Xr pf.os 5 ,
|
2005-07-14 20:29:08 +00:00
|
|
|
.Xr rc.conf 5 ,
|
2011-06-13 20:11:28 +00:00
|
|
|
.Xr services 5 ,
|
2004-02-28 16:52:45 +00:00
|
|
|
.Xr sysctl.conf 5 ,
|
2005-05-03 16:47:37 +00:00
|
|
|
.Xr authpf 8 ,
|
2004-02-28 16:52:45 +00:00
|
|
|
.Xr ftp-proxy 8 ,
|
|
|
|
.Xr rc 8 ,
|
|
|
|
.Xr sysctl 8
|
|
|
|
.Sh HISTORY
|
|
|
|
The
|
|
|
|
.Nm
|
|
|
|
program and the
|
|
|
|
.Xr pf 4
|
|
|
|
filter mechanism first appeared in
|
|
|
|
.Ox 3.0 .
|