Как локально сохранить свой или чужой блог LiveJournal

Не то что бы я опасался, что мой порно-бложык рано или поздно выпилят, но как-то так исторически сложилось, что резервные копии я иметь люблю. И нехрен придираться к слову "иметь"! Опять же интересно бывает перечитать собственные старые посты.
Ну и, как-бы вот.
Скрипт, весьма популярный в этих ваших инторнетах, написанный на обычном перлуше, что позволяет править его. Создает "оглавление" для скачанных постов вместе с юзерпиками, картинками и коментариями. Поддерживает http-прокси. Сам разворачивает треды. А! Да! Как вы уже понимаете, можно скачать не только свой, но и чужой журнал.

читать дальше...

Как локально сохранить свой или чужой блог LiveJournal


Не то что бы я опасался, что мой порно-бложык рано или поздно выпилят, но как-то так исторически сложилось, что резервные копии я иметь люблю. Не то что бы я опасался, что мой порно-бложык рано или поздно выпилят, но как-то так исторически сложилось, что резервные копии я иметь люблю. Не то что бы я опасался, что мой порно-бложык рано или поздно выпилят, но как-то так исторически сложилось, что резервные копии я иметь люблю. И нехрен придираться к слову "иметь"! Опять же интересно бывает перечитать собственные старые посты.
Ну и, как-бы вот.
Скрипт, весьма популярный в этих ваших инторнетах, написанный на обычном перлуше, что позволяет править его. Создает "оглавление" для скачанных постов вместе с юзерпиками, картинками и коментариями. Поддерживает http-прокси. Сам разворачивает треды. А! Да! Как вы уже понимаете, можно скачать не только свой, но и чужой журнал.

Использование :
ljsm.pl [-r -m -a -c -O -i0123 -I -u user:password -p proxyURL -d yyyy/mm[:yyyy/mm]] user1 user2

-r = продолжить скачивание, даже если файл уже есть на диске
-m = скачивать меморисы, а не посты
-a = скачивать меморисы И посты
-c = скачивать посты без комментариев
-O = перезаписывать существующие файлы
-i1 (скачивать иконки), -i2 (юзерпики), -i3 (всю графику). По умолчанию скачиваются иконки,-i0 отключает скачивание графики
-I = игнорировать ошибки при скачивании
-x = построить index.html и завершить работу
-u user:password = указать ЖЖ-шный логин и пароль
-U = конвертировать из UTF-8 в локальную кодировку. По умолчанию - сохраняет в utf8
-p proxyURL = использовать proxyURL в качестве http прокси
-d yyyy/mm[:yyyy/mm] = сохранять посты начиная с указанной даты или в указанном диапазоне дат

Пример:
Я логинюсь, как serge_shevkunov и скачиваю свой же журнал (serge_shevkunov) со всеми картинками, коментариями и юзерпиками.
solariz@solariz-laptop:~/LJ$ ./ljsm.pl -i3 -u serge_shevkunov:my_password serge_shevkunov

UPD:
Вооооот! Сразу появились в коментах вопросы как это все сделать для некрософт виндовс (((
Рассказываю:
Скачиваем  вот отсюда вот ActivePerl и не отходя от кассы устанавливаем его. После этого открываем cmd и уже в командной строке запускаем скрипт, как описано выше.

Еще лучше - вовсе удалить с компьютера богомерзкую поделку компании некрософт и поставить туда любой понравившийся линукс. Для любителей рюшечек скажу - будет даже красивше ;)

08.05.10 г.


WI-FI USB-адаптер DWA-125 в KUBUNTU

В целях наличия дома инторнетов приобрел задешево USB-адаптер DWA-125. Но, как говорил мой бывший учитель фескультуры, Мурат Борисович — «рано сосать друг другу члены, ребятки», как только я воткнул его в бочину ноута — понял нихера он не заведется. ( Посему рассказываю, как побороть эту железяку в отдельно взятом пингвинариуме.

читать дальше...

WI-FI USB-адаптер DWA-125 в KUBUNTU


У меня в ноуте вафельница на базе чипсета Broadcom BCM431.
Недавно перестала работать. Точнее стала работать весьма странно. Скорость даже внутри локалки не превышала одного мегабита ( Испробовал стопицот способов, включая ndiswrapper с дровами от мелкомягких пока ситуация не разъяснилась.
В целях наличия дома инторнетов приобрел задешево USB-адаптер DWA-125. Но, как говорил мой бывший учитель фескультуры, Мурат Борисович — «рано сосать друг другу члены, ребятки», как только я воткнул его в бочину ноута — понял нихера он не заведется. ( Посему рассказываю, как побороть эту железяку в отдельно взятом пингвинариуме.

solariz@solariz-laptop:~$ sudo su [sudo]
password for solariz:
root@solariz-laptop:/home/solariz#
Скачиваем с сайта dlink.ru дровишки для linux от этого поганого устройства:
root@solariz-laptop:/home/solariz/Загрузки#
wget ftp://ftp.dlink.ru/pub/Wireless/DWA-125/Drivers/Linux/2009_1204_RT3070_Linux_STA_v2.1.2.0.tar.gz
Распаковываем:
root@solariz-laptop:/home/solariz/Загрузки# tar xvfz 2009_1204_RT3070_Linux_STA_v2.1.2.0.tar.gz
Собираем и устанавливаем:
root@solariz-laptop:/home/solariz/Загрузки# cd 2009_1204_RT3070_Linux_STA_v2.1.2.0
root@solariz-laptop:/home/solariz/Загрузки/2009_1204_RT3070_Linux_STA_v2.1.2.0# make
root@solariz-laptop:/home/solariz/Загрузки/2009_1204_RT3070_Linux_STA_v2.1.2.0# make install
Узнаем нашего врага влетсо:
root@solariz-laptop:/home/solariz/Загрузки# lsusb | grep D-Link
Bus 002 Device 005: ID 07d1:3c0d D-Link System
Зная это создадим два волшебных файла:
root@solariz-laptop:/home/solariz/Загрузки# cd /etc/udev/rules.d/
root@solariz-laptop:/etc/udev/rules.d# touch network_drivers.conf
root@solariz-laptop:/etc/udev/rules.d# touch network_drivers.rules
Редактируем их:
root@solariz-laptop:/etc/udev/rules.d# vi network_drivers.conf
install rt3070sta /sbin/modprobe --ignore-install rt3070sta $CMDLINE_OPTS; /bin/echo "07d1 3c0d" > /sys/bus/usb/drivers/rt2870/new_id
root@solariz-laptop:/etc/udev/rules.d# vi network_drivers.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="07d1", ATTR{idProduct}=="3c0d", RUN+="/sbin/modprobe -qba rt3070sta"
Перегружаемся и наслаждаемся эффектом.
UPD:
Мне тут один человек написал о своей проблеме, типа не работет. Так вот. Будьте внимательны. Не забудьте добавить в бдэк-лист старые дрова:
/etc/modprobe.d/blacklist.conf
blacklist rt2x00usb
blacklist rt2x00lib
blacklist rt2800usb

28.03.10 г.

CenterICQ+screen = Вечная жизнь в консоли.

Вступление

Вопрос:

Везде таскаю с собой флэшку с установленной на ней крысой (клиент &RQ - прим.) Все время боюсь потерять историю и контакт-лист. Бывает в сетях администратор блокирует порты или сервера icq. Иногда даже альтернативные вроде login.oscar.aol.com. Однажды столкнулся с тем, что на компьютере, с которого я хотел выйти в сеть, были отключены USB-порты. Некуда было воткнуть флэшку. Еще мне хотелось быть все время в онлайне. Можно ли что-то придумать?

Ответ:

Конечно можно. =) Все уже придумано. Два года назад я увидел CenterICQ и понял - это именно то, что вам необходимо.

Основные возможности программы

читать дальше...

CenterICQ+screen = Вечная жизнь в консоли.


Вступление


Вопрос:

Везде таскаю с собой флэшку с установленной на ней крысой (клиент &RQ - прим.) Все время боюсь потерять историю и контакт-лист. Бывает в сетях администратор блокирует порты или сервера icq. Иногда даже альтернативные вроде login.oscar.aol.com. Однажды столкнулся с тем, что на компьютере, с которого я хотел выйти в сеть, были отключены USB-порты. Некуда было воткнуть флэшку. Еще мне хотелось быть все время в онлайне. Можно ли что-то придумать?

Ответ:

Конечно можно. =) Все уже придумано. Два года назад я увидел CenterICQ и понял - это именно то, что вам необходимо.

Основные возможности программы

  • Текстовый интерфейс


  • Базирован на библиотеке ncurses
    Окошки, менюшки и диалоги
    Настраиваемые цветовые схемы
    Возможность пользоваться программой удаленно в ssh или telnet-сессии
    Редактирование настроек в диалогах
    Поддержка отображения иврита и арабского
    Сообщения программы переведены на 15 языков

  • Общие возможности быстрого общения


  • ICQ, Yahoo!, AIM, IRC, MSN, Gadu-Gadu и Jabber
    Посылка, прием и пересылка (forward) сообщений
    Средства командной строки для посылки сообщений через уже работающую копию программы
    Рассылка сообщений по множеству пользователей
    Поддержка групп контактов в списке
    Определение звуков для сообщений и пользователей
    Подключение внешних программ для обработки полученных сообщений
    Просмотр персональных данных пользователей
    Обновление сведений о себе
    Список игнорируемых пользователей
    Настраиваемые адреса серверов
    Возможность соединения с серверами IM через http proxy (метод CONNECT; опционально с авторизацией по логину/паролю)

  • Поддержка ICQ


  • Пересылка сообщений, URL, конактов и SMS
    Получение e-mail express и web pager сообщений
    Доставка SMS через e-mail шлюзы, поддерживаемые Mirabilis
    Отправка SMS на любые поддерживаемые номера телефонов, возможность отправки прямо из командной строки
    Поиск пользователей по номерам, White Pages и ключевым словам
    Случайные партнеры для чата (random chat): поиск желающих и задание группы для себя
    Регистрация новых UIN
    Установка собственных и вычитывание чужих away-сообщений
    Управление списком контактов на сервере
    Задание режима видимости/невидимости для определенных пользователей
    Задание диапазона портов для прямых соединений peer-to-peer

  • Поддержка Yahoo!


  • Пересылка файлов
    Многопользовательские конференции
    Вычитывание статус-сообщений
    Поиск пользователей по параметрам в базе

  • Поддержка Jabber


  • Поиск по users directory
    PGP-шифрование сообщений
    Защищенные SSL-соединения
    Режим невидимости
    Информация vCard: вычитывание и обновление
    Регистрация в сервисах, поддерживаемых сервером
    Многопользовательский чат

  • Поддержка IRC


  • Поддержка private и чата на каналах
    Отображение IRC контактов в списке, и определение их наличия в сети в данный момент
    Различные режимы запроса списков пользователей
    Поддержка идентификации по NickServ
    Пересылка файлов
    Команда ping
    Поддержка запароленных каналов

  • Встроенный клиент LiveJournal


  • Отправка записей в журнал
    Управление списком друзей
    Оповещения о новых записях в журналах друзей
    Оповещения о том, когда кто-либо добавил или удалил ваш аккаунт из списка друзей
    Оповещения о днях рождения друзей в LJ

  • Прочее


  • Встроенный интерфейс для чтения RSS
    Компилируется и работает под Linux, FreeBSD, NetBSD, OpenBSD, Sun Solaris, Windows и MacOS X/Darwin
    Скрипт для миграции списка контактов (включая историю) из licq, kxicq2, gnomeicu и micq
    Ведение журнала работы программы

    Установка

    root@router:/src$ wget http://www.thekonst.net/download/centericq-4.21.0.tar.gz
    root@router:/src$ tar zxf centericq-4.21.0.tar.gz
    root@router:/src$ cd centericq-4.21.0/
    root@router:/src/centericq-4.21.0$ ./configure --prefix=/usr/
    root@router:/src/centericq-4.21.0$ make all install

    Запускать предлагаю так

    Полезный screen поможет оставить вам асю вечно в онлайне. Ко всему прочему, это целесообразно с точки зрения безопасности. Итак.
    Выходим из аккаунта суперпользователя
    root@router:/src$ exit
    Запускаем screen
    user@router:~$ screen
    Запускаем CenterICQ
    user@router:~$ /usr/centericq/bin/centericq
    (Или, если вы хотите переключить интерфейс на русский язык
    user@router:~$ LANG=ru_RU /usr/centericq/bin/centericq)
    Нажимаем Ctrl-A d detach'им из screen.
    [detached]
    Получаем список сессий
    user@router:~$ screen -ls
    There is a screen on:
    1172.pts-1.router (Detached)
    1 Socket in /home/user/.screen.
    и выбираем в нем нужную
    user@router:~$ screen -r 1172

    Настройка и использование

    Доступный, интуитивно понятный интерфейс программы по моему скромному мнению не требует описания. Для тех, у кого все же возникли проблемы - привожу ссылку на форум.

    Все, что вы хотели узнать о NMAP, но боялись спросить

    Название

    Nmap - the Network Mapper. Утилита для сканирования и исследования безопасности сети.

    Использование

    nmap [Метод(ы) сканирования] [Опции] <Хост или сеть #1,[#N]>

    Описание

    Программа Nmap предназначена для сканирования сетей с любым количеством объектов, определения состояния объектов сканируемой сети а также портов и соответствующих им служб. Для этого Nmap использует много различных методов сканирования, таких, как UDP, TCP connect(), TCP SYN (полуоткрытое), FTP proxy (прорыв через ftp), Reverse-ident, ICMP (ping), FIN, ACK, Xmas tree, SYN и NULL-сканирование. Более подробное их описание приведено в разделе "Опции выбора методов сканирования".

    Nmap также поддерживает большой набор дополнительных возможностей, а именно: определение операционной системы удаленного хоста с использованием отпечатков стека TCP/IP, "невидимое" сканирование, динамическое вычисление времени задержки и повтор передачи пакетов, параллельное сканирование, определение неактивных хостов методом параллельного ping-опроса, сканирование с использованием ложных хостов, определение наличия пакетных фильтров, прямое (без использования portmapper) RPC-сканирование, сканирование с использованием IP-фрагментации а также произвольное указание IP-адресов и номеров портов сканируемых сетей.

    Результатом работы Nmap является список отсканированных портов удаленной машины с указанием номера и состояния порта, типа используемого протокола а также названия службы, закрепленной за этим портом. Порт характеризуется тремя возможными состояниями: "открыт", "фильтруемый" и "нефильтруемый". Состояние "открыт" означает, что удаленная машина прослушивает данный порт. Состояние "фильтруемый" означает, что файрволл, пакетный фильтр или другое устройство блокирует доступ к этому порту и Nmap не смог определить его состояние. "Нефильтруемый" означает, что по результатам сканирования Nmap воспринял данный порт как закрытый, при этом средства защиты не помешали Nmap определить его состояние. Это состояние Nmap определяет в любом случае (даже если большинство сканируемых портов хоста фильтруются).

    В зависимости от указанных опций, Nmap также может определить следующие характеристики сканируемого хоста: метод генерации TCP ISN, имя пользователя (username) владельца процесса, зарезервировавшего сканируемый порт, символьные имена, соответствующие сканируемым IP-адресам и т.д.

    читать дальше...

    Все, что вы хотели узнать о NMAP, но боялись спросить


    Название


    Nmap - the Network Mapper. Утилита для сканирования и исследования безопасности сети.


    Использование


    nmap [Метод(ы) сканирования] [Опции] <Хост или сеть #1,[#N]>

    Описание

    Программа Nmap предназначена для сканирования сетей с любым количеством объектов, определения состояния объектов сканируемой сети а также портов и соответствующих им служб. Для этого Nmap использует много различных методов сканирования, таких, как UDP, TCP connect(), TCP SYN (полуоткрытое), FTP proxy (прорыв через ftp), Reverse-ident, ICMP (ping), FIN, ACK, Xmas tree, SYN и NULL-сканирование. Более подробное их описание приведено в разделе "Опции выбора методов сканирования".

    Nmap также поддерживает большой набор дополнительных возможностей, а именно: определение операционной системы удаленного хоста с использованием отпечатков стека TCP/IP, "невидимое" сканирование, динамическое вычисление времени задержки и повтор передачи пакетов, параллельное сканирование, определение неактивных хостов методом параллельного ping-опроса, сканирование с использованием ложных хостов, определение наличия пакетных фильтров, прямое (без использования portmapper) RPC-сканирование, сканирование с использованием IP-фрагментации а также произвольное указание IP-адресов и номеров портов сканируемых сетей.

    Результатом работы Nmap является список отсканированных портов удаленной машины с указанием номера и состояния порта, типа используемого протокола а также названия службы, закрепленной за этим портом. Порт характеризуется тремя возможными состояниями: "открыт", "фильтруемый" и "нефильтруемый". Состояние "открыт" означает, что удаленная машина прослушивает данный порт. Состояние "фильтруемый" означает, что файрволл, пакетный фильтр или другое устройство блокирует доступ к этому порту и Nmap не смог определить его состояние. "Нефильтруемый" означает, что по результатам сканирования Nmap воспринял данный порт как закрытый, при этом средства защиты не помешали Nmap определить его состояние. Это состояние Nmap определяет в любом случае (даже если большинство сканируемых портов хоста фильтруются).

    В зависимости от указанных опций, Nmap также может определить следующие характеристики сканируемого хоста: метод генерации TCP ISN, имя пользователя (username) владельца процесса, зарезервировавшего сканируемый порт, символьные имена, соответствующие сканируемым IP-адресам и т.д.

    Опции

    Большинство опций могут комбинироваться друг с другом. Одни опции предназначены для выбора определенного метода сканирования, другие указывают на использование дополнительных возможностей или служат для настройки различных параметров сканирования. Nmap предупреждает пользователя о недопустимом сочетании указанных им опций. Те, кто хотят немедленно начать работу с программой, могут пропустить этот раздел и перейти к изучению примеров вызова Nmap в конце данного руководства. Вы можете также запустить программу Nmap с ключом '-h' для получения краткой справки по всем опциям.

    Опции выбора метода сканирования

    -sT (scan TCP) - использовать метод TCP connect(). Наиболее общий метод сканирования TCP-портов. Функция connect(), присутствующая в любой ОС, позволяет создать соединение с любым портом удаленной машины. Если указанный в качестве аргумента порт открыт и прослушивается сканируемой машиной, то результат выполнения connect() будет успешным (т.е. соединение будет установлено), в противном случае указанный порт является закрытым, либо доступ к нему заблокирован средствами защиты.

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

    -sS (scan SYN) - использовать метод TCP SYN. Этот метод часто называют "полуоткрытым" сканированием, поскольку при этом полное TCP-соединение с портом сканируемой машины не устанавливается. Nmap посылает SYN-пакет, как бы намереваясь открыть настоящее соединение, и ожидает ответ. Наличие флагов SYN|ACK в ответе указывает на то, что порт удаленной машины открыт и прослушивается. Флаг RST в ответе означает обратное. Если Nmap принял пакет SYN|ACK, то в ответ немедленно отправляет RST-пакет для сброса еще не установленного соединения (реально эту операцию выполняет сама ОС). Очень немного сайтов способны обнаружить такое сканирование. Пользователь должен иметь статус root для формирования поддельного SYN-пакета.

    Для ускорения процесса опроса портов при сканировании больших сетей совместно с опцией -sS вы можете использовать ярлык, позволяющий опросить какой-либо порт на всех активных объектах сканируемой вами сети намного быстрее, чем при использовании одной опции -p. Это можно сделать с помощью ярлыка -PS <порт> .

    Например, если будет обнаружена новая уязвимость в sendmail, вам может потребоваться за короткое время обнаружить, на каких машинах sendmail установлен.
    Команда запуска Nmap будет выглядеть следующим образом (пример):
    nmap -n -sS -p25 -PS25 24.0.0.0/8

    -sF,-sX,-sN (scan FIN, scan Xmas, scan NULL) - "невидимое" FIN, Xmas Tree и NULL-сканирование. Эти методы используются в случае, если SYN-сканирование по каким-либо причинам оказалось неработоспособным. Так, некоторые файрволлы и пакетные фильтры "ожидают" поддельные SYN-пакеты на защищенные ими порты, и программы типа Synlogger или Courtney способны отследить SYN-сканирование.

    Идея заключается в следующем. В FIN-сканировании в качестве запроса используется FIN-пакет. В Xmas Tree используется пакет с набором флагов FIN|URG|PSH, а NULL-сканирование использует пакет без флагов. Согласно рекомендации RFC 973 п. 64, ОС сканируемого хоста должна ответить на такой пакет, прибывший на закрытый порт, пакетом RST, в то время как открытый порт должен игнорировать эти пакеты.

    РазработчикиMicrosoft Windows, как обычно, решили полностью игнорировать все общепринятые стандарты и пойти своим путем. Поэтому любая ОС семейства Windows не посылает в ответ RST-пакет, и данные методы не будут работать с этими ОС. Однако во всем есть свои плюсы, и в Nmap этот признак является основным для различения операционных систем, обладающих таким свойством.

    Если в результате FIN-сканирования вы получили список открытых портов, то это не Windows. Если же все эти методы выдали результат, что все порты закрыты, а SYN-сканирование обнаружило открытые порты, то вы скорей всего имеете дело с ОС Windows. К сожалению, Windows не единственная ОС, обладающая этим недостатком. К таким ОС относятся также Cisco, BSDI, IRIX, HP/UX и MVS. Все эти ОС не отправляют RST-пакеты.

    -sP (scan Ping) - ping-"сканирование". Иногда вам необходимо лишь узнать адреса активных хостов в сканируемой сети. Nmap может сделать это, послав ICMP-сообщение "запрос эха" на каждый IP-адрес, указанный вами. Хост, отправивший ответ на эхо, является активным.

    Некоторые сайты (например microsoft.com) блокируют эхо-пакеты. По этой причине Nmap также посылает TCP ACK-пакет на 80-й порт сканируемого хоста (по умолчанию). Если в ответ вы получили RST-пакет, хост активен. Третий метод использует SYN-пакет и ожидает в ответ RST либо SYN|ACK. Для пользователей, не обладающих статусом root, используется метод connect().

    Для root-пользователей Nmap по умолчанию использует параллельно оба метода - ICMP и ACK. Вы можете изменить это, используя опцию '-P', описанную ниже. Заметим, что ping-сканирование по умолчанию выполняется в любом случае и только активные хосты подвергаются сканированию. Используйте эту опцию только в случае, если вы хотите выполнить только ping-опрос, не производя сканирования портов.

    -sU (scan UDP) - сканировать UDP-порты. Этот метод используется для определения, какие UDP-порты (RFC 768) на сканируемом хосте являются открытыми. На каждый порт сканируемой машины отправляется UDP-пакет без данных. Если в ответ было получено ICMP-сообщение "порт недоступен", это означает, что порт закрыт. В противном случае предполагается, что сканируемый порт открыт.

    Некоторые считают сканирование UDP-портов бесполезным занятием. Мы в этом случае напоминаем о известной "дыре" в демоне rpcbind ОС Solaris. Он может быть обнаружен на любом из недокументированных UDP-портов с номером, больше 32770. Если вы обнаружите его, то будет уже не важно, блокируется ли 111-й порт файрволлом или нет.

    К сожалению, сканирование UDP-портов проходит очень медленно, поскольку практически все ОС следуют рекомендации RFC 1812 (раздел 4.3.2.8) по ограничению скорости генерирования ICMP-сообщений "порт недоступен". Например, ядро Linux (каталог net/ipv4/icmp.h) ограничивает генерирование таких сообщений до 80 за 4 секунды с простоем 0,25 секунды, если это ограничение было превышено. У ОС Solaris еще более жесткое ограничение (2 сообщения в секунду), и поэтому сканирование Solaris проходит еще более медленно.

    Nmap определяет параметры этого ограничения, и соответственно уменьшает количество генерируемых запросов, предотвращая тем самым затопление сети ненужными пакетами, которые игнорируются целевой машиной. Как обычно, Microsoft снова все проигнорировала, и не использует в своих ОС никаких ограничений. Поэтому вы очень быстро можете просканировать все 65535 UDP-портов хоста, работающего под управлением ОС Windows.

    -sO (scan Open protocol) - сканирование протоколов IP. Данный метод используется для определения IP-протоколов, поддерживаемых сканируемым хостом. Метод заключается в передаче хосту IP-пакетов без какого-либо заголовка для каждого протокола сканируемого хоста. Если получено сообщение "Протокол недоступен", то данный протокол хостом не используется. В противном случае Nmap предполагает, что протокол поддерживается хостом.

    Некоторые ОС (AIX, HP-UX, Digital UNIX) и файрволлы могут блокировать передачу сообщений "Протокол недоступен". По этой причине все сканируемые протоколы будут "открыты" (т.е. поддерживаются).

    Поскольку описанная техника схожа с методом сканирования UDP-портов, ограничение скорости генерации ICMP-сообщений также будет иметь место. Однако поле "тип протокола" IP-заголовка состоит всего лишь из 8 бит, поэтому 256 протоколов будут отсканированы за приемлемое время.

    -sA (scan ACK) - использовать ACK-сканирование. Этот дополнительный метод используется для определения набора правил (ruleset) файрволла. В частности, он помогает определит, защищен ли сканируемый хост файрволлом или просто пакетным фильтром, блокирующим входящие SYN-пакеты.

    В этом методе на сканируемый порт хоста отправляется ACK-пакет (со случайными значениями полей acknowledgement number и sequence number). Если в ответ пришел RST-пакет, порт классифицируется как "нефильтруемый". Если ответа не последовало (или пришло ICMP-сообщение о недоступности порта), порт классифицируется как "фильтруемый".

    Заметим, что Nmap не выдает "нефильтруемые" порты в результатах, поэтому если вы не обнаружите ни одного открытого порта при использовании этого типа сканирования, это будет означать, что все порты просканированы и являются нефильтруемыми. Обращаем ваше внимание, что этот метод никогда не покажет состояние порта "открыт" в результатах сканирования.

    -sW (scan Window) - использовать метод TCP Window. Этот метод похож на ACK-сканирование, за исключением того, что иногда с его помощью можно определять открытые порты точно так же, как и фильтруемые/нефильтруемые. Это можно сделать, проверив значение поля Initial Window TCP-пакета, возвращаемого хостом в ответ на посланный ему запрос, ввиду наличия определенных особенностей обработки данного поля у некоторых ОС. Список уязвимых операционных систем включает в себя по крайней мере несколько версий AIX, Amiga, BeOS, BSDI, Cray, Tru64 UNIX, DG/UX, OpenVMS, Digital UNIX, FreeBSD, HP-UX, OS/2, IRIX, MacOS, NetBSD, OpenBSD, OpenStep, QNX, Rhapsody, SunOS 4.X, Ultrix, VAX и VxWorks. Для более подробной информации смотрите архив nmap-hackers.

    -sR (scan RPC) - использовать RPC-сканирование. Этот метод используется совместно с другими методами сканирования и позволяет определить программу, которая обслуживает RPC-порт, и номер ее версии. Для этого все открытые TCP/UDP-порты хоста затопляются NULL-командами оболочки SunRPC, после чего определяются RPC-порты и закрепленные за ними программы. Таким образом, вы легко получаете информацию, которую могли бы получить с помощью команды 'rpcinfo -p', даже если portmapper сканируемого хоста закрыт файрволлом или TCP-wrapper'ом.

    -sL (scan List) - получить список сканируемых адресов. Эта опция позволяет вам получить список адресов хостов, которые БУДУТ просканированы Nmap, до начала процесса сканирования. По умолчанию определяются имена хостов, однако это можно запретить, используя опцию -n. Опция может использоваться в случае, когда вам необходимо определить имена большого количества хостов по их адресам и т.д.

    -b < ftp_relay хост > (bounche scan) - использовать атаку "Прорыв через FTP". Интересной "возможностью" протокола FTP (RFC 959) является поддержка "доверенных" (proxy) ftp-соединений. Другими словами, с доверенного хоста source.com можно соединиться с ftp-сервером target.com и отправить файл, находящийся на нем, на любой адрес Internet! Заметим, что данная возможность известна с 1985 года (когда был написан этот RFC). Nmap использует эту "дыру" для сканирования портов с "доверенного" ftp-сервера.

    Итак, вы можете подключиться к ftp-серверу "над" файрволлом и затем просканировать заблокированные им порты (например 139-й). Если ftp-сервер позволяет читать и записывать данные в какой-либо каталог (например /incoming), вы также можете отправить любые данные на эти порты. Аргумент, указываемый после '-b', представляет собой URL сервера ftp, используемого в качестве "доверенного". Формат URL следующий: имя_пользователя:пароль@сервер:порт. Адрес сервера нужно указать обязательно, остальное можно не указывать.

    Опции настройки и выбора дополнительных возможностей

    Эти опции не обязательные (т.е. возможна нормальная работа Nmap и без их указания), однако все они являются весьма полезными.

    -P0 (Ping 0) - не производить ping-опрос хостов перед их непосредственным сканированием. Эта опция позволяет просканировать сети, блокирующие обработку ICMP-эха с помощью файрволлов. Примером такой сети является microsoft.com, и вы всегда должны использовать опцию '-P0' или '-PT80', когда сканируете такую сеть.

    -PT (Ping TCP) - использовать TCP "ping". Вместо посылки запроса ICMP-эха, Nmap отправляет TCP ACK-пакет на сканируемый хост и ожидаем ответ. Если хост активен, то в ответ должен придти RST-пакет. Для не-root пользователей используется функция connect(). Эта опция позволяет вам определить состояние сканируемого хоста, даже если обработка ICMP-эха запрещена файрволлом. Для указания номера порта сканируемого сервера, на который будет отправляться ACK-пакет, используется опция '-PT < номер_порта > '. По умолчанию используется 80-й порт, поскольку он практически никогда не фильтруется.

    -PS (Ping SYN) - опция, также используемая для ping-опроса. При этом вместо ACK-пакета TCP "ping" используется SYN-пакет. Активные хосты посылают в ответ RST-пакеты (реже - SYN|ACK).

    -PI (Ping ICMP) - эта опция использует в качестве ping-запроса нормальный ping-пакет (запрос ICMP-эха). Опция применяется для поиска активных хостов а также адресов сетей с возможностью широковещания. Такие сети пересылают прибывший ICMP-пакет всем своим объектам. Как правило, такие сети представляют собой "живую мишень" для хакера.

    -PB (Ping Both) - режим ping-опроса по умолчанию. Использует одновременно запросы типа ACK и ICMP.

    -O (Operating system detection) - эта опция позволяет определить операционную систему сканируемого хоста с помощью метода отпечатков стека TCP/IP. Другими словами, Nmap активизирует мощный алгоритм, функционирующий на основе анализа свойств сетевого программного обеспечения установленной на нем ОС. В результате сканирования получается формализованный "отпечаток", состоящий из стандартных тестовых запросов и "ответов" хоста на них. Затем полученный отпечаток сравнивается с имеющейся базой стандартных ответов известных ОС, хранящейся в файле nmap-os-fingerprinting, и на основании этого принимается решение о типе и версии ОС сканируемого хоста.

    Этот метод требует наличия хотя бы одного закрытого и одного открытого порта на целевом хосте. Если вы обнаружите машину, у которой это условие выполняется, но Nmap не смог определить версию ОС - вышлите нам адрес этой машины. Если же, по каким-либо причинам выслать адрес не представляется возможным, запустите Nmap с опцией '-d' и вышлите полученный отпечаток.

    -I (Ident scan) - использовать reverse-ident сканирование. Протокол Ident (RFC 1413) позволяет вскрыть имя пользователя (username) процесса, использующего TCP, даже если этот процесс не инициализировал соединение. Так, например, вы можете подключиться к порту http и затем использовать identd для поиска на сервере пользователя root. Это может быть сделано только при установлении "полного" TCP-соединения с портом сканируемой машины (т.е. необходимо использовать опцию '-sT'). Nmap опрашивает identd сканируемого хоста параллельно с каждым открытым портом. Естественно, этот метод не будет работать, если на целевом хосте не запущен identd.

    -f (use fragmentation) - эта опция используется совместно с SYN, FIN, Xmas или NULL-сканировании и указывает на необходимость использования IP-фрагментации с малым размером фрагментов. Идея заключается в том, чтобы разбить TCP-заголовок пакета на несколько фрагментов (обычно два) на стороне источника. Сканируемый хост "собирает" эти IP-фрагменты в один TCP-пакет.

    Это значительно усложняет фильтрацию пакетов, работу систем обнаружения и других подобных средств защиты, и позволяет Nmap скрыть свои действия. Будьте осторожны, используя эту опцию! Некоторые программы "зависают" при попытке собрать такие маленькие фрагменты. Так, например, весьма неплохой "сниффер" завис сразу же при получении первого 36-байтного фрагмента. А следом за ним пришел 24-байтный фрагмент.

    -v (verbose output) - использовать режим "подробного отчета". Эту опцию рекомендуется использовать в любых случаях, поскольку при этом Nmap подробно сообщает о ходе выполнения текущей операции. Для получения лучшего эффекта можно указать ее дважды. Ну а если вы укажете еще опцию '-d', то от скроллинга экрана у вас может закружиться голова.

    -h (show help) - печатает справку по использованию Nmap с указанием опций и краткого их описания, не запуская саму программу.

    -oN < имя_файла > (output Normal) - записывает результаты сканирования в указанный файл в удобной для пользователя форме.

    -oM < имя_файла > (output Machine) - записывает результат сканирования в указанный файл в машинном виде для дальнейшего анализа пакетов, пришедших от сканируемого хоста. Если вам необходимо использовать для записи интерфейс StdOut, укажите в качестве имени файла знак '-'. В этом случае сообщения об ошибках можно просмотреть с помощью функции StdErr.

    -oS < имя_файла > (output Script kiddie) - Эту возможность мы предусмотрели для любителей языка s|ipT kiDdi3.

    --resume < имя_файла > - если вы прервали сканирование сети нажатием комбинации < Ctrl C > , то вы можете продолжить его, используя эту опцию, если результаты сканирования записывались в лог-файл с помощью опций '-oM' или '-oN'. В этом случае запустите Nmap с указанием этой опции и имени файла, в который производилась запись предыдущего сеанса. При этом никаких других опций указывать не нужно, поскольку при возобновлении сканирования будут использоваться опции, указанные в предыдущем сеансе. Nmap продолжит сканирование с адреса, следующего за последним "завершенным".

    -iL < имя_файла > (input List) - считывает описание целевых хостов из текстового файла. Файл должен содержать список имен хостов или IP-адресов, разделенных пробелами, знаками табуляции или комбинацией < CR > < LF > (каждый хост - с новой строки). Если вы хотите использовать StdIn в качестве источника информации о хостах, укажите вместо имени файла символ '-'. Более подробная информация о форматах выражений приведены в разделе "Способы задания целевого хоста".

    -iR (input Random) - если вы укажете эту опцию, Nmap будет сканировать случайно выбранные им хосты, адреса которых получены с помощью генератора случайных величин. Этот процесс будет длиться, пока вы его не остановите. Функция может пригодиться для статистического исследования Internet.

    -p < диапазон(ы)_портов > (ports) - эта опция указывает Nmap, какие порты необходимо просканировать. Например, '-p23' означает сканирование 23 порта на целевой машины. Если указано выражение типа '-p 20-30,139,60000-', Nmap будет сканировать порты с номерами с 20 по 30 включительно, 139 и от 60000 и выше (до 65535). По умолчанию Nmap сканирует все порты в диапазоне 1-1024, поскольку все они перечислены в файле services.

    -F (Fast scan) - быстрое сканирование. Указывает Nmap на необходимость сканирования портов только тех служб, которые перечислены в файле services. Сканирование проходит гораздо быстрее, чем если бы Nmap сканировал все 65535 портов.

    -D < ложный_хост1,[ложный_хост2],[,ME],... > (use Decoy hosts). - В этом режиме Nmap "создает" ложные хосты, адреса которых задаются произвольно и указываются в качестве аргументов. При этом на стороне сканируемого хоста создается видимость, что производится одновременное сканирование с различных хостов (обладающих разными IP-адресами), что очень затрудняет обнаружение вашего реального IP-адреса.

    Адреса разделяются запятой. Вы также можете указать свой IP-адрес (аргумент 'ME') в качестве одного из хостов. Однако если вы поместили аргумент 'ME' на шестой позиции и выше, некоторые скан-детекторы (например Solar Designer's Excellent Scanlogd) покажут ваш IP-адрес как наиболее предполагаемый. Если вы явно не указали аргумент 'ME', Nmap поместит вас на случайную позицию. Также вы можете указать имена хостов вместо их IP-адресов. Заметим, что хосты, указанные вами в качестве ложных, должны реально существовать и функционировать, в противном случае вы можете "затопить" сканируемый хост SYN-пакетами. Это также может способствовать обнаружению вашего хоста, потому что если ложные хосты не функционируют, то единственным работающим хостом окажется ваш.

    Стоит заметить, что некоторые скан-детекторы блокируют доступ хосту, осуществившему попытку сканирования. Поэтому ложный хост может потерять соединение со сканируемым хостом. Эта ситуация может возникнуть даже в том случае, если вы указали в качестве ложного хоста адрес шлюза или 'localhost'. Поэтому аккуратно используйте эту опцию.

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

    -S < IP-адрес > (set Source) - Если Nmap не смог автоматически определить IP-адрес вашего хоста (о чем вы получили соответствующее сообщение), вам необходимо самостоятельно указать IP-адрес, используя его в качестве аргумента данной опции (т.е. адрес интерфейса, который вы хотите использовать). Другое применение данной опции - для создания видимости сканирования целевого хоста кем-то другим. В этом случае вы не сможете получить результат, однако на стороне сканируемого хоста создается видимость сканирования с указанного вами адреса. Для этого совместно с '-S'необходимо использовать опцию '-e'.

    -e < интерфейс > (interface) - указывает Nmap, какой интерфейс будет использоваться для приема/передачи пакетов. Имя интерфейса указывается в качестве аргумента опции. Nmap обычно сам определяет интерфейс, однако выдаст вам соответствующее сообщение, если по каким-либо причинам он не смог этого сделать.

    -g < номер_порта > - указывает номер порта на вашем компьютере, который будет использоваться Nmap для осуществления сканирования. Многие файрволлы и пакетные фильтры позволяют проходить пакетам DNS (порт 53) и FTP-DATA (порт 20) к защищаемому ими хосту и установить соединение. Этот момент является большой "дырой" в безопасности файрволлов, поэтому атакующему ничего не стоит отправлять нужные ему пакеты через 53-й или 20-й порт.

    Для сканирования UDP-портов Nmap пробует сначала 53-й порт, а затем 20-й. Для TCP-портов - наоборот. Заметим, что это влияет на поле "порт источника" в запросе и поэтому не всегда работает. Например, вы не сможете определить характер изменения ISN, всвязи с чем Nmap самостоятельно сменит номер порта для этой цели, даже если вы используете опцию '-g'.

    -r (randomize off) - для обеспечения скрытности очередной номер сканируемого хоста Nmap выбирает случайным образом. Эта опция указывает на то, что необходимо отключить случайный выбор портов и производить их последовательное сканирование.

    --randomize_hosts - указывает Nmap на необходимость случайной перестановки каждой группы из 2048 хостов перед непосредственным их сканированием. Эта опция делает сканирование менее заметным для различных систем сетевого мониторинга, особенно если вы используете ее совместно с опцией настройки времени, устанавливающей более медленное сканирование.

    -M < максимум_сокетов > (Max sockets) - устанавливает максимальное количество сокетов, используемых параллельно в методе TCP connect() сканирования. Установка меньшего значения немного замедляет процесс сканирования, но предотвращает "завал" сканируемого хоста. Для последней цели лучше всего использовать опцию '-sS', так как SYN-сканирование гораздо легче "переносится" операционными системами.


    Опции настройки временных параметров

    Обычно Nmap автоматически настраивает временные параметры в соответствии с характеристиками сканируемой сети. Настройки осуществляются, во-первых, для проведения максимально быстрого сканирования, и во-вторых, для уменьшения вероятности появления ошибок. Если вас не устраивает автоматическая настройка временных параметров, вы можете настроить их самостоятельно, используя эти опции.

    -T < Paranoid|Sneaky|Polite|Normal|Aggressive|Insane > (Timing options) - эта опция устанавливает временной режим сканирования. Требуемый режим указывается в качестве аргумента. Режим Paranoid используется в случае, когда очень велика вероятность использования скан-детекторов. В этом режиме сканирование проходит очень медленно. Параллельне сканирование не используется. Вместо этого Nmap проводит сканирование последовательно, с интервалом по меньшей мере 5 минут между посылкой пакетов.

    Режим Sneaky похож на режим Paranoid. Разница заключается в том, что интервал между посылкой двух пакетов составляет 15 секунд.

    Режим Polite используется в случае, когда необходимо минимизировать нагрузку на сеть и уменьшить вероятность "завала" сканируемого хоста. В этом режиме тесты проходят последовательно с интервалом минимум 0,4 секунды.

    Режим Normal используется Nmap по умолчанию. В этом режиме сканирование производится с максимально возможной скоростью, и по возможности без перегрузки сети и возникновения ошибок.

    В режиме Aggressive устанавливается ограничение на сканирование одного хоста, равное 5 минутам, и, кроме того, время ожидания ответа на запрос не превышает 1,25 секунды.

    Режим Insane применяется только при сканировании очень быстрых сетей. Время сканирования одного хоста составляет 75 секунд, а ожидание ответа на запрос - 0,3 секунды.

    Каждому режиму присвоен соответствующий номер, и вы можете указать его вместо полного названия режима. Так, опция '-T0' означает режим Paranoid, а '-T5' - Insane. Нумерация соответствует порядку, в котором они были перечислены выше. Заметим, что опция '-T' осуществляет настройку Nmap на высоком уровне, и не должна использоваться с опциями, приведенными ниже (они обеспечивают низкоуровневую настройку).

    --host_timeout < миллисекунд > - устанавливает время, отводимое Nmap на полное сканирование одного хоста, прежде чем он перейдет к очередному IP-адресу. По умолчанию этот параметр отсутствует, т.е. Nmap не переходит к очередному адресу до окончания сканирования текущего.

    --max_rtt_timeout < миллисекунд > (maximal round-trip time timeout) - устанавливает верхнюю границу временного интервала, в течение которого Nmap ожидает ответ на посланный запрос, прежде чем повторить запрос либо послать новый. По умолчанию это значение установлено равным 5000 миллисекунд.

    --min_rtt_timeout < миллисекунд > - Если сканируемый хост немедленно отвечает на посланный запрос, Nmap сразу же передает следующий, сэкономив тем самым очень много времени. Это ускоряет сканирование, но может привести к потере пакетов с ответами, пришедшими несколько позже, чем обычно. Эта опция устанавливает нижнюю границу времени ожидания ответа, т.е. Nmap в любом случае будет ждать в течении указанного вами времени не зависимо от того, пришел ответ или нет.

    --initial_rtt_timeout < миллисекунд > - устанавливает время, отводимое на начальный тест. Эта опция используется в основном для сканирования хостов, защищенных файрволлом, совместно с опцией '-P0'. Обычно Nmap автоматически выбирает оптимальное значение этого параметра. Значение по умолчанию составляет 6000 миллисекунд.

    --max_parallelism < количество > - устанавливает максимальное количество параллельных процессов сканирования, используемых Nmap. Установка этого параметра равным 1 означает, что Nmap никогда не будет сканировать более одного порта в один момент времени.

    --scan_delay < миллисекунд > - устанавливает минимальное время задержки между тестами. Эта опция может использоваться для снижения нагрузки на сеть и уменьшения вероятности обнаружения сканирования.

    Способы задания целевого хоста

    Все, что не является опцией или ее аргументом, Nmap воспринимает как адрес или имя целевого хоста (т.е. хоста, подвергаемого сканированию). Простейший способ задать сканируемый хост - указать его имя или адрес в командной строке после указания опций и аргументов. Если вы хотите просканировать подсеть IP-адресов, вам необходимо указать параметр '/<mask>' ("маска") после имени или IP-адреса сканируемого хоста. Маска может принимать следующие значения:

    '/0' - сканировать весь Интернет;
    '/16' - сканировать адреса класса B;
    '/24' - сканировать адреса класса С;
    '/32' - сканировать только указанный хост.

    Nmap позволяет также гибко указать целевые IP-адреса, используя списки и диапазоны для каждого их элемента. Например, необходимо просканировать подсеть класса B с адресом 128.210.*.*. Задать эту сеть можно любым из следующих способов:

    128.210.*.*
    128.210.0-255.0-255
    128.210.1-50,51-255.1,2,3,4,5-255
    128.210.0.0/16

    Все эти строки эквивалентны. Заметим, что если вы используете "звездочку" ('*'), то в большинстве оболочек вам понадобится отделить ее обратной "косой чертой" либо апострофами. Приведем еще один пример. Если вы указали в качестве целевого IP-адреса строку '*.*.5.6-7', Nmap отсканирует все IP-адреса, оканчивающиеся на 5.6 либо 5.7. Более подробно примеры вызова программы Nmap приведены ниже.

    Примеры

    Приведем некоторые примеры использования Nmap и соответствующие способы запуска программы с указанием параметров в командной строке.
    nmap -v target.example.com

    Сканировать все зарезервированные TCP-порты на хосте target.example.com. Опция '-v' означает включение режима подробного отчета о ходе процесса сканирования.
    nmap -sS -O target.example.com/24

    Запускает SYN-сканирование всех 255 машин с адресами класса C, одной из которых является target.example.com. Кроме того, осуществляется определение ОС каждого из сканируемых хостов. Для этого вам необходим статус root.
    nmap -sX -p 22,53,110,143,4564 128.210.*.1-127

    Осуществляет Xmas-сканирование первой половины адресов (0-127) каждой из 255 подсетей класса B адресного пространства 128.210.*.*. На этих хостах тестируется присутствие sshd (22 порт), DNS (53), pop3d (110), imapd (143) и состояние порта 4564. Обращаем внимание, что Xmas-сканирование не будет работать с ОС Windows, CISCO, IRIX, HP/UX и BSDI.
    nmap -v --randomize_hosts -p80 *.*.2.3-5

    Nmap будет искать все машины, IP-адрес которых оканчивается на .2.3, .2.4 и .2.5. Если ваш статус root, вы также можете просканировать порты обнаруженных хостов, указав опцию '-sS'. Вы найдете много интересных машин, адреса которых начинаются на 127. Поэтому мы рекомендуем вместо первой звездочки указать '127-222'. Попробуйте обязательно!
    host -l company.com |cut '-d' -f 4| ./nmap -v -iL

    Просканировать серверы DNS зоны и найти хосты в домене company.com, передав затем в Nmap их адреса. Так выглядит команда для GNU/Linux. Для других ОС она будет выглядеть несколько иначе.

    Контроль трафика. Netacct-mysql


    Вопрос: Где необходимо поместить правила в iptables для учета трафика?

    Ответ: netacct работает как независимый процесс и поэтому не используют основанные на firewall правила учета трафика и следовательно никаких правил добавлять не надо.

    Вопрос: На Fedora 2/3 netacct иногда стартирует, а иногда и появляется сообщение Segmentation Fault?

    Ответ: Удалите все коментарии из конфигурационных файлов. Проблема возникает только на FedoraCore и будет устранена в следующей версии.

    Вопрос: На BSD, когда напишу make появляется ошибка?

    Ответ: Эта проблема уже решена в версии 0.78 а для более старых версий решением является следующее:введите у себя gnu make /gmake/.

    Вопрос: Когда используются sniff 0 и 1 и вообще когда нужно ставить интерфейс в promiscuous mode?

    Ответ: В редких случаях Вам понадобится sniff 1 т.е. например при Ваш роутер с default gateway подключен к HUB (причем именно к HUB) и к нему подключен сервер, предназначенный для учета трафика через netacct (что до сих пор я не встречал) или если Ваша сеть постоена на HUB и тогда netacct не обязательно работает на default gateway.

    Вопрос: Я скомпилировал и успешно установил программное обеспечение, но в базе данных записи не появились?

    Ответ:Эта ошибка чаще всего встречается у людей, которые любят все компилировать сами,не имея при этом достаточно знаний. /Поверьте мне их тысячи!/. Кто-то использовал XXX-Linux с установкой по умолчанию для пакета mysql например в /usr а затем решил установить более новую версию и поместил ее в /usr/local/mysql. До сих пор все правильно, но при компилации netacct скрипт configure находит первоначально этот mysql, который находится в /usr и соответственно при линковании связывает с более старой библиотекой из /usr/lib/libmysql*, а не с бибилиотекой из /usr/local/libmysql* в этом случае возникает ошибка типа : can't connect through socket /var/run/mysql.sock, когда нужно было бы подсоединиться к mysql с помощью /usr/local/var/run/mysql.sock или к чему-нибудь другому. В случае возникновения такой проблемы предлагаем меры, ведущие к устранению последней:

    1.Посмотрите в /var/log/syslog, messages с целью обнаружения ошибок. Если там при попытке внесения данных в базу появится ошибка, то продолжайте читать. Если же просто трафик учитывается не правильно, то обратитесь к следующему нижестоящему Вопросу/Ответу.

    2.Проверьте, нет ли более одной инсталации mysql, что в большинстве случаев ведет к возникновению проблемы и удалите более старые версии библиотек.

    3.Проверьте, связан ли nacctd с правильной бибилиотекой следующим способом:
    $ ldd 'which nacctd'
    libmysqlclient.so.10 => /usr/lib/libmysqlient.so.10 (0x00176000)
    libc.so.6(0x001ab000)

    4.Проверьте, можете ли Вы установить связь c mysql для пользователя acct и с соответствующим паролем следующим образом:

    $ mysql -u acct -p пароль

    5. Проверьте, запущен ли ли mysql ?.


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

    Ответ: Даааа.. прочли ли Вы внимательно README и INSTALL файлы? Там указаны наиболее известные варианты конфигурации сети и учета трафика.


    Требования:

    lipcap - http://www.tcpdump.org/release/
    mysql или oracle

    Для успешной компилации программы кроме библиотек также необходими include файлы или так называемые devel пакеты в большенсте дистрибутивов. Вот пример для Debian : apt-get install mysql-server libmysqlclient10 libmysqlclient-dev libpcap0 libpcap-dev

    Для остальных Линукс дистрибутвов названия пакетов являются алогичными. Для BSD систем необходимо установить соответствующие пакеты из pkgsrc. Предпочтительно, если Вы начинающий, необходимое желательно выбирать из готовых пакетов соответствующих дистрибутивов /ОС /deb,rpm, tgz/pkgsrc/.

    читать дальше...

    Контроль трафика. Netacct-mysql


    Вопрос: Где необходимо поместить правила в iptables для учета трафика?

    Ответ: netacct работает как независимый процесс и поэтому не используют основанные на firewall правила учета трафика и следовательно никаких правил добавлять не надо.

    Вопрос: На Fedora 2/3 netacct иногда стартирует, а иногда и появляется сообщение Segmentation Fault?

    Ответ: Удалите все коментарии из конфигурационных файлов. Проблема возникает только на FedoraCore и будет устранена в следующей версии.

    Вопрос: На BSD, когда напишу make появляется ошибка?

    Ответ: Эта проблема уже решена в версии 0.78 а для более старых версий решением является следующее:введите у себя gnu make /gmake/.

    Вопрос: Когда используются sniff 0 и 1 и вообще когда нужно ставить интерфейс в promiscuous mode?

    Ответ: В редких случаях Вам понадобится sniff 1 т.е. например при Ваш роутер с default gateway подключен к HUB (причем именно к HUB) и к нему подключен сервер, предназначенный для учета трафика через netacct (что до сих пор я не встречал) или если Ваша сеть постоена на HUB и тогда netacct не обязательно работает на default gateway.

    Вопрос: Я скомпилировал и успешно установил программное обеспечение, но в базе данных записи не появились?

    Ответ:Эта ошибка чаще всего встречается у людей, которые любят все компилировать сами,не имея при этом достаточно знаний. /Поверьте мне их тысячи!/. Кто-то использовал XXX-Linux с установкой по умолчанию для пакета mysql например в /usr а затем решил установить более новую версию и поместил ее в /usr/local/mysql. До сих пор все правильно, но при компилации netacct скрипт configure находит первоначально этот mysql, который находится в /usr и соответственно при линковании связывает с более старой библиотекой из /usr/lib/libmysql*, а не с бибилиотекой из /usr/local/libmysql* в этом случае возникает ошибка типа : can't connect through socket /var/run/mysql.sock, когда нужно было бы подсоединиться к mysql с помощью /usr/local/var/run/mysql.sock или к чему-нибудь другому. В случае возникновения такой проблемы предлагаем меры, ведущие к устранению последней:

    1.Посмотрите в /var/log/syslog, messages с целью обнаружения ошибок. Если там при попытке внесения данных в базу появится ошибка, то продолжайте читать. Если же просто трафик учитывается не правильно, то обратитесь к следующему нижестоящему Вопросу/Ответу.

    2.Проверьте, нет ли более одной инсталации mysql, что в большинстве случаев ведет к возникновению проблемы и удалите более старые версии библиотек.

    3.Проверьте, связан ли nacctd с правильной бибилиотекой следующим способом:
    $ ldd 'which nacctd'
    libmysqlclient.so.10 => /usr/lib/libmysqlient.so.10 (0x00176000)
    libc.so.6(0x001ab000)

    4.Проверьте, можете ли Вы установить связь c mysql для пользователя acct и с соответствующим паролем следующим образом:

    $ mysql -u acct -p пароль

    5. Проверьте, запущен ли ли mysql ?.


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

    Ответ: Даааа.. прочли ли Вы внимательно README и INSTALL файлы? Там указаны наиболее известные варианты конфигурации сети и учета трафика.


    Требования:

    lipcap - http://www.tcpdump.org/release/
    mysql или oracle

    Для успешной компилации программы кроме библиотек также необходими include файлы или так называемые devel пакеты в большенсте дистрибутивов. Вот пример для Debian : apt-get install mysql-server libmysqlclient10 libmysqlclient-dev libpcap0 libpcap-dev

    Для остальных Линукс дистрибутвов названия пакетов являются алогичными. Для BSD систем необходимо установить соответствующие пакеты из pkgsrc. Предпочтительно, если Вы начинающий, необходимое желательно выбирать из готовых пакетов соответствующих дистрибутивов /ОС /deb,rpm, tgz/pkgsrc/.

    Часто встречающейся проблемой является присутствие двух разных версий одного пакета, например mysql, одна установленная из пакета, а другая вручную.


    Установка:

    Загрузите выбранную версию netacct и разархивируйте ее:

    $ zcat netacct-mysql-0.7x.tar.gzjtar-xvf-
    $ cd netacct-mysql-0.7x
    $ ./configure
    $make
    $su-
    # make install /как root/

    Подразумевается, что netacct будет установлена в /usr/local директории, при этом конфигурационные файлы будут в /usr/local/etc/, а сама программа в /usr/local/sbin.

    Если хотите установить ее в другом месте, используйте /configure-prefix= и sysconfdir= опции.

    Если configure не сможет обнаружить установку mysql (предположим, что Вы установили mysql в /usr/local/mysql ) - используйте опцию with-mysql= при этом укажите путь к основной директории установки mysql.

    Аналогично для libcap используйте опции with-libpcap-libraries= и --with-libcap-includes=


    Подготовка mysql:

    Создание базы, таблицы и пользователя mysql

    ВАЖНО: Отредактируйте netacct.sql и измените пароль пользователя acct.
    После этого сделайте следующее:
    $ mysql -u root -p < netacct.sql

    Не забудьте сменить пароль и в конфигурационном файле naccttab скрипты для запуска netacct в init.d находятся в /contrib директории и соответственно названы с расширением дистрибутива, для которой они предназначины: Debian, RedHat, FreeBSD, Solaris


    Примерное размещение некоторых из скриптов:

    RedHat:
    cp contrib/nacctd.redhat/etc/rc.d/init.d./nacctd
    chkconnnfigadd nactd

    Debian:
    apt-get install rcconf
    cp contrib/nacctd.debian /etc/init.d/nacctd
    rcconf


    Учет трафика сети


    Network Traffic Accounting daemon

    Описание:

    Программа служит для учета трафика сети, проходящего через Ваш рутер/шлюз. Базирована на основе бибилиотеки libpcap и работает как userspace демон. Обеспечивает возможность разделения трафика сети на четыре категории:

    -международный (international)
    -пиринговый (peering)
    -прямой (direct)
    -локальный. (local)

    Отчет о трафике сохраняется в базе данных, и в настоящий момент поддерживаются базы данных MySQL и Oracle. Так как используется библиотека libcap для сбора информации сети то программа работает /в настоящий момент/ в следующих системах:
    Linux
    FreeBSD
    OpenBSD
    Solaris

    О специфической информации, касающейся определенной операционной системы, прочтите в FAQ файле.


    Как работает:

    Netacct работает наподобие снифера т.е. прослеживает весь трафик, проходящий через заданные конфигурационным файлом интерфейсы. Данные собираются в памяти и периодически записываются в базу данных. Период записи данных составляет 300 секунд / см.опцию flush в конфигурационном файле/.


    Конфигурация:


    Для учета трафика сети найлучшей конфигурацией является размещение программы учета на Вашем маршрутизаторе. Программа настраивается двумя конфигурационными файлами - naccttab и nacctpeering, при этом ниже будут объяснены наиболе важные опции: naccttab
    sniff может принимать значения 0 или 1
    0 интерфейс сети не устанавливать в режиме promiscuous mode.
    1 интерфейс сети устанавливать в режиме promiscuous mode.
    database значения mysql или oracie
    mysql работа с базой данных Mysql /далее следуют специфические опции для Mysql/:
    mysql_user имя пользователя для для связи с базой данных
    mysql_pass пароль для базы данных
    mysql_host обыкновенно localhost, но может работать и с отдаленной базой данных.
    mysql_port если MySQL расположен на той же машине, рекомендуется установить в 0, что означает, что связь будет осуществляться через сокет.
    mysql_database название базы, в которой сохраняются данные
    oracle - работа с базой данных ORACLE
    oracle_connect - user/host@database - идентификация для подключения к ORACLE
    oracle_home - /путь/до/оракул клиент/директории
    compactnet это опция описывает сети, для которых хотите подсчитывать трафик.
    Формат представления:
    compactnet сетевой_адрес сетевой_маска
    /Пример: compactnet 192.168.10 255.255.255.0/.
    Опция может быть описана в конфигурационном файле более одного раза.
    ournet - опция предназначена для подсчета локального трафика или, говоря другим языком, трафика между различными интерфейсами рутера. В большинстве случаев ournet совпадает с compactnet опциями. Более детальная информация дана в примерных конфигурациях, описанных ниже.
    Формат представления:
    ournet сетевой_адрес сетевой_маска
    direct_peer - эту опцию Вы можете использявать при наличии дополнительного локального соединения с другим поставщиком, например, backup линией или у Вас есть локальные сервера, трафик которых Вы хотите учесть отдельно. В общем это используется в достаточно редко.
    Формат представления:
    direct_peer сетевой_адрес сетевой_маска

    Примечание: опция должна присутствовать хотя бы один раз в конфигурационном файле. Если не хотите считать такой тип трафика, напишите так:
    direct_peer 1.1.1.1 255.255.255.255
    flush интервал, через который записываются данные в базу /в секундах/.
    device сетевой интерфейс, на котором будет собираться трафик. Может присутствовать более 1 раза в конфигурационном файле.
    Примеры /Linux/:
    device eth1
    device eth2
    Примеры /*BSD/:
    device rtk0
    device sk0

    ignorenet - /сетевые_адрес сетевой_маска/, если хотите игнорировать трафик из какой-нибудь определенной сети, используйте даннуй опцию. Опция может присутствовать больше одного раза в конфигурационном файле.
    Формат представления:
    ignorenet сетевой_адрес сетевой_маска

    /Только для продвинутых пользователей/
    pidfile - /path/to/netacct.pid опция дает Вам возможность определить другой pidfile и запусть два или более процессов nacctd на одном компьютере.
    errdelay - / в несколько раз/ эта опция Вам позволяет конфигурировать задержку по времени при записи в базу данных при возникновении ошибки. При возникновении ошибки при записи в базу данных необходимо, чтобы netacct осуществил задержку на время = flush*errdelay перед следующей попыткой записи в базу данных. Т.е., если flush 300 и errdelay 3, то при ошибке следующая попытка записи будет произведена через 900 секунд.
    nacctpeering - cети для так называемого пиринга для удобства вынесены в отдельный файл, т.к. список сетей может обновляться периодически с интернет сайтов или извлекаться из BGP. killall -HUP nacctd перезагрузит этот файл в памяти. Форматом является список строк типа: сеть/сетевая_маска или сеть/инвертированная_маска
    Пример:
    195.187.245.0/255.255.255.0
    или
    195.187.245/24
    Примеры:

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

    Пример 1
    eth0-62.73.87.1 netmask 255.255.255.252
    eth1-192.168.1.0 255.255.255.0
    eth2-10.0.0.0 255.255.255.0
    eth2:0-10.10.10.0 255.255.255.0

    т.е. еth0 является default gateway и для eth1 имеем одну локальную сеть, а для eth2 имеем две локальных сети. Мы хотим считать трафик только сети 10.10.10.0 с маской 255.255.255.0

    Примечание: здесь дам пример только с основными конфигурационными параметрами, при этом все остальное остается неизменным.

    Примечание 2: IP адреса, используемые для примеров, берутся из частных сетей, но Вы должны их рассматривать просто как сети и спокойно заменять их на другие из реальных сетей. Важным является разобраться в размещении сетей по интерфейсам и способе описания этого в конфигурационном файле.

    naccttab:
    ---[cut]---
    compactnet 10.10.10.0 255.255.255.0
    ournet 10.10.10.0 255.255.255.0
    ournet 10.0.0.0 255.255.255.0
    ournet 192.168.1.0 255.255.255.0
    direct_peer 1.1.1.1 255.255.255.255
    device eth2
    ignorenet 127.0.0.0 255.0.0.0
    ---[cut]---

    Объяснение:
    Как Вы видите у нас есть три опции ournet так, что трафик между
    10.10.10.0 <-> 10.0.0.0
    10.10.10.0 <-> 192.168.1.0
    будет учитываться как локальный для eth2 а так как это физический интерфейс и libpcap учитывает весь трафик на нем, то виртуальные интерфейсы мы не рассматриваем. Как я же говорил мы не хотим считать direct_peer трафик то мы описали direct_peer 1.1.1.1 и наконец мы игнорируем трафик на loopback интерфейсе

    Пример 2
    Конфигурация аналогична Примеру 1 но тепери мы хотим считать весь трафик частых сетей. Вот изменения в конфигурации:

    naccttab:
    ---[cut]---
    compactnet 10.10.10.0 255.255.255.0
    compactnet 10.0.0.0 255.255.255.0
    compactnet 192.168.1.0 255.255.255.0
    ournet 10.10.10.0 255.255.255.0
    ournet 10.0.0.0 255.255.255.0
    ournet 192.168.1.0 255.255.255.0
    direct_peer 1.1.1.1 255.255.255.255
    device eth1
    device eth2
    ignorenet 127.0.0.0 255.0.0.0
    ---[cut]---

    Объяснения:
    Как Вы заметили, добавлены еще две записи compactnet и одина запись с device, т.к. 192.168.1.0 находится на другом сетевом интерфейсе.

    Пример 3
    eth0-62.73.87.1 netmask 255.255.255.252
    eth1-192.168.1.0 255.255.255.0
    eth1:0-192.168.20.0 255.255.255.248
    eth2-10.0.0.0 255.255.255.0
    eth2:0-10.10.10.0 255.255.255.0

    т.е. Eth0 является default gateway, на eth1 имеем две IP сети и на eth2 также две сети. Желаем считать любой трафик, но без сети 192.168.20.0 , в которую мы установили несколько локальных серверов:
    192.168.20.2 ftp сервер
    192.168.20.3 game server 1
    192.168.20.4 game server2
    192.168.20.5 game server 3

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

    naccttab:
    ---[cut]---
    compactnet 10.10.10.0 255.255.255.0
    compactnet 10.0.0.0 255.255.255.0
    compactnet 192.168.1.0 255.255.255 0
    ournet 10.10.10.0 255.255.255.0
    ournet 10.0.0.0 255.255.255.0
    ournet 192.168.1.0 255.255.255.0
    direct_peer 192.168.20.0 255.255.255,0
    device eth 1
    device eth2
    ignorenet 127.0.0.0 255.0.0.0
    ---[cut]---

    Как видно, единственным отличием является то, что сеть с game серверами, помещена в direct_peer, и трафик к ней будут отмечен в графе прямой трафик. Сеть НЕ присутствует в compactnet, т.к. подсчитывается трафик ОТ IP адресов в compactnet К IP адресам в direct_peer.

    Пример 4

    Конфигурация при использовании прокси сервера.

    ВАЖНО: программа будет правильно учитывать трафик ТОЛЬКО ТОГДА, когда прокси настроен для работаты в качестве TRANSPARENT proxy. В противном случае, т.к. весь трафик проходит через него /если пользователи настраивают браузер/ всегда или source ip или destination ip является прокси сервар и нет возможности разграничивать тип трафика. Трафик будет учтен правильно, но весь попадет или в международный, или в пиринговый, или в прямой. Поэтому удачным решением является условие, что пользователю не нужно делать никаких настроек, а трафик переправлять с помощью iptables /i,f,pf/ на ip адрес и порт прокси сервера.
    eth0- 62.73.87.1 netmask 255.255.255.252
    eth1- 192.168.1.0 255.255.255.0

    прокси сервер работает на на той же машине с портом 3128
    #iptables - конфигурация
    iptables -t nat -A PREEOUTING-s 192.168.1.0/24 -d 0/0 -p tcp -m multiport
    drot 80,21,8080 -j REDIRECT to-port 3128

    #pf конфигурациях
    rdr on fxp0 inet proto tcp to port 80 -> 10.10.10.10 port 8080
    naccttab:
    ---[cut]---
    compactnet 192.168.1.0.255.255.255.0
    ournet 192.168.1.0 255.255.255.0
    direct_peer 1.1.1.1 255.255.255.255
    device eth1
    ignorenet 127.0.0.0 255.0.0.0
    ----[cut]---

    Как видите, конфигурация является простой.


    Техническая информация:


    В базе данных записываются суммарные величины трафика за последний час для каждого IP, т.е., если интервал записи равен 300 секундам, netacct проверит, присутствует ли запись в текущем часе на дату для данного IP в базе. Если отсутствует, то будет произведен INSERT нового поля с текущей собранной информацией о трафике, а если уже существует такая запись, то к ней будет добавлена собранная до данного момента информация и она запишется в базу.

    Вот как будут выглядеть записи по одному IP адресу в базе.
    hour international peering direct local
    in out in out in out in out
    +-----+-------------------+-----------------+----------------+----------+
    |08:00| 5,164,960 498,371 | 824,024 240,049 | 125,155 76,058 |260,853 0 |
    +-----+-------------------+-----------------+----------------+----------+
    |09:00| 8,794,618 710,045 |1,354,427 413,418| 1,488 1,033 |326,594 0 |
    +-----+-------------------+-----------------+----------------+----------+
    |10:00| 1,324,960 434,371 | 824,024 240,049 | 125,155 76,058 |260,853 0 |
    +-----+-------------------+-----------------+----------------+----------+
    |11:00| 2,164,960 128,344 | 434,323 233,144 | 231,225 67,831 |120,742 0 |
    +-----+-------------------+-----------------+----------------+----------+
    |12:00| 111,141 122,222 | 846,111 988,865 | 235,001 43,433 |311,143 0 |
    +-----+-------------------+-----------------+----------------+----------+

    Единственным ограничением объема трафика является следующее: количество трафика, учтенного за период записи /например 300 секунд/ , не должен надвышать 4 Гигабайта. Если у Вас такая УЖАСНАЯ нагрузка сети /предполагаю, что она возможна у 10Gbit сетей/ , то рекомендуем уменьшить flush величину на меньшую.

    Использование /для более квалифицированных пользователей/:

    Вы можете контролировать netacct, подавая при этом сигналы с комондой kill. В основном Вам придется пользоваться тримя сигналами, а именно:
    HUP - перезагружает nacctpeering файл. Удобен при частых изменениях сети.
    TSTP - запрещает запись трафика в базу данных
    CONT - разрешает запись данных в базу данных.
    TSTP и CONT являются удобными при апгрейде или автоматическом архивировании
    SQL базы данных.

    Пример:
    #!/bin/sh
    killall -TSTP nacctd
    здесь_останов_sql_сервер
    здесь_архивируйте_что_есть_для_архивирования_или_апгрейд
    killall-CONT nacctd


    Еще техническая информация:


    Вот каким способом программа проверяет каждый из пакетов в какой тип трафика попадает:
    0.проверяет, совпадает ли src_ip или dst_ip пакета с некоторой из сетей в compactnet, если нет то этот пакет игнорируется
    1.проверяет, совпадает ли src_ip или dst_ip пакета с некоторой из сетей ournet, если да то пакет записывает, как локальный и продолжает проверку следующего пакетоа.
    2.проверяет, совпадает ли src_ip или dst_ip пакета с некоторой из сетей в direct_peer, если да то пакет записывает как прямой и продолжает проверку следующего пакета.
    3.Проверяет, совпадает ли src_ip или dst_ip пакета с некоторой из сетей в nacctpeering файле, если да то пакет записывает как пиринговый и продолжает проверку следующего пакета.
    4.если пакет не попал ни в одну из категорий с 1 до 3, то он записывается как международный.

    Не выключайте программу kill -9 сигналом, т.к. потеряете данные, учтенные после последней запии в базу перед моментом kill. Лучше всего выключать с помощью TERM сигнала. В этом случае автоматически будут записаны последние учтенные данные в базу, перед тем как программа будет выключена.

    "Огненная стена" или строим файрвол на базе iptables


    1. Установка netfilter/iptables.
    В комплект поставки любого современного дистрибутива Linux (с версией ядра 2.4.x и 2.6.x) входит система сетевой защиты netfilter/iptables. Основная часть кода этих программных продуктов непосредственно включена в код ядра, а часть - исполняемые файлы, библиотеки, устанавливается в виде обычных файлов. Если вы используете достаточно современный дистрибутив, не собираетесь использовать экзотического программного обеспечения и не предъявляете жесткиx требований к безопасности, то скорее всего вы сможете ограничиться возможностями rpm-пакетов, входящих в комплект поставки дистрибутива. Проверьте, установлен ли пакет iptables:
    [root@homerouter root]# rpm -qa | grep iptables
    iptables-1.2.6a-1.asp

    Если пакет не установлен, то установите его:
    [root@homerouter root]# rpm -ihv iptables-version.rpm
    Если у поставщика дистрибутива или сторонних производителей имеется более свежая версия пакета, то обновите его:
    [root@homerouter root]# rpm -Uhv iptables-version.rpm
    При этом может потребоваться установка пакетов, удовлетворяющих зависимости, например, пакетов, содержащих исходные коды ядра.

    читать дальше...

    "Огненная стена" или строим файрвол на базе iptables


    1. Установка netfilter/iptables.
    В комплект поставки любого современного дистрибутива Linux (с версией ядра 2.4.x и 2.6.x) входит система сетевой защиты netfilter/iptables. Основная часть кода этих программных продуктов непосредственно включена в код ядра, а часть - исполняемые файлы, библиотеки, устанавливается в виде обычных файлов. Если вы используете достаточно современный дистрибутив, не собираетесь использовать экзотического программного обеспечения и не предъявляете жесткиx требований к безопасности, то скорее всего вы сможете ограничиться возможностями rpm-пакетов, входящих в комплект поставки дистрибутива. Проверьте, установлен ли пакет iptables:
    [root@homerouter root]# rpm -qa | grep iptables
    iptables-1.2.6a-1.asp

    Если пакет не установлен, то установите его:
    [root@homerouter root]# rpm -ihv iptables-version.rpm
    Если у поставщика дистрибутива или сторонних производителей имеется более свежая версия пакета, то обновите его:
    [root@homerouter root]# rpm -Uhv iptables-version.rpm
    При этом может потребоваться установка пакетов, удовлетворяющих зависимости, например, пакетов, содержащих исходные коды ядра.

    Если вы уверены в своих силах, то более правильным будет установка netfilter/iptables из исходных кодов, при этом вы сможете:

  • использовать последнюю (наиболее надежную, понравившуюся вам и т.п.) версию netfilter/iptables;

  • избавиться от зависимости от поставщика дистрибутива и сторонних производителей rpm-пакетов;

  • повысить производительность и надежность вашей системы за счет включения в нее тех и только тех фрагментов кода netfilter/iptables, которые нужны для решения только ваших задач;

  • использовать (изучить, протестировать и т.п.) новые возможности фильтрации и управления пакетами, имеющиеся в последних версиях netfilter/iptables.

    Для установки netfilter/iptables как минимум необходимы следующие пакеты:


  • архив с исходными кодами iptables-version.tar.bz2, которые могут быть получены с сервера разработчиков www.netfilter.org www.netfilter.org (алиас www.iptables.org );

  • патч для модификации исходных кодов ядра patch-o-matic-YYYYMMDD.tar.bz2, который так же может быть получен с www.netfilter.org ;

  • архив с исходными кодами ядра linux-version.tar.bz2 , который может быть получен с www.kernel.org ;

  • контрольные значения md5sum или GPG сигнатур ( www.gnupg.org ) для всех приведенных выше архивов с исходными кодами.

  • Для установки netfilter/iptables из исходных кодов необходимо выполнить следующие операции. Приведенное ниже описание инсталляции было протестировано на ASPLinux 7.3, для ядер версии 2.4.18, 2.4.25.

    Шаг 1
    Проверьте целостность и подлинность скачанных архивов - patch-o-matic-YYYYMMDD.tar.bz2, iptables-version.tar.bz2, linux-version.tar.bz2 с использованием md5sum или GPG сигнатур. Подробно процедура проверки целостности и подлинности описана здесь www.bruy.info/ssl.html#12.4 .

    Шаг 2
    Распакуйте исходные коды ядра в каталоге /usr/src:
    [root@homerouter src]# bzip2 -d linux-version.tar.bz2
    [root@homerouter src]# tar xpf linux-version.tar.bz2

    Шаг 3
    Определите, какие фрагменты кода, с точки зрения решаемых вами задач, и в каком виде (модули или монолитно) должны быть включены в новое ядро. На работоспособность и функциональные возможности netfilter/iptables в основном влияют параметры конфигурации исходных кодов ядра в разделах:
    Networking options;
    IP: Netfilter Configuration.
    Подробное описание всех опций конфигурации, используемых в этих разделах, содержатся в исходных кодах ядра. В ядре версии 2.4.x в файле Documentation/Configure.help, в версии 2.6.x в файлах /net/ipv4/Kconfig и net/ipv4/netfilter/Kconfig.

    Шаг 4
    Разработка netfilter/iptables и ядра ведутся разными, но взаимодействующими между собой, командами разработчиков. Части кода netfilter/iptables, по мнению разработчиков должны быть включены в ядро, содержатся в патче patch-o-matic-YYYYMMDD (патч patch-o-matic-20031219 применим только к ядрам ветви 2.4 версии 2.4.17 и старше). Некоторые из этих изменений принимаются разработчиками ядра и включаются в последующие версии, некоторые не принимаются разработчиками ядра и вы можете использовать их на свой страх и риск. Дополнительная информация может быть найдена в документации http://www.netfilter.org/documentation/index.html#documentat ion-howto .
    Патчи входящие в состав patch-o-matic-YYYYMMDD делятся на ряд категорий, при этом наиболее часто используемыми на практике являются:

  • optimizations - оптимизационные патчи, включение которых в коды ядра ожидается;

  • pending - патчи, включение которых в коды ядра ожидается;

  • submitted - патчи, включенные в последнюю (на момент выхода patch-o-matic) версию ядра;

  • base - патчи, мнению разработчиков netfilter/iptables, без проблем взаимодействующие друг с другом.

    Для применения патча patch-o-matic-YYYYMMDD необходимо выполнить следующие операции.


  • Раскройте архив с исходными кодами patch-o-matic.
    [root@homerouter iptables]# bzip2 -d patch-o-matic-20031219.tar.bz2
    [root@homerouter iptables]# tar xpvf patch-o-matic-20031219.tar
    перейдите во вновь созданный каталог:
    [root@homerouter iptables]# cd patch-o-matic
    и запустите сценарий runme, сообщив ему где находятся исходные коды ядра и какую категорию патчей вы желаете использовать, например:
    [root@homerouter patch-o-matic]# KERNEL_DIR=/usr/src/linux-2.4.25 ./runme pending
    далее в рамках диалога вам будет предложено протестировать применимость, установить или пропустить установку всех патчей из выбранной ранее категории (процесс напоминает конфигурирование исходных кодов ядра при использовании make config).
    По окончании внесения изменений в исходные коды, откомпилируйте и проинсталлируйте ядро, проверьте его работоспособность.

    Шаг 5
    Удалите, если они установлены, пакеты iptables, ipchains и используцемые вместе с ними конфигураторы системы сетевой защиты.

    Шаг 6
    Распакуйте архив с частью исходных кодов iptables/netfilter устанавливаемых в виде обычных файлов:
    [root@homerouter iptables]# bzip2 -d iptables-1.2.9.tar.bz2
    [root@homerouter iptables]# tar xpvf iptables-1.2.9.tar
    Перейдите во вновь созданный каталог:
    [root@homerouter iptables]# cd iptables-1.2.9
    Откомпилируйте и проинсталируйте iptables/netfilter, создайте и сохраните список проинсталлированных файлов:
    [root@homerouter iptables-1.2.9]# make KERNEL_DIR=/usr/src/linux-2.4.25 BINDIR=/sbin LIBDIR=/lib/ MANDIR=/usr/share/man/
    [root@homerouter iptables-1.2.9]# find /* > ../iptables1
    [root@homerouter iptables-1.2.9]# make KERNEL_DIR=/usr/src/linux-2.4.25 BINDIR=/sbin LIBDIR=/lib/ MANDIR=/usr/share/man/ install
    [root@homerouter iptables-1.2.9]# find /* > ../iptables2
    [root@homerouter iptables-1.2.9]# cd ..
    [root@homerouter iptables]# diff iptables1 iptables2 > iptables.installed.YYYY.MM.YY

    Шаг 7
    Создайте файл сценария /etc/init.d/iptables, содержащий:
    как минимум две строки необходимые для нормальной работы утилиты chkconfig, содержащей информацию о уровнях на которых должен работать netfilter/iptables, приоритетности выполнения сценария при загрузке и разгрузке системы:
    # chkconfig: 2345 08 98
    # description: Start and stop filtering and mangling packets;
    команды загрузки модулей netfilter/iptables (если соотвествующие фрагменты кода не вкомпилированы непосредственно в ядро) вида:
    /sbin/modprobe <имя модуля>;
    команды, передающие ядру определенные параметры, например, для включения пересылки пакетов между различными сетевыми интерфейсами, необходимыми для нормальной работы шлюза используется команда:
    /sbin/sysctl -w net.ipv4.ip_forward = 1
    команды, реализующие фильтрацию и другие манипуляции с пакетами, которые в общем случае имеют вид:
    /sbin/iptables <строка с правилом>
    методология формирования правил приведена ниже.

    Шаг 8
    Определите права доступа и владельца файла /etc/init.d/iptables:
    [root@homerouter iptables]# chmod 700 /etc/init.d/iptables
    [root@homerouter iptables]# chown root.root /etc/init.d/iptables

    Шаг 9
    Если вы хотите, что бы netfilter/iptables запускался при загрузке системы (это в большинстве случаев правильное решение) создайте соответствующие ссылки:
    [root@homerouter iptables]# chkconfig --add iptables

    2. Инициализация брандмауэра.
    Работой брадмауэра управлет набор правил, которые определяются с помощью опций программы iptables. Инициализация брандмауэра включает в себя следующие операции: определение констант, используемых при работе сценария; удаление существующих правил из сценария; определение политики по умолчанию; востановление состояния интерфейса обратной петли, используемого для выполнения системных операций; блокирование узлов,доступ к которым вы собираетесь запретить; определение основных правил, предотвращающих прохождение пакетов с некорректными адресами источника и защищающих серверы, работающие через непривелигерованные порты.

    Символьные константы.
    Сценарий брандмауэра становится удобочитаемым и простым в настройке, если в нем определен ряд символьных имен. Некоторые из перечисленных ниже констант представляют общепринятые обозначения.

    IPT="/sbin/iptables"
    IPTS="/sbin/iptables-save"
    IPTR="/sbin/iptables-restore"


    EXTERNAL_INTERFACE="eth0" # интерефейс подключенный к интеренету
    LOOPBACK_INTERFACE='lo' # интерфейс обратной петли
    IP_ADDR="213.87.X.X" # IP-адрес вашего компьютера
    ANYWHERE="any/0" # произвольный IP-адрес
    MY_ISP="my.isp.address.range" # диапазон IP-адресов провайдера
    LOOPBACK="127.0.0.0/8" # диапазон IP-адресов обратной петли
    CLASS_A="10.0.0.0/8" # адреса класса А, предназначенные для
    # внутреннего использования
    CLASS_B="172.16.00/22" # адреса класса B, предназначенные для
    # внутреннего использования
    CLASS_C="192.168.0.0/16"# адреса класса C, предназначенные для
    # внутреннего использования
    CLASS_D="244.0.0.0/4" # адреса класса А, предназначенные для
    # группового вещания
    CLASS_E="240.0.0.0/5" # зарезервированные адреса класса Е
    BROADCAST_SRC="0.0.0.0" # исходный широковещательный
    BROADCAST_DST="255.255.255.255"# целевой широковешательные
    PRIVPORTS="0:1023" # номера привелегированных портов
    UNPRIPORTS="1024:65535" # номера непривелегированных портов

    Удаление существующих правил и установка политики по умолчанию.
    # Сбрасываеим все правила
    $IPT -P INPUT ACCEPT
    $IPT -P FORWARD ACCEPT
    $IPT -P OUTPUT ACCEPT
    $IPT -t nat -P PREROUTING ACCEPT
    $IPT -t nat -P POSTROUTING ACCEPT
    $IPT -t nat -P OUTPUT ACCEPT
    $IPT -t mangle -P PREROUTING ACCEPT
    $IPT -t mangle -P OUTPUT ACCEPT

    # Удаление правил
    $IPT -F
    $IPT -t nat -F
    $IPT -t mangle -F

    # Очищаем нестандартные правила
    $IPT -X
    $IPT -t nat -X
    $IPT -t mangle -X

    Теперь когда сброс всех правил осуществен, необходимо определить политику брандмауэра по умолчанию. Есть несколько вариантов начальной политики, и вам выбирать. Мой десктоп, не имеющий за собой локальной сети имеет политику по умолчанию

    $IPT -P INPUT DROP
    $IPT -P FORWARD DROP
    $IPT -P OUTPUT DROP
    $IPT -A INPUT -p ALL -i $LOOPBACK_INTERFACE -j ACCEPT
    $IPT -A OUTPUT -p ALL -o $LOOPBACK_INTERFACE -j ACCEPT

    Написание правил на что не забыть обратить внимание.

    А начать придется с сождания собственных Таблиц. А так же написать правила запрещающие прохождение через интерфей EXTERNAL_INTERFACE любой информации от сетей CLASS_A, СLASS_B, CLASS_C,

    $IPT -N bad_packets
    $IPT -N bad_tcp_packets
    $IPT -N icmp_packets
    $IPT -N udp_inbound
    $IPT -N udp_outbound
    $IPT -N tcp_inbound
    $IPT -N tcp_outbound

    3. Атаки с целью вывода системы из строя.
    Атака произволится путем "наводнения" системы пакетами определенного типа.

    SYN - наводнение (Syn Flooding)
    Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным. Клиентская часть с ложным IP-адресом отправляет SYN пакет и сервер отвечает SYN-ACK, но так как адрес был ложным таким образом соединединие не устанавливается и остается в "полуоткрытом состоянии"

    Подробности по теме :
    ftp://info.cert.org./pub/cert_advisories/CA-96.21.tcp_syn_fl ooding


    $IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \
    --log-prefix "fp=bad_tcp_packets:1 a=DROP "
    $IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

    # All good, so return
    $IPT -A bad_tcp_packets -p tcp -j RETURN

    ping - наводнение

    Любое сообщение, предполагающее от вет на него, может быть использовано для того что бы вывести вашу машину из строя либо существенно ограничить ее производительность. В качестве примера такого сообщения можно привести ICMP - пакет ping. При получении большого количества таких сообщений ресурсы машины в основном тратяться на передачу ответов.

    Подробности по теме :
    Denial of Service www.cert.org

    $IPT -A icmp_packets --fragment -p ICMP -j LOG \
    --log-prefix "fp=icmp_packets:1 a=DROP "
    $IPT -A icmp_packets --fragment -p ICMP -j DROP

    UDP - наводнение
    Службы использующие UDP, очень часто становятся мишенью для атак с целью вывода системы из строя. В отличие от ТСР, в протоколе UDP не придусмотрено установление соединения, поэтому флаги, определяющие состояние соединения, отсутствуют. Принимающий узел не имеет ни какой информации щ ещь какой пакет должен следовать за только что принятым. Таким образом возникакет возможность организовать атаку таким образом, что вся пропускная способность линии будет использоваться только на передачу ответов на поступающие UDP -пакет..
    Подробности по теме :
    UDP Port Denial-of-Service attack www.cert.org

    $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j DROP
    $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j DROP
    $IPT -A udp_inbound -p UDP -s 0/0 --destination-port 113 -j REJECT
    $IPT -A udp_inbound -p UDP -s 0/0 --source-port 67 --destination-port 68 \
    -j ACCEPT
    $IPT -A udp_inbound -p UDP -j RETURN
    $IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT

    ICMP - перенаправление

    ICMP- сообщение типа 5 указывает системе изменить содержимое таблиц маршрутизации с тем, что бы направлять пакеты по более короткому маршруту. Если вы используете routed или gated. То не забывайте, что есть возможность перенаправления трафика на удаленную машину, а так же для взломшика есть возможность определить свою машину, как одну из вашил локальных, стояших за сервером.

    $IPT -A icmp_packets --fragment -p ICMP -j LOG \
    --log-prefix "fp=icmp_packets:1 a=DROP "
    $IPT -A icmp_packets --fragment -p ICMP -j DROP

    # Echo - uncomment to allow your system to be pinged.
    # Uncomment the LOG command if you also want to log PING attempts
    #
    # $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j LOG \
    # --log-prefix "fp=icmp_packets:2 a=ACCEPT "
    # $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT

    # Time Exceeded
    $IPT -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

    # Not matched, so return so it will be logged
    $IPT -A icmp_packets -p ICMP -j RETURN

     

    4. NAT в IPTables.
    Маскарадинг (masquerading) и трансляция ip-адресов (NAT) в Linux. Что это такое, что можно и что нельзя.

    Если у Вас есть локальная сеть, подключенная к сети Интернет через linux сервер, и в этой локальной сети используются «серые» ip адреса, то одним из способов выхода в Интернет может стать использование NAT. Или наоборот, с помощью NAT можно осуществить доступ из Интернет например к web серверу расположенному в локальной сети и не имеющему реального ip-адреса.

    Этот документ содержит несколько терминов, которые следует пояснить прежде, чем вы столкнетесь с ними.

    1. «Серый» IP адрес (он же приватный, он же фейковый он же частный) - IP адрес из специально выделенных подсетей, которые не используются в сети Интернет, и зарезервированы для использования в локальных сетях (intranet). В каждом классе (A B С) зарезервировано по одной подсети:

    Класс А 10.0.0.0 - 10.255.255.255
    Класс B 172.16.0.0 - 172.31.255.255
    Класс C 192.168.0.0 - 192.168.255.255

    2. «Белый» IP адрес (он же реальный, он же публичный) IP адрес, не входящий в «серые» подсети и использующийся в сети Интернет.

    3. Маскарад (MASQUERADE) - замена сетевого адреса получателя в заголовке пакета на адрес, находящийся на исходящем интерфейсе машины, выполняющей маскарад, и соответственно обратная операция при получении ответного пакета. Маскарад применяется в тех же целях, что и SNAT, но в отличие от последней, MASQUERADE дает более сильную нагрузку на систему. Происходит это потому, что каждый раз, когда требуется выполнение этого действия - производится запрос IP адреса для указанного в действии сетевого интерфейса, в то время как для SNAT IP адрес указывается непосредственно. Однако, благодаря такому отличию, MASQUERADE может работать в случаях с динамическим IP адресом, т.е. когда вы подключаетесь к Интернет, скажем через PPP, SLIP или DHCP.

    4. Трансляция адресов (NAT network address translation) замена сетевого адреса получателя в заголовке пакета на любой указанный, и соответственно обратная операция при получении ответного пакета.

    5. DNAT - от англ. Destination Network Address Translation - изменение сетевого адреса получателя. DNAT - это изменение адреса назначения в заголовке пакета. Зачастую используется в паре с SNAT. Основное применение - предоставление дополнительных сетевых услуг внешним клиентам.

    6. SNAT - от англ. Source Network Address Translation - изменение сетевого адреса отправителя. SNAT - это изменение исходного адреса в заголовке пакета. Основное применение - использование единственного реального IP-адреса несколькими компьютерами для выхода в Интернет.

    Общие положения

    Когда пакет приходит на наш брандмауэр, то он сперва попадает на сетевое устройство, перехватывается соответствующим драйвером и далее передается в ядро. Далее пакет проходит ряд таблиц iptables и затем передается либо локальному приложению, либо переправляется на другую машину.

    Порядок движения транзитных пакетов в iptables.

    В упрощенном варианте, касающемся NAT, это выглядит так кабель сетевой интерфейс цепочка PREROUTING таблицы nat принятие решения о маршрутизации цепочка POSTROUTING таблицы nat сетевой интерфейс.

    Как вы можете видеть, пакет проходит несколько этапов, прежде чем он будет передан далее. На каждом из них пакет может быть остановлен. Заметьте, что нет каких либо цепочек, специфичных для отдельных интерфейсов или чего-либо подобного. Цепочку FORWARD проходят ВСЕ пакеты, которые движутся ЧЕРЕЗ ваш роутер. Не используйте цепочку INPUT для фильтрации транзитных пакетов, они туда просто не попадают! Через эту цепочку движутся только те пакеты, которые предназначены данному хосту!

    Для того чтобы Вы смогли использовать NAT, необходимо загрузить модуль iptables, который отвечает за трансляцию адресов с помощью команды

    modprobe iptable_nat

    Для трансляции некоторых определенных протоколов необходимо загрузить дополнительные модули например для ftp это модуль ip_nat_ftp.

    Так как при перезагрузке эти команды сбросятся то их необходимо прописать в автозагрузку, например в / etc/ rc. d/ rc. local.

    Так как все операции необходимые для трансляции адресов происходят в таблице nat и двух ее цепочках PREROUTING и POSTROUTING, то мы рассматриваем только их.

    Цепочка POSTROUTING

    Действие SNAT

    SNAT используется для преобразования сетевых адресов (Source Network Address Translation), т.е. изменения исходящего IP адреса в IP заголовке пакета. Например, это действие можно использовать для предоставления выхода в Интернет другим компьютерам из локальной сети, имея лишь один реальный IP адрес. Для этого необходимо включить пересылку пакетов (forwarding) в ядре и затем создать правила, которые будут транслировать исходящие IP адреса нашей локальной сети в реальный внешний адрес. В результате, внешний мир ничего не будет знать о нашей локальной сети, он будет считать, что запросы пришли с нашего брандмауэра.
    SNAT допускается выполнять только в таблице nat, в цепочке POSTROUTING. Другими словами, только здесь допускается преобразование исходящих адресов. Если первый пакет в соединении подвергся преобразованию исходящего адреса, то все последующие пакеты, из этого же соединения, будут преобразованы автоматически и не пойдут через эту цепочку правил.

    Ключ -- to- source

    Пример:

    iptables - t nat - A POSTROUTING - p tcp - o eth0 - j SNAT -- to- source 194.236.50.155-194.236.50.160:1024-32000
    Ключ -- to- source используется для указания адреса, который присваивается пакету. Все просто, вы указываете IP адрес, который будет подставлен в заголовок пакета в качестве исходящего. Если вы собираетесь перераспределять нагрузку между несколькими брандмауэрами, то можно указать диапазон адресов, где начальный и конечный адреса диапазона разделяются дефисом, например: 194.236.50.155-194.236.50.160. Тогда, конкретный IP адрес будет выбираться из диапазона случайным образом для каждого нового потока. Дополнительно можно указать диапазон портов, которые будут использоваться только для нужд SNAT. Все исходящие порты будут после этого перекартироваться в заданный диапазон. Если диапазон портов не задан, то исходные порты ниже 512 перекартируются в диапазоне 0-511, порты в диапазоне 512-1023 перекартируются в диапазоне 512-1023, и, наконец порты из диапазона 1024-65535 перекартируются в диапазоне 1024-65535. Что касается портов назначения, то они не подвергаются перекартированию.

    Действие MASQUERADE

    Маскарадинг в основе своей представляет то же самое, что и SNAT только не имеет ключа --to-source. Причиной тому то, что маскарадинг может работать, например, с dialup подключением или DHCP, т.е. в тех случаях, когда IP адрес присваивается устройству динамически. Если у вас имеется динамическое подключение с меняющимся ip адресом, то нужно использовать маскарадинг, если же у вас статическое IP подключение, то бесспорно лучшим выходом будет использование действия SNAT.
    Маскарадинг подразумевает получение IP адреса от заданного сетевого интерфейса, вместо прямого его указания, как это делается с помощью ключа --to-source в действии SNAT. Действие MASQUERADE имеет хорошее свойство - "забывать" соединения при остановке сетевого интерфейса.

    Действие MASQUERADE допускается указывать только в цепочке POSTROUTING таблицы nat, так же как и действие SNAT. MASQUERADE имеет ключ, описываемый ниже, использование которого необязательно.

    Ключ --to-ports

    Пример:

    iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
    Ключ --to-ports используется для указания порта источника или диапазона портов исходящего пакета. Можно указать один порт, например: --to-ports 1025, или диапазон портов как здесь: --to-ports 1024-3000. Этот ключ можно использовать только в правилах, где критерий содержит явное указание на протокол TCP или UDP с помощью ключа -- protocol.

    Цепочка PREROUTING

    В данной цепочке выполняется преобразование сетевых адресов (DNAT) перед тем как пакеты попадут в цепочку INPUT или FORWARD.

    Действие DNAT

    DNAT (Destination Network Address Translation) используется для преобразования адреса места назначения в IP заголовке пакета. Если пакет подпадает под критерий правила, выполняющего DNAT, то этот пакет, и все последующие пакеты из этого же потока, будут подвергнуты преобразованию адреса назначения и переданы на требуемое устройство, хост или сеть. Данное действие может, к примеру, успешно использоваться для предоставления доступа к вашему web-серверу, находящемуся в локальной сети, и не имеющему реального IP адреса. Для этого вы строите правило, которое перехватывает пакеты, идущие на HTTP порт брандмауэра и выполняя DNAT передаете их на локальный адрес web-сервера. Для этого действия так же можно указать диапазон адресов, тогда выбор адреса назначения для каждого нового потока будет производиться случайным образом.
    Действие DNAT может выполняться только в цепочках PREROUTING и OUTPUT таблицы nat, и во вложенных под-цепочках. Важно запомнить, что вложенные подцепочки, реализующие DNAT не должны вызываться из других цепочек, кроме PREROUTING и OUTPUT.

    Ключ --to-destination

    Пример :

    iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10

    Ключ -- to - destination указывает, какой IP адрес должен быть подставлен в качестве адреса места назначения. В выше приведенном примере во всех пакетах, пришедших на адрес 15.45.23.67, адрес назначения будет изменен на один из диапазона от 192.168.1.1 до 192.168.1.10. Как уже указывалось выше, все пакеты из одного потока будут направляться на один и тот же адрес, а для каждого нового потока будет выбираться один из адресов в указанном диапазоне случайным образом. Можно также определить единственный IP адрес. Можно дополнительно указать порт или диапазон портов, на который (которые) будет перенаправлен траффик. Для этого после ip адреса через двоеточие укажите порт, например --to-destination 192.168.1.1:80, а указание диапазона портов выглядит так: --to-destination 192.168.1.1:80-100. Указание портов допускается только при работе с протоколом TCP или UDP, при наличии опции --protocol в критерии.
    Действие DNAT достаточно сложно в использовании и требует дополнительного пояснения. Рассмотрим простой пример. У нас есть WEB сервер и мы хотим разрешить доступ к нему из Интернет. Мы имеем только один реальный IP адрес, а WEB-сервер расположен в локальной сети. Реальный IP адрес $INET_IP назначен брандмауэру, HTTP сервер имеет локальный адрес $HTTP_IP и, наконец брандмауэр имеет локальный адрес $LAN_IP. Для начала добавим простое правило в цепочку PREROUTING таблицы nat:
    iptables -t nat -A PREROUTING --dst $INET_IP -p tcp --dport 80 -j DNAT \
    --to-destination $HTTP_IP

    В соответствии с этим правилом, все пакеты, поступающие на 80-й порт адреса $INET_IP перенаправляются на наш внутренний WEB-сервер. Если теперь обратиться к WEB-серверу из Интернет, то все будет работать прекрасно. Но что же произойдет, если попробовать соединиться с ним из локальной сети? Соединение просто не установится. Давайте посмотрим как маршрутизируются пакеты, идущие из Интернет на наш WEB-сервер. Для простоты изложения примем адрес клиента в Интернет равным $EXT_BOX.
    1. Пакет покидает клиентский узел с адресом $EXT_BOX и направляется на $INET_IP

    2. Пакет приходит на наш брандмауэр.

    3. Брандмауэр, в соответствии с вышеприведенным правилом, подменяет адрес назначения и передает его дальше, в другие цепочки.

    4. Пакет передается на $HTTP_IP.

    5. Пакет поступает на HTTP сервер и сервер передает ответ через брандмауэр, если в таблице маршрутизации он обозначен как шлюз для $EXT_BOX. Как правило, он назначается шлюзом по-умолчанию для HTTP сервера.

    6. Брандмауэр производит обратную подстановку адреса в пакете, теперь все выглядит так, как будто бы пакет был сформирован на брандмауэре.

    7. Пакет передается клиенту $EXT_BOX.

    А теперь посмотрим, что произойдет, если запрос посылается с узла, расположенного в той же локальной сети. Для простоты изложения примем адрес клиента в локальной сети равным $LAN_BOX.

    1. Пакет покидает $LAN_BOX.

    2. Поступает на брандмауэр.

    3. Производится подстановка адреса назначения, однако адрес отправителя не подменяется, т.е. исходный адрес остается в пакете без изменения.

    4. Пакет покидает брандмауэр и отправляется на HTTP сервер.

    5. HTTP сервер, готовясь к отправке ответа, обнаруживает, что клиент находится в локальной сети (поскольку пакет запроса содержал оригинальный IP адрес, который теперь превратился в адрес назначения) и поэтому отправляет пакет непосредственно на $LAN_BOX.

    6. Пакет поступает на $LAN_BOX. Клиент "путается", поскольку ответ пришел не с того узла, на который отправлялся запрос. Поэтому клиент "сбрасывает" пакет ответа и продолжает ждать "настоящий" ответ.

    Проблема решается довольно просто с помощью SNAT. Ниже приводится правило, которое выполняет эту функцию. Это правило вынуждает HTTP сервер передавать ответы на наш брандмауэр, которые затем будут переданы клиенту.
    iptables -t nat -A POSTROUTING -p tcp --dst $HTTP_IP --dport 80 -j SNAT \
    --to-source $LAN_IP

    Так как цепочка POSTROUTING обрабатывается самой последней и к этому моменту пакет уже прошел процедуру преобразования DNAT, поэтому критерий строится на базе адреса назначения $HTTP_IP.

    Если вы думаете, что на этом можно остановиться, то вы ошибаетесь! Представим себе ситуацию, когда в качестве клиента выступает сам брандмауэр. Тогда, к сожалению, пакеты будут передаваться на локальный порт с номером 80 самого брандмауэра, а не на $HTTP_IP. Чтобы разрешить и эту проблему, добавим правило:
    iptables -t nat -A OUTPUT --dst $INET_IP -p tcp --dport 80 -j DNAT \
    --to-destination $HTTP_IP

    Действие REDIRECT

    Действие REDIRECT выполняет перенаправление пакетов и потоков на другой порт той же самой машины. К примеру, можно пакеты, поступающие на HTTP порт перенаправить на порт HTTP proxy. Действие REDIRECT очень удобно для выполнения "прозрачного" проксирования (transparent proxying), когда машины в локальной сети даже не подозревают о существовании прокси.

    REDIRECT может использоваться только в цепочках PREROUTING и OUTPUT таблицы nat.

    Ключ : --to-ports

    Пример :

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

    Ключ --to-ports определяет порт или диапазон портов назначения. Без указания ключа --to-ports, перенаправления не происходит, т.е. пакет идет на тот порт, куда и был назначен. В примере, приведенном выше, --to-ports 8080 указан один порт назначения. Если нужно указать диапазон портов, то мы должны написать нечто подобное --to-ports 8080-8090. Этот ключ можно использовать только в правилах, где критерий содержит явное указание на протокол TCP или UDP с помощью ключа --protocol.

    Вот мы и рассмотрели основные моменты касающиеся трансляции адресов с помощью linux iptables .

    Советы и основные ошибки допускаемые при настройке NAT :

    1. Для того чтобы NAT работала, необходимо разрешить прохождение пакетов от интерфейса к интерфейсу. Для этого необходимо:

    o проверить, разрешена ли пересылка пакетов в ядре linux (сделать это можно командой cat /proc/sys/net/ipv4/ip_forward и если Вы получили 1 на выходе значит все в порядке) и если она выключена, тогда Вам нужно включить ее командой echo 1 >/proc/sys/net/ipv4/ip_forward . Так как при перезагрузке компьютера эта команда сбросится, ее необходимо прописать куда-нибудь в автозагрузку, например в / etc / rc . d / rc . local . В дистрибутивах, поддерживающих функцию sysctl , автоматическое включение пересылки в ядре можно реализовать, прописав в /etc/sysctl.conf строкуВарварварвар
    o добавить в цепочку FORWARD необходимые разрешения для нужных Вам сетей. Например если Вы хотите чтобы адреса из вашей локальной сети (192.168.0.0/24) могли пересылаться от локального интерфейса наружу и обратно, необходимо добавить две строки: iptables A FORWARD -s 192.168.0.0/24 -j ACCEPT (этой командой вы разрешили прохождение пакетов между сетевыми интерфейсами из локальной сети 192.168.0.0/24) и iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT (этой командой вы разрешили прохождение пакетов между сетевыми интерфейсами в локальную сеть 192.168.0.0/24). После этого можно приступать собственно к реализации трансляции адресов.

    2. Если «теоретически» все сделали правильно но ничего не работает:

  • Сохраните все ваши правила iptables куда-нибудь в файл ( iptables - save >/ file . txt ) и просмотрите их. В iptables пакет обрабатывается первым подходящим для него правилом, и поэтому может быть что ваш пакет просто не доходит до тех правил, которые Вы ему назначаете.
  • Используйте для проверки утилиты, входящие в состав дистрибутива, такие как ping , которая позволяет показать доступен тот или иной хост или нет, traceroute , позволяющая проследить маршрут прохождения пакетов до заданного хоста.
  • 5. Пример скрипта iptables, позволяющего обеспечивать некоторый (вполне достаточный)уровень безопасности для одиночной рабочей станции.

    Набор правил позволяет обеспечивать некоторый (вполне достаточный)уровень безопасности для одиночной рабочей станции(не для шлюза в домашнюю сеть).Поддерживается работа FTP и HTTP-серверов и наиболее употребительных клиентов в локальной сети и Интернет.
    Для инсталляции сценария необходимо выполнить следующие операции

    Шаг 1
    Подредактировать сценарий всоответствии с решаемыми задачами и потребностями.

    Шаг 2
    Поместить сценарий в файл /etc/init.d/iptables

    Шаг 3
    Назначить владельцем файла пользователя root, установить права доступак файлу 700 и сделать его загружаемым автоматически при загрузке системы.

    Пример скрипта iptables, позволяющего обеспечивать некоторый (вполне достаточный)уровень безопасности для одиночной рабочей станции(не для щлюза в семейную сеть). Скрипт нгужно подредактировать под свои параметры (см. комментарии) На RH-based дистрибутивах скрипт нужно положить скрипт в каталог /etc/init.d/, дать ему имя iptables, назначить его владельцем пользователя root, права доступа 700, и сделать его автоматически запускаемым при загрузке системы.

    http://www.bruy.info/forum/f/index.php?t=msg&th=28&start=0&rid=0&S=433397a049f9f125c1cdcea4591cd3ce

    #!/bin/sh
    #
    # Invoked from /etc/rc.d/init.d/iptables.
    # chkconfig: - 60 95
    # description: Starts and stops the IPTABLES packet filter \
    # used to provide firewall network services.

    # Source function library.
    /etc/rc.d/init.d/functions

    # Source networking configuration.
    /etc/sysconfig/network

    # Check that networking is up.
    if [ ${NETWORKING} = "no" ]
    then
    exit 0
    fi

    if [ ! -x /sbin/iptables ]; then
    exit 0
    fi

    # See how we were called.
    case "$1" in
    start)
    echo -n "Starting Firewalling: "

    # ------------------------------------------------------------ ----------------
    # Some definitions for easy maintenance.
    # EDIT THESE TO SUIT YOUR SYSTEM AND ISP.

    IPADDR="192.168.XXX.XXX"
    EXTERNAL_INTERFACE="eth0" # Infoline connected interface
    INTERNET_INTERFACE="ppp+" # Internet interface up when pptp up
    LOOPBACK_INTERFACE="lo" # Your local naming convention
    PRIMARY_NAMESERVER="194.135.60.3" # Your Primary Name Server
    SECONDARY_NAMESERVER="194.135.61.3" # Your Secondary Name Server Internal Server
    SMTP_SERVER="195.2.72.152" # Your Central Mail Hub Server

    LOOPBACK="127.0.0.0/8" # Reserved loopback addr range
    CLASS_A="10.0.0.0/8" # Class A private networks
    CLASS_B="172.16.0.0/12" # Class B private networks
    CLASS_C="192.168.0.0/16" # Class C private networks
    CLASS_D_MULTICAST="224.0.0.0/4" # Class D multicast addr
    CLASS_E_RESERVED_NET="240.0.0.0/5" # Class E reserved addr
    BROADCAST_SRC="0.0.0.0" # Broadcast source addr
    BROADCAST_DEST="255.255.255.255" # Broadcast destination addr
    PRIVPORTS="0:1023" # Privileged port range
    UNPRIVPORTS="1024:65535" # Unprivileged port range

    # ------------------------------------------------------------ ----------------
    # The SSH client starts at 1023 and works down to 513 for each
    # additional simultaneous connection originating from a privileged port.
    # Clients can optionally be configured to use only unprivileged ports.
    SSH_LOCAL_PORTS="1022:65535" # Port range for local clients
    SSH_REMOTE_PORTS="513:65535" # Port range for remote clients

    # traceroute usually uses -S 32769:65535 -D 33434:33523
    TRACEROUTE_SRC_PORTS="32769:65535"
    TRACEROUTE_DEST_PORTS="33434:33523"
    # ------------------------------------------------------------ ----------------

    # Default policy is DENY
    # Explicitly accept desired INCOMING & OUTGOING connections

    # Remove all existing rules belonging to this filter
    iptables -F

    # Remove any existing user-defined chains.
    iptables -X

    # Set the default policy of the filter to deny.
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

    # ------------------------------------------------------------ ----------------
    # LOOPBACK
    # --------
    # Unlimited traffic on the loopback interface.

    iptables -A INPUT -i $LOOPBACK_INTERFACE -j ACCEPT
    iptables -A OUTPUT -o $LOOPBACK_INTERFACE -j ACCEPT

    # ------------------------------------------------------------ ----------------
    # ------------------------------------------------------------ ----------------
    #Для VPN
    iptables -A INPUT -p 47 -m state --state ESTABLISHED,RELATED -i eth0 -j ACCEPT
    iptables -A OUTPUT -p TCP --dport 1723 -o eth0 -j ACCEPT
    iptables -A OUTPUT -p 47 -o eth0 -j ACCEPT

    # ------------------------------------------------------------ ----------------
    # Network Ghouls
    # Deny access to jerks
    # --------------------
    # /etc/rc.d/rc.firewall.blocked contains a list of
    # iptables -A INPUT -i $EXTERNAL_INTERFACE -s address -j DROP
    # rules to block from any access.
    # Refuse any connection from problem sites
    if [ -f /etc/rc.d/rc.firewall.blocked ]; then
    deny_file="/etc/rc.d/rc.firewall.blocked"
    temp_file="/tmp/temp.ip.addresses"
    cat $deny_file | sed -n -e "s/^[ ]*\([0-9.]*\).*$/\1/p" \
    | awk ' $1 ' > $temp_file
    while read ip_addy
    do
    case $ip_addy in
    *) iptables -A INPUT -i $EXTERNAL_INTERFACE -s $ip_addy -j DROP
    iptables -A INPUT -i $EXTERNAL_INTERFACE -d $ip_addy -j DROP
    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -s $ip_addy -j REJECT
    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -d $ip_addy -j REJECT
    ;;
    esac
    done < $temp_file
    rm -f $temp_file > /dev/null 2>&1
    unset temp_file
    unset deny_file
    fi

    # ------------------------------------------------------------ ----------------
    # SPOOFING & BAD ADDRESSES
    # Refuse spoofed packets.
    # Ignore blatantly illegal source addresses.
    # Protect yourself from sending to bad addresses.
    # Refuse incoming packets pretending to be from the external address.
    iptables -A INPUT -s $IPADDR -j DROP
    # Refuse incoming packets claiming to be from a Class A, B or C private network
    iptables -A INPUT -s $CLASS_A -j DROP
    iptables -A INPUT -s $CLASS_B -j DROP
    #iptables -A INPUT -s $CLASS_C -j DROP

    # Refuse broadcast address SOURCE packets
    iptables -A INPUT -s $BROADCAST_DEST -j DROP
    iptables -A INPUT -d $BROADCAST_SRC -j DROP

    # Refuse Class D multicast addresses
    # Multicast is illegal as a source address.
    # Multicast uses UDP.
    iptables -A INPUT -s $CLASS_D_MULTICAST -j DROP

    # Refuse Class E reserved IP addresses
    iptables -A INPUT -s $CLASS_E_RESERVED_NET -j DROP

    # Refuse special addresses defined as reserved by the IANA.
    # Note: The remaining reserved addresses are not included
    # filtering them causes problems as reserved blocks are
    # being allocated more often now. The following are based on
    # reservations as listed by IANA as of 2001/01/04. Please regularly
    # check at http://www.iana.org/ for the latest status.

    # Note: this list includes the loopback, multicast, & reserved addresses.
    # 0.*.*.* - Can't be blocked for DHCP users.
    # 127.*.*.* - LoopBack
    # 169.254.*.* - Link Local Networks
    # 192.0.2.* - TEST-NET
    # 224-255.*.*.* - Classes D & E, plus unallocated.

    iptables -A INPUT -s 0.0.0.0/8 -j DROP
    iptables -A INPUT -s 127.0.0.0/8 -j DROP
    iptables -A INPUT -s 169.254.0.0/16 -j DROP
    iptables -A INPUT -s 192.0.2.0/24 -j DROP
    iptables -A INPUT -s 224.0.0.0/3 -j DROP

    # ------------------------------------------------------------ ----------------
    # UDP TRACEROUTE
    # --------------
    # Traceroute usually uses -S 32769:65535 -D 33434:33523
    iptables -A INPUT -i $INTERNET_INTERFACE -p udp \
    --source-port $TRACEROUTE_SRC_PORTS \
    --destination-port $TRACEROUTE_DEST_PORTS -j DROP

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p udp \
    --source-port $TRACEROUTE_SRC_PORTS \
    --destination-port $TRACEROUTE_DEST_PORTS -j ACCEPT

    #Для локалки
    iptables -A INPUT -i $EXTERNAL_INTERFACE -p udp \
    --source-port $TRACEROUTE_SRC_PORTS \
    -d $IPADDR --destination-port $TRACEROUTE_DEST_PORTS -j DROP

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p udp \
    -s $IPADDR --source-port $TRACEROUTE_SRC_PORTS \
    --destination-port $TRACEROUTE_DEST_PORTS -j ACCEPT
    # ------------------------------------------------------------ ----------------
    # DNS forward-only nameserver (53)
    # --------------------------------
    iptables -A INPUT -i $INTERNET_INTERFACE -p udp \
    -s $PRIMARY_NAMESERVER --source-port 53 \
    --destination-port $UNPRIVPORTS -j ACCEPT
    iptables -A OUTPUT -o $INTERNET_INTERFACE -p udp \
    --source-port $UNPRIVPORTS \
    -d $PRIMARY_NAMESERVER --destination-port 53 -j ACCEPT
    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    -s $PRIMARY_NAMESERVER --source-port 53 \
    --destination-port $UNPRIVPORTS -j ACCEPT
    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    -d $PRIMARY_NAMESERVER --destination-port 53 -j ACCEPT
    iptables -A INPUT -i $INTERNET_INTERFACE -p udp \
    -s $SECONDARY_NAMESERVER --source-port 53 \
    --destination-port $UNPRIVPORTS -j ACCEPT
    iptables -A OUTPUT -o $INTERNET_INTERFACE -p udp \
    --source-port $UNPRIVPORTS \
    -d $SECONDARY_NAMESERVER --destination-port 53 -j ACCEPT

    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    -s $SECONDARY_NAMESERVER --source-port 53 \
    --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    -d $SECONDARY_NAMESERVER --destination-port 53 -j ACCEPT

    # ------------------------------------------------------------ ------
    # HTTP server (80)
    # ----------------
    #iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp \
    # --source-port $UNPRIVPORTS \
    # -d $IPADDR --destination-port 80 -j ACCEPT
    #iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp ! --syn \
    # -s $IPADDR --source-port 80 \
    # --destination-port $UNPRIVPORTS -j ACCEPT

    # ------------------------------------------------------------ ------
    # HTTPS server (443)
    # ------------------

    #iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp \
    # --source-port $UNPRIVPORTS \
    # -d $IPADDR --destination-port 443 -j ACCEPT

    #iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp ! --syn \
    # -s $IPADDR --source-port 443 \
    # --destination-port $UNPRIVPORTS -j ACCEPT

    # ------------------------------------------------------------ ------
    # MySQL server (3306)
    # -------------------

    # iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp \
    # --source-port $UNPRIVPORTS \
    # -d $IPADDR --destination-port 3306 -j ACCEPT

    # iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp ! --syn \
    # -s $IPADDR --source-port 3306 \
    # --destination-port $UNPRIVPORTS -j ACCEPT

    # ------------------------------------------------------------ ------
    # SSH server (22)
    # ---------------

    #iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp \
    # --source-port $SSH_REMOTE_PORTS \
    # -d $IPADDR --destination-port 22 -j ACCEPT

    #iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp ! --syn \
    # -s $IPADDR --source-port 22 \
    # --destination-port $SSH_REMOTE_PORTS -j ACCEPT

    # SSH client (22)
    # ---------------

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $SSH_LOCAL_PORTS \
    --destination-port 22 -j ACCEPT

    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    --source-port 22 \
    --destination-port $SSH_LOCAL_PORTS -j ACCEPT
    #Для внутренней сетки
    iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp ! --syn \
    --source-port 22 \
    -d $IPADDR --destination-port $SSH_LOCAL_PORTS -j ACCEPT

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp \
    -s $IPADDR --source-port $SSH_LOCAL_PORTS \
    --destination-port 22 -j ACCEPT

    # ------------------------------------------------------------ ------
    # IMAP server (143)
    # -----------------
    # iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp \
    # --source-port $UNPRIVPORTS \
    # -d $IPADDR --destination-port 143 -j ACCEPT

    # iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp ! --syn \
    # -s $IPADDR --source-port 143 \
    # --destination-port $UNPRIVPORTS -j ACCEPT

    # IMAP client (143)
    # -----------------
    # iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp ! --syn \
    # --source-port 143 \
    # -d $IPADDR --destination-port $UNPRIVPORTS -j ACCEPT

    # iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp \
    # -s $IPADDR --source-port $UNPRIVPORTS \
    # --destination-port 143 -j ACCEPT

    # ------------------------------------------------------------ ------
    # SMTP client (25)
    # ----------------

    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    --source-port 25 \
    --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    --destination-port 25 -j ACCEPT

    # ------------------------------------------------------------ ------
    # POP client (110)
    # ----------------

    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    --source-port 110 \
    --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    --destination-port 110 -j ACCEPT

    # ------------------------------------------------------------ ------
    # HTTP client (80)
    # ----------------

    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    --source-port 80 \
    --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    --destination-port 80 -j ACCEPT

    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    --source-port 8083 \
    --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    --destination-port 8083 -j ACCEPT

    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    --source-port 8080 \
    --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    --destination-port 8080 -j ACCEPT

    #Для внутренней сетки
    # ----------------
    iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp ! --syn \
    --source-port 80 \
    -d $IPADDR --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp \
    -s $IPADDR --source-port $UNPRIVPORTS \
    --destination-port 80 -j ACCEPT

    # ------------------------------------------------------------ ------
    # ------------------------------------------------------------ ------
    # HTTPS client (443)
    # ----------------
    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    --source-port 443 \
    --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    --destination-port 443 -j ACCEPT
    # ------------------------------------------------------------ ------

    # IRC client (6667)
    # -----------------
    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    --source-port 6667 \
    --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    --destination-port 6667 -j ACCEPT

    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    --destination-port $UNPRIVPORTS -j ACCEPT

    # ------------------------------------------------------------ ------
    # IRC client (6667) Для внутренней сетки
    # -----------------

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp ! --syn \
    --source-port 6667 \
    -d $IPADDR --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp \
    -s $IPADDR --source-port $UNPRIVPORTS \
    --destination-port 6667 -j ACCEPT

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    -d $IPADDR --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp \
    -s $IPADDR --source-port $UNPRIVPORTS \
    --destination-port $UNPRIVPORTS -j ACCEPT

    # ------------------------------------------------------------ ------
    # ------------------------------------------------------------ ------

    # FTP server (21)
    # ---------------

    # incoming request
    #iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp \
    # --source-port $UNPRIVPORTS \

    # -d $IPADDR --destination-port 21 -j ACCEPT

    #iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp ! --syn \
    # -s $IPADDR --source-port 21 \
    # --destination-port $UNPRIVPORTS -j ACCEPT

    # PORT MODE data channel responses
    #iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp \
    # -s $IPADDR --source-port 20 \
    # --destination-port $UNPRIVPORTS -j ACCEPT

    #iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp ! --syn \
    # --source-port $UNPRIVPORTS \
    # -d $IPADDR --destination-port 20 -j ACCEPT

    # PASSIVE MODE data channel responses
    #iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp \
    # --source-port $UNPRIVPORTS \
    # -d $IPADDR --destination-port $UNPRIVPORTS -j ACCEPT

    #iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp ! --syn \
    # -s $IPADDR --source-port $UNPRIVPORTS \
    # --destination-port $UNPRIVPORTS -j ACCEPT

    # ------------------------------------------------------------ ------
    # SYSLOG client (514)
    # -------------------

    # iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p udp \
    # -s $IPADDR --source-port 514 \
    # -d $SYSLOG_SERVER --destination-port $UNPRIVPORTS -j ACCEPT
    # ------------------------------------------------------------ ------

    # FTP client (21)
    # ---------------
    # outgoing request
    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp \
    --source-port $UNPRIVPORTS \
    --destination-port 21 -j ACCEPT

    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp ! --syn \
    --source-port 21 \
    --destination-port $UNPRIVPORTS -j ACCEPT

    # PORT mode data channel
    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp \
    --source-port 20 \
    --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p tcp ! --syn \
    --source-port $UNPRIVPORTS \
    --destination-port 20 -j ACCEPT

    # ---------------
    #Для внутренней сетки
    # outgoing request
    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp \
    -s $IPADDR --source-port $UNPRIVPORTS \
    --destination-port 21 -j ACCEPT

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp ! --syn \
    --source-port 21 \
    -d $IPADDR --destination-port $UNPRIVPORTS -j ACCEPT

    # PORT mode data channel
    iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp \
    --source-port 20 \

    -d $IPADDR --destination-port $UNPRIVPORTS -j ACCEPT

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p tcp ! --syn \
    -s $IPADDR --source-port $UNPRIVPORTS \
    --destination-port 20 -j ACCEPT

    # ------------------------------------------------------------ ------
    # ------------------------------------------------------------ ----------------
    # ICMP
    # ----

    # To prevent denial of service attacks based on ICMP bombs, filter
    # incoming Redirect (5) and outgoing Destination Unreachable (3).
    # Note, however, disabling Destination Unreachable (3) is not
    # advisable, as it is used to negotiate packet fragment size.

    # For bi-directional ping.
    # Message Types: Echo_Reply (0), Echo_Request (8)
    # To prevent attacks, limit the src addresses to your ISP range.
    #
    # For outgoing traceroute.
    # Message Types: INCOMING Dest_Unreachable (3), Time_Exceeded (11)
    # default UDP base: 33434 to base+nhops-1
    #
    # For incoming traceroute.
    # Message Types: OUTGOING Dest_Unreachable (3), Time_Exceeded (11)
    # To block this, deny OUTGOING 3 and 11

    # 0: echo-reply (pong)
    # 3: destination-unreachable, port-unreachable, fragmentation-needed, etc.
    # 4: source-quench
    # 5: redirect
    # 8: echo-request (ping)
    # 11: time-exceeded
    # 12: parameter-problem

    iptables -A INPUT -i $INTERNET_INTERFACE -p icmp \
    --icmp-type echo-reply \
    -j ACCEPT

    iptables -A INPUT -i $INTERNET_INTERFACE -p icmp \
    --icmp-type destination-unreachable \
    -j ACCEPT

    iptables -A INPUT -i $INTERNET_INTERFACE -p icmp \
    --icmp-type source-quench \
    -j ACCEPT

    iptables -A INPUT -i $INTERNET_INTERFACE -p icmp \
    --icmp-type time-exceeded \
    -j ACCEPT

    iptables -A INPUT -i $INTERNET_INTERFACE -p icmp \
    --icmp-type parameter-problem \
    -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p icmp \
    --icmp-type fragmentation-needed -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p icmp \
    --icmp-type source-quench -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p icmp \
    --icmp-type echo-request -j ACCEPT

    iptables -A OUTPUT -o $INTERNET_INTERFACE -p icmp \
    --icmp-type parameter-problem -j ACCEPT

    # ------------------------------------------------------------ ----------------
    #Для внутренней сетки
    iptables -A INPUT -i $EXTERNAL_INTERFACE -p icmp \
    --icmp-type echo-reply \
    -d $IPADDR -j ACCEPT

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p icmp \
    --icmp-type destination-unreachable \
    -d $IPADDR -j ACCEPT

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p icmp \
    --icmp-type source-quench \
    -d $IPADDR -j ACCEPT

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p icmp \
    --icmp-type time-exceeded \
    -d $IPADDR -j ACCEPT

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p icmp \
    --icmp-type parameter-problem \
    -d $IPADDR -j ACCEPT

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p icmp \
    -s $IPADDR --icmp-type fragmentation-needed -j ACCEPT

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p icmp \
    -s $IPADDR --icmp-type source-quench -j ACCEPT

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p icmp \
    -s $IPADDR --icmp-type echo-request -j ACCEPT

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -p icmp \
    -s $IPADDR --icmp-type parameter-problem -j ACCEPT

    # ------------------------------------------------------------ ----------------
    # Enable logging for selected denied packets

    iptables -A INPUT -i $INTERNET_INTERFACE -p tcp -j DROP

    iptables -A INPUT -i $INTERNET_INTERFACE -p udp \
    --destination-port $PRIVPORTS -j DROP

    iptables -A INPUT -i $INTERNET_INTERFACE -p udp \
    --destination-port $UNPRIVPORTS -j DROP

    iptables -A INPUT -i $INTERNET_INTERFACE -p icmp \
    --icmp-type 5 -j DROP

    iptables -A INPUT -i $INTERNET_INTERFACE -p icmp \
    --icmp-type 13/255 -j DROP

    iptables -A OUTPUT -o $INTERNET_INTERFACE -j REJECT

    #Для локальной сети
    iptables -A INPUT -i $EXTERNAL_INTERFACE -p tcp -j DROP

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p udp \
    --destination-port $PRIVPORTS -j DROP

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p udp \
    --destination-port $UNPRIVPORTS -j DROP

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p icmp \
    --icmp-type 5 -j DROP

    iptables -A INPUT -i $EXTERNAL_INTERFACE -p icmp \
    --icmp-type 13/255 -j DROP

    iptables -A OUTPUT -o $EXTERNAL_INTERFACE -j REJECT

    # ------------------------------------------------------------ ----------------

    ;;
    stop)
    echo -n "Shutting Firewalling: "

    # Remove all existing rules belonging to this filter
    iptables -F

    # Delete all user-defined chain to this filter
    iptables -X

    # Reset the default policy of the filter to accept.
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT

    ;;
    status)
    status iptables
    ;;
    restart|reload)
    $0 stop
    $0 start
    ;;
    *)
    echo "Usage: iptables {start|stop|status|restart|reload}"
    exit 1
    esac
    echo "done"

    exit 0

    6. Список авторов.

    Sv. Bambr aka Sv. Bambr (http://www.bruy.info)
    Alexei Dmitriev aka Dr.Spectre (http://www.linuxportal.ru)
    Andrew Kuznetsoff aka Разгильдяй на обкуренной кошке (http://www.kuznetsoff.fromru.com)

    7. Использованная литература.

    1. IPTables-Howto
    2. Linux 2.4 Packet-filtering-HOWTO
    3. Firewall-HOWTO
    4. NAT-HOWTO
    5. Netfilter-hacking-HOWTO
    6. Iptables-tutorial
    7. Роберт Л. Зинглер Брандмауэры в Linux 2001

    Автор статьи: Alexey Dmitriev
    Дата: 2005-03-15
    Оригинал статьи размещен здесь.

    screen manager with VT100/ANSI terminal emulation


    Вопрос:
    Мне нужно подключаться к удаленному линуксу и запускать на выполнение скрипты чтобы при оборыве связи сессия жила дальше и была возможность подключиться к этому виртуальному терминалу снова и потоки ввода/вывода были бы снова на мне как это можно просто реализовать?

    читать дальше...

    screen manager with VT100/ANSI terminal emulation


    Вопрос:
    Мне нужно подключаться к удаленному линуксу и запускать на выполнение скрипты чтобы при оборыве связи сессия жила дальше и была возможность подключиться к этому виртуальному терминалу снова и потоки ввода/вывода были бы снова на мне как это можно просто реализовать?

    Кратко:
    Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells). Each virtual terminal provides the functions of a DEC VT100 terminal and, in addition, several control functions from the ISO 6429 (ECMA 48, ANSI X3.64) and ISO 2022 standards (e.g. insert/delete line and support for multiple character sets). There is a scrollback history buffer for each virtual terminal and a copy-and-paste mechanism that allows moving text regions between windows.

    screen
    открывает сессию
    Ctrl-A d
    detach'ит из screen
    screen -ls
    показывает список
    screen -r session_id
    attach'ит (если сессия одна, то id не нужен)
    screen -d session_id
    детачит сессию например если она отвалилась а при перезаходе screen еще не заметил обрыва.

    Подробности: man screen

    Как аккуратно гасить машину кнопкой выключения сети (для ATX и далее)

    Если машина поддерживает ACPI, то существует возможность плавного shutdown при нажатии на кнопку питания. Для этого служит демон acpid (см. соотв. man). Для его работы необходимо включить в ядре соответствующие опции (ACPI). После компиляции ядра проверяем наличие работающего демона (ps -ax |grep acpid). В /etc/acpi есть пример конфигурации и рабочего скрипта, который выполняется демоном при всех интересующих событиях. Сам демон передает скрипту аргументы в виде button/power.Примерный вид работающего скрипта, гасящего машину:

    читать дальше...

    Как аккуратно гасить машину кнопкой выключения сети (для ATX и далее)

    Если машина поддерживает ACPI, то существует возможность плавного shutdown при нажатии на кнопку питания. Для этого служит демон acpid (см. соотв. man). Для его работы необходимо включить в ядре соответствующие опции (ACPI). После компиляции ядра проверяем наличие работающего демона (ps -ax |grep acpid). В /etc/acpi есть пример конфигурации и рабочего скрипта, который выполняется демоном при всех интересующих событиях. Сам демон передает скрипту аргументы в виде button/power.Примерный вид работающего скрипта, гасящего машину:

    #!/bin/sh
    # Default acpi script that takes an entry for all actions
    set $*
    case "$1" in
    button/power) /sbin/init 0
    ;;
    *) logger "ACPI action $1 is not defined"
    ;;*)
    logger "ACPI action $1 is not defined"
    ;;
    esac

    Автор статьи: Slak
    Дата: 2003-09-28
    Оригинал статьи размещен здесь.



    Medical practice suite


    В целях автоматизации и повышения эффективности работы специалистов медицинских учреждений мной, в тесном взаимодействии с работниками одной из городских клиник, был разработан комплекс программного обеспечения - Medical practice suite, который позволяет вести учет пациентов, их обращений в клинику, полную электронную историю платежей, получать статистические данные непосредственно в виде документов Microsoft Word, совместно работать нескольким отделениям медицинского учреждения через интернет-сервер и многое другое.

    На данном этапе клиентская часть программного комплекса предназначена для компьютеров, работающих под управлением операционной системы Microsoft Windows, но уже в будущем планируется выпустить независимую от платформы веб – версию. 

    Возможности программного комплекса:

  • Работа с любого количества рабочих мест одновременно (в том числе и через сеть “интернет”);

  • Ведение справочника оказываемых медицинских услуг; гибкий конструктор пакетов услуг, позволяющий эффективную и оперативную работу со специальными предложениями для клиентов;

  • Функция объединения услуг и пакетов услуг в логические группы сводит к минимуму задержки при обслуживании клиентов;

  • Контроль хранения и реализации медицинских препаратов с учетом производителя, оптовых и розничных цен и т.п.;

  • Учет трудозатрат внешних и внутренних медицинских специалистов, в целях расчета объема финансовых выплат;

  • Высокая скорость и оперативность обработки информации о работающих специалистах и обслуживаемых клиентах;

  • Автоматическое ведение авансовых, абонентских счетов, а так же задолженностей клиента;

  • Автоматический перерасчет баланса клиента при финансовых поступлениях и оказании услуг;

  • Ведение и хранение подробной истории взаимодействия с каждым из клиентов;

  • Ручная правка истории клиента, возможность проводить оказанные услуги "задним числом" (для администратора системы);

  • Помещение клиентов, прошедших курс лечения в “архив”, с возможностью напоминания о них специалисту клиники в заданный день;

  • Взаимодействие с любым количеством страховых компаний;

  • Работа с наличным расчетом, формирование отчетности;

  • Экспорт в Microsoft Word и печать квитанций и кассовых ордеров;

  • Быстрый поиск данных во всех структурах и справочниках;

  • Формирование более двадцати видов форм статистической отчетности за любой указанный период времени, экспорт отчетов осуществляется непосредственно в Microsoft Word;

  • Контроль правильности вводимой информации на всех этапах работы, адаптация системы под пользователя, автозаполнение полей при вводе информации и поиске;

  • Конструктор бланков лабораторных анализов любой сложности;

  • Разработка расписания рабочего дня медицинских специалистов с учетом рабочих кабинетов и рабочих смен;

  • Ведение и обработка записи клиентов на прием;



  • Сверхновая

    Звезды - как люди
    У томной галактики сердца
    Они вокруг
    Свои, сияя, вращают тельца
    Вдруг
    Мир сходит с ума
    Появляется центр другой
    И вскрикнуло
    В экстазе небо. Спину дугой
    Выгнуло...

    21.11.03 г. СПб, парк Победы




    Highslide JS
    Highslide JS
    Highslide JS
    Highslide JS



    _____(c) Serge Shevkunov 2010