Перейти до

IPFW, NATD, Stargazer


Рекомендованные сообщения

Доброго времени суток!

Есть машина FreeBSD 5.4 + Stargazer 2.0.14

rl0 (192.168.0.254)- смотрит в локаль (192.168.0.0/24)

rl1 (10.0.32.10) - смотрит в сеть прова (10.0.32.0/24)

ng0 (10.0.201.109) - впн, через который летит инет.

Даю rc.conf:

 

gateway_enable="YES"

firewall_enable="YES"

firewall_type="/etc/firewall/rules"

natd_enable="YES"

natd_interface="rl1"

natd_flags="-redirect_port tcp 192.168.0.1:3000 80"

sshd_enable="YES"

usbd_enable="YES"

ifconfig_rl1="inet 10.0.32.10 netmask 255.255.255.0"

ifconfig_rl0="inet 192.168.0.254 netmask 255.255.255.0"

#defaultrouter="10.0.32.1"

hostname="Inet-Getway.Z-Network.local"

router_flags="-q"

router="/sbin/routed"

router_enable="YES"

static_routes="vpn"

route_vpn="10.0.0.0/17 10.0.32.1"

export route_vpn

 

Даю /etc/firewall/rules:

 

#Сброс правил

-f flush

#Все что приходит на 10.0.32.10 из сети прова заганяем в диверт сокет

add 1 divert natd ip from any to 10.0.32.10 in via rl1

#Резрешаем ходить пингам внутри локали

add 10001 allow icmp from any to any via rl0

#add 10002 allow ip from 10.0.32.10 to any via rl1

#Резрешаем коннектится авторизатором из внутренней сети 5555 порт

add 10003 allow udp from 192.168.0.0/24 to 192.168.0.254 5555 via rl0

add 10004 allow udp from 192.168.0.254 5555 to 192.168.0.0/24 via rl0

add 10005 allow udp from 192.168.0.254 5554 to 192.168.0.0/24 via rl0

#Резрешаем коннект конфигуратора с 192.168.0.1 и 192.168.0.2, на порт 4444

add 10006 allow tcp from 192.168.0.1 to 192.168.0.254 4444 via rl0

add 10007 allow tcp from 192.168.0.254 4444 to 192.168.0.1 via rl0

add 10008 allow tcp from 192.168.0.2 to 192.168.0.254 4444 via rl0

add 10009 allow tcp from 192.168.0.254 4444 to 192.168.0.2 via rl0

#Разрешаем коннект на чат-сервер из локали

add 10010 allow tcp from 192.168.0.0/24 to 192.168.0.254 6666 via rl0

add 10011 allow tcp from 192.168.0.254 6666 to 192.168.0.0/24 via rl0

#Разрешаем коннект на чат-сервер из локали прова

add 10012 allow tcp from 10.0.0.0/16 to 10.0.32.10 6666 via rl1

add 10013 allow tcp from 10.0.32.10 6666 to 10.0.0.0/16 via rl1

#Разрешаем с 192.168.0.1 и 192.168.0.2 доступ по ssh

add 10014 allow tcp from 192.168.0.1 to 192.168.0.254 22 via rl0

add 10015 allow tcp from 192.168.0.254 21-22 to 192.168.0.1 via rl0

add 10016 allow tcp from 192.168.0.2 to 192.168.0.254 22 via rl0

add 10017 allow tcp from 192.168.0.254 21-22 to 192.168.0.2 via rl0

#Разрешаем доступ на web-сервер из сети прова

add 10018 allow tcp from 10.0.0.0/16 to 10.0.32.10 80 via rl1

add 10019 allow tcp from 10.0.32.10 80 to 10.0.0.0/16 via rl1

#Разрешаем коннект на 3000 порт 192.168.0.1 (нужно)

add 10020 allow tcp from 192.168.0.254 to 192.168.0.1 3000 via rl0

add 10021 allow tcp from 192.168.0.1 3000 to 192.168.0.254 via rl0

#Разрешаем поднятие VPN к 10.0.4.3

add 10022 allow tcp from 10.0.32.10 to 10.0.4.3 1723 via rl1

add 10023 allow tcp from 10.0.4.3 to 10.0.32.10 via rl1

add 10024 allow gre from 10.0.32.10 to 10.0.4.3 via rl1

add 10025 allow gre from 10.0.4.3 to 10.0.32.10 via rl1

#Все что направляется в сеть прова из 192.168.0.1 и 192.168.0.2 заганяем в диверт сокет

add 2 divert natd ip from 192.168.0.1 to any out via rl1

add 3 divert natd ip from 192.168.0.2 to any out via rl1

#Когда прописую эту муть и кто то из сети прова ставит прописывает "route #add 192.168.0.0/24 10.0.32.10", спокойно может получать доступ на все порты #этих машин (нужно устранить). Когда убираю нифига не работает

add 4 allow ip from any to 192.168.0.1

add 5 allow ip from any to 192.168.0.2

add 6 allow ip from 192.168.0.1 to 10.0.0.0/16

add 7 allow ip from 192.168.0.2 to 10.0.0.0/16

#Без этого не летит на впн...

add 8 allow ip from 10.0.201.109 to any via ng0

 

Короче задача:

При отключенном авторизаторе:

1. Розрешить коннект с 192.168.0.0/24 к 192.168.0.254 на порт 5555 (авторизатор).

2. Розрешить коннект с 192.168.0.1 и 192.168.0.2 к 192.168.0.254 на порт 4444 (Конфигуратор)

3. Розрешить коннект с 192.168.0.0/24 к 192.168.0.254 на порт 6666 (чат)

4. Розрешить коннект с 10.0.0.0/16 к 10.0.32.10 на порт 6666 (чат)

5. Розрешить доступ с 192.168.0.1 и 192.168.0.2 в сеть прова (10.0.0.0/16), но при этом чтобы не было того бага с установкой маршрута.

6. Резрешить поднятие впн к 10.0.4.3.

При включенном авторизаторе:

1. Разрешить юзеру доступ в инет (тот что летит через ВПН).

2. Разрешить юзеру доступ к 10.0.32.11 на порт 80 (веб).

3. Разрешить юзеру доступ к 10.0.4.3 на порт 6667 (ирк).

4. Разрешить юзеру доступ к 10.0.4.8 на порт 27001 (КС).

И соответственно ответы с этих портов....

Нужно: OnConnect, OnDisconnect, правила файрвола.

Для поднятия впн используется mpd, нужны скрипты io-up.sh, io-down.sh

 

Помогите пожалуйста! Я уже совсем запутался! Заранее благодарен!

 

 

 

ЗЫ: Извените если уже было на форуме... Вроде как все перелазил не нашел... Если не заметил дайте точную ссылку!

Ссылка на сообщение
Поделиться на других сайтах

Ниже привожу свои правила файервола, но без VPN. Решение хоть и небезопасное, но рабочее: в инет не выйти без авторизации (далее стоит adsl-модем-маршрутизатор, который пропускает в нет только с 192.168.1.3)

 

192.168.0.1 - адрес внутр. интерфейса ed1 шлюза

192.168.1.3 - адрес внеш. интерфейса ed0 шлюза (маска у обоих 255.255.255.0)

00100 allow ip from 192.168.0.1 to any
#NAT для входящих пакетов
00200 divert 8668 ip from any to 192.168.1.3 via ed0

### следующие правила добавлены по скрипту OnConnect для пользователя 192.168.0.3

# организуем транспарент-прокси
29000 fwd 192.168.0.1,3128 tcp from 192.168.0.3 to any dst-port 80,8080,8081,8000
#NAT для исходящих пакетов
29010 divert 8668 ip from 192.168.0.3 to any via ed0
29020 allow ip from any to 192.168.0.3
29030 allow ip from 192.168.0.3 to any

### следующие правила добавлены по скрипту OnConnect для пользователя 192.168.0.2

29100 fwd 192.168.0.1,3128 tcp from 192.168.0.2 to any dst-port 80,8080,8081,8000
29110 divert 8668 ip from 192.168.0.2 to any via ed0
29120 allow ip from any to 192.168.0.2
29130 allow ip from 192.168.0.2 to any

### далее "статичные правила"

61400 allow ip from 192.168.1.3 to any
61500 allow ip from any to 192.168.1.3
# разрешаем доступ по ssh к внутр. интерфейсу
62000 allow ip from 192.168.0.2 to 192.168.0.1 dst-port 22
62100 allow ip from 192.168.0.1 22 to 192.168.0.2
# разрешаем авторизатор и конфигуратор
63000 allow udp from any to me dst-port 4444
63100 allow tcp from 192.168.0.2 to me dst-port 4444

65000 deny ip from any to any

 

Повторюсь, все, конечно, криво, но работает. Может тебе и поможет чем...

 

 

Скрипты:

 

 

#cat /etc/stargazer/OnConnect

fwcmd="/sbin/ipfw"

ip=$2
login=$1
id=$4

# id - уникальный целочисленный идентификатор пользователя
# принимает значений от 0 до максимального кол-ва пользователей

${fwcmd} add `expr $id '*' 100 + 29000` fwd 192.168.0.1,3128 tcp from $ip to any dst-port 80,8080,8081,8000
${fwcmd} add `expr $id '*' 100 + 29010` divert natd all from $ip to any via ed0
${fwcmd} add `expr $id '*' 100 + 29020` allow ip from any to $ip
${fwcmd} add `expr $id '*' 100 + 29030` allow ip from $ip to any

echo "connect $login " >> /var/log/connect.log

 

# cat /etc/stargazer/OnDisconnect

fwcmd="/sbin/ipfw"

id=$4

${fwcmd} delete `expr $id '*' 100 + 29000`
${fwcmd} delete `expr $id '*' 100 + 29010`
${fwcmd} delete `expr $id '*' 100 + 29020`
${fwcmd} delete `expr $id '*' 100 + 29030`
echo "disconnect $1" >> /var/log/connect.log

Ссылка на сообщение
Поделиться на других сайтах

Короче сел переписал все заново.... Заработало! Скоро вывешу сюда! Теперь проблема такая: при некоретном завершении работы старгазера (отрубляют электричество) обнуляется файл stat у некоторых юзеров...(насколько я понял у тех, что были в онлайн в момент выключения)...нашел скрипт поэтому поводу на форуме... сейчас попробую запустить... может еще кто-то что-нибуть поэтому поводу придумал?

Ссылка на сообщение
Поделиться на других сайтах
Короче сел переписал все заново.... Заработало! Скоро вывешу сюда! Теперь проблема такая: при некоретном завершении работы старгазера (отрубляют электричество) обнуляется файл stat у некоторых юзеров...(насколько я понял у тех, что были в онлайн в момент выключения)...нашел скрипт поэтому поводу на форуме... сейчас попробую запустить... может еще кто-то что-нибуть поэтому поводу придумал?

ищи скрипты бакапа

 

публиковались на форуме

Ссылка на сообщение
Поделиться на других сайтах
может еще кто-то что-нибуть поэтому поводу придумал?

1) Земетил закономерность, что у меня чаще слетают юзеры, которые были добавлены в систему последними... Создал несколько "фиктивных" пользователей - если слетят, не страшно :)

 

2) Скрипт бекапа при выключении системы (т.к. выключаю раз в день минимум - на ночь)

Ссылка на сообщение
Поделиться на других сайтах

Так и сделал... просто думал может кто-то еще что-то придумал....

И вобще заметил закономерность, что обнуляется статистика только когда сервер выключается "неправильно" (электричество например вырубают) и если не ошибаюсь то у юзеров которые были в этот момент в он-лайне....

когда сам выключаю сервер все ок! выключаю таким образом:

#reboot

при загрузке биос вырубаю тачку....

пока все ок....

 

кстати обнаружилась дыра:

если подключить авторизатор и в тот же момент отключить, OnDisconnect выполняется быстрее ОnСonnect и в итоге юзер числится отключенным, трафик не считается, а нет летит.... полечилось прописывание в начале OnDisconnect: sleep 5.

Ссылка на сообщение
Поделиться на других сайтах

еще есть такая фигня получилась: на некоторых движках (форумы, порталы обычно..) при отправке данных с формы браузер у клиента начинает тупо втыкать в итоге выдает "страница не доступна!"... причем было замеченно (на www.bratstvo.info) что без авторизации (под Гостем) все уходит нормально, а как только авторизируешся такая фигня....

Ссылка на сообщение
Поделиться на других сайтах

как и было обещанно вылаживаю файлы:

rc.conf

 

# -- sysinstall generated deltas -- # Thu Jan 26 13:48:46 2006

# Created: Thu Jan 26 13:48:46 2006

# Enable network daemons for user convenience.

# Please make all changes to this file, not to /etc/defaults/rc.conf.

# This file now contains just the overrides from /etc/defaults/rc.conf.

gateway_enable="YES"

firewall_enable="YES"

firewall_type="/etc/firewall/rules"

natd_enable="YES"

natd_interface="rl1"

natd_flags="-redirect_port tcp 192.168.0.1:3000 80"

natd2_enable="YES"

natd2_interface="10.0.201.109"

natd2_flags="-p 8669"

sshd_enable="YES"

usbd_enable="YES"

 

ifconfig_rl1="inet 10.0.32.10 netmask 255.255.255.0"

ifconfig_rl0="inet 192.168.0.254 netmask 255.255.255.0"

#defaultrouter="10.0.32.1"

hostname="Inet-Getway.Z-Network.local"

router_flags="-q"

router="/sbin/routed"

router_enable="YES"

static_routes="vpn"

route_vpn="10.0.0.0/17 10.0.32.1"

export route_vpn

mpd_enable="YES"

 

OnConnect

 

#!/bin/sh

# Login

LOGIN=$1

 

#user IP

#echo $2

IP=$2

 

#cash

CASH=$3

 

#user ID

id=$4

a=`echo "$id + 10"`

b=`echo $a | bc -l`

c=`echo "$b * 10" | bc -l`

d=`echo "$c + 1" | bc -l`

e=`echo "$d + 1" | bc -l`

f=`echo "$e + 1" | bc -l`

g=`echo "$f + 1" | bc -l`

h=`echo "$g + 1" | bc -l`

i=`echo "$h + 1" | bc -l`

j=`echo "$i + 1" | bc -l`

ipfw delete $c

ipfw delete $d

ipfw delete $e

ipfw delete $f

ipfw delete $g

ipfw delete $h

ipfw delete $i

ipfw delete $j

ipfw add $c divert natd ip from $IP to any out via rl1

#ipfw add $d allow ip from any to $IP

ipfw add $e allow tcp from $IP to 10.0.32.11 80, 6666

ipfw add $f allow tcp from $IP to 10.0.4.3 6667

ipfw add $d allow tcp from 10.0.32.11 80, 6666 to $IP

ipfw add $g allow tcp from 10.0.4.3 6667 to $IP

ipfw add $h allow ip from any to $IP via ng0

ipfw add $i allow ip from any to $IP via rl0

ipfw add $j allow ip from $IP to any via rl0

echo "C `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /var/stargazer/users/$LOGIN/connect.log

 

 

Через exp чето не пошло... поэтому сделал так по извращенски...

 

OnDisconnect

#!/bin/sh

#Для устарения дыры указанной выше...

sleep 5

# Login

LOGIN=$1

 

#user IP

IP=$2

 

#cash

CASH=$3

 

#user ID

id=$4

a=`echo "$id + 10"`

b=`echo $a | bc -l`

c=`echo "$b * 10" | bc -l`

d=`echo "$c + 1" | bc -l`

e=`echo "$d + 1" | bc -l`

f=`echo "$e + 1" | bc -l`

g=`echo "$f + 1" | bc -l`

h=`echo "$g + 1" | bc -l`

i=`echo "$h + 1" | bc -l`

j=`echo "$i + 1" | bc -l`

ipfw delete $c

ipfw delete $d

ipfw delete $e

ipfw delete $f

ipfw delete $g

ipfw delete $h

ipfw delete $i

ipfw delete $j

echo "D `date +%Y.%m.%d-%H.%M.%S` $IP $CASH" >> /var/stargazer/users/$LOGIN/connect.log

 

/etc/rc.d/natd

 

#!/bin/sh

#

# $FreeBSD: src/etc/rc.d/natd,v 1.1.2.1 2004/10/10 09:50:53 mtm Exp $

#

 

# PROVIDE: natd

# KEYWORD: nostart nojail

 

. /etc/rc.subr

. /etc/network.subr

 

name="natd"

rcvar=`set_rcvar`

command="/sbin/${name}"

start_cmd="natd_start"

pidfile="/var/run/${name}.pid"

 

natd_start()

{

dhcp_list="`list_net_interfaces dhcp`"

for ifn in ${dhcp_list}; do

case ${natd_interface} in

${ifn})

natd_flags="$natd_flags -dynamic"

;;

*)

;;

esac

done

if [ -n "${natd_interface}" ]; then

if echo ${natd_interface} |

grep -q -E '^[0-9]+(.[0-9]+){0,3}$'; then

natd_flags="$natd_flags -a ${natd_interface}"

else

natd_flags="$natd_flags -n ${natd_interface}"

fi

fi

echo -n ' natd'

${natd_program:-/sbin/natd} ${natd_flags} ${natd_ifarg} -P ${pidfile}

}

 

load_rc_config $name

run_rc_command "$1"

 

 

/etc/rc.d/natd2

 

#!/bin/sh

#

# $FreeBSD: src/etc/rc.d/natd,v 1.1.2.1 2004/10/10 09:50:53 mtm Exp $

#

# PROVIDE: natd2

# KEYWORD: nostart nojail

 

. /etc/rc.subr

. /etc/network.subr

 

name="natd2"

rcvar=`set_rcvar`

command="/sbin/natd"

start_cmd="natd2_start"

pidfile="/var/run/${name}.pid"

 

natd2_start()

{

dhcp_list="`list_net_interfaces dhcp`"

for ifn in ${dhcp_list}; do

case ${natd2_interface} in

${ifn})

natd_flags="$natd2_flags -dynamic"

;;

*)

;;

esac

done

if [ -n "${natd2_interface}" ]; then

if echo ${natd2_interface} |

grep -q -E '^[0-9]+(.[0-9]+){0,3}$'; then

natd2_flags="$natd2_flags -a ${natd2_interface}"

else

natd2_flags="$natd2_flags -n ${natd2_interface}"

fi

fi

echo -n ' natd2'

${natd2_program:-/sbin/natd} ${natd2_flags} ${natd2_ifarg} -P ${pidfile}

}

 

load_rc_config $name

run_rc_command "$1"

 

/etc/rc.d/ipfw

 

#!/bin/sh

#

# $FreeBSD: src/etc/rc.d/ipfw,v 1.8.2.1 2004/10/10 09:50:53 mtm Exp $

#

 

# PROVIDE: ipfw

# REQUIRE: ppp-user

# BEFORE: NETWORKING

# KEYWORD: nojail

 

. /etc/rc.subr

. /etc/network.subr

 

name="ipfw"

rcvar="firewall_enable"

start_cmd="ipfw_start"

start_precmd="ipfw_precmd"

stop_cmd="ipfw_stop"

 

ipfw_precmd()

{

if ! ${SYSCTL} net.inet.ip.fw.enable > /dev/null 2>&1; then

if ! kldload ipfw; then

warn unable to load firewall module.

return 1

fi

fi

 

return 0

}

 

ipfw_start()

{

# set the firewall rules script if none was specified

[ -z "${firewall_script}" ] && firewall_script=/etc/rc.firewall

 

if [ -r "${firewall_script}" ]; then

. "${firewall_script}"

echo -n 'Firewall rules loaded, starting divert daemons:'

if [ -f /etc/rc.d/natd ] ; then

/etc/rc.d/natd start

fi

if [ -f /etc/rc.d/natd2 ] ; then

/etc/rc.d/natd2 start

fi

elif [ "`ipfw l 65535`" = "65535 deny ip from any to any" ]; then

echo 'Warning: kernel has firewall functionality, but'

' firewall rules are not enabled.'

echo ' All ip services are disabled.'

fi

echo '.'

 

# Firewall logging

#

if checkyesno firewall_logging; then

echo 'Firewall logging enabled'

sysctl net.inet.ip.fw.verbose=1 >/dev/null

fi

 

# Enable the firewall

#

${SYSCTL_W} net.inet.ip.fw.enable=1

}

 

ipfw_stop()

{

# Disable the firewall

#

${SYSCTL_W} net.inet.ip.fw.enable=0

if [ -f /etc/rc.d/natd ] ; then

/etc/rc.d/natd stop

fi

if [ -f /etc/rc.d/natd2 ] ; then

/etc/rc.d/natd2 stop

fi

}

 

load_rc_config $name

run_rc_command "$1"

 

firewall:

 

-f flush

# Divert lokali impa

add 1 divert natd ip from any to 10.0.32.10 in via rl1

#add 1 divert natd ip from any to any in via rl1

#Divert VPN

add 2 divert 8669 ip from any to any via ng0

#Divert v lokal' impa s 192.168.0.1-2

add 3 divert natd ip from 192.168.0.1 to any out via rl1

add 4 divert natd ip from 192.168.0.2 to any out via rl1

#HZ

add 5 allow ip from 10.0.0.0/16 to 192.168.0.1

add 6 allow ip from 10.0.0.0/16 to 192.168.0.2

#Razreshaem hodit' v set' impa s 192.168.0.1-2

add 7 allow ip from 192.168.0.1 to 10.0.0.0/16

add 8 allow ip from 192.168.0.2 to 10.0.0.0/16

#Up

add 9 allow ip from 10.0.201.109 to any via ng0

#Ping

add 10001 allow icmp from any to any via rl0

#Up

add 10002 allow ip from 10.0.32.10 to any via rl1

#Avtorizator

add 10003 allow udp from 192.168.0.0/24 to 192.168.0.254 5555 via rl0

add 10004 allow udp from 192.168.0.254 5555 to 192.168.0.0/24 via rl0

add 10005 allow udp from 192.168.0.254 5554 to 192.168.0.0/24 via rl0

#Konfigurator

add 10006 allow tcp from 192.168.0.1 to 192.168.0.254 4444 via rl0

add 10007 allow tcp from 192.168.0.254 4444 to 192.168.0.1 via rl0

add 10008 allow tcp from 192.168.0.2 to 192.168.0.254 4444 via rl0

add 10009 allow tcp from 192.168.0.254 4444 to 192.168.0.2 via rl0

#Chat

add 10010 allow tcp from 192.168.0.0/24 to 192.168.0.254 6666 via rl0

add 10011 allow tcp from 192.168.0.254 6666 to 192.168.0.0/24 via rl0

add 10012 allow tcp from 10.0.0.0/16 to 10.0.32.10 6666 via rl1

add 10013 allow tcp from 10.0.32.10 6666 to 10.0.0.0/16 via rl1

#SSH

add 10014 allow tcp from 192.168.0.1 to 192.168.0.254 22 via rl0

add 10015 allow tcp from 192.168.0.254 21-22 to 192.168.0.1 via rl0

add 10016 allow tcp from 192.168.0.2 to 192.168.0.254 22 via rl0

add 10017 allow tcp from 192.168.0.254 21-22 to 192.168.0.2 via rl0

#WEB

add 10018 allow tcp from 10.0.0.0/16 to 10.0.32.10 88 via rl1

add 10019 allow tcp from 10.0.32.10 80 to 10.0.0.0/16 via rl1

add 10020 allow tcp from 192.168.0.254 to 192.168.0.1 3000 via rl0

add 10021 allow tcp from 192.168.0.1 3000 to 192.168.0.254 via rl0

#VPN

add 10022 allow tcp from 10.0.32.10 to 10.0.4.3 1723 via rl1

add 10023 allow tcp from 10.0.4.3 to 10.0.32.10 via rl1

add 10024 allow gre from 10.0.32.10 to 10.0.4.3 via rl1

add 10025 allow gre from 10.0.4.3 to 10.0.32.10 via rl1

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...