Страница 1 из 1

Проблемы с ipfw...

Добавлено: 2012-05-20 20:13:12
PunKHS
Доброго времени суток!
Настроил ipfw согластно инструкции от lissyara. Спасибо ему ОГРОМНОЕ за проделанную работу!
Теперь по делу... Перешел с natd на kernel nat. Раньше файрвол работал отлично, а сейчас все порты открыты... Не могу ничего закрыть. Фряха пингует внешку и локалку. У юзеров за прокси инет есть. Проброс портов работает. Не работает только закрытие портов.
Вот мои параметры:

rc.conf

Код: Выделить всё

 # -- sysinstall generated deltas -- # Sat Apr 28 16:44:13 2012 
# Created: Sat Apr 28 16:44:13 2012 
# 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. 

# -- sysinstall generated deltas -- # Sat Apr 28 12:51:30 2012 
ifconfig_alc0="inet 192.168.1.34  netmask 255.255.255.0" 
hostname="xxx.ru" 
sshd_enable="YES" 
gateway_enable="YES"  # закоментил для прозрачного режима 

#Внешка 
ppp_enable="YES" 
ppp_mode="ddial" 
ppp_nat="NO"   # if you want to enable nat for your local network, otherwise NO 
ppp_profile="name_of_service_provider" 

#MySQL 
mysql_enable="YES" 

#Apache 
apache22_enable="YES" 

#DNS 
named_enable="YES" 
named_program="/usr/sbin/named" 
named_flags="-u bind -c /etc/namedb/named.conf" 

#Файрвол 
firewall_enable="YES" 
firewall_script="/etc/rc.firewall" 
firewall_nat_enable="YES" 
firewall_nat_interface="tun0" 
#firewall_type="OPEN" 

#ProFTPD 
proftpd_enable="YES" 
proftpd_flags="" 

#Webmin 
webmin_enable="YES" 

#SQUID 
squid_enable="YES" 

#SAMS 
sams_enable="YES" 

#Отключаем проверку диска(ов) в фоне 
fsck_y_enable="YES" 
background_fsck="NO" 

#Настраиваем синхронизацию времени 
ntpdate_enable="YES" 
ntpd_enable="YES" 

#Русская консоль 
font8x14="cp866-8x14" 
font8x16="cp866b-8x16" 
font8x8="cp866-8x8" 
scrnmap="koi8-r2cp866" 
keymap="ru.koi8-r"
Ядро собирал с параметрами:

Код: Выделить всё

# Proxy personal options 
options IPFIREWALL                      # Включаем фаерволл 
options IPFIREWALL_VERBOSE              # Включаем логирование для фаерволла 
options IPFIREWALL_VERBOSE_LIMIT=1000   # Ограничиваем логи кол-вом строк (1000) 
options IPFIREWALL_NAT                  # Включаем поддержку kernel NAT 
options IPFIREWALL_FORWARD              # Изменение назнчения пакетов 
options LIBALIAS                        # Необходимо для kernel NAT 
options ROUTETABLES=2                   # Поддержка двух таблиц маршрутизации 
options DUMMYNET                        # Для Kernel NAT + Ограничение пропускной способности 
options IPDIVERT 
options HZ="1000"                       # Для DUMMYNET
rc.firewall

Код: Выделить всё

FwCMD="/sbin/ipfw"      # собственно где лежит бинарник ipfw 
LanOut="tun0"           # внешний интерфейс 
LanIn="alc0"            # внутренний интерфейс 
IpOut="внешняяIP"   # внешний IP адрес машины 
IpIn="192.168.1.34"     # внутренний IP машины 
#IpIn="192.168.1.100"   # внутренний IP машины 
NetMask="24"            # маска сети (если она разная для внешней 
                        # и внутренней сети - придётся вводить ещё 
                        # одну переменную, но самое забавное, что 
                        # можно и забить - оставить 24 - всё будет 
                        # работать, по крайней мере я пробовал - 
                        # работаало на 4-х машинах, в разных сетях, 
                        # с разными масками - настоящими разными! но - 
                        # это неправильно.) 
NetIn="192.168.1.0"     # Внутренняя сеть 
NetOut="83.221.217.0"   # Внешняя сеть 

# Сбрасываем все правила: 
${FwCMD} -f flush 

# Проверяем - соответствует ли пакет динамическим правилам: 
${FwCMD} add check-state 

# Разрешаем весь траффик по внутреннему интерфейсу (петле) 
# Вообще я во многих местах читал что без него может ничё не заработать вообще 
# и прочие страшилки. Работает - почта, апач, .... А вот squid - не работает :) 
# так что без него и правда - никуда. 
${FwCMD} add allow ip from any to any via lo0 

# рубим попытки lo0 куда-то лезть и откуда-то лезть на lo0 (вот честно - ни 
# одного пакета по этим правилам не зарубилось за всё время... Может в этом 
# моё счастье? :)) 
${FwCMD} add deny ip from any to 127.0.0.0/8 
${FwCMD} add deny ip from 127.0.0.0/8 to any 

# Вводим запреты: 
# режем частные сети на внешнем интерфейсе - по легенде он у нас 
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём. 
# рубим частные сeти 
${FwCMD} add deny ip from any to 10.0.0.0/8 in via ${LanOut} 
${FwCMD} add deny ip from any to 172.16.0.0/12 in via ${LanOut} 
${FwCMD} add deny ip from any to 192.168.0.0/16 in via ${LanOut} 
${FwCMD} add deny ip from any to 0.0.0.0/8 in via ${LanOut} 

# рубим автоконфигуреную частную сеть 
${FwCMD} add deny ip from any to 169.254.0.0/16 in via ${LanOut} 

# рубаем мультикастовые рассылки 
${FwCMD} add deny ip from any to 240.0.0.0/4 in via ${LanOut} 

# рубим фрагментированные icmp 
${FwCMD} add deny icmp from any to any frag 

# рубим широковещательные icmp на внешнем интерфейсе 
${FwCMD} add deny log icmp from any to 255.255.255.255 in via ${LanOut} 
${FwCMD} add deny log icmp from any to 255.255.255.255 out via ${LanOut} 

# отправляем всех на squid (в данном случае - прокси прозрачный) 
#${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut} 

# ядерный NAT 
#${FwCMD} nat 1 config ip ${IpOut} unreg_only same_ports log \ 
#redirect_port tcp 192.168.1.49:25 25 \ 
#redirect_port tcp 192.168.1.49:143 143 \ 
#redirect_port tcp 192.168.1.49:110 110 \ 
#redirect_port tcp 192.168.1.49:3000 3000 \ 
#redirect_port tcp 192.168.1.198:443 443 \ 
#redirect_port tcp 192.168.1.201:3389 3389 

#25,143,110,3000 - mail 
#443 - Bank 
#3389 - RDP 

#${FwCMD} add nat 1 all from ${NetIn}/${NetMask} to any 
#${FwCMD} add nat 1 all from any to ${IpOut} 

# рубим траффик к частным сетям через внешний интерфейс 
# заметтьте - эти правила отличаются от тех что были выше! 
${FwCMD} add deny ip from 10.0.0.0/8 to any out via ${LanOut} 
${FwCMD} add deny ip from 172.16.0.0/12 to any out via ${LanOut} 
${FwCMD} add deny ip from 192.168.0.0/16 to any out via ${LanOut} 
${FwCMD} add deny ip from 0.0.0.0/8 to any out via ${LanOut} 

# рубим автоконфигуреную частную сеть 
${FwCMD} add deny ip from 169.254.0.0/16 to any out via ${LanOut} 

# рубаем мультикастовые рассылки 
${FwCMD} add deny ip from 224.0.0.0/4 to any out via ${LanOut} 

# рубаем мультикастовые рассылки 
${FwCMD} add deny ip from 240.0.0.0/4 to any out via ${LanOut} 

# разрешаем все установленные соединения (если они установились - 
# значит по каким-то правилам они проходили.) 
${FwCMD} add allow tcp from any to any established 

# разрешаем весь исходящий траффик (серверу-то в инет можно? :)) 
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut} 

# разрешаем DNS снаружи (нам же надо узнавать IP по именам машин?) 
${FwCMD} add allow udp from any 53 to any via ${LanOut} 

# разрешаем DNS входящий снаружи - если на этой машине работает named 
# и держит какую-то зону. В остальных случаях - не нужно 
${FwCMD} add allow udp from any to any 53 via ${LanOut} 

# разрешаем UDP (для синхронизации времени - 123 порт) 
${FwCMD} add allow udp from any to any 123 via ${LanOut} 

# разрешаем ftp снаружи (оба правила - для пасивного режима) 
# для узнавания портранджа по которому будет работать, лезем в 
#/usr/home/lissyara/>sysctl net.inet.ip.portrange.first 
# net.inet.ip.portrange.first: 49152 
# /usr/home/lissyara/>sysctl net.inet.ip.portrange.last 
# net.inet.ip.portrange.last: 65535 
${FwCMD} add allow tcp from any to ${IpOut} 21 via ${LanOut} 

#Можно изгалиться примерно так, если есть желание, но я предпочитаю руками 
#${FwCMD} add allow tcp from any to ${IpOut} \ 
#`sysctl net.inet.ip.portrange.first | awk '{print $2}'`-\ 
#`sysctl net.inet.ip.portrange.last | awk '{print $2}'` via ${LanOut} 
${FwCMD} add allow tcp from any to ${IpOut} 50000-50100 via ${LanOut} 

# разрешаем некоторые типы ICMP траффика - эхо-запрос, 
# эхо-ответ и время жизни пакета истекло 
${FwCMD} add allow icmp from any to any icmptypes 0,8,11 

# разрешаем внутренние адреса на внешнем интерфейсе 
#${FwCMD} add allow tcp from any to 192.168.1.49 25 via ${LanOut} 
#${FwCMD} add allow tcp from any to 192.168.1.49 143 via ${LanOut} 

# открываем снаружи 80 порт - если у нас есть WWW сервер на машине 
#${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut} 

# открываем снаружи 25 порт (SMTP) если на машине крутится почта 
${FwCMD} add allow tcp from any to ${IpOut} 25 via ${LanOut} 

# открываем снаружи 22 порт - если надо будет ходить на машину по ssh 
${FwCMD} add allow tcp from any to ${IpOut} 22 via ${LanOut} 

# открываем снаружи 143 порт(если надо смотреть почту снаружи по IMAP) 
${FwCMD} add allow tcp from any to ${IpOut} 143 via ${LanOut} 

# открываем снаружи 110 порт(если надо смотреть почту снаружи по POP) 
${FwCMD} add allow tcp from any to ${IpOut} 110 via ${LanOut} 

# открываем снаружи 443 порт(для Банк-клиента) 
${FwCMD} add allow tcp from any to ${IpOut} 443 via ${LanOut} 

# открываем снаружи 10000 порт(для Webmin) 
#${FwCMD} add allow tcp from any to ${IpOut} 10000 via ${LanOut} 

# по поводу следующих трёх правил, для tcp, udp и icmp - их можно 
# заменить одним правилом: 
#${FwCMD} add allow ip from any to any via ${LanIn} 
# но для удобства наладки и контроля происходящего я предпочитаю три отдельных 
# правила, хотя могут быть грабли - например протокол gre не пройдёт - 
# придётся стругать отдельное правило для него, типа 
#${FwCMD} add allow gre from any to any via ${LanIn} 
# итак: 

# разрешаем весь tcp траффик внутри локалки (на внутреннем интерфейсе) 
${FwCMD} add allow tcp from any to any via ${LanIn} 

# разрешаем весь udp траффик внутри локалки (на внутреннем интерфейсе) 
${FwCMD} add allow udp from any to any via ${LanIn} 

# разрешаем весь icmp траффик внутри локалки (на внутреннем интерфейсе) 
${FwCMD} add allow icmp from any to any via ${LanIn} 

# запрещаем всё и всем. Если тип файрволла не open то это правило добавится 
# автоматически, но всё-же ну его. Лучше сам. Надёжней. 
${FwCMD} add deny ip from any to any
ipfe show:

Код: Выделить всё

press# ipfw show 
00100     0        0 check-state 
00200   110     3640 allow ip from any to any via lo0 
00300     0        0 deny ip from any to 127.0.0.0/8 
00400     0        0 deny ip from 127.0.0.0/8 to any 
00500     0        0 deny ip from any to 10.0.0.0/8 in via tun0 
00600     0        0 deny ip from any to 172.16.0.0/12 in via tun0 
00700     0        0 deny ip from any to 192.168.0.0/16 in via tun0 
00800     0        0 deny ip from any to 0.0.0.0/8 in via tun0 
00900     0        0 deny ip from any to 169.254.0.0/16 in via tun0 
01000     0        0 deny ip from any to 240.0.0.0/4 in via tun0 
01100     0        0 deny icmp from any to any frag 
01200     0        0 deny log logamount 1000 icmp from any to 255.255.255.255 in                                                                                                                                via tun0 
01300     0        0 deny log logamount 1000 icmp from any to 255.255.255.255 ou                                                                                                                               t via tun0 
01400 47228 14895776 nat 1 ip from 192.168.1.0/24 to any 
01500 28434 28637920 nat 1 ip from any to внешняяIP 
01600     0        0 deny ip from 10.0.0.0/8 to any out via tun0 
01700     0        0 deny ip from 172.16.0.0/12 to any out via tun0 
01800     0        0 deny ip from 192.168.0.0/16 to any out via tun0 
01900     0        0 deny ip from 0.0.0.0/8 to any out via tun0 
02000     0        0 deny ip from 169.254.0.0/16 to any out via tun0 
02100     0        0 deny ip from 224.0.0.0/4 to any out via tun0 
02200     0        0 deny ip from 240.0.0.0/4 to any out via tun0 
02300     0        0 allow tcp from any to внешняяIP established 
02400   789    56287 allow ip from внешняяIP to any out xmit tun0 
02500     0        0 allow udp from any 53 to any via tun0 
02600     0        0 allow udp from any to any dst-port 53 via tun0 
02700     0        0 allow udp from any to any dst-port 123 via tun0 
02800     0        0 allow tcp from any to внешняяIP dst-port 21 via tun0 
02900     0        0 allow tcp from any to внешняяIP dst-port 50000-50100 vi                                                                                                                               a tun0 
03000  1009    56504 allow icmp from any to any icmptypes 0,8,11 
03100     0        0 allow tcp from any to внешняяIP dst-port 25 via tun0 
03200     0        0 allow tcp from any to внешняяIP dst-port 22 via tun0 
03300     0        0 allow tcp from any to внешняяIP dst-port 143 via tun0 
03400     0        0 allow tcp from any to внешняяIP dst-port 110 via tun0 
03500     0        0 allow tcp from any to внешняяIP dst-port 443 via tun0 
03600 26583 28333160 allow tcp from any to any via alc0 
03700   222    25477 allow udp from any to any via alc0 
03800     6      630 allow icmp from any to any via alc0 
65535    47    61001 deny ip from any to any 
Где грабли? Как Закрыть порты? HELP!!!

Re: Проблемы с ipfw...

Добавлено: 2012-05-20 20:28:21
ChihPih
Какие порты закрыть то надо? Как вы определили что они открыты?

Re: Проблемы с ipfw...

Добавлено: 2012-05-20 20:30:22
ChihPih
В настройках НАТ,а надо указывать интерфейс, для которого применяется это правило (на заметку: вообще во всех правилах так надо делать).

Re: Проблемы с ipfw...

Добавлено: 2012-05-20 20:44:17
PunKHS
ChihPih писал(а):В настройках НАТ,а надо указывать интерфейс, для которого применяется это правило (на заметку: вообще во всех правилах так надо делать).
В настройке ipfw 80 порт закрыт, а я из дома на него легко выхожу...
Пожалуйста, приведите в пример пару строк. Я новичок в ipfw. Не до конца все понимаю.

Re: Проблемы с ipfw...

Добавлено: 2012-05-20 21:07:55
ChihPih
Вы начните по минимуму правила составлять. Разрешите один порт, запретите что-то другое (другими словами: с минимального кол-ва правил начните, которые вы хорошо понимаете что и как работет). Так быстрее понимание происходящего придет (от простого к сложному). Еще на заметку - нет смысла указывать внешний IP адрес в правилах, так как есть параметр me, ядро автоматом будет использовать IP адрес интерфейса, на котором работает правило.

Re: Проблемы с ipfw...

Добавлено: 2012-05-20 22:55:35
snorlov
PunKHS писал(а):
ChihPih писал(а):В настройках НАТ,а надо указывать интерфейс, для которого применяется это правило (на заметку: вообще во всех правилах так надо делать).
В настройке ipfw 80 порт закрыт, а я из дома на него легко выхожу...
Пожалуйста, приведите в пример пару строк. Я новичок в ipfw. Не до конца все понимаю.
попробуйте убрать форвард, а пользователям, для хождения в инет, прописать squid в настройках браузеров...

Re: Проблемы с ipfw...

Добавлено: 2012-05-21 7:16:17
PunKHS
snorlov писал(а): попробуйте убрать форвард, а пользователям, для хождения в инет, прописать squid в настройках браузеров...
Сейчас строка отвечающая за перенаправление пользователей на squid закоменчена.

Код: Выделить всё

#отправляем всех на squid (в данном случае - прокси прозрачный) 
#${FwCMD} add fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut} 
Файрвол не OPEN:

Код: Выделить всё

#Файрвол 
firewall_enable="YES" 
firewall_script="/etc/rc.firewall" 
firewall_nat_enable="YES" 
firewall_nat_interface="tun0" 
#firewall_type="OPEN"
В rc.firewall:

Код: Выделить всё

# открываем снаружи 80 порт - если у нас есть WWW сервер на машине 
#${FwCMD} add allow tcp from any to ${IpOut} 80 via ${LanOut}
при ipfw show:

Код: Выделить всё

65535    47    61001 deny ip from any to any 
Т.е., как я понимаю, при таких настройках файрвол должен запрещать все то, что не разрешено. 80 порт в мир запрещен в rc.firewall. Но из дома я легко подключаюсь к рабочему шлюзу. Где косяк? Может быть я чего то не понял?

Re: Проблемы с ipfw...

Добавлено: 2012-05-21 8:34:23
snorlov
У вас подключение через ppp, а сам файер после инициализации tun0 передернут?

Re: Проблемы с ipfw...

Добавлено: 2012-05-21 11:13:10
ivan_k
а так если
${FwCMD} nat 1 config ip ${IpOut} unreg_only deny_in same_ports log .....
а дальше уже открывать те порты, которые нужны

Re: Проблемы с ipfw...

Добавлено: 2012-05-21 13:38:43
PunKHS
snorlov писал(а):У вас подключение через ppp, а сам файер после инициализации tun0 передернут?
Перезапускал ipfw после получения pinga с внешнего интерфейса. Результата нет.

Re: Проблемы с ipfw...

Добавлено: 2012-05-22 6:39:23
PunKHS
ivan_k писал(а):а так если
${FwCMD} nat 1 config ip ${IpOut} unreg_only deny_in same_ports log .....
а дальше уже открывать те порты, которые нужны
Попробовал. Не помогло. На внешнем интерфейсе ping проходит, локалку не видит...

Re: Проблемы с ipfw...

Добавлено: 2012-05-22 8:07:54
snorlov
PunKHS писал(а):
ivan_k писал(а):а так если
${FwCMD} nat 1 config ip ${IpOut} unreg_only deny_in same_ports log .....
а дальше уже открывать те порты, которые нужны
Попробовал. Не помогло. На внешнем интерфейсе ping проходит, локалку не видит...
А что говорит

Код: Выделить всё

ipfw -a list

Re: Проблемы с ipfw...

Добавлено: 2012-05-22 17:51:07
PunKHS
snorlov писал(а): А что говорит

Код: Выделить всё

ipfw -a list
клиент не видит сервер, по ssh не выходит

Re: Проблемы с ipfw...

Добавлено: 2012-05-30 13:46:37
ioj
Приветствую всех
Возникла проблема при настройке ipfw. вижу сеть , сервер пингуеться изнутри и снаружи, с сервера пингуются обе сети - и внешняя и внутренняя. не могу понять что н так((, не поможете?
netstat

Код: Выделить всё

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            89.163.5.1         UGS         0     5942    rl0
89.163.5.0/24      link#6             U           0        0    rl0
89.163.5.83        link#6             UHS         0        0    lo0
127.0.0.1          link#9             UH          0        0    lo0
192.168.0.0/24     link#7             U           0     1384    vr0
192.168.0.1        link#7             UHS         0        0    lo0


ipfw show

Код: Выделить всё

00100     0       0 check-state
00200 16577 1129443 allow ip from any to any
00300     0       0 divert 8668 ip from 192.168.0.0/24 to any out via rl0
00400     0       0 divert 8668 ip from any to 89.163.5.83 in via rl0
65535     0       0 deny ip from any to any
rc.conf

Код: Выделить всё

#внешняя сеть
ifconfig_rl0="inet 89.163.5.83 netmask 255.255.255.0"
defaultrouter="89.163.5.1"
gateway_enable="YES"
#внутренняя сеть
ifconfig_vr0="inet 192.168.0.1 netmask 255.255.255.0"
#ФВ
firewall_enable="YES"
firewall_script="/etc/rc2.fw"
sshd_enable="YES"
#moused_enable="YES"
#нат
natd_enable="YES"
natd_interface="rl0"
natd_flag="-m -u"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="NO"
ядро собрано с

Код: Выделить всё

options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_FORWARD
options         IPDIVERT
options         LIBALIAS
есть подозрение что это нат не хочет переадресовывать пакеты...

Re: Проблемы с ipfw...

Добавлено: 2012-06-03 23:06:05
Shuba
ioj писал(а):Приветствую всех
Возникла проблема при настройке ipfw. вижу сеть , сервер пингуеться изнутри и снаружи, с сервера пингуются обе сети - и внешняя и внутренняя. не могу понять что н так((, не поможете?
есть подозрение что это нат не хочет переадресовывать пакеты...
а что ты хочешь фаером сделать? Я так подозреваю, что хочешь внутреннюю сетку через NAT вывести в инет. Ну так у тебя в правилах ниодного пакета до nat-а не дойдёт, т.к. все пакеты будут пропускаться 200-ым правилом.
Сделай нечто вроде такого:

Код: Выделить всё

ipfw add 100 pass ip from 192.168.0.0/24 to any via vr0
ipfw add 200 pass ip from any to 192.168.0.0/24 via vr0
ipfw add 300 divert 8668 ip from any to any
ну это так, приблизительно, так как сам natd не юзаю. Копай в нужную сторону. Кроме того рекомендую слезать с natd с сторону ядерного nat-а.