Перенаправление пакетов: redir и ipfw (7.2)

Обновил статью!

С появлением FreeBSD 7 возникла возможность использовать NAT без natd, ipnat. То есть средствами самого файервола ipfw. Им же можно делать и перенаправление пакетов. Вообщем, описаны 2 способа: через redir и средствами ipfw.

a) redir

Расскажу об небольшой, но очень полезной утилите, которая умеет перенаправлять запросы с одного порта\адреса на другой порт\адрес. Собственно, зачем нужно? А хотите вы поднять ftp, и дать, например, доступ из вне к нему, а этот сервак доступен только изнутри. Или то же самое, но сWeb-сервером, или захотели перенести Samba на другом сервак, так, что бы никто не заметил, а шар много и у всех нужно перенастраивать. Вообщем применений много.

Примечание.

redir подменяет src address на адрес сервера, где он запущен, поэтому использовать его лучше тогда, когда нет возможности сделать то же самое через файервол (например, не прописан шлюз на утройстве, куда идёт перенаправление).

Приступим. Обновляем порты и идём ставить:

#cd /usr/ports/net/redir && make install clean

Вот, собственно и всё. Далее можно почитать man: он довольно простой и понятный. Праметров для такой небольшой програмы предостаточно. Главными являются

--lport, --cport, --caddr

Собственно они задают локальный порт, удалённый порт и удалённый адрес. Рассмотрим 3 примера перенаправления.

1) Перенаправления http-запросов.

Запускаем в фоне такую строку

#redir --lport=80 --cport=80 --caddr=10.10.10.10 &

2) Перенаправление samba шар.

#redir --lport=139 --cport=139 --caddr=10.10.10.10 &

3) Перенаправление ftp

Для перенаправления служит параметр ftp, который может примать 3 разных значения:

port — если используется активный режит
pasv — если вы используете пассивный режим
both — оба (если вы не знаете, какой именно режим используется)

#redir --ftp=both --lport=139 --cport=139 --caddr=10.10.10.10 &

Это всё. дальнейшее зависит только от вашей фантазии. Дополнительные параметры можно узнать из man redir.

Пасхальное яйцо

Кстати! Можно таким способом устроить кому-то заподлянку на 1-ое апреля 🙂 Суть такова: человек набирая любой адрес в броузере попадает на … porno.com. Делается это с помощью связкиipfw+redir:

создаём правило для перенаправления всех запросов с адреса 10.10.10.10. на порт 55555

#ipfw add fwd 127.0.0.1,55555 ip from 10.10.10.10. to any 80

Почему нельзя сделать это одним правилом? Потому что fwd не может переадресовывать никуда, кроме как на себя.

После этого используем redir для перенаправления всех запросов с порта 55555 на porno.com:

#redir --lport=55555 --cport=80 --caddr=64.38.232.180 &

Теперь все запросы будут форварится на … 🙂 Кстати, тут проявляется небольшой баг, точнее неточность. Если на IP’шнике, куда мы перенаправляем запрос висит несколько сайтов, то запрос будет перенаправляется на дефолтный. К сожалению, а может к счастью, на нашем IP оказался не только porno.com

b) ipfw (7.2)

Для этого будем использовать такое правило:

ipfw nat 123 config if $oif redirect_port tcp $local_serv:$local_port $port

где

— if (необязательный) указывает интерфейс
— $local_serv ip-адрес компа, куда нужно переадресовывать
— $local_port — соотвественно порт на компе $local_serv, на который нужно переадресовывать
— $port — порт, на который будут подключаться.

ПС. Кстати, любители linux могут не огорчаться, есть версия redir и под linux (проверял на Gentoo)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *