ipfilter revision 111913
1#!/bin/sh
2#
3# $NetBSD: ipfilter,v 1.10 2001/02/28 17:03:50 lukem Exp $
4# $FreeBSD: head/etc/rc.d/ipfilter 111913 2003-03-05 17:16:22Z ume $
5#
6
7# PROVIDE: ipfilter
8# REQUIRE: root beforenetlkm mountcritlocal tty
9# KEYWORD: FreeBSD NetBSD
10
11. /etc/rc.subr
12
13name="ipfilter"
14rcvar=`set_rcvar`
15load_rc_config $name
16
17case ${OSTYPE} in
18FreeBSD)
19	stop_precmd="test -f ${ipfilter_rules} -o -f ${ipv6_ipfilter_rules}"
20	;;
21NetBSD)
22	stop_precmd="test -f /etc/ipf.conf -o -f /etc/ipf6.conf"
23	;;
24esac
25
26start_precmd="ipfilter_prestart"
27start_cmd="ipfilter_start"
28stop_cmd="ipfilter_stop"
29reload_precmd="$stop_precmd"
30reload_cmd="ipfilter_reload"
31resync_precmd="$stop_precmd"
32resync_cmd="ipfilter_resync"
33status_precmd="$stop_precmd"
34status_cmd="ipfilter_status"
35extra_commands="reload resync status"
36
37ipfilter_prestart()
38{
39case ${OSTYPE} in
40FreeBSD)
41	# load ipfilter kernel module if needed
42	if ! sysctl net.inet.ipf.fr_pass > /dev/null 2>&1; then
43		if kldload ipl; then
44			echo 'IP-filter module loaded.'
45		else
46			warn 'IP-filter module failed to load.'
47			return 1
48		fi
49	fi
50
51	# check for ipfilter rules
52	if [ ! -r "${ipfilter_rules}" ] && [ ! -r "${ipv6_ipfilter_rules}" ]
53	then
54		warn 'IP-filter: NO IPF RULES'
55		return 1
56	fi
57	;;
58NetBSD)
59	if [ ! -f /etc/ipf.conf ] && [ ! -f /etc/ipf6.conf ]; then
60		warn "/etc/ipf*.conf not readable; ipfilter start aborted."
61			#
62			# If booting directly to multiuser, send SIGTERM to
63			# the parent (/etc/rc) to abort the boot
64			#
65		if [ "$autoboot" = yes ]; then
66			echo "ERROR: ABORTING BOOT (sending SIGTERM to parent)!"
67			kill -TERM $$
68			exit 1
69		fi
70		return 1
71	fi
72	;;
73esac
74	return 0
75}
76
77ipfilter_start()
78{
79	echo "Enabling ipfilter."
80	case ${OSTYPE} in
81	FreeBSD)
82		${ipfilter_program:-/sbin/ipf} -Fa
83		if [ -r "${ipfilter_rules}" ]; then
84			${ipfilter_program:-/sbin/ipf} \
85			    -f "${ipfilter_rules}" ${ipfilter_flags}
86		fi
87		${ipfilter_program:-/sbin/ipf} -6 -Fa
88		if [ -r "${ipv6_ipfilter_rules}" ]; then
89			${ipfilter_program:-/sbin/ipf} -6 \
90			    -f "${ipv6_ipfilter_rules}" ${ipfilter_flags}
91		fi
92		;;
93	NetBSD)
94		/sbin/ipf -E -Fa
95		if [ -f /etc/ipf.conf ]; then
96			/sbin/ipf -f /etc/ipf.conf
97		fi
98		if [ -f /etc/ipf6.conf ]; then
99			/sbin/ipf -6 -f /etc/ipf6.conf
100		fi
101		;;
102	esac
103}
104
105ipfilter_stop()
106{
107	case ${OSTYPE} in
108	FreeBSD)
109		echo "Saving firewall state tables"
110		${ipfs_program:-/sbin/ipfs} -W ${ipfs_flags}
111		;;
112	NetBSD)
113		;;
114	esac
115	# XXX - The following command is not effective for 'lkm's
116	echo "Disabling ipfilter."
117	/sbin/ipf -D
118}
119
120ipfilter_reload()
121{
122	echo "Reloading ipfilter rules."
123
124	case ${OSTYPE} in
125	FreeBSD)
126		${ipfilter_program:-/sbin/ipf} -I -Fa
127		if [ -r "${ipfilter_rules}" ]; then
128			${ipfilter_program:-/sbin/ipf} -I \
129			    -f "${ipfilter_rules}" ${ipfilter_flags}
130		fi
131		${ipfilter_program:-/sbin/ipf} -I -6 -Fa
132		if [ -r "${ipv6_ipfilter_rules}" ]; then
133			${ipfilter_program:-/sbin/ipf} -I -6 \
134			    -f "${ipv6_ipfilter_rules}" ${ipfilter_flags}
135		fi
136		;;
137	NetBSD)
138		/sbin/ipf -I -Fa
139		if [ -f /etc/ipf.conf ] && ! /sbin/ipf -I -f /etc/ipf.conf; then
140			err 1 "reload of ipf.conf failed; not swapping to" \
141			    " new ruleset."
142		fi
143		if [ -f /etc/ipf6.conf ] && \
144		    ! /sbin/ipf -I -6 -f /etc/ipf6.conf; then
145			err 1 "reload of ipf6.conf failed; not swapping to" \
146			    " new ruleset."
147		fi
148		/sbin/ipf -s
149		;;
150	esac
151
152}
153
154ipfilter_resync()
155{
156	case ${OSTYPE} in
157	FreeBSD)
158		# Don't resync if ipfilter is not loaded
159		[ sysctl net.inet.ipf.fr_pass > /dev/null 2>&1 ] && return
160		;;
161	esac
162	${ipfilter_program:-/sbin/ipf} -y ${ipfilter_flags}
163}
164
165ipfilter_status()
166{
167	${ipfilter_program:-/sbin/ipf} -V
168}
169
170run_rc_command "$1"
171