1996-08-05 02:38:51 +00:00
|
|
|
.Dd July 20, 1996
|
1995-10-26 05:36:24 +00:00
|
|
|
.Dt IPFW 8 SMM
|
|
|
|
.Os FreeBSD
|
1994-11-17 09:50:30 +00:00
|
|
|
.Sh NAME
|
1995-10-26 05:36:24 +00:00
|
|
|
.Nm ipfw
|
1996-02-24 13:39:46 +00:00
|
|
|
.Nd controlling utility for IP firewall
|
1994-11-17 09:50:30 +00:00
|
|
|
.Sh SYNOPSIS
|
1996-08-13 19:43:24 +00:00
|
|
|
.Nm
|
1996-02-24 13:39:46 +00:00
|
|
|
.Ar file
|
|
|
|
.Nm ipfw
|
|
|
|
flush
|
|
|
|
.Nm ipfw
|
|
|
|
zero
|
1996-06-15 01:38:51 +00:00
|
|
|
.Oo
|
|
|
|
.Ar number
|
|
|
|
.Oc
|
1996-02-24 13:39:46 +00:00
|
|
|
.Nm ipfw
|
|
|
|
delete
|
|
|
|
.Ar number
|
|
|
|
.Nm ipfw
|
1995-10-26 05:36:24 +00:00
|
|
|
.Oo
|
1996-08-31 17:58:23 +00:00
|
|
|
.Fl aftN
|
1995-10-26 05:36:24 +00:00
|
|
|
.Oc
|
1996-02-24 13:39:46 +00:00
|
|
|
list
|
1995-10-26 05:36:24 +00:00
|
|
|
.Nm ipfw
|
1996-02-24 13:39:46 +00:00
|
|
|
add
|
1995-10-26 05:36:24 +00:00
|
|
|
.Oo
|
1996-02-24 13:39:46 +00:00
|
|
|
.Ar number
|
|
|
|
.Oc
|
|
|
|
.Ar action
|
|
|
|
.Oo
|
|
|
|
log
|
|
|
|
.Oc
|
|
|
|
.Ar proto
|
|
|
|
from
|
|
|
|
.Ar src
|
|
|
|
to
|
|
|
|
.Ar dst
|
|
|
|
.Oo
|
|
|
|
via
|
|
|
|
.Ar name|ipno
|
|
|
|
.Oc
|
|
|
|
.Oo
|
|
|
|
.Ar options
|
1995-10-26 05:36:24 +00:00
|
|
|
.Oc
|
1994-11-17 09:50:30 +00:00
|
|
|
.Sh DESCRIPTION
|
1996-02-24 13:39:46 +00:00
|
|
|
If used as shown in the first synopsis line, the
|
|
|
|
.Ar file
|
|
|
|
will be read line by line and applied as arguments to the
|
1996-08-13 19:43:24 +00:00
|
|
|
.Nm
|
1996-02-24 13:39:46 +00:00
|
|
|
command.
|
|
|
|
.Pp
|
1996-08-13 19:43:24 +00:00
|
|
|
The
|
|
|
|
.Nm
|
|
|
|
code works by going through the rule-list for each packet,
|
1996-02-24 13:39:46 +00:00
|
|
|
until a match is found.
|
1996-07-10 19:44:30 +00:00
|
|
|
All rules have two associated counters, a packet count and
|
1996-02-24 13:39:46 +00:00
|
|
|
a byte count.
|
|
|
|
These counters are updated when a packet matches the rule.
|
|
|
|
.Pp
|
1996-07-10 19:44:30 +00:00
|
|
|
The rules are ordered by a ``line-number'' from 1 to 65534 that is used
|
|
|
|
to order and delete rules. Rules are tried in increasing order, and the
|
|
|
|
first rule that matches a packet applies.
|
|
|
|
Multiple rules may share the same number and apply in
|
|
|
|
the order in which they were added.
|
|
|
|
.Pp
|
|
|
|
If a rule is added without a number, it numbered 100 higher
|
|
|
|
than the previous rule. If the highest defined rule number is
|
|
|
|
greater than 65434, new rules are appended to the last rule.
|
|
|
|
.Pp
|
|
|
|
The delete operation deletes the first rule with number
|
|
|
|
.Ar number ,
|
|
|
|
if any.
|
|
|
|
.Pp
|
|
|
|
The list command prints out the current rule set.
|
|
|
|
.Pp
|
|
|
|
The zero operation zeroes the counters associated with rule number
|
|
|
|
.Ar number .
|
|
|
|
.Pp
|
|
|
|
The flush operation removes all rules.
|
1996-02-24 13:39:46 +00:00
|
|
|
.Pp
|
|
|
|
One rule is always present:
|
|
|
|
.Bd -literal -offset center
|
|
|
|
65535 deny all from any to any
|
|
|
|
.Ed
|
|
|
|
|
1996-07-10 19:44:30 +00:00
|
|
|
This rule is the default policy, i.e., don't allow anything at all.
|
|
|
|
Your job in setting up rules is to modify this policy to match your needs.
|
1996-02-24 13:39:46 +00:00
|
|
|
.Pp
|
|
|
|
The following options are available:
|
|
|
|
.Bl -tag -width flag
|
|
|
|
.It Fl a
|
|
|
|
While listing, show counter values. This option is the only way to see
|
|
|
|
accounting records.
|
1996-08-31 17:58:23 +00:00
|
|
|
.It Fl f
|
|
|
|
Don't ask for confirmation for commands that can cause problems if misused
|
|
|
|
(ie; flush).
|
|
|
|
.Ar Note ,
|
|
|
|
if there is no tty associated with the process, this is implied.
|
1996-06-15 01:38:51 +00:00
|
|
|
.It Fl t
|
|
|
|
While listing, show last match timestamp.
|
1996-02-24 13:39:46 +00:00
|
|
|
.It Fl N
|
1996-09-15 00:08:30 +00:00
|
|
|
Try to resolve addresses and service names in output.
|
1996-02-24 13:39:46 +00:00
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
.Ar action :
|
|
|
|
.Bl -hang -offset flag -width 1234567890123456
|
1996-06-15 01:38:51 +00:00
|
|
|
.It Nm allow
|
|
|
|
Allow packets that match rule.
|
1996-02-24 13:39:46 +00:00
|
|
|
The search terminates.
|
|
|
|
.It Nm pass
|
1996-06-15 01:38:51 +00:00
|
|
|
Same as allow.
|
|
|
|
.It Nm accept
|
|
|
|
Same as allow.
|
1996-02-24 13:39:46 +00:00
|
|
|
.It Nm count
|
1996-06-15 01:38:51 +00:00
|
|
|
Update counters for all packets that match rule.
|
1996-07-10 19:44:30 +00:00
|
|
|
The search continues with the next rule.
|
1996-02-24 13:39:46 +00:00
|
|
|
.It Nm deny
|
|
|
|
Discard packets that match this rule.
|
|
|
|
The search terminates.
|
|
|
|
.It Nm reject
|
1996-07-10 19:44:30 +00:00
|
|
|
Discard packets that match this rule, and try to send an ICMP notice.
|
|
|
|
The search terminates.
|
|
|
|
.It Nm divert port
|
|
|
|
Divert packets that match this rule to the divert socket bound to port
|
|
|
|
.Ar port .
|
1996-02-24 13:39:46 +00:00
|
|
|
The search terminates.
|
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
When a packet matches a rule with the
|
|
|
|
.Nm log
|
|
|
|
keyword, a message will be printed on the console.
|
1996-06-15 01:38:51 +00:00
|
|
|
If the kernel was compiled with the
|
|
|
|
.Nm IP_FIREWALL_VERBOSE_LIMIT
|
|
|
|
option, then logging will cease after the number of packets
|
|
|
|
specified by the option are recieved for that particular
|
|
|
|
chain entry. Logging may then be re-enabled by clearing
|
|
|
|
the packet counter for that entry.
|
1996-02-24 13:39:46 +00:00
|
|
|
.Pp
|
|
|
|
.Ar proto :
|
|
|
|
.Bl -hang -offset flag -width 1234567890123456
|
|
|
|
.It Nm ip
|
|
|
|
All packets match.
|
|
|
|
.It Nm all
|
|
|
|
All packets match.
|
|
|
|
.It Nm tcp
|
|
|
|
Only TCP packets match.
|
|
|
|
.It Nm udp
|
|
|
|
Only UDP packets match.
|
|
|
|
.It Nm icmp
|
|
|
|
Only ICMP packets match.
|
1996-08-13 19:43:24 +00:00
|
|
|
.It Nm <number|name>
|
|
|
|
Only packets for the specified protocol matches (see
|
|
|
|
.Pa /etc/protocols
|
|
|
|
for a complete list).
|
1996-02-24 13:39:46 +00:00
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
.Ar src
|
|
|
|
and
|
|
|
|
.Ar dst :
|
1996-06-15 01:38:51 +00:00
|
|
|
.Pp
|
|
|
|
.Bl -hang -offset flag
|
|
|
|
.It <address/mask> [ports]
|
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
The
|
|
|
|
.Em <address/mask>
|
|
|
|
may be specified as:
|
1996-02-24 13:39:46 +00:00
|
|
|
.Bl -hang -offset flag -width 1234567890123456
|
|
|
|
.It Ar ipno
|
|
|
|
An ipnumber of the form 1.2.3.4.
|
|
|
|
Only this exact ip number match the rule.
|
|
|
|
.It Ar ipno/bits
|
|
|
|
An ipnumber with a mask width of the form 1.2.3.4/24.
|
|
|
|
In this case all ip numbers from 1.2.3.0 to 1.2.3.255 will match.
|
|
|
|
.It Ar ipno:mask
|
1996-07-10 19:44:30 +00:00
|
|
|
An ipnumber with a mask width of the form 1.2.3.4:255.255.240.0.
|
1996-02-24 13:39:46 +00:00
|
|
|
In this case all ip numbers from 1.2.0.0 to 1.2.15.255 will match.
|
|
|
|
.El
|
|
|
|
.Pp
|
1996-06-15 01:38:51 +00:00
|
|
|
With the TCP and UDP
|
|
|
|
.Em protocols ,
|
|
|
|
an optional
|
|
|
|
.Em port
|
|
|
|
may be specified as:
|
|
|
|
.Pp
|
|
|
|
.Bl -hang -offset flag
|
1996-06-29 01:21:07 +00:00
|
|
|
.It Ns {port|port-port} Ns Op ,port Ns Op ,...
|
1996-06-15 01:38:51 +00:00
|
|
|
.El
|
|
|
|
.Pp
|
|
|
|
Service names (from
|
|
|
|
.Pa /etc/services )
|
|
|
|
may not be used instead of a numeric port value.
|
|
|
|
Also, note that a range may only be specified as the first value,
|
|
|
|
and the port list is limited to
|
|
|
|
.Nm IP_FW_MAX_PORTS
|
|
|
|
(as defined in /usr/src/sys/netinet/ip_fw.h)
|
|
|
|
ports.
|
|
|
|
.Pp
|
1996-02-24 13:39:46 +00:00
|
|
|
If ``via''
|
|
|
|
.Ar name
|
|
|
|
is specified, only packets received via or on their way out of an interface
|
|
|
|
matching
|
|
|
|
.Ar name
|
|
|
|
will match this rule.
|
|
|
|
.Pp
|
|
|
|
If ``via''
|
|
|
|
.Ar ipno
|
|
|
|
is specified, only packets received via or on their way out of an interface
|
|
|
|
having the address
|
|
|
|
.Ar ipno
|
|
|
|
will match this rule.
|
|
|
|
.Pp
|
|
|
|
.Ar options :
|
|
|
|
.Bl -hang -offset flag -width 1234567890123456
|
|
|
|
.It frag
|
1996-06-15 01:38:51 +00:00
|
|
|
Matches if the packet is a fragment and this is not the first fragment
|
1996-02-24 13:39:46 +00:00
|
|
|
of the datagram.
|
|
|
|
.It in
|
|
|
|
Matches if this packet was on the way in.
|
|
|
|
.It out
|
|
|
|
Matches if this packet was on the way out.
|
|
|
|
.It ipoptions Ar spec
|
1996-06-15 01:38:51 +00:00
|
|
|
Matches if the IP header contains the comma separated list of
|
|
|
|
options specified in
|
|
|
|
.Ar spec .
|
|
|
|
The supported IP options are:
|
|
|
|
.Nm ssrr
|
|
|
|
(strict source route),
|
|
|
|
.Nm lsrr
|
|
|
|
(loose source route),
|
|
|
|
.Nm rr
|
|
|
|
(record packet route), and
|
|
|
|
.Nm ts
|
|
|
|
(timestamp).
|
|
|
|
The absence of a particular option may be denoted
|
|
|
|
with a ``!''.
|
1996-02-24 13:39:46 +00:00
|
|
|
.It established
|
1996-07-02 00:29:22 +00:00
|
|
|
Matches packets that have the RST or ACK bits set.
|
1996-02-24 13:39:46 +00:00
|
|
|
TCP packets only.
|
|
|
|
.It setup
|
|
|
|
Matches packets that have the SYN bit set but no ACK bit.
|
|
|
|
TCP packets only.
|
|
|
|
.It tcpflags Ar spec
|
1996-06-15 01:38:51 +00:00
|
|
|
Matches if the TCP header contains the comma separated list of
|
|
|
|
flags specified in
|
|
|
|
.Ar spec .
|
|
|
|
The supported TCP flags are:
|
|
|
|
.Nm fin ,
|
|
|
|
.Nm syn ,
|
|
|
|
.Nm rst ,
|
|
|
|
.Nm psh ,
|
|
|
|
.Nm ack ,
|
|
|
|
and
|
|
|
|
.Nm urg .
|
|
|
|
The absence of a particular flag may be denoted
|
|
|
|
with a ``!''.
|
|
|
|
.It icmptypes Ar types
|
|
|
|
Matches if the ICMP type is in the list
|
|
|
|
.Ar types .
|
|
|
|
The list may be specified as any combination of ranges
|
|
|
|
or individual types separated by commas.
|
1996-02-24 13:39:46 +00:00
|
|
|
.El
|
|
|
|
.Sh CHECKLIST
|
|
|
|
Here are some important points to consider when designing your
|
|
|
|
rules:
|
|
|
|
.Bl -bullet -hang -offset flag -width 1234567890123456
|
|
|
|
.It
|
|
|
|
Remember that you filter both packets going in and out.
|
1996-06-15 01:38:51 +00:00
|
|
|
Most connections need packets going in both directions.
|
1996-02-24 13:39:46 +00:00
|
|
|
.It
|
|
|
|
Remember to test very carefully.
|
1996-06-15 01:38:51 +00:00
|
|
|
It is a good idea to be near the console when doing this.
|
1996-02-24 13:39:46 +00:00
|
|
|
.It
|
|
|
|
Don't forget the loopback interface.
|
|
|
|
.El
|
|
|
|
.Sh FINE POINTS
|
|
|
|
There is one kind of packet that the firewall will always discard,
|
|
|
|
that is an IP fragment with a fragment offset of one.
|
|
|
|
This is a valid packet, but it only has one use, to try to circumvent
|
|
|
|
firewalls.
|
|
|
|
.Pp
|
|
|
|
If you are logged in over a network, loading the LKM version of
|
|
|
|
.Nm
|
|
|
|
is probably not as straightforward as you would think.
|
|
|
|
I recommend this command line:
|
|
|
|
.Bd -literal -offset center
|
|
|
|
modload /lkm/ipfw_mod.o && \e
|
|
|
|
ipfw add 32000 allow all from any to any
|
|
|
|
.Ed
|
|
|
|
|
1996-06-15 01:38:51 +00:00
|
|
|
Along the same lines, doing an
|
1996-02-24 13:39:46 +00:00
|
|
|
.Bd -literal -offset center
|
|
|
|
ipfw flush
|
|
|
|
.Ed
|
|
|
|
|
|
|
|
in similar surroundings is also a bad idea.
|
1996-07-10 19:44:30 +00:00
|
|
|
.Sh PACKET DIVERSION
|
|
|
|
A divert socket bound to the specified port will receive all packets diverted
|
|
|
|
to that port; see
|
|
|
|
.Xr divert 4 .
|
|
|
|
If no socket is bound to the destination port, or if the kernel
|
|
|
|
wasn't compiled with divert socket support, diverted packets are dropped.
|
1994-11-17 09:50:30 +00:00
|
|
|
.Sh EXAMPLES
|
1995-10-26 05:36:24 +00:00
|
|
|
This command adds an entry which denies all tcp packets from
|
|
|
|
.Em hacker.evil.org
|
|
|
|
to the telnet port of
|
|
|
|
.Em wolf.tambov.su
|
|
|
|
from being forwarded by the host:
|
|
|
|
.Pp
|
1996-06-15 01:38:51 +00:00
|
|
|
.Dl ipfw add deny tcp from hacker.evil.org to wolf.tambov.su 23
|
1995-10-26 05:36:24 +00:00
|
|
|
.Pp
|
|
|
|
This one disallows any connection from the entire hackers network to
|
|
|
|
my host:
|
|
|
|
.Pp
|
|
|
|
.Dl ipfw addf deny all from 123.45.67.0/24 to my.host.org
|
|
|
|
.Pp
|
|
|
|
Here is good usage of list command to see accounting records:
|
|
|
|
.Pp
|
1996-06-15 23:01:44 +00:00
|
|
|
.Dl ipfw -at l
|
1995-10-26 05:36:24 +00:00
|
|
|
.Pp
|
|
|
|
or in short form
|
|
|
|
.Pp
|
1996-06-15 01:38:51 +00:00
|
|
|
.Dl ipfw -a l
|
1995-10-26 05:36:24 +00:00
|
|
|
.Pp
|
1996-07-10 19:44:30 +00:00
|
|
|
This rule diverts all incoming packets from 192.168.2.0/24 to divert port 5000:
|
|
|
|
.Pp
|
|
|
|
.Dl ipfw divert 5000 all from 192.168.2.0/24 to any in
|
1994-11-17 09:50:30 +00:00
|
|
|
.Sh SEE ALSO
|
1996-08-05 02:38:51 +00:00
|
|
|
.Xr divert 4 ,
|
1995-10-26 05:36:24 +00:00
|
|
|
.Xr ip 4 ,
|
|
|
|
.Xr ipfirewall 4 ,
|
1996-08-05 02:38:51 +00:00
|
|
|
.Xr protocols 5 ,
|
|
|
|
.Xr services 5 ,
|
1995-10-26 05:36:24 +00:00
|
|
|
.Xr reboot 8 ,
|
|
|
|
.Xr syslogd 8
|
1994-11-17 09:50:30 +00:00
|
|
|
.Sh BUGS
|
1995-10-26 05:36:24 +00:00
|
|
|
.Pp
|
|
|
|
.Em WARNING!!WARNING!!WARNING!!WARNING!!WARNING!!WARNING!!WARNING!!
|
|
|
|
.Pp
|
|
|
|
This program can put your computer in rather unusable state. When
|
|
|
|
using it for the first time, work on the console of the computer, and
|
|
|
|
do
|
|
|
|
.Em NOT
|
|
|
|
do anything you don't understand.
|
|
|
|
.Pp
|
1996-08-05 02:38:51 +00:00
|
|
|
When manipulating/adding chain entries, service and protocol names are
|
1996-06-15 01:38:51 +00:00
|
|
|
not accepted.
|
1996-08-13 19:43:24 +00:00
|
|
|
.Sh AUTHORS
|
|
|
|
Ugen J. S. Antsilevich,
|
|
|
|
Poul-Henning Kamp,
|
|
|
|
Alex Nash,
|
|
|
|
Archie Cobbs.
|
|
|
|
API based upon code written by Daniel Boulet for BSDI.
|
1994-11-17 09:50:30 +00:00
|
|
|
.Sh HISTORY
|
1996-08-13 19:43:24 +00:00
|
|
|
.Nm
|
1996-08-23 00:57:08 +00:00
|
|
|
first appeared in
|
|
|
|
.Fx 2.0 .
|