1997-03-07 02:50:01 +00:00
|
|
|
.\"
|
1999-08-28 00:22:10 +00:00
|
|
|
.\" $FreeBSD$
|
1997-03-07 02:50:01 +00:00
|
|
|
.\"
|
1997-06-23 02:12:21 +00:00
|
|
|
.Dd June 22, 1997
|
1996-07-11 02:37:59 +00:00
|
|
|
.Dt IPFIREWALL 4
|
1995-02-17 18:48:36 +00:00
|
|
|
.Os
|
|
|
|
.Sh NAME
|
1997-06-23 02:12:21 +00:00
|
|
|
.Nm ipfirewall
|
|
|
|
.Nd IP packet filter and traffic accounting
|
1995-02-17 18:48:36 +00:00
|
|
|
.Sh SYNOPSIS
|
1997-03-19 19:47:43 +00:00
|
|
|
.Fd #include <sys/types.h>
|
|
|
|
.Fd #include <sys/queue.h>
|
|
|
|
.Fd #include <netinet/in.h>
|
1996-07-11 02:37:59 +00:00
|
|
|
.Fd #include <netinet/ip_fw.h>
|
|
|
|
.Ft int
|
1997-06-23 02:12:21 +00:00
|
|
|
.Fn setsockopt raw_socket IPPROTO_IP "ipfw option" "struct ipfw" size
|
1995-02-17 18:48:36 +00:00
|
|
|
.Sh DESCRIPTION
|
1997-06-23 02:12:21 +00:00
|
|
|
Ipfirewall (alias ipfw) is a system facility which allows filtering,
|
|
|
|
redirecting, and other operations on IP packets travelling through
|
2000-03-01 14:50:24 +00:00
|
|
|
system interfaces.
|
|
|
|
Packets are matched by applying an ordered list
|
1997-06-23 02:12:21 +00:00
|
|
|
of pattern rules against each packet until a match is found, at
|
2000-03-01 14:50:24 +00:00
|
|
|
which point the corresponding action is taken.
|
|
|
|
Rules are numbered
|
1997-06-23 02:12:21 +00:00
|
|
|
from 1 to 65534; multiple rules may share the same number.
|
1996-07-11 02:37:59 +00:00
|
|
|
.Pp
|
2000-03-02 14:54:02 +00:00
|
|
|
There is one rule that always exists, rule number 65535.
|
|
|
|
This rule
|
2000-03-01 14:50:24 +00:00
|
|
|
normally causes all packets to be dropped.
|
|
|
|
Hence, any packet which does not
|
1997-09-10 03:11:36 +00:00
|
|
|
match a lower numbered rule will be dropped. However, a kernel compile
|
|
|
|
time option
|
|
|
|
.Dq IPFIREWALL_DEFAULT_TO_ACCEPT
|
|
|
|
allows the administrator to change this fixed rule to permit everything.
|
1996-07-11 02:37:59 +00:00
|
|
|
.Pp
|
1997-06-23 02:12:21 +00:00
|
|
|
The value passed to
|
1996-07-11 02:37:59 +00:00
|
|
|
.Fn setsockopt
|
2000-03-02 14:54:02 +00:00
|
|
|
is a struct ip_fw describing the rule (see below).
|
|
|
|
In some cases
|
2000-03-07 22:45:32 +00:00
|
|
|
(such as
|
|
|
|
.Dv IP_FW_DEL ) ,
|
|
|
|
only the rule number is significant.
|
|
|
|
.Ss Commands
|
1997-06-23 02:12:21 +00:00
|
|
|
The following socket options are used to manage the rule list:
|
2000-03-07 22:45:32 +00:00
|
|
|
.Bl -tag -width "IP_FW_FLUSH"
|
|
|
|
.It Dv IP_FW_ADD
|
|
|
|
inserts the rule into the rule list
|
|
|
|
.It Dv IP_FW_DEL
|
|
|
|
deletes all rules having the matching rule number
|
|
|
|
.It Dv IP_FW_GET
|
|
|
|
returns the (first) rule having the matching rule number
|
|
|
|
.It Dv IP_FW_ZERO
|
|
|
|
zeros the statistics associated with all rules having the
|
2000-03-01 14:50:24 +00:00
|
|
|
matching rule number.
|
|
|
|
If the rule number is zero, all rules are zeroed.
|
2000-03-07 22:45:32 +00:00
|
|
|
.It Dv IP_FW_FLUSH
|
|
|
|
removes all rules (except 65535).
|
|
|
|
.El
|
1996-07-11 02:37:59 +00:00
|
|
|
.Pp
|
2000-03-07 22:45:32 +00:00
|
|
|
When the kernel security level is greater than 2, only
|
|
|
|
.Dv IP_FW_GET
|
1997-06-23 02:12:21 +00:00
|
|
|
is allowed.
|
2000-03-07 22:45:32 +00:00
|
|
|
.Ss Rule Structure
|
2000-09-29 06:55:02 +00:00
|
|
|
Rules are described by the structures in ip_fw.h.
|
2000-03-07 22:45:32 +00:00
|
|
|
.Ss Rule Actions
|
1997-06-23 02:12:21 +00:00
|
|
|
Each rule has an action described by the IP_FW_F_COMMAND bits in the
|
|
|
|
flags word:
|
2000-03-07 22:45:32 +00:00
|
|
|
.Bl -tag -width "IP_FW_F_DIVERT"
|
|
|
|
.It Dv IP_FW_F_DENY
|
2000-09-29 06:55:02 +00:00
|
|
|
Drop packet and stop processing.
|
2000-03-07 22:45:32 +00:00
|
|
|
.It Dv IP_FW_F_REJECT
|
2000-09-29 06:55:02 +00:00
|
|
|
drop packet; send rejection via ICMP or TCP and stop processing.
|
2000-03-07 22:45:32 +00:00
|
|
|
.It Dv IP_FW_F_ACCEPT
|
2000-09-29 06:55:02 +00:00
|
|
|
accept packet and stop processing.
|
2000-03-07 22:45:32 +00:00
|
|
|
.It Dv IP_FW_F_COUNT
|
|
|
|
increment counters; continue matching
|
|
|
|
.It Dv IP_FW_F_DIVERT
|
|
|
|
divert packet to a
|
|
|
|
.Xr divert 4
|
2000-09-29 06:55:02 +00:00
|
|
|
socket and stop processing.
|
2000-03-07 22:45:32 +00:00
|
|
|
.It Dv IP_FW_F_TEE
|
2000-09-29 06:55:02 +00:00
|
|
|
Send a copy of this packet to a
|
2000-03-07 22:45:32 +00:00
|
|
|
.Xr divert 4
|
2000-09-29 06:55:02 +00:00
|
|
|
socket and continue processing the original packet at the next rule.
|
2000-03-07 22:45:32 +00:00
|
|
|
.It Dv IP_FW_F_SKIPTO
|
|
|
|
skip to rule number
|
|
|
|
.Va fu_skipto_rule
|
2000-09-29 06:55:02 +00:00
|
|
|
At this time the target rule number must be greater than the active rule number.
|
|
|
|
.It Dv IP_FW_F_PIPE
|
|
|
|
The packet is marked for the use of
|
|
|
|
.Xr dummynet 4 ,
|
|
|
|
and processing stopped.
|
|
|
|
.It Dv IP_FW_F_QUEUE
|
|
|
|
The packet is marked for the use of
|
|
|
|
.Xr dummynet 4 ,
|
|
|
|
and processing stopped.
|
|
|
|
.It Dv IP_FW_F_FWD
|
|
|
|
The packet is accepted but the destination is hijacked. (see
|
|
|
|
.Xr ipfw 8 )
|
2000-03-07 22:45:32 +00:00
|
|
|
.El
|
1996-07-11 02:37:59 +00:00
|
|
|
.Pp
|
2000-03-07 22:45:32 +00:00
|
|
|
In the case of
|
|
|
|
.Dv IP_FW_F_REJECT ,
|
|
|
|
if the
|
|
|
|
.Va fu_reject_code
|
|
|
|
is a number
|
1997-06-23 02:12:21 +00:00
|
|
|
from 0 to 255, then an ICMP unreachable packet is sent back to the
|
|
|
|
original packet's source IP address, with the corresponding code.
|
2000-03-07 22:45:32 +00:00
|
|
|
Otherwise, the value must be 256 and the protocol
|
|
|
|
.Dv IPPROTO_TCP ,
|
1997-06-23 02:12:21 +00:00
|
|
|
in which case a TCP reset packet is sent instead.
|
1996-07-11 02:37:59 +00:00
|
|
|
.Pp
|
2000-03-07 22:45:32 +00:00
|
|
|
With
|
|
|
|
.Dv IP_FW_F_SKIPTO ,
|
|
|
|
all succeeding rules having rule number less
|
|
|
|
than
|
|
|
|
.Va fu_skipto_rule
|
|
|
|
are skipped.
|
|
|
|
.Ss Kernel Options
|
1997-06-23 02:12:21 +00:00
|
|
|
Options in the kernel configuration file:
|
2000-03-07 22:45:32 +00:00
|
|
|
.Bl -tag -width "optionsXIPFIREWALL_VERBOSE_LIMIT"
|
|
|
|
.It Cd options IPFIREWALL
|
|
|
|
enable
|
|
|
|
.Nm
|
|
|
|
.It Cd options IPFIREWALL_VERBOSE
|
|
|
|
enable firewall output
|
|
|
|
.It Cd options IPFIREWALL_VERBOSE_LIMIT
|
|
|
|
limit firewall output
|
|
|
|
.It Cd options IPDIVERT
|
|
|
|
enable
|
|
|
|
.Xr divert 4
|
|
|
|
sockets
|
|
|
|
.El
|
1997-06-23 02:12:21 +00:00
|
|
|
.Pp
|
2000-03-07 22:45:32 +00:00
|
|
|
When packets match a rule with the
|
|
|
|
.Dv IP_FW_F_PRN
|
|
|
|
bit set, a message
|
|
|
|
is logged to the console if
|
|
|
|
.Dv IPFIREWALL_VERBOSE
|
|
|
|
has been enabled;
|
|
|
|
Dq IPFIREWALL_VERBOSE_LIMIT
|
|
|
|
limits the maximum number of times each
|
2000-03-01 14:50:24 +00:00
|
|
|
rule can cause a log message.
|
|
|
|
These variables are also
|
1997-06-23 02:12:21 +00:00
|
|
|
available via the
|
|
|
|
.Xr sysctl 3
|
|
|
|
interface.
|
2000-03-02 13:53:01 +00:00
|
|
|
.Sh RETURN VALUES
|
|
|
|
The
|
|
|
|
.Fn setsockopt
|
|
|
|
function returns 0 on success.
|
|
|
|
Otherwise, -1 is returned and the global variable
|
|
|
|
.Va errno
|
|
|
|
is set to indicate the error.
|
|
|
|
.Sh ERRORS
|
|
|
|
The
|
|
|
|
.Fn setsockopt
|
|
|
|
function will fail if:
|
|
|
|
.Bl -tag -width Er
|
|
|
|
.It Bq Er EINVAL
|
|
|
|
The IP option field was improperly formed;
|
|
|
|
an option field was shorter than the minimum value
|
|
|
|
or longer than the option buffer provided.
|
|
|
|
.It Bq Er EINVAL
|
|
|
|
A structural error in ip_fw structure occurred
|
|
|
|
(n_src_p+n_dst_p too big, ports set for ALL/ICMP protocols etc.).
|
|
|
|
.It Bq Er EINVAL
|
|
|
|
An invalid rule number was used.
|
|
|
|
.El
|
1995-02-17 18:48:36 +00:00
|
|
|
.Sh SEE ALSO
|
1996-07-11 02:37:59 +00:00
|
|
|
.Xr setsockopt 2 ,
|
1997-06-23 02:12:21 +00:00
|
|
|
.Xr divert 4 ,
|
1997-09-29 10:11:02 +00:00
|
|
|
.Xr ip 4 ,
|
1997-06-23 02:12:21 +00:00
|
|
|
.Xr ipfw 8 ,
|
2000-11-15 16:00:07 +00:00
|
|
|
.Xr sysctl 8
|
1995-02-17 18:48:36 +00:00
|
|
|
.Sh BUGS
|
1996-07-11 02:37:59 +00:00
|
|
|
.Pp
|
1997-06-23 02:12:21 +00:00
|
|
|
This man page still needs work.
|
1995-02-17 18:48:36 +00:00
|
|
|
.Sh HISTORY
|
1997-06-23 02:12:21 +00:00
|
|
|
The ipfw facility was initially written as package to BSDI
|
2000-03-07 22:45:32 +00:00
|
|
|
by
|
|
|
|
.An Daniel Boulet
|
|
|
|
.Aq danny@BouletFermat.ab.ca .
|
|
|
|
It has been heavily modified and ported to
|
|
|
|
.Fx
|
|
|
|
by
|
|
|
|
.Ar Ugen J.S.Antsilevich
|
|
|
|
.Aq ugen@NetVision.net.il .
|
1997-06-23 02:12:21 +00:00
|
|
|
.Pp
|
2000-03-07 22:45:32 +00:00
|
|
|
Several enhancements added by
|
|
|
|
.An Archie Cobbs
|
2000-10-26 15:30:44 +00:00
|
|
|
.Aq archie@FreeBSD.org .
|