пятница, 21 сентября 2012 г.

Автоматическое применение правил iptables при старте (X)ubuntu



Создаем в каталоге /etc/init.d файл iptables следующего содержания:

#!/bin/sh -e
### BEGIN INIT INFO
# Provides: iptables
# Required-Start: mountvirtfs ifupdown $local_fs
# Default-Start: S
# Default-Stop: 0 6
### END INIT INFO
# July 9, 2007
# James B. Crocker
# Creative Commons Attribution - Share Alike 3.0 License (BY,SA)
# Script to load/unload/save iptables firewall settings.
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

IPTABLES=/sbin/iptables
IPTABLES_SAVE=/sbin/iptables-save
IPTABLES_RESTORE=/sbin/iptables-restore

IPTABLES_CONFIG=/etc/iptables.conf

[ -x $IPTABLES ] || exit 0

. /lib/lsb/init-functions


case "$1" in
start)
log_action_begin_msg "Starting firewall"
type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 120" || true
if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then 

log_action_end_msg $? 
else 
log_action_end_msg $? 
fi 
type usplash_write >/dev/null 2>/dev/null && usplash_write "TIMEOUT 15" || true
;;

stop)
log_action_begin_msg "Saving current firewall configuration"
if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
log_action_begin_msg "Flushing ALL firewall rules from chains!"
if $IPTABLES -F ; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
log_action_begin_msg "Deleting ALL firewall chains [Warning: ACCEPTING ALL PORT SERVICES!]"
if $IPTABLES -X ; then
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;

save)
log_action_begin_msg "Saving current firewall configuration"
if $IPTABLES_SAVE > $IPTABLES_CONFIG ; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;

force-reload|restart)
log_action_begin_msg "Reloading firewall configuration [Warning: POTENTIAL NETWORK INSECURITY DURING RELOAD]"
$IPTABLES -F
$IPTABLES -X
if $IPTABLES_RESTORE < $IPTABLES_CONFIG ; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;

*)
echo "Usage: /etc/init.d/iptables {start|stop|save|restart|force-reload}"
exit 1
;;
esac

exit 0

Затем присваиваем ему права:
chmod +x iptables
и прописываем автозапуск при старте машины:
update-rc.d iptables defaults

Теперь работают команды
service iptables {start|stop|save|restart|force-reload}

2 комментария:

  1. Исконно дебиановский метод:

    Создаем файл /etc/iptables.conf:
    iptables-save > /etc/iptables.conf

    Правим его под свои нужды.

    Правим /etc/network/interfaces
    Пишем в него:
    pre-up iptables-restore < /etc/iptables.conf
    # в этой строке применяем правила при активации
    # сетевых интерфейсов
    post-down iptables-save > /etc/iptables.conf
    # здесь на всякий случай выгружаем
    # правила, на тот случай если забыли сохранить

    ОтветитьУдалить
  2. PS
    Нда, велико желание переделать дебиан в редхад ))

    ОтветитьУдалить