Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Сетевые технологии (http://forum.oszone.net/forumdisplay.php?f=31)
-   -   Поднятие прокси на Lunix (http://forum.oszone.net/showthread.php?t=246057)

barasin 02-11-2012 21:22 2017581

Поднятие прокси на Lunix
 
Здравствуйте уважаемые гуру
Опыта работы системным администратором мало
После универа зеленый еще )
На работе возникла потребность поднять проксю на линукс
До этого стоял керио но со временем стал ужасно глючить
Сеть состоит из 40 машин + 4 сервера (терминалка 1с, Актив директори, файловая помойка ну и сама прокся
провайдер дает интернеты через dhcp авторизация через MAC
подскажите с чего начать? и что мне понадобиться

AMDBulldozer 02-11-2012 21:36 2017592

Для каких протоколов? Для http и еще некоторых - squid.

Но Вы уверены в том, что Вам нужен именно proxy-сервер? Может быть Вам необходим просто шлюз с NAT?

barasin 02-11-2012 22:03 2017605

в итоге должен получиться обычный интернет сервер который будет получать интернет от провайдера и шарить его в сеть

sedarmill 02-11-2012 22:45 2017621

https://wiki.archlinux.org/index.php/Router
Названия пакетов отсюда можно взять..
Цитата:

подскажите с чего начать?
С установки на виртуальную машину и созданием сети из 2-3 виртуальных машин например..

Rezor666 02-11-2012 23:13 2017634

Если не хотите сильно углубляться в Linux или тратить на начальном этапе слишком много времени то советую поставить PfSense, как его ставить можно почитать в моем блоге.

barasin 02-11-2012 23:27 2017638

на какой чем стабильнее работает убунта или дебиан?

Rezor666 02-11-2012 23:29 2017639

barasin, Они оба стабильны. PfSense это вообще FreeBSD чем нестабильность? :)
Тут Вам надо определиться что Вы хотите от сервера...
Если шлюз то как мне лучше или PfSense или M0n0wall или ИКС.
Если сборная солянка то конечно брать чистый дистрибутив и пилить его.

И вообще на Lunix вы не чего не поднимите...

barasin 03-11-2012 00:19 2017662

нужен чистый шлюз
качаю PfSense ставлю на чистый хард настраиваю как в вашем блоге все?

Rezor666 03-11-2012 01:12 2017687

barasin, да, для ваших нужд даже не надо squid ставить.

exo 03-11-2012 01:30 2017696

если нужен простой шлюз, почему не купить готовую железку? а ля Dlink, Zyxel, Asus, Netgear. Не говоря уже о Cisco...

AMDBulldozer 03-11-2012 02:33 2017709

Для использования Linux-клмпьютера в качестве маршрутизатора никакое дополнильное ПО не требуется.
Просто настройте forwarding и nat. Это делается четырьмя-пятью командами (в зависимости от того, имеет ли Ваш компьютер статический ip в сети или получает его по dhcp). Если не найдете сами, потом как-нибудь отпишусь в теме. Ищите google'ом статьи со строкой "echo 1 > /proc/sys/net/ipv4/ip_forward". Эта команда включает работу компьютера в режиме шлюза.

Точка зрения
Цитата:

Цитата Rezor666
И вообще на Lunix вы не чего не поднимите »

представляется мне более, чем странной.

Rezor666 03-11-2012 10:29 2017772

AMDBulldozer, Если Вы на Lunix поднимите что то тогда и поговорим.

exo 03-11-2012 14:54 2017856

Цитата:

Цитата Rezor666
И вообще на Lunix вы не чего не поднимите... »

Цитата:

Цитата Rezor666
Если Вы на Lunix поднимите что то тогда и поговорим. »

мне не понятны данные заявления.
Для Linux Iptables +NAT
Для FreeBSD Ipfw + NAT ну очень старая статья...

NRMS 03-11-2012 16:05 2017898

barasin, я бы все-таки остановился на Linux. В средних/мелких конторках никогда не ясно что понадобится завтра. Сегодня только NAT, а завтра уже прокси (фильтровать где лазить и что качать можно, а что - нет). В этом случае Linux гибче.
Если решитесь, почитайте к примеру вот это

AMDBulldozer 03-11-2012 17:26 2017928

Цитата:

Цитата Rezor666
AMDBulldozer, Если Вы на Lunix поднимите что то тогда и поговорим. »

Разумные люди, прежде чем давать советы незнакомому человеку, как минимум, смотрят конфигурацию его компьютера - там указана ОС, которой он пользуется.

P.S. Подавляющее большинство домашних маршрутизаторов работают именно на Linux. Вам это ни о чем не говорит?

Rezor666 03-11-2012 17:28 2017931

exo, А для Lunix статью можно?

AMDBulldozer, вы когда читаете слова пропускаете?

exo 03-11-2012 18:33 2017970

Цитата:

Цитата Rezor666
А для Lunix статью можно? »

а ссылок из поиска не достаточно? Я позже напишу. по приведённым ссылкам.

Rezor666 03-11-2012 21:37 2018084

exo, я уже в шоке... LUNIX LUNIX LUNIX где такая ОСь и маны на нее...

AMDBulldozer 03-11-2012 22:25 2018117

Только что освободился, сейчас примерно набросаю, каким образом включить forwarding и nat на linux-системе.
Автор написал, что ip получает от провайдера по dhcp. Значит для nat мы использует -j MASQUERADE, а не -j SNAT --to x.x.x.x.
Сразу хочу оговориться, что начну с предварительной части, которая НЕ НУЖНА на рабочей системе. Она используется исключительно для того чтобы избавиться от неопределенности в состоянии системы (я же не знаю, что Вы уже понаписали в правилах брандмауэра).

/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F

Этими командами мы очистили таблицы правил межсетевого экрана и установили политики по умолчанию.
Прошу обратить внимание на два момента.

1. Мы СНАЧАЛА устанавливаем политики, а потом сбрасываем таблицы. Почему именно так? Да потому, что в хорошо сконфигурированной системе политика всегда должна запрещать прохождение любого пакета, который не был явно разрешен соответствующим правилом. "Запрещено всё, что не разрешено".
В такой ситуации, политики должны быть изменены первыми. Потому что если мы поступим обратным образом и сначала сбросим правила, то любой пакет, который придет в промежутке между сбросом правил и изменением политик, будет отброшен. А это недопустимо - любые действия на корпоративном шлюзе не должны нарушать работоспособность сети предприятия.
2. Все команды рекомендуется записывать с указанием полного пути. Это во-первых, экономит время, а во-вторых, затрудняет работу потенциальному злоумышленнику.

Теперь включаем NAT:

/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQURADE

(допустим, что eth1 - это интерфейс Вашего интернет-соединения. Рекомендую во всех правилах, когда это возможно, указывать интерфейс, даже если это не обязательно. Это сильно облегчит Вам жизнь, когда список правил разрастется до нескольких сотен и/или появится резерное подключение к провайдеру).

Разрешаем маршрутизацию пакетов между интерфейсами:

echo 1 > /proc/sys/net/ipv4/ip_forward

не будет лишней и такая команда:

echo 1 > /proc/sys/net/ipv4/ip_dynaddr

Всё. Дело сделано. Предполагая, что таблица машрутизации у Вас уже настроена (утилитами route либо ip c параметром route, если Вы по каким-то причинам используете iproute2) можете указывать Ваш Linux-компьютер в качестве шлюза и спокойно работать в сети).

Примечание: естественно, на практике использовать подобный способ категорически не рекомендуется, поскольку межсетевой экран мы с Вами отключили в самом начале нашего примера, оставив компьютер открытым для всех видов сетевых угроз.
Кроме того, вполне возможно Вам потребуется настроить статические правила трансляции адресов для организации серверов доступных из сети провайдера (а значит, если у Вас публичный ip, то и из интернета).

Попробуем чуточку улучшить наш с Вами набор правил:
Для начала, не будем указывать в сценарии ни явных имен программ, ни наименований интерфейсов. Заменим их на переменные, которые установим в самом начале сценария:

IPTABLES=/sbin/iptables
IF_LAN=eth0
IF_INT=eth1

(IF - от слова "интерфейс". Названия переменных можете выбирать произвольно)

$IPTABLES -A FORWARD -i $IF_LAN -o $IF_INT -j ACCEPT

(разрешили все исходящие соединения, с локального интерфейса на интерфейс провайдера)

$IPTABLES -A FORWARD -i $IF_INT -o $IF_LAN -m state --state ESTABLISED,RELATED -j ACCEPT

(а вот входящие пакеты разрешили пропускать только если они относятся к уже установленному соединению)

$IPTABLES -P FORWARD DROP

(политика по умолчанию - тотальный запрет)

ну и т.д.

После создания скелета сценария можно его улучшать и дополнять.
Добавить проверку корректности переменной содержащей путь до iptables:

[ -x "$IPTABLES" ] || (echo $IPTABLES - not executable; exit 1)

Записать нормальные правила работы межсетевого экрана (этим мы сейчас заниматься не будем).

И последнее. Ваш сценарий не должен исполняться каждый раз при включении компьютера. Это может быть слишком долго.

Сохраните результат его работы: "iptables-save > iptables" и пусть потом все таблицы разом восстанавливаются командой iptables-restore. Обычно это автоматически обеспечивается соответствующим системным сервисом, но он, к сожалению, в каждом дистрибутиве разный.

К примеру, для Debian необходимо установить этот сервис командой "aptitude install iptables-persistent" и сохранять правила командой "iptables-save > /etc/iptables/rules.v4"

Команду "echo 1 > /proc/sys/net/ipv4/ip_forward" (или "sysctl net.ipv4.ip_forward=1" - это одно и то же) необходимо исполнять независимо от использования команды iptables-restore. Правда на этот случай тоже есть системный сервис, но пора закругляться. И так слишком длинно получилось.

exo 03-11-2012 22:27 2018121

Rezor666, а всё понятно. ОС Линукс обычно называют любую ОС с ядром Linux. Так называют для простоты.
Цитата:

Цитата AMDBulldozer
К примеру, для Debian »

хорошо, что добавили, а то у Rezor666 могли появится вопросы.

Rezor666 03-11-2012 22:32 2018126

Lunix -http://en.wikipedia.org/wiki/LUnix

exo 03-11-2012 22:34 2018131

Rezor666, так не честно...

barasin, автор, исправьте заголовок темы.

Rezor666 03-11-2012 22:48 2018143

exo, :tongue:
Буду ждать статью под LUnix а то может я и не прав :)

exo 03-11-2012 22:57 2018158

Rezor666, не дождётесь. я умею признавать свои ошибки. Прошу меня извинить )

Rezor666 03-11-2012 23:02 2018164

exo, да лан :) Зато Вон какую статью написал AMDBulldozer :)

AMDBulldozer 03-11-2012 23:05 2018165

Приношу извинения, в тексте допущено несколько опечаток (быстро печатал и не вычитал перед отправкой - слишком уж он длинный и нудный получился).
Основная из них, в слове "MASQUERADE" (не в том, которое в начале текста, а в том, которое используется в качестве цели команды iptables) пропущена буква "E".

Примечание: Прописные буквы используются не для выделения текста. Это требование синтаксиса команды iptables.

exo 03-11-2012 23:08 2018169

Да это полезно будет. Только это для Linux, вряд ли для Lunix подойдёт. ;)
Цитата:

Цитата AMDBulldozer
Для начала, не будем указывать в сценарии ни явных имен программ, ни наименований интерфейсов.
Заменим их на переменные, которые установим в самом начале сценария:
IPTABLES=/sbin/iptables
IF_LAN=eth0
IF_INT=eth1 »

что за сценарий? это какой-то файл, куда надо это всё записать, или команды дать?

AMDBulldozer 04-11-2012 00:31 2018224

Цитата:

Цитата exo
что за сценарий? это какой-то файл, куда надо это всё записать, или команды дать? »

Сначала позволю себе отметить банальный факт (не для Вас, конечно, а для автора темы и других уважаемых участников форума не имеющих достаточного опыта работы в Linux): в этой операционной системе функции трансляции адресов и межсетевого экрана настраиваются одной и той же утилитой - iptables.
Естественно, фактически эти функции выполняются модулями ядра, которые неплохо было бы либо загрузить, либо встроить непосредственно в ядро. Поэтому может получиться так, что для исполнения указанных ранее команд понадобится одна или несколько команд "modprobe". Но это отдельный аспект вопроса и в данной теме я его не касаюсь.

Понятно, что для настройки межсетевого экрана должен быть создан достаточно сложный набор команд.
Который обеспечивал бы защиту от проникновения пакетов адресованных компьютерам локальной сети в сеть провайдера.
И наоборот, защиту от подмены адресов (spoofing) - экран не должен пропускать через внешний интерфейс пакеты с адресами локальной сети.
Должны быть закрыты для доступа извне все привилегированные порты и порты известные как используемые вредоносным ПО. Должен быть закрыт доступ наружу с тех же самых портов.
Блокирован входящий icmp echo request. Блокирован весь исходящий icmp трафик кроме icmp echo request.

$IPTABLES -A FORWARD -i $IF_INT -p icmp --icmp-type echo-request -j DROP
$IPTABLES -A FORWARD -o $IF_INT -p icmp ! --icmp-type echo-request -j DROP

(примечание - восклицательный знак в данном случае не нуждается в экранировании)

Ну и т.д. - запрещены широковещательные сообщения, блокирован диапазон ip из RFC 3927 (т.н. "locallink"), в явном виде запрещена попытка установления новых соединений извне и прочая, и прочая... ("и прочая" является устойчивым выражением, употребляемым вместо "и прочее")

Понятно, что сесть за монитор и набрать с хода сотню-другую правил физически невозможно.
(часть из которых, к тому же зависят друг от друга или друг друга дублируют и должны вводиться в определенном порядке).
Поэтому мы сначала готовим сценарий (исполняемый файл команд оболочки) и сохраняем его.

К примеру, сначала мы пишем правило "пробрасывающее" входящие на определенные порты пакеты на внутренние серверы сети (с использованием цели -j DNAT), потом регистрируем и запрещаем все попытки установить новые соединения

$IPTABLES -A INPUT -i $IF_INT -m state --state NEW -j LOG
$IPTABLES -A INPUT -i $IF_INT -m state --state NEW -j DROP
$IPTABLES -A FORWARD -i $IF_INT -m state --state NEW -j DROP

а потом явно разрешаем входящие пакеты только относящиеся к уже установленным соединениям:

$IPTABLES -A FORWARD -i $IF_INT -o $IF_LAN -m state --state ESTABLISED,RELATED -j ACCEPT

Сразу видно, что в наборе правил есть явная избыточность. По крайней мере половина из них лишние. (запрет на установление новых соединений - это всего лишь иначе сформулированное разрешение на прохождение пакетов по уже установленным соединениям).
А некоторые содержат условия, которые вообще никогда не будут удовлетворены (если соединение новое, каким образом пакет попадет в цепочку FORWARD?).

Зачем нужны "лишние" команды?
Да по очень простой причине! Это не более, чем защита от дурака (ну, или от ошибок, если вам так больше нравится).
Когда вы пишете с нуля набор правил для межсетевого экрана, очень вероятно, что первым делом там понаделают кучу ошибок и сеть вообще не сможет нормально работать (забыли разрешить получать ответы с DNS-серверов? Какая досада... Придется пользователям ip вручную вбивать).
Вы заглядываете в /etc/services, находите там для сервиса "domain" порт 53 c протоколами tcp и udp и начинаете править свой сценарий, добавляя в него что-то вроде

$IPTABLES -A INPUT -p tcp --source-port 53 -j ACCEPT
$IPTABLES -A INPUT -p udp --source-port 53 -j ACCEPT

Естественно, вышеприведенные правила являются ошибочными!!! Ни в коем случае не записывайте их в таком виде.
Почему? Да потому, что любой злоумышленник, который использует порт 53 в качестве исходящего порта прошел бы через Вашу защиту и смог бы, к примеру, соединиться с запущенным на шлюзе HTTP-сервером.
Одна ошибка и в защите появляется дырка? К счастью, нет. Ведь Вы подстраховались, запретив новые соединения, тем самым "ненужным" правилом.
Злоумышленник не сможет воспользоваться Вашим любезным разрешением принимать все соединения исходящие с 53-го порта, потому что еще раньше Вы запретили вообще все новые соединения.

Рекомендация: для отбрасываемых исходящих пакетов мы используем цель REJECT, в то время как для входящих -j DROP.
Причина проста. Наши собственные пользователи должны иметь возможность сразу узнать, что сайты "одноклассники" и "в контакте" для них закрыты. А сетевой сканер злоумышленника пусть дожидается окончания таймаута.

exo 04-11-2012 00:53 2018239

Цитата:

Цитата AMDBulldozer
Зачем нужны "лишние" команды? »

значит это команды, а я думал их нужно в файл писать, например rc.local ну или свой firewall.local и помещать в /etc/init.d/...

я думаю, что тему по IPTABLES лучше открыть новую. в данной теме вопрос только шлюза, с закрытом фаером естественно.

AMDBulldozer 04-11-2012 01:19 2018248

Цитата:

Цитата exo
значит это команды, а я думал их нужно в файл писать »

Да, именно сохранять в файле.
Но ведь в rc.local Вы тоже сохраняете команды.
Правда в rc.local Вы сохраняете их с другой целью - чтобы они исполнялись каждый раз при запуске.
Исполнять файл с правилами межсетевого экрана (и NAT) каждый раз не требуется.
Рассматривайте этот файл как исходный текст программы (простите мне такую грубую аналогию). Их один раз "транслируют" и записывают командой iptables-save в файл, который будет считываться при каждом запуске системы.
А исходный файл с набором команд iptables Вам нужен для того, чтобы можно было его править, устраняя ошибки и добавляя новые правила по мере необходимости.
Поскольку это именно "исходный текст" он может иметь любое имя и храниться в любой директории. Всё равно операционной системой он никак не используется.

exo 04-11-2012 01:52 2018269

Цитата:

Цитата AMDBulldozer
Да, именно сохранять в файле. »

вот этого я от вас и добиваюсь - в какой файл? конкретные примеры? Этого у вас не указано.
Не все знаю, как делать автозагрузку в Linux.
А то получается как в анекдоте:
Лысый программист неделю сидит в ванной и перечитывает инструкцию к шампуню: на мокрые волосы нанесите шампунь.

Цитата:

Цитата AMDBulldozer
iptables-save »

это конечно хорошо, но не все этим пользуются. и тем более знают как оно работает.

AMDBulldozer 04-11-2012 02:40 2018283

Цитата:

Цитата exo
вот этого я от вас и добиваюсь - в какой файл? конкретные примеры? Этого у вас не указано. »

Может быть Вы не обратили внимания, но я уже два раза отвечал на этот вопрос. Вы можете сохранить набор команд в файле с любым именем в любой директории.
Он, в любом случае, не будет использоваться операционной системой. Вы делаете его исполняемым (chmod a+x) и один раз запускаете.
После этого Вы сохраняете установленные Вами правила межсетевого экрана командой iptables-save. Эта команда выводит результат работы на stdout, поэтому для сохранения в файле его надо перенаправить.

Еще раз хочу повторить, что, к сожалению, в каждом дистрибутиве Linux способ загрузки полученного файла при старте системы отличается. Пример для Debian я дал.
В других дистрибутивах используются другие имена файлов и директории. К примеру, "iptables-save > /etc/sysconfig/iptables" (red hat/fedora/centos). В Mandriva может использоваться тот же каталог, но там настройка брандмауэра осуществляется утилитой shorewall. Проще всего сохранить усановленный набор правил в Mandriva командой service iptables save (для Debian та же самая команда будет выглядеть как "service iptables-persistent save").
Хуже всего, как обычно, обстоит дело в Ubuntu. Там пользователю предлагают пользоваться какой-то кривой надстройкой текстовой (ufw) или графической (gufw), которая доступна и в других дистрибутивах, хотя никому на фиг не нужна.
Сохраняйте свои правила командой "iptables-save > /etc/iptables.rules" (это официальное наименование файла из Ubuntu'вской документации), а потом запихивайте куда-нибудь, хоть в тот же rc.local, команду "iptables-restore < /etc/iptable.rules".
Какой-либо предустановленный сервис для восстановления настроек в Ubuntu либо отсутствует, либо я просто о нем не знаю.

P.S. Последний совет (с добавлением строки в rc.local) пригоден для абсолютно любого дистрибутива, если лень разбираться с его встроенным сервисом.

Автоматическая установка в 1 содержимого файла ip_forward при запуске системы может осуществляться правкой файла /etc/sysctl.conf, хотя команда echo в rc.local тоже нормальный вариант.

exo 04-11-2012 03:25 2018287

Цитата:

Цитата AMDBulldozer
Вы можете сохранить набор команд в файле с любым именем в любой директории. »

не, я так не играю. должна быть конкретика.
А любой файл в любом месте это как - нажмите Any key... сидишь и думаешь - где же Any Key ?!
Документация должна быть понятна всем, особенно новичкам.

AMDBulldozer 04-11-2012 03:32 2018288

Цитата:

Цитата exo
не, я так не играю. должна быть конкретика. »

Вы пишете программу на каком-нибудь языке программирования. Вам могут подсказать, где разместить полученный после компиляции и сборки исполняемый файл. Но дать совет как назвать файл с исходным текстом и где его хранить...

exo 04-11-2012 03:47 2018290

Цитата:

Цитата AMDBulldozer
где его хранить »

разве в Linux нет рекомендаций где располагать конфигурационные файлы?

AMDBulldozer 04-11-2012 04:01 2018292

Цитата:

Цитата exo
разве в Linux нет рекомендаций где располагать конфигурационные файлы? »

В том-то и дело, что это не файл конфигурации. "Файл конфигурации" из него получится после сохранения командой iptables-save. Для сохраненного таким образом файла действительно существуют стандартные имена и директории.
К сожалению, они разные для разных дистрибутивов. Варианты я привел выше.
А файл сценария, с помощью которого создается файл с установками межсетевого экрана, как я уже неоднократно писал, не используется операционной системой.
Если у Вас есть аппаратный маршрутизатор, то большинство из них позволяет создать резервную копию его конфигурации.
Естественно, никаких рекомендаций о месте хранения резервной копии не существует.
То же самое касается и исходного файла с командами iptables. Он служит единственной цели - при необходимости создать заново файл, который будет загружать iptables-restore. В этом он ничем не отличается от архивной копии. Я его храню в директории /etc/iptables. Но это абсолютно произвольное место. Можно хранить в /usr/local/iptables, /usr/share/iptables, /usr/local/share/iptables и /root/porn/.
(исполнять его всё равно надо под root'ом).
Выбирайте любой каталог, который Вам нравится.

exo 04-11-2012 14:56 2018510

Цитата:

Цитата AMDBulldozer
Выбирайте любой каталог, который Вам нравится. »

/var/www/my_domain/ ok?

zai 04-11-2012 15:11 2018523

Вот, неплохая инструкция

exo 04-11-2012 15:17 2018528

Цитата:

iptables-save >/etc/iptables.conf
намного понятнее.

El Scorpio 06-11-2012 08:54 2019812

Цитата:

Цитата NRMS
В средних/мелких конторках никогда не ясно что понадобится завтра. Сегодня только NAT, а завтра уже прокси (фильтровать где лазить и что качать можно, а что - нет). В этом случае Linux гибче. »

Если нет серьёзных знаний по работе в консоли, можно использовать web-интерфейс.
Ставим Linux Debian, на него ставим Webmin (4 команды из консоли), а из него в графическом режиме ставим/настраиваем всё остальное.

NRMS 06-11-2012 11:21 2019869

Цитата:

Цитата El Scorpio
Если нет серьёзных знаний по работе в консоли, можно использовать web-интерфейс »

ну раз пошло такое дело, то можно и GUI какой-нибудь поставить )))

exo 06-11-2012 12:10 2019902

Цитата:

Цитата NRMS
GUI какой-нибудь поставить »

об этом и было написано - Webmin. Есть ещё куча других.


Время: 23:36.

Время: 23:36.
© OSzone.net 2001-