Страница 1 из 1
Настрока IPFW
Добавлено: 2006-03-31 0:37:05
almos
Hi all!
Есть такая задача: есть шлюз на FreeBSD 6, на нем поднят нат, юзвери ходит в нет, нужно ограничить скорость работы с серваком до 100Мбит/с, а в нет пускать на скорости 80Кбит/с.
Я это организовал так:
Код: Выделить всё
#!/bin/sh
ipfw -f flush
ipfw -f pipe flush
ipfw -f queue flush
int_net="192.168.0.0" #internal network
net_mask="24" # network mask
ip_out="222.222.222.222" #external
ip_in="192.168.0.1" #server int ip
#DummyNET
#from local net to inet
ipfw pipe 1 config bw 80Kbit/s queue 20
ipfw queue 1 config pipe 1 weight 50 queue 100 mask dst-ip 0xffffffff
ipfw queue 11 config pipe 1 weight 50 queue 100 mask src-ip 0xffffffff
ipfw add queue 1 ip from any to ${int_net}/${net_mask}
ipfw add queue 11 ip from ${int_net}/${net_mask} to any
#from local net to server
ipfw add pipe 2 ip from ${ip_out} to ${int_net}/${net_mask}
ipfw pipe 2 config bw 100000Kbit/s
ipfw add pipe 3 ip from ${ip_in} to ${int_net}/${net_mask}
ipfw pipe 3 config bw 100000Kbit/s
ipfw add check-state
ipfw add allow ip from any to any via lo0
после изучения статей с данного сайта ну и парочки других.
У меня есть подозрение что он немного неправильно работает, в плане ограничения проп. способности в инет.
У кого какие мысли? Где могут быть ошибки?
Заранее благодарен
Добавлено: 2006-03-31 7:52:39
Alex Keda
подозрения или факты? И зачем тебе queue?
Навскидку вроде всё правильно, но надо смотреть скоорости.
Добавлено: 2006-03-31 14:18:11
almos
Факты.
Скорость доступа из сетки в инет оооочень маленькая.
В ipfw не очень разбираюсь, почитал несколько статей и слепил приблизительно то что было нужно. Но немного неудачно ограничил скорость в инет. Как это сделать правильнее?
Добавлено: 2006-03-31 17:16:52
Alex Keda
А чем мой вариант не устроил? Он 100% рабочий - у меня щас сттоит...
Добавлено: 2006-03-31 23:00:09
almos
Паралельно с dummynet решил юзать скрипт-файрволла выложенный на данном сайте.
У меня возникла проблемка наверное с интерфейсом ppp0.
Я честно говоря не знаю как лучше сделать. Делов том что у меня для выхода в инет используется модем Sirius 128k, подключается к нету через com (rs-232), со скоростью 115200bit/s, все настройки определены в /etc/ppp/ppp.conf (используемый порт, скорость)
в /etc/rc.conf у меня так:
Код: Выделить всё
gateway_enable="YES"
ppp_enable="YES"
ppp_mode="dedicated"
ppp_nat="YES"
ppp_profile="sirius"
#
natd_enable="YES"
firewall_enable="YES"
firewall_script="/etc/firewall.rules.sh" # это собсно скрипт
после запуска скрипта файрволла, инет пропал в локалке, извне сервисы типа pop3,smtp,ssh,ftp вырубились
---------------------
ну вот после подключения у меня команда ifconfig отображает новый интерфейс tun0, а как проинициализировать ppp0? Если этого нельзя сделать как мне поменять скрипт файрволла, чтобы он правильно работал?
Добавлено: 2006-04-02 9:23:09
Alex Keda
А чё за фаер воткнул-то?
Добавлено: 2006-04-02 16:26:42
almos
Главное пинг в мир идет, все остальное не работает
И еще у меня последним правилом в ipfw (65535) идет allow ip from any to any
Так и должно быть или нет? И как его можно убить (ipfw delete 65535) не работает
ADSL модем у меня подключен непосредственно к этому серверу. Модем комовский (Sirius 128k), подключается через com порт, инициализируется через ppp.
Вот собсно фаерволл:
Код: Выделить всё
#!/bin/sh
LanOut="tun0"
LanIn="rl0"
IpOut="222.222.222.222"
IpIn="192.168.0.1"
NetMask="24"
NetIn="192.168.0.0"
ipfw -f flush
ipfw add check-state
ipfw add allow ip from any to any via lo0
ipfw add deny ip from any to 127.0.0.0/8
ipfw add deny ip from 127.0.0.0/8 to any
#ipfw add deny ip from any to 10.0.0.0/8 in via ${LanOut}
#ipfw add deny ip from any to 172.16.0.0/12 in via ${LanOut}
#ipfw add deny ip from any to 192.168.0.0/16 in via ${LanOut}
#ipfw add deny ip from any to 0.0.0.0/8 in via ${LanOut}
#ipfw add deny ip from any to 169.254.0.0/16 in via ${LanOut}
#ipfw add deny ip from any to 240.0.0.0/4 in via ${LanOut}
ipfw add deny icmp from any to any frag
ipfw add deny log icmp from any to 255.255.255.255 in via ${LanOut}
ipfw add deny log icmp from any to 255.255.255.255 out via ${LanOut}
#ipfw add fwd ${IpIn},2121 tcp from ${NetIn}/${NetMask} to any 21 via ${LanOut}
#ipfw add fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}
#ipfw add divert natd ip from ${NetIn}/${NetMask} to any out via ${LanOut}
#ipfw add divert natd ip from any to ${IpOut} in via ${LanOut}
#ipfw add deny ip from 10.0.0.0/8 to any out via ${LanOut}
#ipfw add deny ip from 172.16.0.0/12 to any out via ${LanOut}
#ipfw add deny ip from 192.168.0.0/16 to any out via ${LanOut}
#ipfw add deny ip from 0.0.0.0/8 to any out via ${LanOut}
#ipfw add deny ip from 169.254.0.0/16 to any out via ${LanOut}
#ipfw add deny ip from 224.0.0.0/4 to any out via ${LanOut}
#ipfw add deny ip from 240.0.0.0/4 to any out via ${LanOut}
ipfw add allow tcp from any to any established
ipfw add allow ip from ${IpOut} to any out xmit ${LanOut}
ipfw add allow udp from any 53 to any via ${LanOut}
ipfw add allow udp from any to any 53 via ${LanOut}
ipfw add allow udp from any to any 123 via ${LanOut}
ipfw add allow tcp from any to ${IpOut} 21 via ${LanOut}
ipfw add allow tcp from any to ${IpOut} 40000-65534 via ${LanOut}
ipfw add allow icmp from any to any icmptypes 0,8,11
ipfw add allow tcp from any to ${IpOut} 80 via ${LanOut}
ipfw add allow tcp from any to ${IpOut} 25 via ${LanOut}
ipfw add allow tcp from any to ${IpOut} 22 via ${LanOut}
ipfw add allow tcp from any to ${IpOut} 143 via ${LanOut}
ipfw add allow tcp from any to ${IpOut} 110 via ${LanOut}
ipfw add allow tcp from any to any via ${LanIn}
ipfw add allow udp from any to any via ${LanIn}
ipfw add allow icmp from any to any via ${LanIn}
ipfw add deny ip from any to any
вот rc.conf
Код: Выделить всё
# -- sysinstall generated deltas -- # Tue Jul 11 22:20:58 2006
# Created: Tue Jul 11 22:20:58 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.
ifconfig_rl0="inet 192.168.0.1 netmask 255.255.255.0"
#ifconfig_ppp0="inet 222.222.222.222 netmask 255.255.255.0"
hostname="link.vinnica.ua"
usbd_enable="YES"
sshd_enable="YES"
inetd_enable="YES"
sendmail_enable="NONE"
mysql_enable="YES"
exim_enable="YES"
dbmail_imapd_enable="YES"
dbmail_pop3d_enable="YES"
proftpd_enable="YES"
clamav_clamd_enable="YES"
named_enable="YES"
ppp_enable="YES"
ppp_mode="dedicated"
ppp_nat="YES"
ppp_profile="sirius"
#
gateway_enable="YES"
natd_enable="YES"
natd_program="/sbin/natd"
natd_flags="-m -u"
#natd_interface="tun0"
firewall_enable="YES"
#firewall_script="/trafd.sh"
#ipacctd_enable="YES"
#ipacctd_flags="-v -t"
#ipacctd_rules="rl0 tun0 lo0"
#ipacctd_rule_rl0_flags="-p 10001 -f /var/log/traffic_rl0.log"
#ipacctd_rule_rl0_pid="/var/run/ipacctd.rl0"
#ipacctd_rule_lo0_flags="-p 10002 -f /var/log/traffic_lo0.log"
#ipacctd_rule_lo0_pid="/var/run/ipacctd.lo0"
#ipacctd_rule_tun0_flags="-p 10003 -f /var/log/traffic_tun0.log"
#ipacctd_rule_tun0_pid="/var/run/ipacctd.tun0"
Кстати ко всему прочему не работает ipacctd, не создает файлы в /var/log
Добавлено: 2006-04-02 17:54:00
Alex Keda
покажи ipfw show и ifconfig на машине с уставновленным соединением и когда есть пинг в мир
Добавлено: 2006-04-02 21:57:41
almos
ifconfig
Код: Выделить всё
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet6 fe80::213:8fff:fe35:933e%rl0 prefixlen 64 scopeid 0x1
inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
ether 00:13:8f:35:93:3e
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
inet 127.0.0.1 netmask 0xff000000
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 222.222.222.222 --> 192.168.1.95 netmask 0xffffffff
Opened by PID 226
Получается, что 222.222.222.222 - внешний ip, 192.168.1.95 - внутренний в сети провайдера
Добавлено: 2006-04-03 7:53:32
Alex Keda
к прову через туннель подключаешься?
ужасть

файрволл-то покажи работающий
Добавлено: 2006-04-06 10:00:52
almos
Вот собсно мой фаер в работе, в мир пингует, днс определяет, странички не отдает, че за грабли незнаю.
Код: Выделить всё
00100 0 0 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00400 0 0 deny icmp from any to any frag
00500 0 0 deny log logamount 500 icmp from any to 255.255.255.255 in via tun0
00600 0 0 deny log logamount 500 icmp from any to 255.255.255.255 out via tun0
00700 400 248954 allow tcp from any to any established
00800 2 153 allow ip from 222.222.222.222 to any out xmit tun0
00900 2 411 allow udp from any 53 to any via tun0
01000 0 0 allow udp from any to any dst-port 53 via tun0
01100 0 0 allow udp from any to any dst-port 123 via tun0
01200 0 0 allow tcp from any to 222.222.222.222 dst-port 21 via tun0
01300 0 0 allow tcp from any to 222.222.222.222 dst-port 40000-65534 via tun0
01400 0 0 allow icmp from any to any icmptypes 0,8,11
01500 0 0 allow tcp from any to 222.222.222.222 dst-port 80 via tun0
01600 0 0 allow tcp from any to 222.222.222.222 dst-port 25 via tun0
01700 0 0 allow tcp from any to 222.222.222.222 dst-port 22 via tun0
01800 0 0 allow tcp from any to 222.222.222.222 dst-port 143 via tun0
01900 0 0 allow tcp from any to 222.222.222.222 dst-port 110 via tun0
02000 15 720 allow tcp from any to any via rl0
02100 31 2784 allow udp from any to any via rl0
02200 0 0 allow icmp from any to any via rl0
02300 15 720 deny ip from any to any
65535 0 0 allow ip from any to any
Можешь подсказать как подключатся к прову не через тунель, если можно пример конфига, единственно, я еще повторюсь, модем у меня комовский(/dev/cuad0).
И как после этого сделать, чтобы если коннект падал (а такое часто бывает) демон(тот что поддерживает коннект) перезапускался.....
Добавлено: 2006-04-06 10:11:36
Alex Keda
almos писал(а):Вот собсно мой фаер в работе, в мир пингует, днс определяет, странички не отдает, че за грабли незнаю.
Можешь подсказать как подключатся к прову не через тунель, если можно пример конфига, единственно, я еще повторюсь, модем у меня комовский(/dev/cuad0).
И как после этого сделать, чтобы если коннект падал (а такое часто бывает) демон(тот что поддерживает коннект) перезапускался.....
однако, где диверт? невижу

В мир пингует, небось тока с него (с FreeBSD)?
насчёт момеда... ну нету у меня модема

И не ковырялся... могу посоветовать нарисовать скрипт для перезапуска, хотя наверняка у ppp есть своя фича на эту тему...
Добавлено: 2006-04-06 14:02:01
almos
Я же писал, что натом занимается ppp (rc.conf: ppp_nat="YES"), divert так заворачивает, что мира не видно даже на серваке.
Добавлено: 2006-04-06 14:48:59
Alex Keda
блин... ну х.з... могу дать тока стандартный ответ - маны лопатить... я с модемами не общался..
Добавлено: 2006-04-06 15:13:34
almos
Меня больше интерисует как pppd поднять для модема на фряхе с возможностью перезагрузки драйвера в случае сбоя (есть ли аналог inittab во фре?)...
Добавлено: 2006-04-06 15:33:41
Alex Keda
неа.. вроде нету. Наверно даже не вроде - потому что не видел в отношении фри чего-то подобного.