Уважаемые люди! Это настолько распространенный и тольком не понятный вопрос, что мне стыдно, НО! подскажите:
Работает nat, ipfw
При минимальном конфигеadd divert natd all from any to any via xl1
add allow all from any to anyвсе (инет, почта) работает. По умолчанию, все запрещено (65535)
Если в ето правило добавить например запрет для определенного хоста
add divert natd all from any to any via xl1
add deny ip from 192.168.2.17 to any
add allow all from any to anyто соотв. комп в инет не ходит (ура, победа!)
но если я делаю такой-же конфиг, но пытаюсь сначала что-то разрешить, а остальное - запретить, то ничего не работает. Вот скрипт:
#!/bin/sh
ipfw='/sbin/ipfw -q'
lilia='192.168.2.17'
billy='192.168.2.16'
ifout='xl1'
iflocal='xl0'${ipfw} flush
${ipfw} add 100 check-state${ipfw} add 200 allow ip from any to any via lo0
${ipfw} add 300 deny ip from any to 127.0.0.0/8
${ipfw} add 400 deny ip from 127.0.0.0/8 to any${ipfw} add 500 divert natd all from any to any via ${ifout}
${ipfw} add 600 deny ip from ${lilia} to any
${ipfw} add 700 deny ip from any to ${lilia}${ipfw} add 800 allow all from ${billy} to any
${ipfw} add 900 allow all from any to ${billy}${ipfw} add 10000 deny all from any to any
billy - это моя машина. в инет я с нее ходить не могу, но, например, по ssh к нашему серваку с ipfw могу подключиться.
что мне надо изменить? Ведь для компа billy я разрешаю все.
check-state мешает. Делайте илиправила с check-state
divert natd
правила с setup/establishedили divert natd в самый верх...
>check-state мешает. Делайте или
>
>правила с check-state
>divert natd
>правила с setup/established
>
>или divert natd в самый верх...Вот мой работающий конфиг.
ipfw -q -f flush
cmd="ipfw -q add"
skip="skipto 800"
pif="xl1" # public interface name of NIC$cmd 005 allow all from any to any via xl0
$cmd 010 allow all from any to any via lo0
$cmd 014 divert natd ip from any to any in via $pif
$cmd 015 check-state
$cmd 020 $skip tcp from any to 195.5.128.130 53 out via $pif setup keep-state
$cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state
$cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state
$cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state
$cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state
$cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root
$cmd 080 $skip icmp from any to any out via $pif keep-state
$cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state
$cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state
$cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state
$cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state
$cmd 130 $skip udp from any to any 123 out via $pif keep-state$cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP
$cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP
$cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP
$cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs
$cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster
$cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast# Deny ident
$cmd 315 deny tcp from any to any 113 in via $pif# Deny all Netbios service. 137=name, 138=datagram, 139=session
# Netbios is MS/Windows sharing services.
# Block MS/Windows hosts2 name server requests 81
$cmd 320 deny tcp from any to any 137 in via $pif
$cmd 321 deny tcp from any to any 138 in via $pif
$cmd 322 deny tcp from any to any 139 in via $pif
$cmd 323 deny tcp from any to any 81 in via $pif# Deny any late arriving packets
$cmd 330 deny all from any to any frag in via $pif# Deny ACK packets that did not match the dynamic rule table
$cmd 332 deny tcp from any to any established in via $pif# Allow in standard www function because I have Apache server
$cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2# Allow in secure FTP, Telnet, and SCP from public Internet
$cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2# Reject & Log all unauthorized incoming connections from the public Internet
$cmd 400 deny log all from any to any in via $pif# Reject & Log all unauthorized out going connections to the public Internet
$cmd 450 deny log all from any to any out via $pif# This is skipto location for outbound stateful rules
$cmd 800 divert natd ip from any to any out via $pif
$cmd 801 allow ip from any to any# Everything else is denied by default
# deny and log all packets that fell through to see what they are
$cmd 999 deny log all from any to anyВзял отсюда:
http://freebsd.vinf.ru/doc/en/books/handbook/firewalls-ipfw....Действительно, divert стоит выше check-state'a.
Не подскажите инфу поприличнее про этот check-state?
Очень много "воды", и кроме этого, не работающей "воды".
Ввиду большого кол-ва вопросов по данной теме (как правило, со стороны людей вроде меня :) ) привожу мои работающие конфиги:
/etc/rc.confgateway_enable="YES"
#x.x.x.x - ip шлюза, предоставленного провом
defaultrouter="x.x.x.x"
hostname="my_hostname"ifconfig_xl0="inet 192.168.2.251 netmask 255.255.255.0"
ifconfig_xl1="inet x.x.x.y netmask 255.255.255.248"inetd_enable="YES"
kern_securelevel_enable="NO"
linux_enable="YES"
nfs_reserved_port_only="YES"
sendmail_enable="YES"
sshd_enable="YES"
usbd_enable="YES"#natd
natd_enable="YES"
natd_interface="xl1"#firewall
firewall_enable="YES"
firewall_type="/usr/local/etc/firewall.conf"
#firewall_type="OPEN"#named
named_enable="YES"Теперь ipfw-скрипт (/usr/local/etc/rc.d/firewall.sh):
Повторяю: взял отсюда http://freebsd.vinf.ru/doc/en/books/handbook/firewalls-ipfw....ipfw -q -f flush
cmd="ipfw -q add"
skip="skipto 800"
pif="xl1" # public interface name of NIC$cmd 005 allow all from any to any via xl0
$cmd 010 allow all from any to any via lo0
$cmd 014 divert natd ip from any to any in via $pif
$cmd 015 check-state
$cmd 020 $skip tcp from any to 195.5.128.130 53 out via $pif setup keep-state
$cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state
$cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state
$cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state
$cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state
$cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root
$cmd 080 $skip icmp from any to any out via $pif keep-state
$cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state
$cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state
$cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state
$cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state
$cmd 130 $skip udp from any to any 123 out via $pif keep-state$cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP
$cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP
$cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP
$cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs
$cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster
$cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast# Deny ident
$cmd 315 deny tcp from any to any 113 in via $pif# Deny all Netbios service. 137=name, 138=datagram, 139=session
# Netbios is MS/Windows sharing services.
# Block MS/Windows hosts2 name server requests 81
$cmd 320 deny tcp from any to any 137 in via $pif
$cmd 321 deny tcp from any to any 138 in via $pif
$cmd 322 deny tcp from any to any 139 in via $pif
$cmd 323 deny tcp from any to any 81 in via $pif# Deny any late arriving packets
$cmd 330 deny all from any to any frag in via $pif# Deny ACK packets that did not match the dynamic rule table
$cmd 332 deny tcp from any to any established in via $pif# Allow in standard www function because I have Apache server
$cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2# Allow in secure FTP, Telnet, and SCP from public Internet
$cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2# Reject & Log all unauthorized incoming connections from the public Internet
$cmd 400 deny log all from any to any in via $pif# Reject & Log all unauthorized out going connections to the public Internet
$cmd 450 deny log all from any to any out via $pif# This is skipto location for outbound stateful rules
$cmd 800 divert natd ip from any to any out via $pif
$cmd 801 allow ip from any to any# Everything else is denied by default
# deny and log all packets that fell through to see what they are
$cmd 999 deny log all from any to any
Ужасы какие-то вы нам показываете... Столько однотипных строчек... Надо нормальные правила писать :)
>Ужасы какие-то вы нам показываете... Столько однотипных строчек... Надо нормальные правила писать
>:)так подскажите где посмотреть действующий нормальный конфиг для ipfw, чтоб учиться мона было.
вот сейчас бьюсь с проблемой: не пускает по ssh на сервер.
не могу понять. ведь стоит в самом начале правило
005 allow all from any to any via xl0
почему не пукает тогда?
я даже проверил по ssh на другой сервак зашел, который стоит за нашим.
ЧЕРЕЗ ipfw пропускает (правило 110 $skip tcp from any to any 22 out via $pif setup keep-state), а на мой не пускает!
почта работает, итнернет через nat - тож. А вот с ссаш - фигня.
Подскажите, плз.
Я не гордый, могу правил и поубавить :)
При попытке подключиться по ssh к моему серверу появляется приглашение для ввода логина. После его ввода очень долго думает (если чуть дольше, то происходит дисконнект). Не могу понять, с чем связано.
Может, правило $cmd 005 allow all from any to any via xl0
в другое место поставить?
Или что?
>При попытке подключиться по ssh к моему серверу появляется приглашение для ввода
>логина. После его ввода очень долго думает (если чуть дольше, то
>происходит дисконнект). Не могу понять, с чем связано.
>Может, правило $cmd 005 allow all from any to any via xl0
>
>в другое место поставить?
>Или что?Нашел. Мешает правило 400 и 450.
$cmd 400 deny log all from any to any in via $pif
$cmd 450 deny log all from any to any out via $pifВопрос: если их (эти правила) убрать, то не бует ли дыры в защите?
если правила 400 и 450 активны, то не работает инет через squid
(пишет (60) Operation timed out)natd работает (и, соотв., инет через нат тоже).
как определить, что мешает работе squid?
Проблему решил :)
Дело было в правиле номер 20.
$cmd 020 $skip tcp from any to any 53 out via $pif setup keep-stateЯ его заменил на два правила:
$cmd 020 $skip udp from any to any 53 out via $pif
$cmd 021 $skip udp from any 53 to any in via $pifЗЫ Странно, что никто так и не попытался помочь. Кроме замечания Моралеза.