Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » Не могу настроить IPFW+ipnat

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

latoshin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хочу настроить связку ipfw+ipnat на freebsd 8.2, но ничего не получается. До этого нат работал через ipfw - все работало.
 
Сейчас имеем:  
 

Код:
# cat /etc/rc.conf
font8x14="cp866-8x14"
font8x16="cp866b-8x16"
font8x8="cp866-8x8"
scrnmap="koi8-r2cp866"
keymap="ru.koi8-r"
 
ifconfig_re0="inet 192.168.0.1 netmask 255.255.255.0"
ifconfig rl0 ether 00:00:00:00:00:00 (тут прописан мак...)
ifconfig_rl0="inet 193.х.х.х netmask 255.255.255.192"
defaultrouter="193.х.х.х"
gateway_enable="YES"
hostname="server.radio.lan"
 
sshd_enable="YES"
 
fsck_y_enable="YES"
background_fsck="NO"
ntpdate_enable="YES"
ntpd_enable="YES"
 
firewall_enable="YES"
firewall_type="open"
#firewall_type="/etc/ipfw"
apache22_enable="YES"
mysql_enable="YES"
postfix_enable="YES"
dovecot_enable="YES"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
 
named_enable="YES"
named_program="/usr/sbin/named"
named_flags="-u bind -c /etc/namedb/named.conf"
dhcpd_enable="YES"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="re0" # на каком интерфейсе крутится DHCP
mpd_enable="YES"
nmbd_enable="YES"
smbd_enable="YES"
squid_enable="YES"
 
# IPNat
ipnat_enable="YES"
ipnat_rules="/etc/ipnat.rules"

 
 

Код:
cat /etc/ipnat.rules
map rl0 192.168.0.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp
map rl0 192.168.0.0/24 -> 0.0.0.0/32
rdr re0 0/0 port 80 -> 127.0.0.1 port 3128
rdr rl0 0.0.0.0/0 port 9800 -> 192.168.0.36 port 4899

 
Вот в такой связке - все работает. Инет на локальных машинах есть. Все ок. Но сейчас же firewall_type="open"
 
Как только я делаю firewall_type="/etc/ipfw"
 
И содержимое /etc/ipfw

Код:
 
    cat /etc/ipfw
    # разрешаем все через интерфейс локальной сети
    add 1040 allow ip from any to any via re0
 
    # боимся непонятного
    add 1050 deny ip from any to 192.168.0.0/16 in recv rl0
    add 1060 deny ip from 192.168.0.0/16 to any in recv rl0
    add 1070 deny ip from any to 172.16.0.0/12 in recv rl0
    add 1080 deny ip from 172.16.0.0/12 to any in recv rl0
    add 1090 deny ip from any to 10.0.0.0/8 in recv rl0
    add 10100 deny ip from 10.0.0.0/8 to any in recv rl0
    add 10110 deny ip from any to 169.254.0.0/16 in recv rl0
    add 10120 deny ip from 169.254.0.0/16 to any in recv rl0
 
    #Открываем порты
 
    #  VPN-connect - это порт для даемона MPD, на него поступают запросы на авториза
    add 10130 allow tcp from any to me 1723 setup
    # SSH
    add 10170 allow tcp from any to me 22 in via rl0
    # Incoming Pings
    add 10180 allow icmp from any to me icmptypes 8 in recv rl0
    # Почта, 25
    add 10190 allow tcp from any to me dst-port 25 setup
    # WEB
    add 10210 allow tcp from any to me dst-port 80 setup
 
    # боимся непонятного
    add 65534 deny all from any to any
 

 
Все инет пропадает... пинги не идут. В чем трабл?.. помогите плиз

Всего записей: 62 | Зарегистр. 14-03-2007 | Отправлено: 09:03 08-09-2011 | Исправлено: latoshin, 09:30 08-09-2011
bga83



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
тут целый ряд проблем/вопросов:
-
Цитата:
Инет на локальных машинах есть.
как он там есть через прокси или по нату?
- нет ни одного divert-правила, которое бы заворачивало пакеты на нат
- нет ни одного правила, разрешающего исходящие с сервера пакеты. Это надо как минимум чтобы сквид мог запрашивать данные из инета

Всего записей: 2008 | Зарегистр. 30-11-2007 | Отправлено: 09:21 08-09-2011
latoshin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
как он там есть через прокси или по нату?  

 
По нату через прокси... в /etc/ipnat.rules  там же есть правило
rdr re0 0/0 port 80 -> 127.0.0.1 port 3128  
 
редирект на сквид
 
 
Помогите с divert правилами и с разрешающим исходящие с сервера пакеты
 
какие строки дописать в /etc/ipfw ?
 
 
 

Всего записей: 62 | Зарегистр. 14-03-2007 | Отправлено: 09:24 08-09-2011
bga83



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
под рукой нет системы. чтобы четко посмотреть синтаксис.
Но могу посоветовать почитать статьи на лисяре, например http://www.lissyara.su/articles/freebsd/tuning/ipfw/   или http://www.lissyara.su/articles/freebsd/tuning/ipfw_nat/
 
а чем ядерный нат не устроил? вторая статья как раз с уклоном на него

Всего записей: 2008 | Зарегистр. 30-11-2007 | Отправлено: 10:08 08-09-2011
latoshin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
а чем ядерный нат не устроил? вторая статья как раз с уклоном на него

 
было неудобно делать редиректы )
 
 
 
 
Добавлено:
Если кто-то знает решение моей проблемы, напишите плиз.

Всего записей: 62 | Зарегистр. 14-03-2007 | Отправлено: 11:04 08-09-2011
tankistua

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
где правило, которое разрешает исходящий трафик с сервера через внешний интерфейс ?
 
З.Ы. представь себя пакетом

Всего записей: 9572 | Зарегистр. 15-01-2002 | Отправлено: 00:25 09-09-2011
latoshin



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
где правило, которое разрешает исходящий трафик с сервера через внешний интерфейс ?
 
З.Ы. представь себя пакетом  

 
 
Вот сейчас включен ядерный нат и вот какие правила в файерволе
 

Код:
 
# ipfw show
00100    44602    6315246 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
01040 10536696 4972401334 allow ip from any to any via re0
01050       11       3439 deny ip from any to 192.168.0.0/16 in recv rl0
01060      483      32844 deny ip from 192.168.0.0/16 to any in recv rl0
01070        0          0 deny ip from any to 172.16.0.0/12 in recv rl0
01080        0          0 deny ip from 172.16.0.0/12 to any in recv rl0
01090    53988    5696082 deny ip from any to 10.0.0.0/8 in recv rl0
10100     1555     250521 deny ip from 10.0.0.0/8 to any in recv rl0
10110     8071     647564 deny ip from any to 169.254.0.0/16 in recv rl0
10125   355291   37167170 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any dst-port 80 via rl0
10130        4        204 allow tcp from any to me dst-port 1723 setup
10150   480593   48282691 allow tcp from any to any via ng*
10160     6618    1886743 allow udp from any to any via ng*
10170      714      60864 allow tcp from any to me dst-port 14441 in via rl0
10180       17        742 allow icmp from any to me icmptypes 8 in recv rl0
10190     1573      80576 allow tcp from any to me dst-port 25 setup
10210       15        772 allow tcp from any to me dst-port 80 setup
10530 10816205 5020467447 nat 1 ip from any to any via rl0
65534      105       3376 deny ip from any to any
65535        0          0 allow ip from any to any
 

 
Сейчас все работает.. инет везде есть... ходят через сквид...  
 
и где тут правило которое разрешает исходящий трафик с сервера через внешний интерфейс ?
 
 
 
Добавлено:
Немного изменил  
 
Сейчас в /etc/rc.conf

Код:
 
ifconfig_re0="inet 192.168.0.1 netmask 255.255.255.0"
ifconfig rl0 ether 00:00:00:00:00:00
ifconfig_rl0="inet 193.x.x.x netmask 255.255.255.192"
defaultrouter="193.x.x.x"
gateway_enable="YES"
 
ipnat_enable="yes"
ipnat_rules="/etc/ipnat.rules"
firewall_enable="YES"
firewall_script="/etc/ipfw.script"

 
Файл /etc/ipfw.script с правами 755

Код:
 
#!/bin/sh
 
# для начала вводим переменные - для нашего же удобства, чтобы не
# вводить по сотне раз одно и то же, а потом искать почему не работает,
# и в итоге выяснять, что ошибся IP адресом в одном из правил
 
FwCMD="/sbin/ipfw" # собственно где лежит бинарник ipfw
LanOut="rl0"            # внешний интерфейс
LanIn="re0"            # внутренний интерфейс
IpOut="193.х.х.х" # внешний IP адрес машины
IpIn="192.168.0.1"   # внутренний IP машины
NetMask="24"            # маска сети (если она разная для внешней
                        # и внутренней сети - придётся вводить ещё
                        # одну переменную, но самое забавное, что
                        # можно и забить - оставить 24 - всё будет
                        # работать, по крайней мере я пробовал -
                        # работаало на 4-х машинах, в разных сетях,
                        # с разными масками - настоящими разными! но -
                        # это неправильно.)
NetIn="192.168.0.0"    # Внутренняя сеть
 
# Сбрасываем все правила:
${FwCMD} -f flush
 
# Проверяем - соответствует ли пакет динамическим правилам:
${FwCMD} add check-state
 
# Разрешаем весь траффик по внутреннему интерфейсу (петле)
${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}
 
# рубим траффик к частным сетям через внешний интерфейс
# заметтьте - эти правила отличаются от тех что были выше!
${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}
 
# разрешаем некоторые типы ICMP траффика - эхо-запрос,
# эхо-ответ и время жизни пакета истекло
${FwCMD} add allow icmp from any to any icmptypes 0,8,11
# открываем снаружи 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}
# Открываем порт 1723 для MPD5
${FwCMD} add allow tcp from any to ${IpOut} 1723 via ${LanOut}
 
# разрешаем весь 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

 
 
Файл /etc/ipnat.rules
 

Код:
map rl0 192.168.0.0/24 -> 0.0.0.0/32 proxy port ftp ftp/tcp
map rl0 192.168.0.0/24 -> 0.0.0.0/32
rdr re0 0/0 port 80 -> 127.0.0.1 port 3128

 
 
Не работает!!!! Хотя есть правила ${FwCMD} add allow tcp from any to any established и ${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}

Код:
 
# ipfw list
00100 check-state
00200 allow ip from any to any via lo0
00300 deny ip from any to 127.0.0.0/8
00400 deny ip from 127.0.0.0/8 to any
00500 deny ip from any to 10.0.0.0/8 in via rl0
00600 deny ip from any to 172.16.0.0/12 in via rl0
00700 deny ip from any to 192.168.0.0/16 in via rl0
00800 deny ip from any to 0.0.0.0/8 in via rl0
00900 deny ip from any to 169.254.0.0/16 in via rl0
01000 deny ip from any to 240.0.0.0/4 in via rl0
01100 deny icmp from any to any frag
01200 deny log logamount 1000 icmp from any to 255.255.255.255 in via rl0
01300 deny log logamount 1000 icmp from any to 255.255.255.255 out via rl0
01400 deny ip from 10.0.0.0/8 to any out via rl0
01500 deny ip from 172.16.0.0/12 to any out via rl0
01600 deny ip from 192.168.0.0/16 to any out via rl0
01700 deny ip from 0.0.0.0/8 to any out via rl0
01800 deny ip from 169.254.0.0/16 to any out via rl0
01900 deny ip from 224.0.0.0/4 to any out via rl0
02000 deny ip from 240.0.0.0/4 to any out via rl0
02100 allow tcp from any to any established
02200 allow ip from 193.x.x.x to any out xmit rl0
02300 allow icmp from any to any icmptypes 0,8,11
02400 allow tcp from any to 193.x.x.x dst-port 80 via rl0
02500 allow tcp from any to 193.x.x.x dst-port 14441 via rl0
02600 allow tcp from any to 193.x.x.x dst-port 1723 via rl0
02700 allow tcp from any to any via re0
02800 allow udp from any to any via re0
02900 allow icmp from any to any via re0
03000 deny ip from any to any
65535 allow ip from any to any

Всего записей: 62 | Зарегистр. 14-03-2007 | Отправлено: 09:05 09-09-2011
bga83



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
02100 allow tcp from any to any established
02200 allow ip from 193.x.x.x to any out xmit rl0  

Смотри что получается с этими правилами: исходящие с внешнего интерфейса у тебя разрешены все протоколы, использующие ip. А вот обратно разрешен только протокол tcp. У тебя сервер не сможет получить ответ на DNS-запрос, хотя отправить его сможет потому как при это используется udp.
 
я в подобных ситуациях tcpdump-ом активно пользуюсь, когда не тривиальные моменты с правилами вылазят
 
PS посмотри в сторону pf, там правила пишутся значительно проще, хотя и pf не лишен недостатков. В частности он работает в один поток и не параллетится, но на трафике до 150Мбит это не играет значения.

Всего записей: 2008 | Зарегистр. 30-11-2007 | Отправлено: 16:05 09-09-2011 | Исправлено: bga83, 16:09 09-09-2011
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
latoshin
Вы совершенно напрасно не обратились в профильную тему: «Firewall *nix: iptables, ipfw, pf etc» Сейчас уже поздно, но на будущее имейте, пожалуйста, в виду: создание новой темы на Руборде — случай скорее исключительный.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 18:41 09-09-2011
tankistua

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ну оставь одно правило  
allow all from any to any
 
и посмотри будет работать или нет.

Всего записей: 9572 | Зарегистр. 15-01-2002 | Отправлено: 22:29 09-09-2011
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Операционные системы » UNIX » Не могу настроить IPFW+ipnat


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru