The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Настройка Linux роутера на базе дистрибутива Debian GNU/Linux 4.0 r3. (debian linux network iptables vpn 1c install squid pptp)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: debian, linux, network, iptables, vpn, 1c, install, squid, pptp,  (найти похожие документы)
From: OneROFL Newsgroups: email Date: Mon, 27 Apr 2008 17:02:14 +0000 (UTC) Subject: Настройка Linux роутера на базе дистрибутива Debian GNU/Linux 4.0 r3. Задача. 1.Доступ в интернет(квотирование трафика) для офиса (~до 300 человек возможно больше, зависит от железа) 2.ВПН канал для обеспечения доступа к ресурсам локальной сети с удаленного компьютера, подключенного к сети интернет 3.APlusServer - сервер для обмена информацией 1С бухгалтерии с удалеными КПК, подключенными к интернет, установленным на комьютере под управлением MS WINDOWS. 1. Доступ в интернет Для выполнения задач было выбрано: iptables,прокси сервер SQUID,SAMS(SQUID Account Management System, http://sams.perm.ru) v1.0.1. Все кроме SAMS входит в дистрибутив, причем для установки потребуются пакеты со всех 3-х DVD дистрибутива.(в 4.0 r3) Далее настройка, все с нуля: Настоятельно рекомендую перед установкой хорошенько разобраться с Линукс, а так же погонять на виртуальных машинах будущую конфигурацию. Скорее всего на реальном железе глюков из-за незнания мат.части будет очень много. Копипаст сводит к нулю возможности администрирования системы в нештатных ситуациях. УСТАНОВКА СИСТЕМЫ: Celeron 2.4, 256 MB, IDE 20GB HDD, 2 сетевых интерфейса (один для инета - ADSL, другой смотрит в локалку) Разбиение диска: Можно выбрать один из вариантов, который предлагает система, т.е. создать разделы для "всех" каталогов(без LVM, далее самый последний вариант), Потом немного поправить размеры разделов, а именно: т.к. у нас роутер с билингом, то нам потребуются большие разделы для логов(/var) и для устанавливаемого ПО(/usr), для раздела /home не нужно много места, т.к. не будет пользователей, использующих роутер как свалку для своих файлов, все остальное оставляем как рекомендует программа установки. Например, изменяем на /usr 8 Gb /home 1 Gb /Var 10 Gb При установке системы очень удобно, если в первую очередь будет сконфигурирован интерфейс, подключенный к интернету(IP адрес, ДНС сервера провайдера и шлюз), т.к. сразу же будут установлены и настроены обновления безопастности системы. Сетевые интерфейсы называются ethX, где X - номер интерфейса, у нас 2 карточки, значит будет два интерфрйса eth0 и eth1. - устанавливаем только базовую систему, все звездочки вырубаем. - никакого интернет сервера, баз данных и тем более рабочего стола, - нужна девственно не грязная система После инсталляции установим пакет mc (Midnight Commander), можно конечно использовать ТОЛЬКО командную строку, но это не только не удобно, это также не эффективно, т.к. повышает время настройки сервера, особенно для тех, кто никогда не видел линукс, но "жызнь" заставила. Сначала добавляем все 3 DVD дистрибутива "в базу" системы установки apt, для того чтобы "она" знала, какое ПО доступно, и где оно находится. Добавление DVD дистрибутива в базу(набираем в командной строке, ессно нужно войти в систему под суперпользователем т.е. root): apt-cdrom add После вставляем наш DVD в DVD-дисковод и нажимаем ввод. Повторяем для всех 3-х DVD. Установка пакета mc: apt-get install mc Далее для удобства копипаста готовых конфигурационных файлов, файрвола, и для будущего удаленного администрирования устанавливаем пакет ssh. apt-get install ssh Пакет ssh сводит к минимуму необходимость работать за консолью сервера и позволяет удаленно логиниться на роутер. Для того чтобы подконектиться к нашему серверу из MS Windows необходима программа putty. В putty: пишем адрес сервера(небходимо сконфигурировать 2й сетевой интерфейс, который смотрит в локалку, об этом ниже), а так же меняем кодировку(Window-Trancelation) на UTF-8, иначе/если наш миднайт командир будет очень "красивым". Конфигурируем 2-ю сетевую карточку, для этого нужно отредактровать следующий конфиг: /etc/network/interfaces, примерно так: # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth1 iface eth1 inet static address IP адресс провайдера netmask 255.255.255.X network Х.Х.Х.0 broadcast Х.Х.Х.255 gateway Х.Х.Х.Х dns-nameservers Х.Х.Х.X Х.Х.Х.Х auto eth1 iface eth0 inet static address 192.168.Х.Х netmask 255.255.255.0 auto eth0 После необходимо перезапустить "сеть", чтобы ОС установила новые IP адреса. Для упрощения будущей жизни конфигурирование сетевых интерфейсов лучше проводить ДО установки ПО, чтобы потом не искать в конфигах, например, апача, где же он берет старый IP адрес: /etc/init.d/networking restart Вводим команду ifconfig и проверяем установленную конфигурацию сетевых интерфейсов. И команду route -N, в маршрутах должен быть адрес шлюза провайдера, который указан в файле /etc/network/interfaces. Адреса ДНС серверов находятся в файле /etc/resolf.conf: nameserver X.X.X.X nameserver X.X.X.X Теперь необходимо проверить, как работает "сеть", пробуем пингануть локалку и шлюз провайдера... Сначала пишем скрипт, чтобы "запустить" НАТ. С помощью, например, MC назовем скрип goinet и установим права на запуск (должна появиться звездочка перед именем файла), запускаем: #!/bin/sh INET="eth1" INETIP="X.X.X.X" iptables -F INPUT iptables -F FORWARD iptables -F OUTPUT iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INETIP echo "1" > /proc/sys/net/ipv4/ip_forward Файрвол с комментариями будет ниже - просто даем интернет. После запуска этого скрипта на одной из рабочих станций под управлением MS Windows(вся офисная сеть построена на базе домена Windows 2003 Server и рабочих станций на базе ОС MS Windows XP SP2) устанавливаем адрес шлюза = адресу нашего Линукс роутера в локальной сети, так же адреса ДНС серверов провайдера и пробуем пингануть шлюз провайдера и зайти в интернет. Если все работает, значит можно приступать к установке системы "раздачи" интернета. Настройку файрвола нужно проводить после установки и конфигурирования системы учета трафика и ВПН, т.к. помимо глюков с инетом и ВПН возникнут глюки с файрволом и разобраться, какой глюк где, будет очень сложно. В случае дублирования IP адреса в локальной сети нашего интернет сервера с одной из рабочих станций, будут очень жесткие и непредсказуемые ошибки во всей сети. Интернет будет то работать, то нет, пинг то проходит, то нет. Если при пинговании одного из IP адресов локальной сети с роутера возникают потери пакетов, то одна из возможных ошибок - это дублирование IP адреса. Установка и настройка SQUID+SAMS. Сначала необходимо установить все пакеты, необходимые для работы этой связки. Пишем скрипт, например go-SAMS-DEB: #!/bin/sh aptitude install apache2 apache2-mpm-prefork aptitude install libapache2-mod-php5 php5-cgi php5-common php5-mysql aptitude install mysql-server mysql-client libmysqlclient15off aptitude install squid aptitude install libpcre3 apt-get install php5-gd apt-get install libpcre3-dev apt-get install libmysqlclient15-dev apt-get install gcc apt-get install make Собираем и устанавливаем SAMS из исходников, работает корректней, чем из deb пакетов, которые были доступны на момент написания этой статьи. Для более подробной информации читаем документацию для SAMS. Будем использовать класическую авторизацию на прокси сервере SQUID, то есть NCSA авторизацию. Изменяем один из конфигов апача /etc/httpd.conf, сейчас он пустой, пишем в конфиг следующее: AddType application/x-httpd-php .php .phtml Options ExecCGI Если у вас возникли проблемы с кодировкой веб интерфейса, надо в конфиге апача(/etc/apache2/apache2.conf) задать параметр AddDefaultCharset Off В конфиге SAMSa /etc/sams.conf в поле MYSQLPASSWORD= указываем пароль, он и будет использоваться при создании базы в Web интрефейсе. Так же проверяем путь SAMSPATH=/usr/local, в каталоге /usr/local/bin должны находиться бинарники SAMSa. В конфиг SQUIDa /etc/squid/squid.conf в поле тега TAG: auth_param (после комментариев) добаляем параметры ncsa авторизации(не в конец файла!): auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/ncsa.sams auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours На всякий случай нада проверить наличие файла /usr/lib/squid/ncsa_auth Конфигурирование файла /etc/php5/apache2/php.ini: раскомментируйте вызов библиотеки поддержки mysql: extensions=mysql.so C версии 1.0 SAMS работает в safe_mode php Настриваем php для работы в режиме safe mode включаем режим safe mode. Для этого выставляем параметр safe_mode: safe_mode = On SAMS для некоторых функций WEB интерфейса использует системные команды, например wbinfo. В режиме safe_mode php блокирует доступ к системным командам. Php позволяет выполнять системные команды, расположенные в каталоге, заданном параметром safe_mode_exec_dir. Изменяем этот параметр: safe_mode_exec_dir = "/usr/local/share/sams/bin" Далее разрешаем исполнение системных скриптов из кода php. Ищем в файле конфигурации параметр disable_functions = "chdir,dl,ini_get_all,phpinfo,system,shell_exec,popen,proc_open,exec,passthru,pcntl_exec" и если он не пустой, убираем из него запрет вызова функций phpinfo system shell_exec exec Также убираем запрет вызова функций phpinfo system shell_exec exec в параметре hphp.executor.func.blacklist = chdir,dl,ini_get_all,popen,proc_open,passthru,pcntl_exec Копируем скрипт samsd.debian (находится в исходных текстах /sams-1.0.1/etc/) в /etc/init.d/ переименовываем его в samsd и выполняем команду добавления запуска демона при автозагрузке ОС: update-rc.d samsd defaults Меняем владельца каталога /usr/local/share/sams на наш интернет сервер apache2 (Можно использовать миднайт командер): chown -R www-data:www-data /usr/local/share/sams Так же меняем владельца конфигурационного файла /etc/sams.conf: chown www-data:www-data /etc/sams.conf Изменяем права на /usr/local/share/sams и на все, что в нем есть: chmod 700 -R /usr/local/share/sams Устанавливаем полный доступ на файлы в каталоге /usr/local/share/sams/data: chmod 777 /usr/local/share/sams/data -R Создаем символическую ссылку из корневой директории сервера APACHE2 на директорию, в которой находятся файлы SAMS: ln -s /usr/local/share/sams /var/www Переименовываем файл(если нужно) /usr/local/share/sams/lang/lang.en в lang.EN, также, если нужно переименовываем каталоги /usr/local/share/sams/doc/en и ru в EN и RU. Перезагружаем веб сервер и прокси сервер: /etc/init.d/apache2 restart /etc/init.d/squid restart Права на каталоги SAMSa(/usr/local/share/sams, и на линк /var/www/sams), в случае если SAMS не захочет работать, можно выставить позже, сначала поставить 777 на все, а уже при шлифовке конфигурации выставить как положено. Веб интерфейс SAMS готов к работе. В браузере заходим на /X.X.X.X/sams, где Х.Х.Х.Х IP адрес нашего роутера в локальной сети. Жмем кнопку создать базы. Вводим пароль для юзера sams, который указан в конфиге /etc/sams.conf. Создаем базы. Запускаем Web интерфейс SAMS. Для добавления пользователей логинимся под юзером admin пароль по умолчанию qwerty. Для юзера auditor, пароль по умолчанию audit. Необходимо выставить авторизацию NCSA в администрировании SAMS и в шаблонах, а так же выставить чтение логов SQUID через равные промежутки времени. При непрерывном способе падает лог SQUIDa access.log. В случае, если это произошло необходимо удалить этот файл и создать новый с правами как у старого, предварительно изменив непрерывный способ чтения логов на дискретный, например раз в 1 минуту. Позже можно установить параметры чтения логов раз в 10 минут например, и и проверять наличие команды на реконфигурирование squid каждые 5 секунд, вообщем как можно реже, без ущерба для контроля за трафиком. Это необходимо, чтобы оптимально использовать ресурсы интеренет сервера. если в файле /var/log/squid/caсhe.log: 2004/11/01 10:34:19| Rebuilding storage in /usr/local/squid/cache (DIRTY) 2004/11/01 10:34:20| Store rebuilding is 2.8% complete 2004/11/01 10:34:21| WARNING: newer swaplog entry for dirno 0, fileno 00002098 2004/11/01 10:34:34| WARNING: Disk space over limit: 1251072 KB > 1048576 KB Места еще навалом, df показывает что свободно еще больше 50% возможно запортился файл swap.state из-за сбоев системы или пропадания электроэнергии, попробуй сделать так: 1 - останови сквид 2 - убей файл swap.state (обычно в каталоге /usr/local/squid/cache ) 3 - запусти сквид, он пересоздаст swap.state, правда это займет некоторое время. А размер кэша для диска в конфиге сквида случаем не менял ? если менял, возможно придется пересоздать дисковый кэш. при сохранении и загрузке конфигурации SAMSa через вэб интерфейс падают пароли пользователей, т.е. прописываются в файл ncsa.sams в незашифрованном виде После добавления пользователя при его будущем редактировании(когда пароль уже был введен, нужно, например, изменить ФИО пользователя) возможны глюки с паролем. Если при сохранении параметров поле пароля осталось пустым, то возможно пароль для этого юзера будет падать и станет невозможным залогиниться на прокси сервер. Лечиться так: Проблема в файле src/userbuttom_1_prob.php Когда редактировал юзера, на форме в поле пароль было пусто. Не знаю почему, видимо так и должно быть - типа если пароль меняешь, то введешь новый, а если не меняешь то и нечего его вообще показывать, но вот в описанном файле было сравнение старого пароля с тем что передан в форме, но проверки на его "пустоту" не было. Вставил проверку, если пароль пустой то и не менять его. if($auth=="ncsa"||$auth=="ip") { if(isset($_GET["passwd"])) $passwd=$_GET["passwd"]; else $passwd=""; $passwd=trim($passwd); ........ if ($passwd!="") { if($password!=$defpassw) $passwd=$password; } else { $passwd=$defpassw; } Вместо: if($auth=="ncsa"||$auth=="ip") { if(isset($_GET["passwd"])) $passwd=$_GET["passwd"]; ........ if($password!=$defpassw) $passwd=$password; PS ncsa.sams менялся всегда, когда редактировал пользователя, даже если пароль не трогал. Установка и настройка VPN. Для VPN будем использовать PoPToP. Он есть в дистрибутиве Debian. Устанавливаем командой: apt-get install pptpd Далее "идем в конфиг" /etc/pptpd.conf и правим в нем например так: #IP адрес, который будет дан роутеру "на" VPN соединении localip 192.168.1.1 #диапазон IP адресов, который будет дан клиенту remoteip 192.168.1.234-238 Перезагружаем сервис(демона) pptpd, чтобы изменения вступили в силу: /etc/init.d/pptpd restart Добавляем пользователя нашего VPN сервера в файле /etc/ppp/chap-secrets (<логин> pptpd <пароль> <адрес, который получит клиент на своей стороне впн интерфейса>): vpnuser pptpd 123 * Пробуем подключиться через создание ВПН соединения к роутеру из MS Windows. В каталоге /etc/ppp/ip-up.d создаем файл, например, go_vpn_log с правами 755, и пишем в него следуюшие: #!/bin/sh echo "------------------------------------------------" >> /var/log/vpn.log date >> /var/log/vpn.log echo "from IP $6 with speed $3">> /var/log/vpn.log echo "------------------------------------------------" >> /var/log/vpn.log Теперь при подключении VPN-клиента информация о подключении будет записываться в наш лог файл /var/log/vpn.log Файрвол iptables. Теперь наша задача разрешить доступ к интернету из локальной сети только так, как нужно, и запретить все из вне, кроме того, что нам нужно, используя iptables. И так первое правило: все, что окружает наш роутер - это зло. Для обеспечения безопастности не будем делать разницы между компьютерами в локальной сети и компьютерами во внешней сети(интернет), и в файрволе явно пропишем правила для каждого обращения через/на наш интернет сервер. Немнога теории: когда пакет попадает на наш роутер, сначала он попадает в таблицу mangle цепочка PREROUTING, далее он идет в таблицу nat-PREROUTING, далее, в зависимости от того куда направлен пакет, он идет либо: 1.mangle-INPUT..filter-INPUT..local_routing..mangle-OUTPUT..nat-OUTPUT..filter-OUTPUT..выход либо: 2.mangle-FORWARD..filter-FORWARD..выход потом на выход: mangle-POSTROUTING..nat-POSTROUTING. Вывод можно сделать такой: нас интересуют только 2 цепочки таблицы filter: это INPUT - то есть все то, что ломится непосредственно на наш сервер и цепочка FORWARD, то есть все то, что идет через роутер как в локальную сеть так и из нее. Политика такая, все вообщем изначально бан, и далее: INPUT: Запрещаем все, что непосредственно долбится на наш cервер, кроме: VPN из вне и SSH+SQUID из локалки, то есть: можно подключиться к нашему серверу(зная пароль) ТОЛЬКО по VPN из интернета(порт 1723), все остальное запрещено (нет фильтрации по IP адресу, тк заранее не известен диапозон IP адресов, с которых будет подключение, т.е. например, ноутбук из любой точки России). И на прокси сервер(порт 3128) + SSH(порт 22), опять же зная пароли доступа, из локальной сети. Разрешаем выходить любым пакетам из нашего роутера(OUTPUT), т.к. в этом случае инициатором подключения является наш сервер(SQUID, обновления безопастности, например). Так же разрешаем уже установленные входящие подключения, инициированные интернет сервером. FOWRWARD: Пользователям локальной сети(помимо SQUID) разрешаем DNS запросы(почта, чтоб не "мусорить" циферками серверов в настройках TheBat). Аська убрана, и будет подключаться через SQUID(HTTPS), в файрволе просто закомментирована. А так же разрешаем установленные соединения из локальной сети, которые были разрешены. Для коннекта аськи через SQUID необходимо просто в ее настройках указать, что подключение будет HTTPS, указать адрес и порт 3128 нашего прокси сервера и задать логин и пароль доступа на прокси сервер. И так еще раз обрисуем более подробно, чтоже нам нужно обеспечить: 1. Доступ в интернет пользователям локальной сети через прокси сервер SQUID. 2. Доступ на БЕСПЛАТНЫЕ и "БУХГАЛТЕРСКИЕ"(эл. отчетность) почтовые сервера, минуя прокси сервер, напрямую (если упадет SQUID, то по крайней мере основная артерия документооборота организации будет работать). 3. Доступ из вне по VPN, а так же! используя VPN подключение, доступ на сервер терминалов организации (например, удаленное администрирование 1С бухгалтерии) 4. Доступ к APlusServer(порт 5555), который установлен на сервере терминалов, для обмена данными 1С с КПК сотрудников организации, подключенными(КПК :) ) к интеренет. Для написания файрвола принципиально важно понимать как идет пакет, который мы хотим обработать. Без знания теории максимум, что может получиться - это хороший копипаст. Оставляю чтение документации и изучения синтаксиса iptables на совести администратора, хотя в подробном разборе файрвола будет все описано достаточно точно. И так, файрвол(/etc/fw): #!/bin/sh #Закоментированно, все что касается аськи, кто хочет может пустить ее напрямую из локалки, #но не рекомендую, накачают трафика юзеры. #Описываем переменные. Так файрвол будет более компактный, читаемый #и масштабируемый: SERVER1C="192.168.х.х" INET="eth1" NET="eth0" NET_NET="192.168.х.х/24" INETIP="х.х.х.х" LANIP="192.168.х.х" ELCOM_SMTP="х.х.х.х" ELCOM_POP="х.х.х.х" IRIDAN="х.х.х.х" UNPRIVPORTS="1024:65535" DNS_SERVER1="х.х.х.х" DNS_SERVER2="х.х.х.х" #ICQ_SERVER1="64.12.0.0/16" #ICQ_SERVER2="205.188.0.0/16" SYSADMIN="192.168.х.х" #Сбрасываем все правила. #Таблицы nat и mangle засоряются #при отладке файрвола, когда его нужно запускать #несколько раз для тестирования, например сервера APlusServer #и в случае, если это не учесть, будут сильные глюки #при обмене КПК с сервером. iptables -F INPUT iptables -F FORWARD iptables -F OUTPUT iptables -t nat -F PREROUTING iptables -t nat -F POSTROUTING iptables -t mangle -F #Политика по умолчанию, запретить все нах iptables -P FORWARD DROP iptables -P INPUT DROP iptables -P OUTPUT DROP #Прямо дропаем пакеты NEW, но без флага --syn(запрос на установку соединения) iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP #Явный бан всех запросов на соединение из инета, #кроме тех, которые нужны, а нам нужен только VPN(порт 1723) iptables -A INPUT -d $INETIP -p TCP --syn --dport ! 1723 -j DROP #ДАем VPN для PoPToPа #разрешаем порт 1723 и протокол 47(используется при авторизации) iptables -A INPUT -p TCP -d $INETIP --dport 1723 -j ACCEPT iptables -A INPUT -p 47 -j ACCEPT #Даем сервер терминалов для VPN подключений порт 3389 iptables -A FORWARD -p TCP -s $NET_NET -d $SERVER1C --dport 3389 \ -j ACCEPT #Порт форвардинг, перенапрявляем запросы на наш APlusServer, #который установлен на сервере терминалов. #После разрешаем в цепочке FORWARD ходить туда клиентам iptables -t nat -A PREROUTING -d $INETIP -p TCP --dport 5555 \ -j DNAT --to-destination $SERVER1C:5555 iptables -A FORWARD -p TCP -d $SERVER1C --dport 5555 -j ACCEPT #Открываем TCP порты каторые слушать только из локалки #SQUID+SSH iptables -A INPUT -s $NET_NET -p TCP -d $LANIP -m multiport \ --dport 22,3128 -j ACCEPT #Даем инет юзерам, ессно через SQUID #То есть разрешаем уже установленные входящие подключения #на незарезервированные порты(смотрим матчасть, как устанавливается *соединение, например, при запросе клиента на www.ya.ru) iptables -A INPUT -d $INETIP -p TCP --dport $UNPRIVPORTS \ -m state --state ESTABLISHED,RELATED -j ACCEPT #Разрешить DNS для сквида и для локалки(почта, аська). #Чтобы злой умышленник не смог подменить свой IP адрес и закосить #под наш ДНС сервер, разрешаем ТОЛЬКО ответы на нашы ДНС запросы #В протокле UDP, если пакет не первый, то он получает статус ESTABLISHED #Так же обрабатываем протокол TCP. Очень редко, когда это может понадобиться, #т.к. в основном он используется при обмене данными ДНС серверов, но все же... iptables -A INPUT -p UDP -s $DNS_SERVER1 -m state --state ESTABLISHED \ --sport 53 -j ACCEPT iptables -A INPUT -p TCP -s $DNS_SERVER1 --sport 53 --dport $UNPRIVPORTS \ -m state --state ESTABLISHED -j ACCEPT iptables -A INPUT -p UDP -s $DNS_SERVER2 -m state --state ESTABLISHED \ --sport 53 -j ACCEPT iptables -A INPUT -p TCP -s $DNS_SERVER2 --sport 53 --dport $UNPRIVPORTS \ -m state --state ESTABLISHED -j ACCEPT iptables -A FORWARD -p UDP -s $NET_NET -d $DNS_SERVER1 --dport 53 -j ACCEPT iptables -A FORWARD -p UDP -s $DNS_SERVER1 -d $NET_NET --sport 53 \ -m state --state ESTABLISHED -j ACCEPT iptables -A FORWARD -p TCP -s $NET_NET -d $DNS_SERVER1 --dport 53 -j ACCEPT iptables -A FORWARD -p UDP -s $NET_NET -d $DNS_SERVER2 --dport 53 -j ACCEPT iptables -A FORWARD -p UDP -s $DNS_SERVER2 -d $NET_NET --sport 53 \ -m state --state ESTABLISHED -j ACCEPT iptables -A FORWARD -p TCP -s $NET_NET -d $DNS_SERVER2 --dport 53 -j ACCEPT #Почта только провайдерная и электронная отчетность, #остальная бан, ибо нех iptables -A FORWARD -s $NET_NET -d $ELCOM_POP -p TCP --dport 110 -j ACCEPT iptables -A FORWARD -s $NET_NET -d $ELCOM_SMTP -p TCP --dport 25 -j ACCEPT iptables -A FORWARD -s $NET_NET -d $IRIDAN -p TCP --dport 110 -j ACCEPT iptables -A FORWARD -s $NET_NET -d $IRIDAN -p TCP --dport 25 -j ACCEPT #ICQ, разрешаем авторизацию аське, кому нада раскомментируйте #iptables -A FORWARD -p TCP -s $NET_NET -d $ICQ_SERVER1 --dport 5190 -j ACCEPT #iptables -A FORWARD -p TCP -s $ICQ_SERVER1 -d $NET_NET --sport 5190 \ #-m state --state ESTABLISHED -j ACCEPT #Разрешаем ICQ отправлять сообщения и все что с этим связано #нет нормальной спецификации на ICQ, все со снифера #iptables -A FORWARD -p TCP -s $NET_NET -d $ICQ_SERVER2 --dport 5190 -j ACCEPT #iptables -A FORWARD -p TCP -s $ICQ_SERVER2 -d $NET_NET --sport 5190 \ #-m state --state ESTABLISHED -j ACCEPT #Разрешаем уже установленные соединения, выше было разрешено #только обращаться во вне из локальной сети, но надо же чтобы и ответы #на запросы доходили, то есть даем в локалку #кпк сервер, днс, почту и терминал, все остальное либо через сквид #либо никаГ iptables -A FORWARD -p TCP -m state --state ESTABLISHED,RELATED \ -m multiport --sport 5555,53,110,25,3389 -j ACCEPT #Внутри дИмакратия, то есть разрешаем нашему серверу устанавливать соединения, #а так же чтоб "внутри все ходило" iptables -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT iptables -A INPUT -p ALL -s $LANIP -i lo -j ACCEPT iptables -A INPUT -p ALL -s $INETIP -i lo -j ACCEPT iptables -A OUTPUT -p ALL -d 127.0.0.1 -o lo -j ACCEPT iptables -A OUTPUT -p ALL -s $INETIP -j ACCEPT iptables -A OUTPUT -p ALL -s $LANIP -j ACCEPT iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT #Дырочка для сисадмина :) #ну это святое, малоли взгрустнется, и нада будет развеять скуку, #поубивав зомби и в очередной раз спасти все человечество от злой гнили #накрайняк скачать новый фильмец с трекера, и под пиво его посмотреть iptables -A FORWARD -p TCP -d $SYSADMIN --dport $UNPRIVPORTS -j ACCEPT iptables -A FORWARD -p TCP -s $SYSADMIN --sport $UNPRIVPORTS -j ACCEPT iptables -A FORWARD -p UDP -d $SYSADMIN --dport $UNPRIVPORTS -j ACCEPT iptables -A FORWARD -p UDP -s $SYSADMIN --sport $UNPRIVPORTS -j ACCEPT #копипаст, пусть будет, мат.часть не помешает: #Есть некоторые провайдеры, которые очень не любят, когда одним #подключением пользуется несколько компьютеров, если мы начинаем #устанавливать на все пакеты одно и то же значение TTL, то тем #самым мы лишаем провайдера одного из критериев определения того, #что подключение к Интернету разделяется несколькими компьютерами. #Для примера можно привести число TTL = 64, которое является стандартным #для ядра Linux. iptables -t mangle -A PREROUTING -i $INET -j TTL --ttl-set 64 #Включаем НАТ iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INETIP echo "1" > /proc/sys/net/ipv4/ip_forward Добавляем после отладки наш файрвол в автозагрузку, есть скрипт, который запускается последним при загрузке системы /etc/rc.local, вот туда и пишем команду /etc/fw(/полный путь/fw) и не забываем установить права на fw: chmod 711 /etc/fw (полный доступ ТОЛЬКО! для владельца и запуск для всех остальных).

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, banzai (?), 16:27, 30/04/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Получается авторизация только через сквид, нат пускает без всякой авторизации, аналогично учет трафика... Да и оптимальней было бы настроить прозрачный прокси, клиентам раздавать настройки через dhcp - не придется каждому прописывать настройки прокси.
     
  • 1.2, OneROFL (?), 09:38, 05/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    нат пускает только "бесплатный" трафик.
    А оптимальней ставить НетАМС :)

     
     
  • 2.12, kert84 (ok), 18:15, 07/06/2008 [^] [^^] [^^^] [ответить]  
  • +/
    А где в настройки описано что пускает только бесплатный траффик? Мне кажется что пускает весь траффик Возможно я что то не понимаю))))(скорее всего:)))
     

  • 1.3, isupport (?), 23:29, 15/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Статья просто отличная, а  настроить остальное "под себя" это дело фантазии и квалификации. Главное база неплохая. Спасибо за статью.
     
  • 1.4, isupport (?), 23:32, 15/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    добавлю что для такого обьема рабочих станций dhcpd просто необходим, уйдет и проблема с дублированием ипов.
     
  • 1.5, Ошо (?), 13:56, 23/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А почему часть пакетов ставиться через apt-get а другая через aptitude?
     
     
  • 2.9, netc (?), 09:43, 07/06/2008 [^] [^^] [^^^] [ответить]  
  • +/
    потому-что aptitude запоминает что и для чего он ставил
    т.е. он помнит что ему когда сказали ставить Samba он еще установил и samba-common
    ну и так далее
    просто удалять пакеты потом намного легче

    а еще ставить надо так aptitude -R install ...
    -R без рекомендованных пакетов (т.е зачастую не нужных нафик)

     
     
  • 3.18, Юрий (??), 13:34, 05/04/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Что за ернуда? apt-get тоже поставит samba-common, точнее он скажет ему он нужен.
     
     
  • 4.21, Андрей (??), 14:01, 17/04/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Что за ернуда? apt-get тоже поставит samba-common, точнее он скажет ему он
    >нужен.

    Поставит. Но не удалит при удалении samba.

     
     
  • 5.29, linjan (?), 11:49, 13/02/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Не удалит, но скажет, что этот пакет больше не нужен и его можно удалить через apt-get autoremove
     

  • 1.6, OneROFL (?), 10:31, 28/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    да это не решает :)
     
  • 1.7, OneROFL (?), 10:33, 28/05/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а по поводу DHCP, DNS, локальной почты
    все эти функции выполняет контроллер домена Windows 2003 server
     
  • 1.8, prostochel (?), 17:26, 03/06/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спс за статью +1 ;)
     
  • 1.10, Andrey Mitrofanov (?), 10:09, 07/06/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо за статью.

    >        iptables -P INPUT ACCEPT
    >        iptables -P OUTPUT ACCEPT
    >        iptables -P FORWARD ACCEPT
    > Файрвол с комментариями будет ниже - просто даем интернет.
    > Итак, первое правило: все, что окружает наш роутер - это зло.

    По "первому правилу" просто "дать интернет" нужно было делать:

    iptables -P INPUT DROP
    iptables -P OUTPUT DROP

    :) "Лично мне так ка-а-атся."(тм)

     
     
  • 2.11, Andrey Mitrofanov (?), 12:14, 07/06/2008 [^] [^^] [^^^] [ответить]  
  • +/
    >По "первому правилу" просто "дать интернет" нужно было делать:
    >
    >iptables -P INPUT DROP
    >iptables -P OUTPUT DROP

    Да, при этом придётся делать сначала файервол до сервисов или открывать fw для каждого вервиса во время его настройки... Зато не будет "окна уязвимости".

    #>#Прямо дропаем пакеты NEW, но без флага --syn(запрос на установку соединения)
    #>iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP

    -A in_xxx -m state --state INVALID -j DROP
    -A in_xxx -f -j pr_xxx_fragments
    -A in_xxx -p tcp -m state --state NEW \! --syn -j pr_xxx_nosyn
    -A in_xxx -p icmp --icmp-type echo-request -j pr_xxx_icmpflood
    -A in_xxx -p tcp --syn -j pr_xxx_synflood
    -A in_xxx -p tcp --tcp-flags ALL ALL -j pr_xxx_malxmas
    -A in_xxx -p tcp --tcp-flags ALL NONE -j pr_xxx_malnull
    -A in_xxx -p tcp --tcp-flags SYN\,FIN SYN\,FIN -j pr_xxx_malbad
    -A in_xxx -p tcp --tcp-flags SYN\,RST SYN\,RST -j pr_xxx_malbad
    -A in_xxx -p tcp --tcp-flags ALL SYN\,RST\,ACK\,FIN\,URG -j pr_xxx_malbad
    -A in_xxx -p tcp --tcp-flags ALL FIN\,URG\,PSH -j pr_xxx_malbad

    И я эти (и ещё 16 штук с логами-дропами в семи непоказанных цепочках) правила _не_ писал, за меня их программа пишет...

    Рассказать какая? B-))

     

  • 1.13, OneROFL (?), 13:10, 09/06/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    попробуй руками прописать,
    попробуй обратиться по этому "правилу"
    и сравни.
    Есть разница отработки файрвола,
    да и тут можно это викинуть, оставил чисто
    ради ознокомления статуса пакета, каму влом
    читать доку
     
  • 1.14, netc (??), 18:47, 05/07/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Из руководства по иптаблес

    6.4.3.4. Критерий Multiport
    Расширение multiport позволяет указывать в тексте правила несколько портов и диапазонов портов.

    Вы не сможете использовать стандартную проверку портов и расширение -m multiport (например --sport 1024:63353 -m multiport --dport 21,23,80) одновременно. Подобные правила будут просто отвергаться iptables.

    т.е

                    #Открываем TCP порты каторые слушать только из локалки
                    #SQUID+SSH
                    iptables -A INPUT -s $NET_NET -p TCP -d $LANIP -m multiport \
                    --dport 22,3128 -j ACCEPT

    - неправильное ???

    я не стал рисковать

     
     
  • 2.15, netc (??), 18:48, 05/07/2008 [^] [^^] [^^^] [ответить]  
  • +/
    ой блин извините ;(
     
     
  • 3.17, elec (?), 18:10, 20/10/2008 [^] [^^] [^^^] [ответить]  
  • +/
    а как тогда правильно? поправить бы статейку =)
     
  • 2.19, Юрий (??), 13:36, 05/04/2009 [^] [^^] [^^^] [ответить]  
  • +/
    я всегда так пишу и всегда так работает - только sport 1024:65535  явно лишне правило. оно ничо не даёт.
     

  • 1.16, Igor (??), 17:49, 29/07/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо за статью, очень понятно и доступно. Автору респект.
     
  • 1.20, Юрий (??), 15:19, 05/04/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    вместо
    echo "1" > /proc/sys/net/ipv4/ip_forward
    уже давно следует писать
    в /etc/sysctl.conf
    net.ipv4.ip_forward=1
    во всяком случае в RH/Debian системах
     
  • 1.22, Ken (?), 09:42, 26/08/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    #!/bin/sh
            echo "------------------------------------------------" >> /var/log/vpn.log
            date >> /var/log/vpn.log
            echo "from IP $6 with speed $3">> /var/log/vpn.log
            echo "------------------------------------------------" >> /var/log/vpn.log

    А откуда берется $6 и $3

     
  • 1.23, Грозный Ламер (?), 01:13, 07/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Адреса ДНС серверов находятся в файле /etc/resolf.conf

    Исправьте пожалуйста имя файла на /etc/resolv.conf

     
  • 1.24, Saw (?), 19:35, 28/01/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Было бы отлично если бы была аналогичная статья Freebsd+IPFW+squid
     
  • 1.25, WiZaRD (?), 15:34, 02/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Отличный пост!
    Огромное спасибо.
    коротко, чётко, доступно...
     
  • 1.26, HolyDiver (?), 13:27, 12/04/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Огромное спасибо!
    Все Ок и под x64!

     
  • 1.27, Роман (??), 02:55, 07/05/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот такие строчки показывают неграмотность автора и то что он сам то не запускал видимо, что писал.
    iptables -A FORWARD -p UDP -s $DNS_SERVER2 -d $NET_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT

    UDP ПРОТОКОЛ БЕЗ установления соединения... какой там нафиг эстеблишед ? а Таблы ругаются от такой команды.

     
  • 1.28, alex_shkut (?), 23:10, 17/11/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Некоторым надо придраться к тонкостям, а кому-то просто намек и схема действий, дабы не потратить пару недель на вычитку манов, осознание всех супервозможностей ИПтаблов и т.п. Кто знает - поймет, и исправит ошибки. Кто не знает - тому все равно без толку. Автору огромное спасибо!
     
  • 1.30, OneROFL (?), 12:26, 29/06/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    --UDP ПРОТОКОЛ БЕЗ установления соединения... какой там нафиг эстеблишед ? а Таблы ругаются от такой команды--

    если не первый пакет в соединении,то как ESTABLISHED считается.
    Все работает в боевых условиях.

     
  • 1.31, ДАНИЛ (?), 12:23, 24/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Бьюсь целый день ДНС не пропускает запросы,,, чего делать ? Маны уже голову забили на прочь.....
     
  • 1.32, ДАНИЛ (?), 12:27, 24/03/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот такие строчки показывают неграмотность автора и то что он сам то не запускал видимо, что писал.
    iptables -A FORWARD -p UDP -s $DNS_SERVER2 -d $NET_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT

    UDP ПРОТОКОЛ БЕЗ установления соединения... какой там нафиг эстеблишед ? а Таблы ругаются от такой команды.

    РЕБЯТА ПОДСКАЖИТЕ КАК ИСПРАВИТЬ ДАННУЮ ОШИБКУ !!!

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру