Cipe + Маскарадинг в Linux
Настройка firewall
В этом документе я предполагаю, что ваше ядро уже поддерживает IP-маскарадинг. См. раздел "Ссылки", в котором приведены ссылки на информацию о включении в ядро поддержки IP-маскарадинга.
Структура VPN
Машины связаны по технологии "звезда". Мы установим одно cipe-соединение между машинами A и B, и второе между A и C.
Машина A
eth0: 192.168.1.1
eth1: реальный ip 1
/ \
/ \
Машина B Машина C
eth0: 192.168.2.1 eth0:192.168.3.1
eth1: реальный ip 2 eth1: реальный ip 3
Небольшое замечание
eth0 - это локальная сеть (фиктивный адрес)
eth1 - это интернет (настоящий адрес)
Порт A - это любой возможный порт, который вам нравится
Порт B - это другой возможный порт, который вам нравится
Ключ A - это любой возможный ключ, который вам нравится (читайте документацию Cipe)
Ключ B - это другой возможный ключ, который вам нравится
Дополнительная информация о скриптах и VPN
Приведенные здесь скрипты ip-up рассчитаны на сети класса C. Если хотите, чтобы машина B могла связаться с машиной C, вам придется исправить соответствующие скрипты ip-up и ip-down. В них надо исправить маски ptpaddr и myaddr. Ниже приводятся два скрипта ip-up - один для ipchains, второй для ipfwadm. Также и для скриптов ip-down. Измените с /24 на /16 соответствующие правила интерфейса cipe для входящего, исходящего или проходящего потоков. Если вы изменяете правило в ip-up (ipfwadm), не забудьте изменить его в скрипте ip-down, чтобы оно удалялось при отключении интерфейса. Что же касается варианта для ipchains, то изменения в ip-up не требуют изменений в ip-down, ip-down просто удаляет все правила пользователя.
Вам также придется раскомментировать в файлах rc.cipe машин B и C строку с указанием маршрута на сети друг друга.
Конфигурация машины A
/etc/cipe/options.machineB
#раскомментируйте одну из следующих строк
#Название для cipe версии 1.0.x
#device cip3b0
#Название для cipe версии 1.2.x
device cipcb0
#удаленный внутренний (фиктивный) IP-адрес
ptpaddr 192.168.2.1
#мой внутренний (фиктивный) IP-адрес
ipaddr 192.168.1.1
#мой настоящий адрес и порт cipe
me (real ip 1):(port A)
#настоящий удаленный адрес и порт cipe
peer (real ip 2):(port A)
#уникальный 128-битный ключ
key (Key A)
/etc/cipe/options.machineC
#раскомментируйте одну из следующих строк
#Название для cipe версии 1.0.x
#device cip3b1
#Название для cipe версии 1.2.x
device cipcb1
#удаленный внутренний (фиктивный) IP-адрес
ptpaddr 192.168.3.1
#мой внутренний (фиктивный) IP-адрес
ipaddr 192.168.1.1
#мой настоящий адрес и порт cipe
me (real ip 1):(port B)
#удаленный настоящий адрес и порт cipe
peer (real ip 3):(port B)
#уникальный 128-битный ключ
key (Key B)
/etc/rc.d/rc.cipe
!#/bin/bash
#rc.cipe 3/29/1999
#Вопросы и комментарии посылайте по адресу acj@home.com.
#Задаем пути по умолчанию
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
#Имена файлов options в каталоге cipe
options="options.machineB options.machineC"
#Автоматическое заполнение переменной options
#options=`/bin/ls /etc/cipe/options.*`
#раскомментируйте одну из следующих строк с указанием имени модуля cipe
#cipemod="cip3b" #для cipe 1.0
#cipemod="cipcb" #для cipe 1.2
#Проверяем, загружен ли модуль cipe - если нет, то загружаем
grep $cipemod /proc/modules >/dev/null
if [ "$?" = "1" ]; then
echo Загрузка модуля cipe.
modprobe $cipemod
if [ "$?" = "1" ]; then
echo Ошибка загрузки модуля cipe.
exit
fi
else
echo Модуль cipe уже загружен.
fi
#Удаляем все существующие интерфейсы cipe
cipeif=`cat /proc/net/dev | cut -f1 -d: | grep $cipemod`
if [ "$cipeif" != "" ]; then
echo Удаляем существующие интерфейсы cipe.
for i in $cipeif; do
ifconfig $i down
done
fi
#Настройка интерфейсов cipe
echo -n "Настройка интерфейсов cipe: "
for config in $options; do
echo -n $config" "
ciped -o $config
done
echo
echo
#Добавляем маршруты к удаленным сетям через интерфейс(ы) cipe
#route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x
Шлюз
У всех машин сети 192.168.1.0 шлюз по умолчанию должен быть установлен в 192.168.1.1. Если этого не сделать - ничего не будет работать.
Конфигурация машины B
/etc/cipe/options.machineA
#раскомментируйте одну из следующих строк
#Название для cipe версии 1.0.x
#device cip3b0
#Название для cipe версии 1.2.x
device cipcb0
# удаленный внутренний (фиктивный) IP-адрес
ptpaddr 192.168.1.1
# мой внутренний (фиктивный) IP-адрес
ipaddr 192.168.2.1
# мой настоящий адрес и порт cipe
me (real ip 1):(port A)
# настоящий удаленный адрес и порт cipe
peer (real ip 2):(port A)
# уникальный 128-битный ключ
key (Key A)
/etc/rc.d/rc.cipe
!#/bin/bash
#rc.cipe 3/29/1999
#Вопросы и комментарии посылайте по адресу acj@home.com.
#Задаем пути по умолчанию
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
#Имена файлов options в каталоге cipe
options="options.machineA"
#Автоматическое заполнение переменной options
#options=`/bin/ls /etc/cipe/options.*`
#раскомментируйте одну из следующих строк с указанием имени модуля cipe
#cipemod="cip3b" #для cipe 1.0
cipemod="cipcb" #для cipe 1.2
#Проверяем, загружен ли модуль cipe - если нет, то загружаем
grep $cipemod /proc/modules >/dev/null
if [ "$?" = "1" ]; then
echo Загрузка модуля cipe.
modprobe $cipemod
if [ "$?" = "1" ]; then
echo Ошибка загрузки модуля cipe.
exit
fi
else
echo Модуль cipe уже загружен.
fi
#Удаляем все существующие интерфейсы cipe
cipeif=`cat /proc/net/dev | cut -f1 -d: | grep $cipemod`
if [ "$cipeif" != "" ]; then
echo Удаляем существующие интерфейсы cipe.
for i in $cipeif; do
ifconfig $i down
done
fi
#Настройка интерфейсов cipe
echo -n "Настройка интерфейсов cipe: "
for config in $options; do
echo -n $config" "
ciped -o $config
done
echo
echo
#Добавляем маршруты к удаленным сетям через интерфейс(ы) cipe
#route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x
#маршрут к сети машины C
#route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.1
Шлюз
У всех машин сети 192.168.2.0 шлюз по умолчанию должен быть установлен в 192.168.2.1. Если этого не сделать - ничего не будет работать.
Конфигурация машины C
/etc/cipe/options.machineA
#раскомментируйте одну из следующих строк
#Название для cipe версии 1.0.x
#device cip3b0
#Название для cipe версии 1.2.x
device cipcb0
#удаленный внутренний (фиктивный) IP-адрес
ptpaddr 192.168.1.1
#мой внутренний (фиктивный) IP-адрес
ipaddr 192.168.3.1
#мой настоящий адрес и порт cipe
me (real ip 3):(port B)
#настоящий удаленный адрес и порт cipe
peer (real ip 1):(port B)
#уникальный 128-битный ключ
key (Key B)
/etc/rc.d/rc.cipe
!#/bin/bash
#rc.cipe 3/29/1999
#Вопросы и комментарии посылайте по адресу acj@home.com.
#Задаем пути по умолчанию
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
#Имена файлов options в каталоге cipe
options="options.machineA"
#Автоматическое заполнение переменной options
#options=`/bin/ls /etc/cipe/options.*`
#раскомментируйте одну из следующих строк с указанием имени модуля cipe
#cipemod="cip3b" #for cipe 1.0
cipemod="cipcb" #for cipe 1.2
#Проверяем, загружен ли модуль cipe - если нет, то загружаем
grep $cipemod /proc/modules >/dev/null
if [ "$?" = "1" ]; then
echo Загрузка модуля cipe.
modprobe $cipemod
if [ "$?" = "1" ]; then
echo Ошибка загрузки модуля cipe.
exit
fi
else
echo Модуль cipe уже загружен.
fi
#Удаляем все существующие интерфейсы cipe
cipeif=`cat /proc/net/dev | cut -f1 -d: | grep $cipemod`
if [ "$cipeif" != "" ]; then
echo Удаляем существующие интерфейсы cipe.
for i in $cipeif; do
ifconfig $i down
done
fi
#Настройка интерфейсов cipe
echo -n "Настройка интерфейсов cipe: "
for config in $options; do
echo -n $config" "
ciped -o $config
done
echo
echo
#Добавляем маршруты к удаленным сетям через интерфейс(ы) cipe
#route add -net x.x.x.x netmask x.x.x.x gw x.x.x.x
#маршрут к сети машины B
#route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1
Шлюз
У всех машин сети 192.168.2.0 шлюз по умолчанию должен быть установлен в 192.168.2.1. Если этого не сделать - ничего не будет работать.
Настройки, общие для всех машин
/etc/cipe/ip-up
Ядро 2.0, ipfwadm, cipe 1.0.x
#!/bin/bash
# ip-up <интерфейс> <мой_адрес> <pid_демона> <локальный_адрес> <удаленный_адрес> <аргументы>
#3/29/1999
#Это пример скрипта ip-up для старых ядер версий 1.x 2.x, использующих ipfwadm,
#настраивающий маршруты и правила firewall для соединения вашей сети класса c
#с удаленной сетью класса c.
#Правила настроены с учетом невозможности нелегального перехвата пакетов,
#а также нелегальной маршрутизации между сетями. Дополнительные меры безопасности
#приведены в конце скрипта (закомментированы).
#Вопросы и предложения посылайте по адресу acj@home.com.
#Настраиваем некоторые переменные
device=$1 # Интерфейс CIPE
me=$2 # Наш UDP-адрес
pid=$3 # ID процесса демона
ipaddr=$4 # IP-адрес нашего CIPE-устройства
vptpaddr=$5 # IP-адрес удаленного CIPE-устройства
option=$6 # аргументы, переданные через опции скрипта
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
#рас(за)-комментируйте следующую строку для включение в системный журнал
#всех попыток неавторизованного доступа. Эта строка должна соответствовать
#строке в скрипте ip-down для правильного отключения правил.
log="-o"
umask 022
# пример записи в журнал
#echo "UP $*" >> /var/adm/cipe.log
# во многих системах требуются такие pid-файлы
#echo $3 > /var/run/$device.pid
#добавляем маршрут к удаленной сети
network=`expr $ptpaddr : '\([0-9]*\.[0-9]*\.[0-9]*\.\)'`0
route add -net $network netmask 255.255.255.0 dev $device
#для ядер версии 2.0 надо добавить и маршрут к машине
route add -host $ptpaddr dev $device
#Правила для входящего потока firewall для интерфейса cipe
#они должны задаваться в обратном порядке
#запрещаем все остальные входящие с интерфейса cipe пакеты
ipfwadm -I -i deny -W $device -S 0/0 -D 0/0 $log
#разрешаем все пакеты, входящие с интерфейса cipe из удаленной сети для локальной
ipfwadm -I -i accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#разрешаем все пакеты, входящие с интерфейса cipe из локальной сети для удаленной
ipfwadm -I -i accept -W $device -S $ipaddr/24 -D $ptpaddr/24
#запрещаем все пакеты, входящие с интерфейса cipe из локальной сети для локальной; записываем это в журнал
ipfwadm -I -i deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
#Правила для исходящего потока firewall для интерфейса cipe
#они должны задаваться в обратном порядке
#запрещаем все остальные исходящие из интерфейса cipe пакеты
ipfwadm -O -i deny -W $device -S 0/0 -D 0/0 $log
#разрешаем все пакеты, исходящие с интерфейса cipe из удаленной сети для локальной
ipfwadm -O -i accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#разрешаем все пакеты, исходящие с интерфейса cipe из локальной сети для удаленной
ipfwadm -O -i accept -W $device -S $ipaddr/24 -D $ptpaddr/24
#запрещаем все пакеты, исходящие с интерфейса cipe из локальной сети для локальной; записываем это в журнал
ipfwadm -O -i deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
#Правила для проходящего потока firewall для интерфейса cipe
#они настроены так, чтобы машины локальной сети не попадали для удаленной
#под маскарадинг. Так лучше работать с обеими сетями
#они должны задаваться в обратном порядке
#запрещаем все остальные проходящие через интерфейс cipe пакеты; записываем это в журнал
ipfwadm -F -i deny -W $device -S 0/0 -D 0/0 $log
#разрешаем все пакеты, проходящие через интерфейс cipe из удаленной сети в локальную
ipfwadm -F -i accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#разрешаем все пакеты, проходящие через интерфейс cipe из локальной сети в удаленную
ipfwadm -F -i accept -W $device -S $ipaddr/24 -D $ptpaddr/24
#Для большей уверенности разрешаем ядру переадресацию пакетов
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward
#Дополнение к системе безопасности - в случае, если стандартное правило для
#проходящего потока установлено в DENY или REJECT.
#определяем интерфейсы машины
#localif="eth0"
#staticif="eth1" ;для пользователей кабельных модемов
#staticif="ppp0" ;для пользователей обычных модемов
#По-настоящему грубо определяем удаленный ip-адрес, взяв его из файла options.
#В идеале этот адрес надо передавать скрипту через аргументы
#Надо раскомментировать обе строки
#peerfile=`grep $device /etc/cipe/options.* | cut -f1 -d:`
#peer=`grep peer $peerfile | cut -f1 -d: | awk '{print $2}'`
#Запоминаем удаленный ip-адрес для скрипта ip-down
#echo $peer > /var/run/$device.peerip
#разрешаем пересылку пакетов из локальной сети в удаленную, через сетевую карту
#ipfwadm -F -i accept -W $localif -S $ipaddr/24 -D $ptpaddr/24
#разрешаем пересылку пакетов из удаленной сети в локальную, через сетевую карту
#ipfwadm -F -i accept -W $localif -S $ptpaddr/24 -D $ipaddr/24
#разрешаем пересылку на интерфейсе staticif от этой системы к удаленной
#myaddr=`echo $me | cut -f1 -d:`
#ipfwadm -F -i accept -W $staticif -S $myaddr -D $peer
#Второе дополнение к системе безопасности - блокируем все запросы к udp-порту
#cipe, кроме идущих от удаленной машины
#необходимо определить udp-порты интерфейса cipe
#получаем наш udp-порт
#if [ "$option" = "" ]; then
# myport=`echo $me | cut -f2 -d:`
#else
# myport=$option
#fi
#получаем удаленный udp-порт
#переменная peerfile должна быть задана
#peerport=`grep peer $peerfile | cut -f2 -d:`
#запоминаем удаленный udp-порт cipe для скрипта ip-down
#echo $peerport > /var/run/$device.peerport
#получаем наш ip-адрес
#myaddr=`echo $me | cut -f1 -d:`
#запрещаем все запросы к udp-порту cipe; записываем это в журнал
#ipfwadm -I -i deny -P udp -W $staticif -S 0/0 -D $myaddr $myport $log
#разрешаем все запросы к udp-порту cipe, идущие из интерфейса staticif, от удаленной машины
#ipfwadm -I -i accept -P udp -W $staticif -S $peer $peerport \
#-D $myaddr $myport
exit 0
Ядро 2.1/2.2, ipchains, cipe 1.2.x
#!/bin/bash
# ip-up <interface> <myaddr> <daemon-pid> <local> <remote> <arg>
#3/29/1999
#Это пример скрипта ip-up для новых ядер версий 2.1/2ю2, использующих ipchains,
#настраивающий маршруты и правила firewall для соединения вашей сети класса c
#с удаленной сетью класса c. В этом скрипте задаются три пользовательских потока -
#по одному на каждый интерфейс cipe (разделенные по имени интерфейса).
#После этого, в каждый из трех встроенных потоков, добавляются правила,
#переназначающие эти потоки в пользовательские
#Правила настроены с учетом невозможности нелегального перехвата пакетов,
#а также нелегальной маршрутизации между сетями. Дополнительные меры безопасности
#приведены в конце скрипта (закомментированы).
#Вопросы и предложения посылайте по адресу acj@home.com.
#Настраиваем некоторые переменные
device=$1 # Интерфейс CIPE
me=$2 # Наш UDP-адрес
pid=$3 # ID процесса демона
ipaddr=$4 # IP-адрес нашего CIPE-устройства
ptpaddr=$5 # IP-адрес удаленного CIPE-устройства
option=$6 # аргументы, переданные через опции скрипта
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
#рас(за)-комментируйте следующую строку для включение в системный журнал
#всех попыток неавторизованного доступа. Эта строка должна соответствовать
#строке в скрипте ip-down для правильного отключения правил.
log="-l"
umask 022
# пример записи в журнал
#echo "UP $*" >> /var/adm/cipe.log
# во многих системах требуются такие pid-файлы
#echo $3 > /var/run/$device.pid
#добавляем маршрут к удаленной сети
network=`expr $ptpaddr : '\([0-9]*\.[0-9]*\.[0-9]*\.\)'`0
route add -net $network netmask 255.255.255.0 dev $device
#Создаем пользовательский поток для входящего по интерфейсу cipe
ipchains -N $device"i"
#удаляем все правила для этого потока (на всякий случай)
ipchains -F $device"i"
#запрещаем все пакеты, входящие с интерфейса cipe из локальной сети для локальной; записываем это в журнал
ipchains -A $device"i" -j DENY -i $device -s $ipaddr/24 -d $ipaddr/24 $log
#разрешаем все пакеты, входящие с интерфейса cipe из локальной сети для удаленной
ipchains -A $device"i" -j ACCEPT -i $device -s $ipaddr/24 -d $ptpaddr/24
#разрешаем все пакеты, входящие с интерфейса cipe из удаленной сети для локальной
ipchains -A $device"i" -j ACCEPT -i $device -s $ptpaddr/24 -d $ipaddr/24
#запрещаем все остальные входящие с интерфейса cipe пакеты
ipchains -A $device"i" -j DENY -s 0/0 -d 0/0 $log
#Создаем пользовательский поток для исходящего из интерфейса cipe
ipchains -N $device"o"
#удаляем все правила для этого потока (на всякий случай)
ipchains -F $device"o"
#запрещаем все пакеты, исходящие с интерфейса cipe из локальной сети для локальной; записываем это в журнал
ipchains -A $device"o" -j DENY -i $device -s $ipaddr/24 -d $ipaddr/24 $log
#разрешаем все пакеты, исходящие с интерфейса cipe из локальной сети для удаленной
ipchains -A $device"o" -j ACCEPT -i $device -s $ipaddr/24 -d $ptpaddr/24
#разрешаем все пакеты, исходящие с интерфейса cipe из удаленной сети для локальной
ipchains -A $device"o" -j ACCEPT -i $device -s $ptpaddr/24 -d $ipaddr/24
#запрещаем все остальные исходящие из интерфейса cipe пакеты
ipchains -A $device"o" -j DENY -s 0/0 -d 0/0 $log
#Правила для проходящего потока firewall для интерфейса cipe
#они настроены так, чтобы машины локальной сети не попадали для удаленной
#под маскарадинг. Так лучше работать с обеими сетями
#Создаем пользовательский поток для проходящего через интерфейс cipe
ipchains -N $device"f"
#удаляем все правила для этого потока (на всякий случай)
ipchains -F $device"f"
#разрешаем все пакеты, проходящие через интерфейс cipe из локальной сети в удаленную
ipchains -A $device"f" -j ACCEPT -i $device -s $ipaddr/24 -d $ptpaddr/24
#разрешаем все пакеты, проходящие через интерфейс cipe из удаленной сети в локальную
ipchains -A $device"f" -j ACCEPT -i $device -s $ptpaddr/24 -d $ipaddr/24
#запрещаем все остальные, проходящие через интерфейс cipe, пакеты; записываем это в журнал
ipchains -A $device"f" -j DENY -s 0/0 -d 0/0 $log
#Для большей уверенности разрешаем ядру переадресацию пакетов
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward
#добавляем в стандартные потоки правила со ссылками на пользовательские потоки
ipchains -I input -i $device -j $device"i"
ipchains -I output -i $device -j $device"o"
ipchains -I forward -i $device -j $device"f"
#Дополнение к системе безопасности - в случае, если стандартное правило для
#проходящего потока установлено в DENY или REJECT.
#определяем интерфейсы машины
#localif="eth0"
#staticif="eth1" ;для пользователей кабельных модемов
#staticif="ppp0" ;для пользователей обычных модемов
#По-настоящему грубо определяем удаленный ip-адрес, взяв его из файла options.
#В идеале этот адрес надо передавать скрипту через аргументы
#Надо раскомментировать обе строки
#peerfile=`grep $device /etc/cipe/options.* | cut -f1 -d:`
#peer=`grep peer $peerfile | cut -f1 -d: | awk '{print $2}'`
#Запоминаем удаленный ip-адрес для скрипта ip-down
#echo $peer > /var/run/$device.peerip
#разрешаем пересылку пакетов из локальной сети в удаленную, через сетевую карту
#ipchains -I forward -j ACCEPT -i $localif -s $ipaddr/24 -d $ptpaddr/24
#разрешаем пересылку пакетов из удаленной сети в локальную, через сетевую карту
#ipchains -I forward -j ACCEPT -i $localif -s $ptpaddr/24 -d $ipaddr/24
#разрешаем пересылку на интерфейсе staticif от этой системы к удаленной
#myaddr=`echo $me | cut -f1 -d:`
#ipchains -I forward -j ACCEPT -i $staticif -s $myaddr -d $peer
#Второе дополнение к системе безопасности - блокируем все запросы к udp-порту
#cipe, кроме идущих от удаленной машины
#необходимо определить udp-порты интерфейса cipe
#получаем наш udp-порт
#if [ "$option" = "" ]; then
# myport=`echo $me | cut -f2 -d:`
#else
# myport=$option
#fi
#получаем удаленный udp-порт
#переменная peerfile должна быть задана
#peerport=`grep peer $peerfile | cut -f2 -d:`
#запоминаем удаленный udp-порт cipe для скрипта ip-down
#echo $peerport > /var/run/$device.peerport
#получаем наш ip-адрес
#myaddr=`echo $me | cut -f1 -d:`
#запрещаем все запросы к udp-порту cipe; записываем это в журнал
#ipchains -I input -j DENY -p udp -i $staticif -s 0/0 \
#-d $myaddr $myport $log
#разрешаем все запросы к udp-порту cipe, идущие из интерфейса staticif, от удаленной машины
#ipchains -I input -j ACCEPT -p udp -i $staticif -s $peer $peerport \
# -d $myaddr $myport
# Включаем в ядре в качестве дополнительной меры безопасности защиту от "spoofing"-а
#Зачем включать в ядре защиту от "spoofing"-а, если в этом скрипте эта
#защита уже реализована, для каждого интерфейса на уровне firewall?
#Предположим, что я параноик.
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
echo -n "Включаем защиту от IP-spoofing..."
iface="/proc/sys/net/ipv4/conf/$device/rp_filter"
echo 1 > $iface
echo "done."
else
echo "Невозможно включить в ядре защиту устройства $device от IP-spoofing" \
| mail -s"Предупреждение Системы Безопасности: $device" root
exit 1
fi
exit 0
/etc/cipe/ip-down
Ядро 2.0, ipfwadm, cipe 1.0.x
#!/bin/bash
# ip-down <interface> <myaddr> <daemon-pid> <local> <remote> <arg>
#3/29/1999
#Это пример скрипта ip-down для старых ядер версий 1.x 2.x, использующих ipfwadm,
#удаляющий маршруты и правила firewall, заданные ранее для соединения вашей сети класса c
#с удаленной сетью класса c.
#Вопросы и предложения посылайте по адресу acj@home.com
#Настраиваем некоторые переменные
device=$1 # Интерфейс CIPE
me=$2 # Наш UDP-адрес
pid=$3 # ID процесса демона
ipaddr=$4 # IP-адрес нашего CIPE-устройства
ptpaddr=$5 # IP-адрес удаленного CIPE-устройства
option=$6 # аргументы, переданные через опции скрипта
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
#рас(за)-комментируйте следующую строку для включение в системный журнал
#всех попыток неавторизованного доступа. Эта строка должна соответствовать
#строке в скрипте ip-up для правильного отключения правил.
log="-o"
umask 022
# пример записи в журнал
#echo "DOWN $*" >> /var/adm/cipe.log
# во многих системах требуются такие pid-файлы
#rm -f /var/run/$device.pid
#Правила для входящего потока firewall для интерфейса cipe
#удаляем запрещение всех остальных входящих с интерфейса cipe пакетов
ipfwadm -I -d deny -W $device -S 0/0 -D 0/0 $log
#удаляем разрешение всех пакетов, входящих с интерфейса cipe из удаленной сети для локальной
ipfwadm -I -d accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#удаляем разрешение всех пакетов, входящих с интерфейса cipe из локальной сети для удаленной
ipfwadm -I -d accept -W $device -S $ipaddr/24 -D $ptpaddr/24
#удаляем запрещение всех пакетов, входящих с интерфейса cipe из локальной сети для локальной
ipfwadm -I -d deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
#Правила для исходящего потока firewall для интерфейса cipe
#удаляем запрещение всех остальных, исходящих из интерфейса cipe, пакетов
ipfwadm -O -d deny -W $device -S 0/0 -D 0/0 $log
#удаляем разрешение всех пакетов, исходящих из интерфейса cipe, из удаленной сети для локальной
ipfwadm -O -d accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#удаляем разрешение всех пакетов, исходящих из интерфейса cipe, из локальной сети для удаленной
ipfwadm -O -d accept -W $device -S $ipaddr/24 -D $ptpaddr/24
#удаляем запрещение всех пакетов, исходящих из интерфейса cipe, из локальной сети для локальной
ipfwadm -O -d deny -W $device -S $ipaddr/24 -D $ipaddr/24 $log
#Правила для проходящего потока firewall для интерфейса cipe
#удаляем запрещение всех остальных пакетов, проходящих через интерфейс cipe
ipfwadm -F -d deny -W $device -S 0/0 -D 0/0 $log
#удаляем разрешение всех пакетов, проходящих через интерфейс cipe, из удаленной сети для локальной
ipfwadm -F -d accept -W $device -S $ptpaddr/24 -D $ipaddr/24
#удаляем разрешение всех пакетов, проходящих через интерфейс cipe, из локальной сети для удаленной
ipfwadm -F -d accept -W $device -S $ipaddr/24 -D $ptpaddr/24
#Дополнение к системе безопасности - в случае, если стандартное правило для
#проходящего потока установлено в DENY или REJECT.
#define machine interfaces
#localif="eth0"
#staticif="eth1" ;для пользователей кабельных модемов
#staticif="ppp0" ;для пользователей обычных модемов
#По-настоящему грубо определяем удаленный ip-адрес, взяв его из файла options.
#В идеале этот адрес надо передавать скрипту через аргументы
#Надо раскомментировать обе строки
#peerfile=`grep $device /etc/cipe/options.* | cut -f1 -d:`
#peer=`grep peer $peerfile | cut -f1 -d: | awk '{print $2}'`
#Запоминаем удаленный ip-адрес для скрипта ip-down (???)
#echo $peer > /var/run/$device.peerip
#удаляем разрешение пересылки пакетов из локальной сети в удаленную, через сетевую карту
#ipfwadm -F -d accept -W $localif -S $ipaddr/24 -D $ptpaddr/24
#удаляем разрешение пересылки пакетов из удаленной сети в локальную, через сетевую карту
#ipfwadm -F -d accept -W $localif -S $ptpaddr/24 -D $ipaddr/24
#удаляем разрешение пересылки пакетов через интерфейс staticif от этой системы к удаленной
#myaddr=`echo $me | cut -f1 -d:`
#ipfwadm -F -d accept -W $staticif -S $myaddr -D $peer
#Второе дополнение к системе безопасности - блокируем все запросы к udp-порту
#cipe, кроме идущих от удаленной машины
#необходимо определить udp-порты интерфейса cipe
#получаем наш udp-порт
#if [ "$option" = "" ]; then
# myport=`echo $me | cut -f2 -d:`
#else
# myport=$option
#fi
#получаем удаленный udp-порт
#переменная peerfile должна быть задана
#peerport=`grep peer $peerfile | cut -f2 -d:`
#запоминаем удаленный udp-порт cipe для скрипта ip-down (???)
#echo $peerport > /var/run/$device.peerport
#получаем наш ip-адрес
#myaddr=`echo $me | cut -f1 -d:`
#удаляем запрещение всех запросов к udp-порту cipe
#ipfwadm -I -d deny -P udp -W $staticif -S 0/0 -D $myaddr $myport $log
#удаляем разрешение всех запросов к udp-порту cipe, идущих из интерфейса staticif, от удаленной машины
#ipfwadm -I -d accept -P udp -W $staticif -S $peer $peerport \
#-D $myaddr $myport
exit 0
Ядро 2.1/2.2, ipchains, cipe 1.2.x
#!/bin/sh
# ip-down <interface> <myaddr> <daemon-pid> <local> <remote> <arg>
#3/29/1999
#Это пример скрипта ip-down для новых ядер версий 2.1/2.2, использующих ipchains,
#удаляющий маршруты и правила firewall, заданные ранее для соединения вашей сети класса c
#с удаленной сетью класса c.
#Вопросы и предложения посылайте по адресу acj@home.com.
#Настраиваем некоторые переменные
device=$1 # Интерфейс CIPE
me=$2 # Наш UDP-адрес
pid=$3 # ID процесса демона
ipaddr=$4 # IP-адрес нашего CIPE-устройства
ptpaddr=$5 # IP-адрес удаленного CIPE-устройства
option=$6 # аргументы, переданные через опции скрипта
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
#рас(за)-комментируйте следующую строку для включение в системный журнал
#всех попыток неавторизованного доступа. Эта строка должна соответствовать
#строке в скрипте ip-up для правильного отключения правил.
log="-l"
umask 022
# пример записи в журнал
#echo "DOWN $*" >> /var/adm/cipe.log
# во многих системах требуются такие pid-файлы
#rm -f /var/run/$device.pid
#удаляем с главных потоков ссылки на пользовательские
ipchains -D input -i $device -j $device"i"
ipchains -D output -i $device -j $device"o"
ipchains -D forward -i $device -j $device"f"
#Удаляем все правила из пользовательского входящего потока
ipchains -F $device"i"
#Удаляем пользовательский входящий поток
ipchains -X $device"i"
#Удаляем все правила из пользовательского исходящего потока
ipchains -F $device"o"
#Удаляем пользовательский исходящий поток
ipchains -X $device"o"
#Удаляем все правила из пользовательского проходящего потока
ipchains -F $device"f"
#Удаляем пользовательский проходящий поток
ipchains -X $device"f"
#Удаляем дополнительные меры безопасности
#получаем ip-адрес удаленной машины
#peer=`cat /var/run/$device.peerip`
#определяем интерфейсы машины
#localif="eth0"
#staticif="eth1" ;для пользователей кабельных модемов
#staticif="ppp0" ;для пользователей обычных модемов
#получаем наш ip-адрес
#myaddr=`echo $me |cut -f1 -d:`
#удаляем разрешение пересылки пакетов из локальной сети в удаленную, через сетевую карту
#ipchains -D forward -j ACCEPT -i $localif -s $ipaddr/24 -d $ptpaddr/24
#удаляем разрешение пересылки пакетов из удаленной сети в локальную, через сетевую карту
#ipchains -D forward -j ACCEPT -i $localif -s $ptpaddr/24 -d $ipaddr/24
#удаляем разрешение пересылки пакетов через интерфейс staticif от этой системы к удаленной
#ipchains -D forward -j ACCEPT -i $staticif -s $myaddr -d $peer
#удаляем файл с запомненным удаленным ip-адресом
#rm /var/run/$device.peerip
#Удаляем дополнительные меры безопасности
#получаем удаленный udp-порт
#peerport=`cat /var/run/$device.peerport`
#получаем наш udp-порт
#if [ "$option" = "" ]; then
# myport=`echo $me | cut -f2 -d:`
#else
# myport=$option
#fi
#удаляем запрещение всех запросов к udp-порту cipe
#ipchains -D input -j DENY -p udp -i $staticif -s 0/0 \
#-d $myaddr $myport $log
#удаляем разрешение всех запросов к udp-порту cipe, идущих из интерфейса staticif, от удаленной машины
#ipchains -D input -j ACCEPT -p udp -i $staticif -s $peer $peerport \
#-d $myaddr $myport
#удаляем файл с запомненным удаленным ip-адресом
#rm /var/run/$device.peerport
exit 0
Примеры скриптов настройки маскарадинга
Ядро 2.0, ipfwadm
#!/bin/sh
#04/04/1999
#Пример скрипта rc.firewall для ядер версий 2.0, использующих ipfwadm
#Я не могу полностью поручиться за этот скрипт. Я нашел его
#несколько лет назад и немножко подправил.
#Вопросы и предложения посылайте по адресу acj@home.com.
#Переменные
#локальный ethernet-интерфейс
localip=
localif=eth0
#статический ethernet-интерфейс
staticip=
staticif=eth1
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
#Политика Firewall для входящего потока
#удаляем все правила для входящего потока
/sbin/ipfwadm -I -f
#устанавливаем запрет всех пакетов для входящего потока
/sbin/ipfwadm -I -p deny
#разрешено посылать пакеты, куда угодно, с локального интерфейса с локальных машин
/sbin/ipfwadm -I -a accept -V $localip -S $localip/24 -D 0.0.0.0/0
#запрещаем все пакеты, идущие из статического интерфейса, "от локальных машин" (spoofing)
#записываем это в журнал
/sbin/ipfwadm -I -a deny -V $staticip -S $localip/24 -D 0.0.0.0/0 -o
#разрешаем все пакеты, идущие, откуда угодно, на статический интерфейс
/sbin/ipfwadm -I -a accept -V $staticip -S 0.0.0.0/0 -D $staticip/32
#разрешаем все пакеты, идущие через интерфейс обратной петли
/sbin/ipfwadm -I -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0
#запрещаем все остальные входящие пакеты - записываем это в журнал
/sbin/ipfwadm -I -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o
#Политика Firewall для исходящего потока
#удаляем все правила для исходящего потока
/sbin/ipfwadm -O -f
#устанавливаем запрет всего для исходящего потока
/sbin/ipfwadm -O -p deny
#разрешены пакеты, откуда угодно, на локальном интерфейса для локальных машин
/sbin/ipfwadm -O -a accept -V $localip -S 0.0.0.0/0 -D $localip/24
#запрещены исходящие через статический интерфейс пакеты для локальной сети (ошибка маршрутизации)
/sbin/ipfwadm -O -a deny -V $staticip -S 0.0.0.0/0 -D $localip/24 -o
#запрещены исходящие через статический интерфейс пакеты из локальной сети (ошибка маскарадинга)
/sbin/ipfwadm -O -a deny -V $staticip -S $localip/24 -D 0.0.0.0/0 -o
#запрещены исходящие через статический интерфейс пакеты для локальной сети (ошибка маскарадинга)
/sbin/ipfwadm -O -a deny -V $staticip -S 0.0.0.0/0 -D $localip/24 -o
#разрешено все остальное от статического интерфейса
/sbin/ipfwadm -O -a accept -V $staticip -S $staticip/32 -D 0.0.0.0/0
#разрешаем все пакеты, идущие через интерфейс обратной петли
/sbin/ipfwadm -O -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0
#все остальное запрещено
/sbin/ipfwadm -O -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o
#Политика Firewall для проходящего потока
#удаляем все правила для проходящего потока
/sbin/ipfwadm -F -f
#устанавливаем запрет всего для проходящего потока
/sbin/ipfwadm -F -p deny
#маскарадинг для всего, идущего из локальной сети через статический интерфейс
/sbin/ipfwadm -F -a masquerade -W $staticif -S $localip/24 -D 0.0.0.0/0
#другая маршрутизация запрещена
/sbin/ipfwadm -F -a deny -S 0.0.0.0/0 -D 0.0.0.0/0
exit 0
Ядро 2.1/2.2, ipchains
#!/bin/sh
#04/04/1999
#Пример скрипта rc.firewall для новых ядер версий 2.1/2.2, использующих ipchains,
#определяющий пользовательские потоки для каждого интерфейса. Здесь есть также
#правила, защищающие от spoofing-а, которые может быть и не очень нужны -
#подобная защита уже встроена в ядро.
#Вопросы и предложения посылайте по адресу acj@home.com.
#Переменные
#локальный ethernet-интерфейс
localip=
localif=eth0
#статический ethernet-интерфейс
staticip=
staticif=eth1
#интерфейс обратной петли
loopback=lo
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
#Удаляем все правила для входящего, исходящего и проходящего потоков
#По умолчанию отбрасываем все пакеты
#устанавливаем запрет всего для входящего потока
ipchains -P input DENY
#удаляем все правила для входящего потока
ipchains -F input
#устанавливаем запрет всего для исходящего потока
ipchains -P output DENY
#удаляем все правила для исходящего потока
ipchains -F output
#устанавливаем запрет всего для проходящего потока
ipchains -P forward DENY
#удаляем все правила для проходящего потока
ipchains -F forward
#удаляем все правила вообще (в том числе и пользовательские)
#ipchains -F
#удаляем все пользовательские потоки - вам это может понадобиться
#ipchains -X
#Политика Firewall для входящего потока
#создаем пользовательский входящий поток для статического интерфейса
ipchains -N $staticif"-i"
#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $staticif"-i"
#блокируем все входящие SYN-пакеты на всех портах на статическом интерфейсе
#это может показаться грубым, но это правильно
#ipchains -A $staticif"-i" -j DENY -p tcp -y -i $staticif -s 0/0 \
#-d $staticip : -l
#запрещаем все пакеты, идущие из статического интерфейса, "от локальных машин" (spoofing)
#записываем это в журнал
ipchains -A $staticif"-i" -j DENY -i $staticif -s $localip/16 -d 0/0 -l
#разрешаем все пакеты, идущие, откуда угодно, на статический интерфейс
ipchains -A $staticif"-i" -j ACCEPT -i $staticif -s 0/0 -d $staticip/32
#запрещаем все остальные входящие пакеты - записываем это в журнал
ipchains -A $staticif"-i" -j DENY -s 0/0 -d 0/0 -l
#создаем пользовательский входящий поток для интерфейса локальной сети
ipchains -N $localif"-i"
#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $localif"-i"
#разрешено посылать пакеты, куда угодно, с локального интерфейса с локальных машин
ipchains -A $localif"-i" -j ACCEPT -i $localif -s $localip/24 -d 0/0
#запрещаем все остальные входящие пакеты - записываем это в журнал
ipchains -A $localif"-i" -j DENY -s 0/0 -d 0/0 -l
#создаем пользовательский входящий поток для интерфейса обратной петли
ipchains -N $loopback"-i"
#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $loopback"-i"
#разрешено все, идущее на интерфейс обратной петли
ipchains -A $loopback"-i" -j ACCEPT -i $loopback -s 0/0 -d 0/0
#запрещаем все остальные входящие пакеты - записываем это в журнал
ipchains -A $loopback"-i" -j DENY -s 0/0 -d 0/0 -l
#Политика Firewall для проходящего потока
#создаем пользовательский проходящий поток для статического интерфейса
ipchains -N $staticif"-f"
#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $staticif"-f"
#маскарадинг для всего, что идет из локальной сети, куда угодно
ipchains -A $staticif"-f" -j MASQ -i $staticif -s $localip/24 -d 0/0
#запрещаем все остальные проходящие пакеты - записываем это в журнал
ipchains -A $staticif"-f" -j DENY -s 0/0 -d 0/0 -l
#создаем пользовательский проходящий поток для интерфейса локальной сети
ipchains -N $localif"-f"
#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $localif"-f"
#запрещаем все остальные проходящие пакеты - записываем это в журнал
ipchains -A $localif"-f" -j DENY -s 0/0 -d 0/0 -l
#создаем пользовательский проходящий поток для интерфейса обратной петли
ipchains -N $loopback"-f"
#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $loopback"-f"
#запрещаем все остальные проходящие пакеты - записываем это в журнал
ipchains -A $loopback"-f" -j DENY -s 0/0 -d 0/0 -l
#Политика Firewall для исходящего потока
#создаем пользовательский исходящий поток для статического интерфейса
ipchains -N $staticif"-o"
#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $staticif"-o"
#запрещены исходящие через статический интерфейс пакеты для локальной сети (ошибка маршрутизации)
ipchains -A $staticif"-o" -j DENY -i $staticif -s 0/0 -d $localip/24 -l
#запрещены исходящие через статический интерфейс пакеты из локальной сети (ошибка маскарадинга)
ipchains -A $staticif"-o" -j DENY -i $staticif -s $localip/24 -d 0/0 -l
#разрешено все остальное от статического интерфейса
ipchains -A $staticif"-o" -j ACCEPT -i $staticif -s $staticip/32 -d 0/0
#запрещаем все остальные исходящие пакеты - записываем это в журнал
ipchains -A $staticif"-o" -j DENY -s 0/0 -d 0/0 -l
#создаем пользовательский исходящий поток для интерфейса локальной сети
ipchains -N $localif"-o"
#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $localif"-o"
#разрешены пакеты, откуда угодно, на локальном интерфейса для локальных машин
ipchains -A $localif"-o" -j ACCEPT -i $localif -s 0/0 -d $localip/24
#запрещаем все остальные исходящие пакеты - записываем это в журнал
ipchains -A $localif"-o" -j DENY -s 0/0 -d 0/0 -l
#создаем пользовательский исходящий поток для интерфейса обратной петли
ipchains -N $loopback"-o"
#в этом потоке удаляем все правила (на всякий случай)
ipchains -F $loopback"-o"
#разрешено все, идущее из интерфейса обратной петли
ipchains -A $loopback"-o" -j ACCEPT -i $loopback -s 0/0 -d 0/0
#запрещаем все остальные исходящие пакеты - записываем это в журнал
ipchains -A $loopback"-o" -j DENY -s 0/0 -d 0/0 -l
#Для большей уверенности разрешаем ядру переадресацию пакетов
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward
#добавляем в стандартные потоки правила со ссылками на пользовательские потоки
#входящий поток на интерфейсе локальной сети
ipchains -A input -i $localif -j $localif"-i"
#входящий поток на статическом интерфейсе
ipchains -A input -i $staticif -j $staticif"-i"
#входящий поток на интерфейсе обратной петли
ipchains -A input -i $loopback -j $loopback"-i"
#исходящий поток на интерфейсе локальной сети
ipchains -A output -i $localif -j $localif"-o"
#исходящий поток на статическом интерфейсе
ipchains -A output -i $staticif -j $staticif"-o"
#исходящий поток на интерфейсе обратной петли
ipchains -A output -i $loopback -j $loopback"-o"
#проходящий поток на интерфейсе локальной сети
ipchains -A forward -i $localif -j $localif"-f"
#проходящий поток на статическом интерфейсе
ipchains -A forward -i $staticif -j $staticif"-f"
#проходящий поток на интерфейсе обратной петли
ipchains -A forward -i $loopback -j $loopback"-f"
#Проверка Сверх-Параноика --- несмотря на отказ всем пакетам по умолчанию,
#блокируем все пакеты на всех интерфейсах
#запрещаем все остальные входящие пакеты - записываем это в журнал
ipchains -A input -j DENY -s 0/0 -d 0/0 -l
#запрещаем все остальные исходящие пакеты - записываем это в журнал
ipchains -A output -j DENY -s 0/0 -d 0/0 -l
#запрещаем все остальные проходящие пакеты - записываем это в журнал
ipchains -A forward -j DENY -s 0/0 -d 0/0 -l
exit 0
Собираем все вместе
Ниже приведен пример скрипта rc.local, запускающего все остальное при загрузке системы. Он включает в ядре защиту от spoofing-а, задает правила маскарадинга на firewall, и включает интерфейс(ы) cipe.
#!/bin/bash
#4/4/99
#Пример скрипта rc.local
#Вопросы и предложения посылайте по адресу acj@home.com.
echo
#Включаем в ядре защиту от spoofing-а
#Это справедливо только для ядер версий 2.1/2.2
#if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
# echo -n "Включаем защиту от IP-spoofing..."
# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
# echo 1 > $f
# done
# echo "done."
#else
# echo ВНИМАНИЕ! НЕ УДАЛОСЬ ВКЛЮЧИТЬ ЗАЩИТУ ОТ SPOOFING-а.
# echo "Клавиши CONTROL-D прервут работу этой оболочки, и процесс загрузки системы продолжится."
# echo
# # Запускаем однопользовательскую оболочку на консоли
# /sbin/sulogin $CONSOLE
#fi
echo
#Настраиваем firewall
if [ -x /etc/rc.d/rc.firewall ]; then
echo Настройка правил фильтрования пакетов firewall.
echo
. /etc/rc.d/rc.firewall
fi
#Включение интерфейса(ов) cipe
if [ -x /etc/rc.d/rc.cipe ]; then
echo Запуск интерфейсов VPN.
. /etc/rc.d/rc.cipe
fi
exit 0
Соединяемся с СЕТЬЮ (WAN)
К этому моменту ваш интерфейс cipe должен работать. Попробуйте дать команду ping, указав ей адрес машины в другой сети. Если это не удалось, то проверьте на firewall-машине следующее:
Включена ли переадресация пакетов в ядре?
Выдает ли команда ifconfig примерно следующее:
cipcb0 Link encap:IPIP Tunnel HWaddr
inet addr:192.168.1.1 P-t-P:192.168.2.1 Mask:255.255.255.255
UP POINTOPOINT NOTRAILERS RUNNING NOARP MTU:1442 Metric:1
RX packets:28163 errors:6 dropped:0 overruns:0 frame:6
TX packets:29325 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Есть ли в таблице маршрутизации строка, относящаяся к удаленной cipe-машине:
192.168.2.1 * 255.255.255.255 UH 0 0 0 cipcb0
Есть ли в таблице маршрутизации строка, относящаяся к удаленной cipe-сети:
192.168.2.0 * 255.255.255.0 U 0 0 0 cipcb0
Проверьте журналы - нет ли в них сообщений об ошибках?
Если машины за разными firewall не видят друг друга, то проверьте правильность настройки обоих шлюзов.
После того, как, между машинами в разных подсетях, у вас начнет работать ping, ftp, telnet, и т.п., то следующим вашим шагом будет настройка межсетевой работы SAMBA. Подсказка: вам потребуются lmhosts или wins-сервер, а также "trusted domains" для NT. У меня все работает, но это находится за пределами обсуждения данного документа (как минимум, на текущий момент).
Если вы использовали пример настройки маскарадирующего firewall, то ваши машины должны иметь возможность подключиться к internet. Если нет - проверьте системные журналы. Вы можете также попробовать использовать tcpdump - посмотрите, что происходит с пакетами.