Стоит задача создать на FreeBSD роутер.Всё настроено но одно не даёт покою...
Хочу чтобы натились только определённые адреса и только по определённым портам,
например пользователь 192.168.10.5 имел доступ только на асю, месенджер, http, pop и smtp.Сейчас работают следующие правила:
00049 fwd 127.0.0.1,3128 tcp from 192.168.10.0/24 to any dst-port 80 out via sis0
00050 divert 8668 ip from any to any via sis0
00097 allow ip from any to me dst-port 22
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00200 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17
00210 allow ip from 10.220.138.221 to me
00220 allow ip from me to 10.220.138.221
00230 deny ip from any to me dst-port 3128 via sis0
00300 deny ip from 127.0.0.0/8 to any
00300 allow ip from any to any via lo0
00310 allow tcp from me to any via sis0 keep-state
00320 allow icmp from any to any
00330 allow udp from me to any dst-port 53 keep-state
00340 allow udp from any to me dst-port 53
00350 allow ip from me to any
00400 allow ip from 192.168.10.0/24 to any dst-port 5222,5223,5269,10015,5262,7777 via sis0
10000 allow ip from 192.168.10.101 to me
10000 allow ip from me to 192.168.10.101
10100 allow ip from any to me dst-port 80,443,22,21,25,110,5222,5223,5269,10015,5262,7777
10200 deny ip from any to me via sis0
10300 reject tcp from any to any tcpflags syn,fin,ack,psh,rst,urg
10400 reject tcp from any to any tcpflags !syn,!fin,!ack,!psh,!rst,!urg
10500 reject log logamount 500 tcp from any to any not established tcpflags fin
10600 deny log logamount 500 ip from any to any not verrevpath in via sis0
10700 count ip from any to any
65535 allow ip from any to anyСтавил по умолчанию в ядре deny all from anu to any и включал нат, так у меня не грузились например ася и мессенджер.
Не хочется загонять в IPFW правила типа deny all from 192.XXXXXX а просто указать только те которы должны работать, а то тех кто не должен много, так же и порты, указать только те которые нужны, а то забивают канал всякой чушью....
Заранее благодарен за вашу очень полезную помошь!
Только не ругайте что в инете много доков, просто столько ищю а наглядно показать нигде не нахожу, то одно то другое, просто приведите пример как реализовать, дальше сам разберусь....>Стоит задача создать на FreeBSD роутер.
>
>Всё настроено но одно не даёт покою...
>Хочу чтобы натились только определённые адреса и только по определённым портам,
>например пользователь 192.168.10.5 имел доступ только на асю, месенджер, http, pop и
>smtp.
>
>Сейчас работают следующие правила:
>00049 fwd 127.0.0.1,3128 tcp from 192.168.10.0/24 to any dst-port 80 out via
>sis0
>00050 divert 8668 ip from any to any via sis0
>00097 allow ip from any to me dst-port 22
>00100 allow ip from any to any via lo0
>00200 deny ip from any to 127.0.0.0/8
>00200 deny icmp from any to any in icmptypes 5,9,13,14,15,16,17
>00210 allow ip from 10.220.138.221 to me
>00220 allow ip from me to 10.220.138.221
>00230 deny ip from any to me dst-port 3128 via sis0
>00300 deny ip from 127.0.0.0/8 to any
>00300 allow ip from any to any via lo0
>00310 allow tcp from me to any via sis0 keep-state
>00320 allow icmp from any to any
>00330 allow udp from me to any dst-port 53 keep-state
>00340 allow udp from any to me dst-port 53
>00350 allow ip from me to any
>00400 allow ip from 192.168.10.0/24 to any dst-port 5222,5223,5269,10015,5262,7777 via sis0
>10000 allow ip from 192.168.10.101 to me
>10000 allow ip from me to 192.168.10.101
>10100 allow ip from any to me dst-port 80,443,22,21,25,110,5222,5223,5269,10015,5262,7777
>10200 deny ip from any to me via sis0
>10300 reject tcp from any to any tcpflags syn,fin,ack,psh,rst,urg
>10400 reject tcp from any to any tcpflags !syn,!fin,!ack,!psh,!rst,!urg
>10500 reject log logamount 500 tcp from any to any not established
>tcpflags fin
>10600 deny log logamount 500 ip from any to any not verrevpath
>in via sis0
>10700 count ip from any to any
>65535 allow ip from any to any
>
>Ставил по умолчанию в ядре deny all from anu to any и
>включал нат, так у меня не грузились например ася и мессенджер.
>
>
>Не хочется загонять в IPFW правила типа deny all from 192.XXXXXX а
>просто указать только те которы должны работать, а то тех кто
>не должен много, так же и порты, указать только те которые
>нужны, а то забивают канал всякой чушью....
>
>Заранее благодарен за вашу очень полезную помошь!
>>Ставил по умолчанию в ядре deny all from anu to any и
>>включал нат, так у меня не грузились например ася и мессенджер.
Вот это мысль правильная, т.е. всем запретить а потом разрешать кому что надо
Для твоего примера последнее правило будет
65535 deny ip from any to any
А разрешение по тем протоколам что ты написал для 192.168.10.5 будет выглядеть так:
ipfw add 20000 allow tcp from 192.168.10.5 to any dst-port 5190,80,110,25 via sis0 keep-stateМожно конечно сделать и так как ты хочешь, чтобы нат действовал только на определенные адреса и протоколы.
В этом случае правила нат будут:
ipfw add 50 divert natd tcp from 192.168.10.5 to any dst-port 5190,80,110,25 out via sis0
ipfw add 60 divert natd all from any to ${ipout} in via sis0
Где ${ipout} - твой внешний IP
тут советуют мне пере
>>>Ставил по умолчанию в ядре deny all from anu to any и
>>>включал нат, так у меня не грузились например ася и мессенджер.
>Вот это мысль правильная, т.е. всем запретить а потом разрешать кому что
>надо
>Для твоего примера последнее правило будет
>65535 deny ip from any to any
>А разрешение по тем протоколам что ты написал для 192.168.10.5 будет выглядеть
>так:
>ipfw add 20000 allow tcp from 192.168.10.5 to any dst-port 5190,80,110,25 via
>sis0 keep-state
>
>Можно конечно сделать и так как ты хочешь, чтобы нат действовал только
>на определенные адреса и протоколы.
>В этом случае правила нат будут:
>ipfw add 50 divert natd tcp from 192.168.10.5 to any dst-port 5190,80,110,25
>out via sis0
>ipfw add 60 divert natd all from any to ${ipout} in via
>sis0
>Где ${ipout} - твой внешний IP
тут советуют мне перейти на PF, посикал по инету нашёл доку, составил правила, поглядите кто знает, скажите что да как, правильно неправильно...
Спасибо за IPFW, ша буду пробовать, есль не получиться в конце концов переду на PF:ext_if = "sis0"
int_if = "xl0"
lan_net = "192.168.10.0/24"
nat_users = "192.168.10.101, 192.168.10.7, 192.168.10.28"
NoRouteIPs = "{ 127.0.0.0/8, 172.16.0.0/12 }"
tcp_services = "{ 22, 80, 9090, 21, 5222, 5223 }"
icmp_types = "echoreq"
nat_services="icmp, 21, 22, 25, 110, 143, 5222, 5223, 7777"
icq_users="192.168.10.66, 192.168.10.53"
msn_users="192.168.10.66, 192.168.10.53"
icq_port="5190, 5180, 5181"
msn_port="1863, 443"
jabber="5222, 5223, 7777"# table containing all IP addresses assigned to the firewall
table <firewall> const { self }# don't filter on the loopback interface
set skip on lo0# scrub incoming packets
scrub in all#nat
nat on $ext_if from $nat_users to any port $nat_services -> ($ext_if)
nat on $ext_if from $icq_users to any port $icq_port -> ($ext_if)
nat on $ext_if from $msn_users to any port $msn_port -> ($ext_if)
nat on $ext_if from $int_if to any port $jabber -> ($ext_if)
no nat on $int_if proto tcp from $int_if to $int_net#redirect to proxy server
rdr on $int_if inet proto tcp from any to any port www -> 127.0.0.1 port 3128#default deny policy
block in log all
block out log allblock in quick on $ext_if from $NoRouteIPs to any
block out quick on $ext_if from any to $NoRouteIPs# activate spoofing protection for the internal interface.
antispoof quick for $int_if inet#allow ssh connections
block return in quick on $int_if proto tcp from ! 192.168.10.101, 193.111.76.230 \
to $int_if, $ext_if port ssh flags S/SApass in log on $ext_if proto tcp from any to ! <firewall> \
port ssh flags S/SA synproxy state
# pass all traffic to and from the local network
pass in on $int_if from $lan_net to any
pass out on $int_if from any to $lan_netpass in on $ext_if inet proto tcp from any to ($ext_if) \
port $tcp_services flags S/SA keep state
pass in on $ext_if proto tcp from any to ! <firewall> port 80 \
flags S/SA synproxy statepass in on $ext_if inet proto tcp from port 20 to ($ext_if) \
user proxy flags S/SA keep state# pass tcp, udp, and icmp out on the external (Internet) interface.
# keep state on udp and icmp and modulate state on tcp.
pass out on $ext_if proto tcp all modulate state flags S/SA
pass out on $ext_if proto { udp, icmp } all keep statepass in inet proto icmp all icmp-type $icmp_types keep state
block return>>>Ставил по умолчанию в ядре deny all from anu to any и
>>>включал нат, так у меня не грузились например ася и мессенджер.
>Вот это мысль правильная, т.е. всем запретить а потом разрешать кому что
>надо
>Для твоего примера последнее правило будет
>65535 deny ip from any to any
>А разрешение по тем протоколам что ты написал для 192.168.10.5 будет выглядеть
>так:
>ipfw add 20000 allow tcp from 192.168.10.5 to any dst-port 5190,80,110,25 via
>sis0 keep-state
>
>Можно конечно сделать и так как ты хочешь, чтобы нат действовал только
>на определенные адреса и протоколы.
>В этом случае правила нат будут:
>ipfw add 50 divert natd tcp from 192.168.10.5 to any dst-port 5190,80,110,25
>out via sis0
>ipfw add 60 divert natd all from any to ${ipout} in via
>sis0
>Где ${ipout} - твой внешний IP
Вот решил таким образом...
Кому интересно могу объяснить что да как...
Надо конечно отсортировать правила но пока времени нет.
Немогу ничего сказать насчёт правильности правил, но конфа работает и это главное... рассудите....
---------------------/etc/rc.conf
firewall_enable="YES"
firewall_type="CLOSED"
firewall_logging="YES"
natd_enable="YES"
natd_interface="sis0"
natd_flags=" -m -s -u -punch_fw 5000:5200"
--------------------------------ournet='192.168.10.0/24'
uprefix='192.168.10'
ifout='sis0'
ifuser='xl0'
ports=pop3,ftp
vse=192.168.10.11
vip2=192.168.10.10
vip=192.168.10.100,192.168.10.101
allowedports="22,25,53,110,143"
natusers="192.168.10.7,192.168.10.28,192.168.10.101"icq_users="192.168.10.66,192.168.10.53"
msn_users="192.168.10.66,192.168.10.53"
icq_port="5190,5180,5181"
msn_port="1863,443"
jabber="5222,5223,7777"allowed_nets="10.220.134.0/24,10.220.138.0/24"
ipfw add 50 divert natd all from ${natusers} to any ${allowedports},${jabber},${icq_port},${msn_port} out via sis0
ipfw add 51 divert natd all from ${icq_users} to any ${icq_port} out via sis0
ipfw add 52 divert natd all from ${msn_users} to any ${msn_port} out via sis0
ipfw add 53 divert natd icmp from ${natusers} to any out via sis0
ipfw add 54 divert natd all from ${natusers} to any ftp,1024-65535 out via sis0
ipfw add 60 divert natd all from any to 10.220.138.220 in via sis0${fwcmd} add 97 allow all from any to me ssh
#${fwcmd} add 200 deny icmp from any to any in icmptype 5,9,13,14,15,16,17
${fwcmd} add 210 allow all from 10.220.138.221 to me
${fwcmd} add 220 allow all from me to 10.220.138.221
${fwcmd} add 230 drop all from any to me 3128 via ${ifout}
${fwcmd} add 300 allow ip from any to any via lo0
${fwcmd} add 310 allow tcp from me to any keep-state via ${ifout}
${fwcmd} add 320 allow icmp from any to any
${fwcmd} add 330 allow udp from me to any domain keep-state
${fwcmd} add 340 allow udp from any to me domain
${fwcmd} add 350 allow ip from me to any
${fwcmd} add 49 fwd 127.0.0.1,3128 tcp from ${ournet} to any http out via ${ifout}
${fwcmd} add 400 allow all from 192.168.10.0/24 to any 5222,5223,5269,10015,5262,7777 via sis0
${fwcmd} add allow all from any to me http,https,ssh,ftp,smtp,pop3,5222,5223,5269,10015,5262,7777
#${fwcmd} add deny all from any to me via sis0
#${fwcmd} add 1000 allow all from ${ournet} to me
ipfw pipe 1 config mask dst-ip 0xffffffff bw 19Kbit/s
ipfw pipe 11 config mask src-ip 0xffffffff bw 19Kbit/s
ipfw queue 1 config pipe 1 weight 50 queue 20 mask dst-ip 0xffffffff
ipfw queue 11 config pipe 11 weight 50 queue 20 mask src-ip 0xffffffffipfw pipe 2 config mask dst-ip 0xffffffff bw 33Kbit/s
ipfw pipe 22 config mask src-ip 0xffffffff bw 33Kbit/s
ipfw queue 2 config pipe 2 weight 50 queue 20 mask dst-ip 0xffffffff
ipfw queue 22 config pipe 22 weight 50 queue 20 mask src-ip 0xffffffffipfw pipe 3 config mask dst-ip 0xffffffff bw 256Kbit/s
ipfw pipe 33 config mask src-ip 0xffffffff bw 256Kbit/s
ipfw queue 3 config pipe 3 weight 100 queue 40 mask dst-ip 0xffffffff
ipfw queue 33 config pipe 33 weight 100 queue 40 mask src-ip 0xffffffffipfw add reject tcp from any to any tcpflags fin, syn, rst, psh, ack, urg
ipfw add reject tcp from any to any tcpflags !fin, !syn, !rst, !psh, !ack, !urg
ipfw add reject log tcp from any to any not established tcpflags fin
ipfw add deny log ip from any to any not verrevpath in via sis0
ipfw add count all from any to any${fwcmd} add 1001 queue 3 all from ${allowed_nets} to ${natusers} via sis0
${fwcmd} add 1002 queue 33 all from ${natusers} to ${allowed_nets} via sis0${fwcmd} add 1003 queue 2 all from any to ${natusers} via sis0
${fwcmd} add 1004 queue 22 all from ${natusers} to any via sis0${fwcmd} add 1005 pass all from ${natusers} to any
${fwcmd} add 1006 pass all from any to ${natusers}
>>
>>Можно конечно сделать и так как ты хочешь, чтобы нат действовал только
>>на определенные адреса и протоколы.
>>В этом случае правила нат будут:
>>ipfw add 50 divert natd tcp from 192.168.10.5 to any dst-port 5190,80,110,25
>>out via sis0
>>ipfw add 60 divert natd all from any to ${ipout} in via
>>sis0
>>Где ${ipout} - твой внешний IP