Меня регулярно просят выложить заготовку скрипта для организации firewall. Ну вот, выкладываю.

Это только заготовка! Вам самим прийдется добавлять в функции init() правила, разрешающие хождения пакетов.

===================================================================

#!/bin/bash
IPT=/usr/sbin/iptables
IPTR=/usr/sbin/iptables-restore
IPTS=/usr/sbin/iptables-save
OUT=eth0start()
{
 echo -n "Starting firewall...             "
 $IPT -F
 $IPT -t nat -F
 $IPT -t mangle -F
 $IPTR -c /etc/iptables
 echo "Done"
}

stop()
{
 echo -n "Stop firewall...                "
 $IPTS -c > /etc/iptables
 echo "Done"
}

init()
{
 echo -n "Init firewall...                "
 reset
 # DNS ENABLE ========== Просто как пример
 $IPT -A INPUT -p tcp --dport 53 -j ACCEPT
 $IPT -A INPUT -p udp --dport 53 -j ACCEPT # Свои правила писать тут # SAVE rules in file ==
 $IPTS -c > /etc/iptables
 echo "Done"
}

reset()
{
 $IPT -F
 $IPT -t nat -F
 $IPT -t mangle -F
 $IPT -P INPUT DROP
 $IPT -P FORWARD DROP
 #=================== # STATE RULES ====== ОБЯЗАТЕЛЬНО!
 $IPT -A INPUT -m state --state INVALID -j DROP
 $IPT -A FORWARD -m state --state INVALID -j DROP
 $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
 # LOCALHOST =========== ОБЯЗАТЕЛЬНО!
 $IPT -A FORWARD -i $OUT -s 127.0.0.1 -j DROP
 $IPT -A INPUT -i $OUT -s 127.0.0.1 -j DROP
 $IPT -A FORWARD -i $OUT -d 127.0.0.1 -j DROP
 $IPT -A INPUT -i $OUT -d 127.0.0.1 -j DROP
 $IPT -A INPUT -d 127.0.0.1 -j ACCEPT
 $IPT -A INPUT -s 127.0.0.1 -j ACCEPT # ICMP ENABLED = потому что так надо!
 $IPT -A INPUT -p icmp -j ACCEPT
 # SSH enable + защита от подбора паролей
 $IPT -A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --update --seconds 20 -j DROP
 $IPT -A INPUT -p tcp -i eth0 -m state --state NEW --dport 22 -m recent --set -j ACCEPT
}

case $1 in
 start)
  start ;; stop)
stop ;; init)
  init ;; reset)
  reset ;; *)
  echo "Usage ./rc.fw start|stop|init|reset"
  exit 88esac

=============================================================
Маленькое описание.
start() - запускает firewall. Данные читает из /etc/iptables.
stop() - останавливает firewall, сохраняя текущие правила и счетчики в /etc/iptables.
init() - первоначальная инициализация firewall. Тут надо писать правила. После изменения ОБЯЗАТЕЛЬНО запускайте ./rc.fw init. Заодно сохранит текущие правила в /etc/iptables.
reset() - используйте в том случае, когда изменяете правила на машине удаленно и не имеете к ней доступа. Добавьте rc.fw reset в crontab на время настройки. Если случайно закроете удаленный вход, rc.fw reset очистит правила и разрешит вход по ssh. После завершения редактирования, НЕ ЗАБУДЬТЕ УБРАТЬ ЕЕ ИЗ CRONTAB!