LINUX.ORG.RU
ФорумAdmin

ipfw nat для отдельных ip


0

0

Будьте добры, подскажите.
Есть инет с одним ip, локалка. Требуется чтоб из локалки
определенные ip имели доступ в inet.

rl0 внешний интерфейс
200.200.200.200 внешний ip
xl0 внутренний интерфейс
192.168.0.0/24 локальная сеть
192.168.0.5 компьютер которому разрешен инет

Пишу правила:
/sbin/ipfw -f flush
/sbin/ipfw add allow ip from any to any via lo0
/sbin/ipfw add allow ip from any to me established

/sbin/ipfw add divert natd ip from 192.168.0.0/24 to any out via rl0
/sbin/ipfw add divert natd ip from any to 200.200.200.200

/sbin/ipfw allow ip from 192.168.0.5 to any via xl0
/sbin/ipfw allow ip from any to 192.168.0.5 via xl0

Итог не работает.

Кстати взял правила из сатьи:
#!/bin/sh

ipfw='/sbin/ipfw -q'
ournet='200.200.200.200/32'
uprefix='192.168.0'
ifout='rl0'
ifuser='xl0'

${ipfw} flush

${ipfw} add 100 check-state

${ipfw} add 200 deny icmp from any to any in icmptype 5,9,13,14,15,16,17
${ipfw} add 210 reject ip from ${ournet} to any in via ${ifout}

${ipfw} add 300 allow ip from any to any via lo
${ipfw} add 310 allow tcp from me to any keep-state via ${ifout}
${ipfw} add 320 allow icmp from any to any
${ipfw} add 330 allow udp from me to any domain keep-state
${ipfw} add 340 allow udp from any to me domain
${ipfw} add 350 allow ip from me to any

${ipfw} add 400 allow tcp from any to me http,https,ssh
${ipfw} add 410 allow tcp from not ${ournet} to me smtp

###${ipfw} add 500 fwd 127.0.0.1,3128 tcp from ${ournet} to any http out via ${ifout}

${ipfw} add 510 divert natd ip from ${ournet} to any out via ${ifout}

${ipfw} add 1002 allow ip from ${uprefix}.5 to any via ${ifuser}
${ipfw} add 1002 allow ip from any to ${uprefix}.5 via ${ifuser}


#${ipfw} add 65535 deny ip from any to any

Тоже не работает. Подскажите.

anonymous

>/sbin/ipfw add divert natd ip from 192.168.0.0/24 to any out via rl0 >/sbin/ipfw add divert natd ip from any to 200.200.200.200

а что прописывать во второй строчке, что это входящий трафик уже на надо? /sbin/ipfw add divert natd ip from any to 200.200.200.200 in via rl0 да и смотрим внимательно поднят ли natd...

//alex

anonymous
()
Ответ на: комментарий от anonymous

OK. Спасибо. Заработала. Наваял я правила, все работает.
Но теперь надо ограничить скорость интернета для локалки,
но несколько ip оставить без ограничения.

#!/bin/sh

/sbin/ipfw -f flush


/sbin/ipfw add allow ip from any to any via lo0
/sbin/ipfw add reject ip from 192.168.0.0/24 to any in via rl0
/sbin/ipfw add deny icmp from any to any frag
/sbin/ipfw add pass icmp from any to any

/sbin/ipfw add divert natd ip from 192.168.0.0/24 to any out via rl0
/sbin/ipfw add divert natd ip from any to 200.200.200.0

/sbin/ipfw add pass tcp from any to any established

/sbin/ipfw add pass ip from 200.200.200.0 to any out via rl0

/sbin/ipfw add pass tcp from any to me 80,443,20,21,25,22 setup
/sbin/ipfw add pass udp from any to any

/sbin/ipfw add allow ip from any to 192.168.0.10
/sbin/ipfw add allow ip from 192.168.0.10 to any

/sbin/ipfw pipe 10 from any to 192.168.0.0/24 out via rl0
/sbin/ipfw pipe 10 config bw 64Kbit/s

/sbin/ipfw add allow ip from any to 192.168.0.5
/sbin/ipfw add allow ip from 192.168.0.5 to any


/sbin/ipfw add 65535 deny log ip from any to any

по моей теории у адреса 192.168.0.10 выход без ограничения, а 192.168.0.5 ограничение 64Kbit.

Но на практике нет ограничений ни у кого. Почему так, подскажите.

anonymous
()
Ответ на: комментарий от anonymous

имхо, ставишь трубу на твою сеть, а более _старшими_ правилами стравишь трубы на отдельные адреса по максимуму. но всё равно как-то криво... мож стоит подумать поделить сеть на подсети?

кстати, вот енто: /sbin/ipfw add 65535 deny log ip from any to any не правильно. если у тебя ядро скомпилено с IPFIREWALL_DEFAULT_TO_ACCEPT то запрещающее правило должно быть _предпоследним_ !!!

anonymous
()
Ответ на: комментарий от anonymous

В результате Ваших подсказок, чтения манов получилось вот такое творние рукотворное:

#!/bin/sh

/sbin/sysctl -w net.inet.ip.fw.one_pass=0
/sbin/ipfw -f flush
/sbin/ipfw -f pipe flush

/sbin/ipfw add 100 allow ip from any to any via lo0

/sbin/ipfw add 200 reject ip from 192.168.0.0/24 to any in via rl0
/sbin/ipfw add 300 deny icmp from any to any frag
/sbin/ipfw add 400 pass icmp from any to any

/sbin/ipfw add 500 pipe 10 tcp from not me to 192.168.0.0/24 out via xl0
/sbin/ipfw pipe 10 config bw 64Kbit

/sbin/ipfw add 600 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any http out via rl0
/sbin/ipfw add 700 divert natd ip from 192.168.0.0/24 to any out via rl0
/sbin/ipfw add 800 divert natd ip from any to 200.200.200.200

/sbin/ipfw add 900 pass tcp from any to any established
/sbin/ipfw add pass ip from me to any out via rl0

/sbin/ipfw add 1010 pass tcp from any to me 80,443,21,20,25,22,110 setup
/sbin/ipfw add 1020 pass udp from any to any


/sbin/ipfw add 10000 allow ip from 192.168.0.250 to any
/sbin/ipfw add 10000 allow ip from any to 192.168.0.250

/sbin/ipfw add 10000 allow ip from 192.168.0.240 to any
/sbin/ipfw add 10000 allow ip from any to 192.168.0.240

/sbin/ipfw add 10000 allow ip from 192.168.0.230 to any
/sbin/ipfw add 10000 allow ip from any to 192.168.0.230

/sbin/ipfw add 10000 allow ip from 192.168.0.230 to any
/sbin/ipfw add 10000 allow ip from any to 192.168.0.230

/sbin/ipfw add 10000 allow ip from 192.168.0.230 to any
/sbin/ipfw add 10000 allow ip from any to 192.168.0.230

/sbin/ipfw add 65535 deny log ip from any to any

Все работает, сетка ограничена 64Kbit. Почтой на серваке могут пользоваться все, в инет выход у избранных. Но как теперь сделать
чтоб у меня любимого, и у шефа нелюбимого ограничения стояли не 64Kbit а 512Kbit. Если пишем правила до ограничения сетки типа:
/sbin/ipfw add 490 pipe 9 tcp from not me to 192.168.0.250 out via xl0
/sbin/ipfw pipe 9 config bw 64Kbit

то ограничени все равно 64Kbit так как net.inet.ip.fw.one_pass=0.
Может как то skipto прикрутить но как не вьеду.

И вообще правда все как то каряво получилось. Может есть где готовый пример. Задача то в общем тривиальная.
Спасибо.

anonymous
()
Ответ на: комментарий от anonymous

Прошу прощения в пред идущем сообщении мои ошибки, вот правильный пример.

В результате Ваших подсказок, чтения манов получилось вот такое творние рукотворное:

#!/bin/sh

/sbin/sysctl -w net.inet.ip.fw.one_pass=0
/sbin/ipfw -f flush
/sbin/ipfw -f pipe flush

/sbin/ipfw add 100 allow ip from any to any via lo0

/sbin/ipfw add 200 reject ip from 192.168.0.0/24 to any in via rl0
/sbin/ipfw add 300 deny icmp from any to any frag
/sbin/ipfw add 400 pass icmp from any to any

/sbin/ipfw add 500 pipe 10 tcp from not me to 192.168.0.0/24 out via xl0
/sbin/ipfw pipe 10 config bw 64Kbit

/sbin/ipfw add 600 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any http out via rl0
/sbin/ipfw add 700 divert natd ip from 192.168.0.0/24 to any out via rl0
/sbin/ipfw add 800 divert natd ip from any to 200.200.200.200

/sbin/ipfw add 900 pass tcp from any to any established
/sbin/ipfw add pass ip from me to any out via rl0

/sbin/ipfw add 1010 pass tcp from any to me 80,443,21,20,25,22,110 setup
/sbin/ipfw add 1020 pass udp from any to any


/sbin/ipfw add 10000 allow ip from 192.168.0.250 to any
/sbin/ipfw add 10000 allow ip from any to 192.168.0.250

/sbin/ipfw add 10000 allow ip from 192.168.0.240 to any
/sbin/ipfw add 10000 allow ip from any to 192.168.0.240

/sbin/ipfw add 10000 allow ip from 192.168.0.230 to any
/sbin/ipfw add 10000 allow ip from any to 192.168.0.230

/sbin/ipfw add 10000 allow ip from 192.168.0.220 to any
/sbin/ipfw add 10000 allow ip from any to 192.168.0.220

/sbin/ipfw add 10000 allow ip from 192.168.0.210 to any
/sbin/ipfw add 10000 allow ip from any to 192.168.0.210

/sbin/ipfw add 65535 deny log ip from any to any

Все работает, сетка ограничена 64Kbit. Почтой на серваке могут пользоваться все, в инет выход у избранных. Но как теперь сделать
чтоб у меня любимого, и у шефа нелюбимого ограничения стояли не 64Kbit а 512Kbit. Если пишем правила до ограничения сетки типа:
/sbin/ipfw add 490 pipe 9 tcp from not me to 192.168.0.250 out via xl0
/sbin/ipfw pipe 9 config bw 512Kbit

то ограничени все равно 64Kbit так как net.inet.ip.fw.one_pass=0.
Может как то skipto прикрутить но как не вьеду.

И вообще правда все как то каряво получилось. Может есть где готовый пример. Задача то в общем тривиальная.
Спасибо.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.