123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #!/sbin/openrc-run
- # Copyright 1999-2020 Gentoo Authors
- # Distributed under the terms of the GNU General Public License v2
- extra_commands="save panic"
- extra_started_commands="reload"
- ebtables_bin="/sbin/ebtables"
- ebtables_save=${EBTABLES_SAVE}
- depend() {
- before net
- use logger
- }
- ebtables_tables() {
- for table in filter nat broute; do
- if ${ebtables_bin} -t ${table} -L > /dev/null 2>&1; then
- printf '%s' "${table} "
- fi
- done
- }
- set_table_policy() {
- local chains table=$1 policy=$2
- case ${table} in
- nat) chains="PREROUTING POSTROUTING OUTPUT";;
- broute) chains="BROUTING";;
- filter) chains="INPUT FORWARD OUTPUT";;
- *) chains="";;
- esac
- local chain
- for chain in ${chains} ; do
- ${ebtables_bin} -t ${table} -P ${chain} ${policy}
- done
- }
- checkconfig() {
- if [ ! -f ${ebtables_save} ] ; then
- eerror "Not starting ebtables. First create some rules then run:"
- eerror "/etc/init.d/ebtables save"
- return 1
- fi
- return 0
- }
- start() {
- checkconfig || return 1
- ebegin "Loading ebtables state and starting bridge firewall"
- ${ebtables_bin}-restore ${SAVE_RESTORE_OPTIONS} < "${ebtables_save}"
- eend $?
- }
- stop() {
- if [ "${SAVE_ON_STOP}" = "yes" ] ; then
- save || return 1
- fi
- ebegin "Stopping bridge firewall"
- local a
- for a in $(ebtables_tables); do
- set_table_policy $a ACCEPT
- ${ebtables_bin} -t $a -F
- ${ebtables_bin} -t $a -X
- done
- eend $?
- }
- reload() {
- ebegin "Flushing bridge firewall"
- local a
- for a in $(ebtables_tables); do
- ${ebtables_bin} -t $a -F
- ${ebtables_bin} -t $a -X
- done
- eend $?
- start
- }
- save() {
- ebegin "Saving ebtables state"
- touch "${ebtables_save}"
- chmod 0600 "${ebtables_save}"
- ${ebtables_bin}-save $(ebtables_tables) ${SAVE_RESTORE_OPTIONS} > "${ebtables_save}"
- eend $?
- }
- panic() {
- service_started ebtables && svc_stop
- local a
- ebegin "Dropping all packets forwarded on bridges"
- for a in $(ebtables_tables); do
- ${ebtables_bin} -t $a -F
- ${ebtables_bin} -t $a -X
- set_table_policy $a DROP
- done
- eend $?
- }
|