Hi-Tech Arduino Компьютеры Интернет
HV-Lab Reference Linux Форум
Справочники Libraries Windows Галерея
Электроника Hardware Hardware Загрузки
Печатные платы Forum Программирование Мини-чат
[ Февр 26, 07:42 ] admin: Форум перешел в разряд архивного.
[ Февр 24, 19:02 ] admin: переехали на новый сервер. Грядут перемены.
[ Фев 20, 08:38 ] кулибин: Переход на SSL был непрост (особенно с абсолютными путями на изображения, но мы его осуществили)
RSS статьи
 
Статьи

Статьи->Linux->Разборки с серверами(Часть 5) [ Поиск ]

Разборки с серверами(Часть 5) - Iptables и SAMS
Отправил: кулибин, Суббота, 07 Марта 2009 20:08
 В №21 за 2008г. мы разобрались с тотальным учетом трафика. Теперь настроим доступ по портам. А также создадим особые условия для 80 порта от нас. По этому порту нам надо контролировать статистику посещения сайтов, а также доступ к ним. Кроме этого, нам предоставится возможность обрезать баннеры, кэшировать данные и многое другое.
Сделать все это нам поможет брандмауэр iptables, который сделает с нашими запросами все что нужно. Например по поводу последнего момента - все исходящие (это важно) запросы по 80-му порту надо перехватить и направить их на 3128 порт. На этом порту их подберет прокси-сервер Squid, который и будет вести статистику и контролировать права доступа. Пусть имеется компьютер с двумя интерфейсами eth0 и eth1, используемый в качестве шлюза. Пусть eth1 будет у нас внутренней сетью, а eth0 — внешней. Для определенности возьмем что в системе 7 компьютеров <рис>сеть-squid-iptables.jpg<рис>
Настройка iptables.
Iptables —это чрезвычайно гибкий файрвол для Linux. Его возможности поражают. Используется на ядрах 2.6.Х. Является продолжением развития ветки ipchaines — файрвола для ядер 2.2 и 2.4.
Существует два способа настройки файрвола — все что разрешено, не запрещено, и все что запрещено, не разрешено. т.е. мы можем по умолчанию либо открыть всем доступ и закрывать нежелательные, либо наоборот. Первый вариант предусматривает максимальную простоту настройки — Запустил файрвол, подкорректировал настройки и ладно. Однако в этом случае снижается защищенность вашего сервера. Во втором случае обеспечивается максимальная осведомленность о незащищенных местах — ведь мы открыли лишь определенные порты. Но создаются некоторые трудности в виде проблем с доступом — невозможно предусмотреть все случаи.
Работа с брандмауэром
Внесем ясность в процесс работы брандмауэра. Брандмауэр предоставляет возможность управления пакетами. Набор правил для определенных пакетов называется цепочкой. Цепочка бывает входящей, исходящей и переадресацией(input,output, forward). Цепочку можно принять(ACCEPT), запретить прохождение пакета(DENY), либо отклонить его(REJECT). Отличие запрета и отклонения пакета в следующем: при отклонении сетевого пакета, отправителю возвращается сообщение об ошибке. При запрете прохождения пакета сам пакет удаляется и отправитель ничего не получает. Лучше всего просто запрещать прохождение пакета, поскольку отправка сообщения об ошибке увеличивает сетевой трафик и оно может быть использовано для организации атаки — любое ответное действие на неправильные пакеты дает взломщику дополнительную информацию о настройке системы.
Для начала разрешим перенаправление портов:
sysctl net.ipv4.ip_forward=1
После чего сбросим любые имевшиеся до этого правила в системе:
# iptables -F
Таким образом все три цепочки input, output и forward будут сброшены.
Теперь настроим правила прохождения трафика по умолчанию, например запретим:
# iptables -P input DENY
# iptables -P output DENY
# iptables -P forward DENY
Таким образом мы заблокировали абсолютно весь трафик.
Заблокированный трафик — не всегда хорошо. Запустите ifconfig и вы увидите один непонятный интерфейс — lo — т.н. интерфейс обратной петли. Многие программы на вашем компьютере работают через него. Чтобы не происходило проблем, разрешим трафик через этот интерфейс:
# iptables -A input -i $LOOPBACK_INTERFACE -j ACCEPT
# iptables -A output -i $LOOPBACK_INTERFACE -j ACCEPT
Что за неизвестная переменная? У iptables и ipchaines существуют символьные константы, предназначенные в основном для удобочитаемости правил, также с ними становится проще ориентироваться при написании новых правил — чаще всего нам не требуется знать, скажем, имена интерфейсов. Следующая строчка обладает таким же действием:
# iptables -A input -i lo -j ACCEPT
Вид команды:
# iptables [параметры] [-j <действие>]
Список параметров:

Параметр

Описание

-A <цепочка>

Добавляем правило к концу цепочки input, output и forward

-I <цепочка>

Добавляем правило уже в начало цепочки

-i <интерфейс>

Определяем сетевой интерфейс, применимый к нашему правилу

-p <протокол>

Определяем протокол, к которому будет применяться наше правило. В качестве протоколов задаются tcp, udp, icmp и all

Если параметр не указан, то правило применяется ко всем цепочкам/интерфейсам/протоколам и т. п.
Как правило сервер выносят в отдельную подсеть и применяют к ней большие требования по безопасности. Данная «демилитаризованная» зона подвержена дополнительной угрозе извне, поскольку через шлюз проброшены порты. Начнем с того, что в случае сервера обязательно запрещение всего трафика по умолчанию — все что не разрешено — запрещено. После чего вспомним на каком порту работают некоторые сервисы и разрешим трафик на эти порты:

Порт

Служба

21/20

ФТП протокол: данные/команды

22

Ssh-доступ

25

STMP протокол

80

Http протокол

110

POP3 протокол

143

IMAP протокол

443

HTTPS протокол

Полный список включает в себя несколько тысяч различнейших пунктов. Поскольку у нас шлюз, то трафик мы будет не разрешать а перенаправлять.
Команда для перенаправления будет выглядеть следующим образом:
# iptables -t nat -A PREROUTING -p tcp --dport 21 -i eth0 -j DNAT --to 192.168.0.123
при этом мы можем пересылать как угодно и куда угодно, например с одного порта на другой, просто указав порт назначения:
# iptables -t nat -A PREROUTING -p tcp —dport 2121 -i eth0 -j DNAT --to 192.168.0.123:21
Рекомендую взять за правило как только поднимаете какой-либо сетевой сервис, сразу пробрасывайте порт «наружу» если это требуется, ибо забыв сделать это вы будете завалены жалобами, почему-ж ничего не работает-то!
Разберемся с заворачиванием исходящего http и https трафика на Proxy-Server Squid:
$IPT -t nat --new-chain TransProxy
#обрабатываем только 80-й(http) и 443-й(https) порты:
$IPT -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j TransProxy
$IPT -t nat -A PREROUTING -p tcp -i eth1 --dport 443 -j TransProxy
#указываем IP-адрес нашей сети:
$IPT -t nat -A TransProxy-d 192.168.1.0/24 -j ACCEPT
$IPT -t nat -A TransProxy-d 127.0.0.1/8 -j ACCEPT
#и все эти запросы перенаправляем на 3128 порт, на котором пакеты подкарауливает squid:
$IPT -t nat -A TransProxy -p TCP -j DNAT --to 192.168.1.1:3128
Выполняем iptables-save , чтобы не вбивать каждый раз при перезагрузке настройки вручную.
Если вам не хочется копаться в консольных настройках, можете смело воспользоваться утилитой для web-администрирования Webmin. У нее вполне неплохой интерфейс и достаточные для работы возможности. Однако говорят она не очень хорошо защищена. Поэтому запретим к 10000 порту доступ извне, т.е. по интерфейсу eth0:

#iptables -A INPUT -i eth0 –dport 10000 -j DENY

Также введем некоторые политики безопасности в самом webmin. Для этого выберем пункт Настройка webmin->управление доступом по IP где укажем только те локальные порты, с которых разрешено управлять системой.
Осталось настроить соответствующим образом Squid.
Его настройки лежат в файле /etc/squid/squid.conf
Открываем файл
#kwrite /etc/squid/squid.conf
Выставляем значения:
#порт, который наш прокси-сервер будет прослушивать
http_port 3128
#Ограничиваем squid в оперативной памяти
cache_mem 16 MB
#выделяем место под кэш:
cache_dir /var/log/squid/cache 1024 16 256
#выделяем гиг места на диске, при этом в папке создается 16 и 256 каталогов 1-го и 2-го уровня.
#устанавливаем права по умолчанию, поскольку нам пока главное — контролировать http-трафик, а настроить доступ мы успеем всегда:
http_access allow all
# и параметры для нашей задачи:
tcp_outgoing_adress <реальный адрес сервера>
httpd_accel_host virtual
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
С настройками покончено.
Теперь сохраните этот файл и перезапустите squid
/etc/init.d/squid restart (в Gentoo)
service squid restart (в rpm-based дистрибутивах)
Http-трафик теперь идет через squid, и все действия записываются в log-файл. А что с ним теперь делать?
Есть несколько способов собирать статистику:
Способ 1: простой и непринужденный — собираем статистику при помощи SARG — SquidCache and Report Generator (http://sarg.sourceforge.net/sarg.php)
Программа позволяет получать информацию за интервал времени о:
  • количестве и времени работавших пользователей
  • трафик по каждому пользователю
  • список web-серверов, посещенных пользователем.
Устанавливается программа без лишних вопросов — главное чтобы ваш php мог обрабатывать и создавать графику (библиотека GD). Чтобы узнать это, посмотрите информацию, выдаваемую командой phpinfo() в php-скрипте.
Генерация происходит либо в ручном, либо в автоматическом режиме. Все настройки можно сделать через webmin — он содержит модули настроки squid и sarg, и дает возможность просмотреть статистику.
Способ 2: всевластный
Останавливаться на простом мониторинге нам не гоже, настроим доступ к web-ресурсам. Это можно сделать вручную — редактируя файл squid.conf, однако это муторно, поэтому воспользуемся утилитой SAMS (http://sams.perm.ru/)
Загружаем пакет, распаковываем. Находим файл doc/RU/index.php — там подробно по русски описана вся установка и настройка.
Собирается sams из исходников:
./configure
make
make install
первая команда после своего завершения выдаст список путей к различным библиотекам, а главное — к папке виртуального сервера apache. Если они отличаются от путей в вашей системе — то выполните ./configure —help и посмотрите список параметров.
Если ./configure выдает вам ошибку, внимательно ее изучите. Вероятнее всего у вас не хватает каких-либо библиотек. На SuSe все недостающие библиотеки можно быстро установить с инсталяционного диска. При установке sams может ругаться на отсутствие следующих пакетов:
mysql-devel - файлы заголовков mysql;
mod_php - модуль php для apache;
php-mysql - библиотека поддержки mysql в php;
libgd - библиотека поддержки графики;
php-gd - модуль поддержки libgd в php;
libpcre — библиотека регулярных выражений Perl;
libpcre- devel -файлы заголовков libpcre
Установив sams, открываем для редактирования файл /etc/sams.conf
отредактируйте в нем строчки, касающиеся mysql — логин и пароль администратора и т.п.
Теперь ищем файл php.ini в папке /etc. В зависимости от дистрибутива он может быть в самых неожиданных местах.
Редактируем в нем строчку:
safe_mode = On
И добавляем свою:
extensions=mysql.so
Закрываем файл, перезагружаем apache и заходим через web-интерфейс по адресу:
localhost/sams
Нам вываливается куча ошибок на английском и предложение создать базу данных. Соглашаемся, вводим логин/пароль MySQL-администратора, логин/пароль sams-юзера, и нажимаем создать. После этого localhost/sams будет вести нас уже на главную страницу web-интерфейса пакета.
Авторизуемся. Логин/пароль по умолчанию admin/qwerty
настроим samsdaemon для периодической генерации статистики:
Администрирование SAMS — параметры samsdaemon и устанавливаем периодическую генерацию статистики с интервалом, например, в 1 минуту. Можно попросить заняться этим демон периодических заданий cron, добавим в файл /etc/crontab строку:
* * * * * /usr/local/bin/sams
Если вам не нравится англоязычный интерфейс, то установите любой язык на выбор. Также, поскольку мы не занимались различными видами авторизации — установим в настройках авторизацию по IP. Это не очень хорошо — если вы настраиваете права доступа для определенной машины, то сменив IP, пользователь войдет в интернет с другими правами и весь ваш труд пойдет на смарку. Для этого существует несколько видов авторизации. Проще всего настроить встроенный в ваш дистрибутив DHCP-сервер, и привязать IP-адрес к MAC-адресу. В добавок ко всему этому запретить доступ машинам со статическим ip. Существует несколько способов авторизации, позволяющих отвязаться от конкретной машины — т.е. Вы садитесь за любую, проходите аутентификацию и работаете как ни в чем не бывало. Однако настройка такой системы достаточно сложна и выходит за рамки этого журнала. Если вам будет интересно — почитайте упомянутую документацию по SAMS.
Напоследок, настроим на шлюзе DHCP-сервер. Это не просто не займет много времени, это сэкономит наше будущее время. Есть у вас большая локальная сеть. Как настроить интернет? Неужели прописывать даже на 10 компьютерах все вручную? А если что-то поменяется? Давайте централизуем всю эту бяку. Для этого служит dhcpd — dhcp-сервер. Если у вас не Gentoo или какой-то урезанный дистрибутив — то он у вас скорее всего есть. В случае с Gentoo поставим командой #emerge dhcp
При помощи DHCP можно организовать:
Выдачу статического IP, т.е. Определенная машина в любое время будет иметь определенный IP. В этом случае можно применить такую вещь как запрет всяких левых компьютеров, которые пытаются пролезть в нашу сеть. Не получится теперь подключиться с ноутом к сети и посидеть за чужой счет. В качестве поощрительной меры наказания можно использовать парочку IP с урезанным доступом. Чисто так, для потестить.
Выдачу динамического IP. IP с течением времени могут меняться.
Откроем файл /etc/dhcpd.conf. Это главный файл настройки демона.

Option domain-name “test.ru”; #домен, в котором работает ваша сеть. Вполне пойдет какой-нибудь локальный домен.

Option domain-name-servers 192.168.0.50; # DNS-сервера в вашей сети. Я для примера указал свой.

Default-lease-time 86400; #Время аренды клиентом IP в секундах. Параметр по умолчанию. В данном случае 24 часа.

#опишем нашу подсеть, маску, диапазон и дефолный шлюз:

subnet 192.168.0.0 netmask 255.255.255.0 {

range 192.168.0.10 192.168.0.37;

option routers 192.168.0.50;

}

#для примера опишу одного пользователя с постоянным IP:

host magaz{

hardware ethernet 01:23:45:67:89:AB;

fixed-adress 192.168.0.24;

}

#Расписав все необходимые нам компьютеры запрещаем левые подключения:

deny unknown-clients;

Все. Сохраняем файл и запускаем DHCP-сервер командой:

service dhcpd start RPM-based)

/etc/init.d/dhcpd start Gentoo)

Если у нас несколько подсетей, то просто добавляем модуль subnet с соответствующими опциями — DNS и шлюз в такой сложной сети ведь одни и те же.

Подытожим по двум статьям: у нас теперь имеется неплохо настроенный и прекрасно конфигурируемый шлюз, который облегчит нашу жизнь. Теперь можно вплотную заняться организацей полноценного сервера.
Артем Кашканов
Голосов Голосов: 2 - В среднем: 3.5

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

Статистика
Всего 205 статей в базе
Наиболее просматриваемые: Arduino и сеть RS485.
Лучшие по оценкам: РЦВМ1 - Релейная Цифровая Вычислительная Машина

Пользователи в разделе статьи: 1 (0 Пользователи 1 Гости и 0 Скрытые пользователи)
Видимые пользователи:


 
 

MKPortal©2003-2008 mkportal.it
MultiBoard ©2007-2009 RusMKPortal
Страница сгенерированна за 0.02129 секунд с 24 обращениями в базу данных

Intel Core i5-3450 2Gb RAM 100Gb HDD 100Mbps Ethernet

© Artem Kashkanov 2005-2016