#!/sbin/openrc-run # Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/net-firewall/iptables/files/iptables-1.4.11.init,v 1.2 2011/12/04 10:15:59 swegener Exp $ # Modified: caskd description="IPv4/IPv6 packet filtering and NAT" description_save="Save firewall state" description_panic="Drop all packets" description_reload="Reload configuration" extra_commands="save panic" extra_started_commands="reload" iptables_name=${SVCNAME##*.} if [ "${iptables_name}" != "iptables" -a "${iptables_name}" != "ip6tables" ] ; then iptables_name="iptables" fi iptables_bin="/sbin/${iptables_name}" iptables_dir="${IPTABLES_DIR}" case ${iptables_name} in iptables) iptables_proc="/proc/net/ip_tables_names";; ip6tables) iptables_proc="/proc/net/ip6_tables_names";; esac depend() { before net after sysctl use logger provide firewall } set_table_policy() { local chains table=$1 policy=$2 case ${table} in nat) chains="PREROUTING POSTROUTING OUTPUT";; mangle) chains="PREROUTING INPUT FORWARD OUTPUT POSTROUTING";; filter) chains="INPUT FORWARD OUTPUT";; *) chains="";; esac local chain for chain in ${chains} ; do ${iptables_bin} -w 5 -t ${table} -P ${chain} ${policy} done } checkkernel() { if [ ! -e ${iptables_proc} ]; then eerror "Your kernel lacks ${iptables_name} support, please load" eerror "appropriate modules and try again." return 1 fi return 0 } checkconfig() { if [ ! -d "${iptables_dir}" ]; then eerror "The iptables directory ${iptables_dir} doesn't exist" return 1 fi return 0 } start() { checkconfig || return 1 restore_file="$(mktemp)" einfo "Merging iptables rules into ${restore_file}" for i in "filter" "mangle" "raw" "nat" "security"; do [ -f "${iptables_dir}/$i" ] && cat "${iptables_dir}/$i" "${iptables_dir}/$i-rules"/* "${iptables_dir}/commit" >> "${restore_file}" done ebegin "Loading ${iptables_name} state and starting firewall" ${iptables_bin}-restore ${SAVE_RESTORE_OPTIONS} < "${restore_file}" eend $? } stop() { checkkernel || return 1 ebegin "Stopping firewall" local a for a in $(cat ${iptables_proc}); do set_table_policy $a ACCEPT ${iptables_bin} -w 5 -F -t $a ${iptables_bin} -w 5 -X -t $a done eend $? } reload() { checkkernel || return 1 ebegin "Flushing firewall" local a for a in $(cat ${iptables_proc}); do ${iptables_bin} -w 5 -F -t $a ${iptables_bin} -w 5 -X -t $a done eend $? start } panic() { checkkernel || return 1 if service_started ${iptables_name}; then rc-service ${iptables_name} stop fi local a ebegin "Dropping all packets" for a in $(cat ${iptables_proc}); do ${iptables_bin} -w 5 -F -t $a ${iptables_bin} -w 5 -X -t $a set_table_policy $a DROP done eend $? }