Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Настройка Linux роутер на базе дистрибутива Debian GNU/Linux

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Unix
Предыдущая тема :: Следующая тема  
Автор Сообщение
OneROFL



Зарегистрирован: 04.04.2008
Сообщения: 8

СообщениеДобавлено: Пт Апр 04 2008 14:15    Заголовок сообщения: Настройка Linux роутер на базе дистрибутива Debian GNU/Linux Ответить с цитатой

Настройка Linux роутер на базе
дистрибутива Debian GNU/Linux 4.0 r3.
27.03.2008



Задача.

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С с КПК сотрудников организации, подключенными(КПК Smile ) к интеренет.

* Для написания файрвола принципиально важно понимать как идет пакет, который
*мы хотим обработать. Без знания теории максимум, что может получиться - это хороший
*копипаст. Оставляю чтение документации и изучения синтаксиса 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

#Дырочка для сисадмина Smile
#ну это святое, малоли взгрустнется, и нада будет развеять скуку,
#поубивав зомби и в очередной раз спасти все человечество от злой гнили
#накрайняк скачать новый фильмец с трекера, и под пиво его посмотреть
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 (полный доступ ТОЛЬКО! для владельца и запуск для всех остальных).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Unix Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...