среда, 29 декабря 2010 г.

Настройка Iptables в Ubuntu.

Появилась потребность настроить фаерволл в Ubuntu. Работать наш фаерволл будет на машине с двумя сетевыми картами, одна смотрит в интернет другая в локальною сеть.
Итак создаем набор правил записанных в файл /etc/rc.firewall

#!/bin/sh

# для удобства, особенно если интерфейсов несколько
INET_IF="eth0"
LOCAL_IF="eth1"


# тоже для удобства
IPT="/sbin/iptables"

#Адреса локальных компьтеров
COMP1="192.168.3.115"

#Наш внешний адресс
IP_OUT="86.111.90.120"

#Наш внутренний адресс
IP_IN="192.168.13.1"

#мак адреса локальных компьютеров
MAC1="x:x:x:x:x"
MAC2="x:x:x:x:x"


# включаем пересылку пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward

# стандартные действия, устанавливаем политику по умолчанию:
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

# удаляем все имеющиеся правила
$IPT -F
$IPT -X

#Разрешаем подключения с внутренего интерфейса
$IPT -A INPUT -i lo -j ACCEPT

#Открываем необходимые порты
$IPT -A INPUT -p tcp -m multiport --port 22,80,6681 -j ACCEPT


#Разрешаем подключения с конкретных компьютеров локальной сети
$IPT -A INPUT -s $COMP1 -j ACCEPT

# принимаем все пакеты, относящиеся к уже установленным соединениям
$IPT -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT

#Несколько правил для безопасности
$IPT -A INPUT -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT
$IPT -A INPUT -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
$IPT -A INPUT -p ICMP -s 0/0 --icmp-type 12 -j ACCEPT

#Если нужно чтобы пинговалась наша машина
#$IPTABLES -A INPUT -p ICMP -s 0/0 --icmp-type 8 -j DROP

#Разрешаем транзит пакетов для отдельных машин локальной сети.
#Можно IP- адреса, а можно Mac
$IPT -A FORWARD -s $COMP1 -j ACCEPT
$IPT -A FORWARD -d $COMP1 -m state --state ESTABLISHED,RELATED -j ACCEPT
#$IPT -A FORWARD -p ALL -m mac --mac-source $MAC1 -j ACCEPT
#$IPT -A FORWARD -p ALL -m mac --mac-source $MAC2 -j ACCEPT


#Включаем NAT для одного из компьютеров локальной сети
$IPT -A POSTROUTING -s $COMP1 -d ! $IP_IN -j SNAT --to-source $IP_OUT

#Перенаправление интернет трафика на прокси
$IPT -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j REDIRECT --to-ports 3128

Чтобы скрипт работал необходимо добавить права на исполнение:

sudo chmod +x /etc/rc.firewall

Чтобы добавить правила достаточно набрать путь к скрипту:

sudo /etc/rc.firewall

Но чтобы правила добавлялись автоматически при загрузке системы, придется написать еще один небольшой скрипт для init.d.
Создаем файл /etc/init.d/iptables со следующим содержанием:

#!/bin/bash
IPT="/sbin/iptables"
START="/bin/bash"
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
NAME="$0"
N="/etc/init.d/$NAME"
if [ ! -f /etc/rc.firewall ]; then
echo "/etc/rc.firewall does not exist"
exit 0
fi
case "$1" in
start|restart)
echo -n "Starting up iptables firewall..."
$START /etc/rc.firewall
echo "done."
;;
stop)
$IPT -F
$IPT -X
$IPT –P INPUT ACCEPT
$IPT –P OUTPUT ACCEPT
$IPT -t FORWARD ACCEPT
echo "done."
exit 0;
;;
*)
echo "Usage: $N {start|restart|stop}" >&2
exit 1
;;
esac
exit 0

При запуске данного скрипта без параметров он будет выдавать сообщение Usage: $N {start|restart|stop}. При запуске с параметром start будет добавлять правила, а с параметром stop все правила будут затираться.
Естественно делаем файл исполняемым:

chmod +x /etc/init.d/iptables

Для автозагрузки данного скрипта нужно сделать символические ссылки на него в каталогах /etc/rc0.d, /etc/rc1.d /etc/rc2.d и /etc/rc6.d

sudo ln -s /etc/init.d/iptables /etc/rc0.d/K20iptables
sudo ln -s /etc/init.d/iptables /etc/rc1.d/S20iptables
sudo ln -s /etc/init.d/iptables /etc/rc2.d/S20iptables
sudo ln -s /etc/init.d/iptables /etc/rc6.d/K20iptables

Все.

Комментариев нет:

Отправить комментарий