Загрузка правил iptables при запуске (Ubuntu 10.04 - 10.10)
Введение
Итак, хотел я как-то настроить фаерволл в убунте. И что я обнаружил? Что из коробки поддерживается только некий ufw с примитивными возможностями и таким же синтаксисом команд. И все уже сделано для того, чтоб им было удобно пользоваться. Типа, вот вам решение — пользуйте.
Хотим фаервол — включаем его (заодно и помещаем в автозагрузку). Хотим — выключаем (и убираем из автозагрузки):
# ufw start # ufw stop
iptables vs. ufw
Но позвольте! Ведь ufw не умеет и десятой доли того, что умеет iptables! Возможно, кому-то синтаксис ufw понятней. Но я то не могу настраивать редиректы в таблице nat! Да, существуют обходные меры... Но это такие кривые хаки...
Итак, мотивацией для написания скрипта инициализации netfilter с помощью iptables (кроме зарплаты), стало желание нормально работать с iptables в убунте. Итак, был рожден следующий скрипт:
#! /bin/sh
### BEGIN INIT INFO
# Provides: iptables
# Required-Start:
# Required-Stop:
# Should-Start:
# Default-Start: 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Linux firewall initialisation and save
# Description: this script is for configuring linux firewall (netfilter)
# with help of command-line utility called iptables
### END INIT INFO
#set -e
DAEMON=/sbin/iptables
ipt=$DAEMON
test -x $DAEMON || exit 0
if [ ! -d /etc/iptables ]; then
mkdir /etc/iptables
fi
if [ ! -f /etc/iptables/rules.save ]; then
/sbin/iptables-save -c > /etc/iptables/rules.save
fi
. /lib/lsb/init-functions
case "$1" in
start)
log_daemon_msg "Starting linux firewall" "iptables"
cat /etc/iptables/rules.save | iptables-restore -c
log_end_msg $?
;;
stop)
log_daemon_msg "Stopping linux firewall" "iptables"
/sbin/iptables-save > /etc/iptables/rules.save
for table in filter nat mangle
do
$ipt -t $table -F
$ipt -t $table -X
$ipt -t $table -Z
done
$ipt -P FORWARD ACCEPT
$ipt -P INPUT ACCEPT
$ipt -P OUTPUT ACCEPT
log_end_msg 0
;;
restart)
log_daemon_msg "Restarting iptables" "iptables"
;;
status)
log_daemon_msg "Not implemented" "iptables"
log_end_msg 0
;;
save)
log_daemon_msg "Saving firewall rules"
/sbin/iptables-save > /etc/iptables/rules.save
log_end_msg 0
;;
*)
echo "Usage: /etc/init.d/iptables {start|stop|restart|save}"
exit 1
esac
exit 0
Как пользоваться?
Прежде всего, приведенный код нужно поместить в файл /etc/init.d/iptables и сделать его исполняемым:
chown root:root /etc/init.d/iptables chmod u+x /etc/init.d/iptables
А теперь надо добавить скрипт в автозагрузку (и в выключение):
update-rc.d iptables defaults
Теперь можно напрямую писать правила iptables и формировать нужные цепочки. При необходимости сохранить текущее состояние (со всеми счетчиками), можно просто использовать:
/etc/init.d/iptables save
При запуске системы вызовется /etc/init.d/iptables start что проинициализирует netfilter сохраненными в файле /etc/iptables/rules.save правилами. При выключении вызовется /etc/init.d/iptables stop, что сохранит текущие правила и счетчики в вышеуказанный файл.
Благодарности
Спасибо всем кто прочитал, спасибо моей любимой за счастье в моей жизни.
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License
Comments: