Поднятие прокси на Lunix
Здравствуйте уважаемые гуру
Опыта работы системным администратором мало После универа зеленый еще ) На работе возникла потребность поднять проксю на линукс До этого стоял керио но со временем стал ужасно глючить Сеть состоит из 40 машин + 4 сервера (терминалка 1с, Актив директори, файловая помойка ну и сама прокся провайдер дает интернеты через dhcp авторизация через MAC подскажите с чего начать? и что мне понадобиться |
Для каких протоколов? Для http и еще некоторых - squid.
Но Вы уверены в том, что Вам нужен именно proxy-сервер? Может быть Вам необходим просто шлюз с NAT? |
в итоге должен получиться обычный интернет сервер который будет получать интернет от провайдера и шарить его в сеть
|
https://wiki.archlinux.org/index.php/Router
Названия пакетов отсюда можно взять.. Цитата:
|
Если не хотите сильно углубляться в Linux или тратить на начальном этапе слишком много времени то советую поставить PfSense, как его ставить можно почитать в моем блоге.
|
на какой чем стабильнее работает убунта или дебиан?
|
barasin, Они оба стабильны. PfSense это вообще FreeBSD чем нестабильность? :)
Тут Вам надо определиться что Вы хотите от сервера... Если шлюз то как мне лучше или PfSense или M0n0wall или ИКС. Если сборная солянка то конечно брать чистый дистрибутив и пилить его. И вообще на Lunix вы не чего не поднимите... |
нужен чистый шлюз
качаю PfSense ставлю на чистый хард настраиваю как в вашем блоге все? |
barasin, да, для ваших нужд даже не надо squid ставить.
|
если нужен простой шлюз, почему не купить готовую железку? а ля Dlink, Zyxel, Asus, Netgear. Не говоря уже о Cisco...
|
Для использования Linux-клмпьютера в качестве маршрутизатора никакое дополнильное ПО не требуется.
Просто настройте forwarding и nat. Это делается четырьмя-пятью командами (в зависимости от того, имеет ли Ваш компьютер статический ip в сети или получает его по dhcp). Если не найдете сами, потом как-нибудь отпишусь в теме. Ищите google'ом статьи со строкой "echo 1 > /proc/sys/net/ipv4/ip_forward". Эта команда включает работу компьютера в режиме шлюза. Точка зрения Цитата:
|
AMDBulldozer, Если Вы на Lunix поднимите что то тогда и поговорим.
|
Цитата:
Цитата:
Для Linux Iptables +NAT Для FreeBSD Ipfw + NAT ну очень старая статья... |
barasin, я бы все-таки остановился на Linux. В средних/мелких конторках никогда не ясно что понадобится завтра. Сегодня только NAT, а завтра уже прокси (фильтровать где лазить и что качать можно, а что - нет). В этом случае Linux гибче.
Если решитесь, почитайте к примеру вот это |
Цитата:
P.S. Подавляющее большинство домашних маршрутизаторов работают именно на Linux. Вам это ни о чем не говорит? |
exo, А для Lunix статью можно?
AMDBulldozer, вы когда читаете слова пропускаете? |
Цитата:
|
exo, я уже в шоке... LUNIX LUNIX LUNIX где такая ОСь и маны на нее...
|
Только что освободился, сейчас примерно набросаю, каким образом включить 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. Правда на этот случай тоже есть системный сервис, но пора закругляться. И так слишком длинно получилось. |
Rezor666, а всё понятно. ОС Линукс обычно называют любую ОС с ядром Linux. Так называют для простоты.
Цитата:
|
Lunix -http://en.wikipedia.org/wiki/LUnix
|
Rezor666, так не честно...
barasin, автор, исправьте заголовок темы. |
exo, :tongue:
Буду ждать статью под LUnix а то может я и не прав :) |
Rezor666, не дождётесь. я умею признавать свои ошибки. Прошу меня извинить )
|
exo, да лан :) Зато Вон какую статью написал AMDBulldozer :)
|
Приношу извинения, в тексте допущено несколько опечаток (быстро печатал и не вычитал перед отправкой - слишком уж он длинный и нудный получился).
Основная из них, в слове "MASQUERADE" (не в том, которое в начале текста, а в том, которое используется в качестве цели команды iptables) пропущена буква "E". Примечание: Прописные буквы используются не для выделения текста. Это требование синтаксиса команды iptables. |
Да это полезно будет. Только это для Linux, вряд ли для Lunix подойдёт. ;)
Цитата:
|
Цитата:
Естественно, фактически эти функции выполняются модулями ядра, которые неплохо было бы либо загрузить, либо встроить непосредственно в ядро. Поэтому может получиться так, что для исполнения указанных ранее команд понадобится одна или несколько команд "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. Причина проста. Наши собственные пользователи должны иметь возможность сразу узнать, что сайты "одноклассники" и "в контакте" для них закрыты. А сетевой сканер злоумышленника пусть дожидается окончания таймаута. |
Цитата:
я думаю, что тему по IPTABLES лучше открыть новую. в данной теме вопрос только шлюза, с закрытом фаером естественно. |
Цитата:
Но ведь в rc.local Вы тоже сохраняете команды. Правда в rc.local Вы сохраняете их с другой целью - чтобы они исполнялись каждый раз при запуске. Исполнять файл с правилами межсетевого экрана (и NAT) каждый раз не требуется. Рассматривайте этот файл как исходный текст программы (простите мне такую грубую аналогию). Их один раз "транслируют" и записывают командой iptables-save в файл, который будет считываться при каждом запуске системы. А исходный файл с набором команд iptables Вам нужен для того, чтобы можно было его править, устраняя ошибки и добавляя новые правила по мере необходимости. Поскольку это именно "исходный текст" он может иметь любое имя и храниться в любой директории. Всё равно операционной системой он никак не используется. |
Цитата:
Не все знаю, как делать автозагрузку в Linux. А то получается как в анекдоте: Лысый программист неделю сидит в ванной и перечитывает инструкцию к шампуню: на мокрые волосы нанесите шампунь. Цитата:
|
Цитата:
Он, в любом случае, не будет использоваться операционной системой. Вы делаете его исполняемым (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 тоже нормальный вариант. |
Цитата:
А любой файл в любом месте это как - нажмите Any key... сидишь и думаешь - где же Any Key ?! Документация должна быть понятна всем, особенно новичкам. |
Цитата:
|
Цитата:
|
Цитата:
К сожалению, они разные для разных дистрибутивов. Варианты я привел выше. А файл сценария, с помощью которого создается файл с установками межсетевого экрана, как я уже неоднократно писал, не используется операционной системой. Если у Вас есть аппаратный маршрутизатор, то большинство из них позволяет создать резервную копию его конфигурации. Естественно, никаких рекомендаций о месте хранения резервной копии не существует. То же самое касается и исходного файла с командами iptables. Он служит единственной цели - при необходимости создать заново файл, который будет загружать iptables-restore. В этом он ничем не отличается от архивной копии. Я его храню в директории /etc/iptables. Но это абсолютно произвольное место. Можно хранить в /usr/local/iptables, /usr/share/iptables, /usr/local/share/iptables и /root/porn/. (исполнять его всё равно надо под root'ом). Выбирайте любой каталог, который Вам нравится. |
Цитата:
|
Вот, неплохая инструкция
|
Цитата:
|
Цитата:
Ставим Linux Debian, на него ставим Webmin (4 команды из консоли), а из него в графическом режиме ставим/настраиваем всё остальное. |
Цитата:
|
Цитата:
|
Время: 23:36. |
Время: 23:36.
© OSzone.net 2001-