Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






Демон natd, використання пакетних фільтрів ipfw та pf

Шляхи реалізації трансляції адрес у FreeBSD

Технологія NAT входить до поняття маршрутизації, тому реалізується в програмах які керують цією маршрутизацією, а саме мережевими фільтрами. Так, як в FreeBSD є три вбудованих мережеві фільтри (IPFW, PF, IPFILTER) кожен з них має вбудовану підтримку NAT. Для простого налаштування NAT бажано використовувати PF або IPFILTER, так як їхній функціонал не досить великий, але якщо він і не потрібен то і немає смислу шукати ускладненні шляхи реалізації. В IPFW з версії FreeBSD 7.0 додатково до традиційного демону natd через IPDIVERT з’явився ядерний NAT IPFIREWALL_NAT який має як перевага так і недоліки, але розробники рекомендують використовувати саме його. Додатковий параметр IPDIVERT створено не тільки для демона natd, він може передавати пакети на обробку будь-якій сторонній програмі.

Технологія NAT з часом витісняється новим протоколом IPv6, тому розробники не дуже ставлять акцент на покращення і розвитку трансляції адрес.

 

Даемон перетворення мережевих адрес (Network Address Translation) під FreeBSD, широко відомий як natd, є демоном, який приймає вхідні IP-пакети, змінює адресу відправника на адресу локальної машини і повторно відправляє ці пакети в потоці вихідних пакетів. natd робить це, змінюючи IP-адреса відправника і порт таким чином, що коли дані приймаються назад, він може визначити розташування джерела початкових даних і переслати їх машині, яка запитувала дані спочатку.

Найчастіше NAT використовується для організації так званого спільного використання Інтернет.

Через вичерпання адресного простору адрес в IPv4 і збільшення кількості користувачів високошвидкісних каналів зв'язку, таких, як кабельне підключення або DSL, необхідність в рішенні по Спільному Використанню Інтернет зростає. Можливість підключити декілька комп'ютерів через єдине з'єднання і IP-адреса робить natd відповідним рішенням.

Найчастіше у користувача є машина, підключена до кабельному каналу або каналу DSL з одним IP-адресою і є бажання використовувати цей єдиний підключений комп'ютер для організації доступу в Інтернет інших комп'ютерів у локальній мережі.

Для цього машина FreeBSD, що знаходиться в Інтернет, повинна виступати в ролі шлюзу. Ця шлюзова машина повинна мати два мережевих адаптера – один для підключення до маршрутизатора Інтернет, а інший для підключення до ЛОМ. Всі машини в локальній мережі підключаються через мережевий концентратор або комутатор.

Існує багато способів під'єднати локальну мережу до Інтернет через шлюз FreeBSD. Приклад на рисунку 7.2 показує шлюз c двома мережевими картами.

 

Рисунок 7.2 – Поширена схема використання NAT

 

Подібна конфігурація часто використовується для спільного використання доступу до Інтернету. Одна з підключених до локальної мережі машин підключається до Інтернет. Решта машин працюють з Інтернет за допомогою цієї «шлюзовий» машини.

У файлі конфігурації ядра повинні бути присутніми наступні параметри:

options IPFIREWALL

options IPDIVERT

Додатково, якщо це потрібно, можна додати наступне:

options IPFIREWALL_DEFAULT_TO_ACCEPT

options IPFIREWALL_VERBOSE

У файлі /etc/rc.conf повинні бути такі рядки:

gateway_enable="YES"

firewall_enable="YES"

firewall_type="OPEN"

natd_enable="YES"

natd_interface="fxp0"

natd_flags=""

gateway_enable – вказує машині виступати в якості шлюзу. Виконання команди sysctl net.inet.ip.forwarding=1 приведе до того ж самого результату.

firewall_enable – при завантаженні включає використання правил брандмауера з файлу /etc/rc.firewall.

firewall_type – тут задається визначений набір правил брандмауера, який дозволяє все. Подивіться файл /etc/rc.firewall для знаходження додаткових типів.

natd_interface – вказує, через який інтерфейс передавати пакети (інтерфейс, підключений до Інтернет).

natd_flags – будь-які додатковий параметри, передані при запуску демону natd.

При використанні вищевказаних параметрів у файлі /etc/rc.conf при завантаженні буде запущена команда natd-interface fxp0. Цю команду можна запустити і вручну.

Якщо для передачі natd набирається дуже багато параметрів, можливо також використовувати конфігураційний файл. У цьому випадку ім'я конфігураційного файлу має бути задане додаванням наступного рядка в /etc/rc.conf:

natd_flags="-f /etc/natd.conf"

Файл /etc/natd.conf буде містити перелік конфігураційних параметрів, по одному в рядку. Наприклад, для прикладу з наступного розділу буде використовуватися такий файл:

redirect_port tcp 192.168.0.2:6667 6667

redirect_port tcp 192.168.0.3:80 80

Для отримання більш повної інформації про конфігураційному файлі прочитайте сторінку довідки за man natd щодо параметра -f.

Кожній машині і інтерфейсу в ЛОМ має бути призначений IP-адрес з адресного простору приватних мереж, як це визначено в RFC 1918, а в якості маршрутизатора за замовчуванням повинен бути заданий IP-адреса машини з natd з внутрішньої мережі.

Наприклад, клієнти A і B в ЛОМ мають IP-адреси 192.168.0.2 і 192.168.0.3, а інтерфейс машини з natd в локальній мережі має IP-адресу 192.168.0.1. Маршрутизатором за замовчуванням для клієнтів A і B повинна бути призначена машина з natd, тобто 192.168.0.1. Зовнішній, або Інтернет-інтерфейс машини з natd не вимагає особливих налаштувань для роботи natd.

Мінусом використання natd є те, що машини в локальній мережі недоступні з Інтернет. Клієнти в ЛОМ можуть виконувати вихідні з'єднання в зовнішній світ, але не можуть обслуговувати вхідні. Це є проблемою при запуску служб Інтернет на клієнтських машинах в локальній мережі. Простим рішенням є перенаправлення деяких портів Інтернет машини з natd на клієнта локальної мережі.

Нехай, наприклад, сервер IRC запущений на клієнті A, а Web-сервер працює на клієнті B. Щоб це працювало, з'єднання, що приймаються на портах 6667 (IRC) і 80 (Web), повинні перенаправлятися на відповідні машини.

Програмі natd повинна бути передана команда -redirect_port з відповідними параметрами. Синтаксис наступний:

-redirect_port proto targetIP:targetPORT[-targetPORT]

[aliasIP:]aliasPORT[-aliasPORT]

[remoteIP[:remotePORT[-remotePORT]]]

У прикладі вище аргументи повинен бути такими:

-redirect_port tcp 192.168.0.2:6667 6667

-redirect_port tcp 192.168.0.3:80 80

При цьому будуть перенаправлені відповідні порти tcp на клієнтські машини в локальній мережі.

Аргумент -redirect_port може використовуватися для вказівки діапазонів портів, а не конкретного порту. Наприклад, tcp 192.168.0.2:2000-3000 2000-3000 буде перенаправляти всі з'єднання, що приймаються на портах від 2000 до 3000, на порти від 2000 до 3000 клієнта A.

Ці параметри можна вказати при безпосередньому запуску natd, помістити їх в параметр natd_flags="" файлу /etc/rc.conf, або передати через конфігураційний файл.

Перенаправлення адреси корисно, якщо є декілька адрес IP, і вони повинні бути на одній машині. У цій ситуації natd може призначити кожному клієнту ЛОМ свій власний зовнішній IP-адресу. Потім natd перетворює виходять від клієнтів локальної мережі пакети, замінюючи IP-адреси на відповідні зовнішні, і перенаправляє весь трафік, що входить на деякий IP-адреса, назад конкретному клієнтові локальної мережі. Це також називають статичним NAT. Наприклад, нехай IP-адреси 128.1.1.1, 128.1.1.2 і 128.1.1.3 належать шлюзовий машині natd. 128.1.1.1 може використовуватися як зовнішній IP-адреси шлюзовий машини natd, тоді як 128.1.1.2 і 128.1.1.3 перенаправлятимуться назад до клієнтів ЛОМ A і B.

Синтаксис для -redirect_address такий:

-redirect_address localIP publicIP

localIP – внутрішній IP-адресу клієнта локальної мережі.

publicIP – зовнішній IP, відповідний клієнту локальної мережі.

У прикладі цей аргумент буде виглядати так:

-redirect_address 192.168.0.2 128.1.1.2

-redirect_address 192.168.0.3 128.1.1.3

Як і для -redirect_port, ці аргументи також поміщаються в рядок natd_flags="" файлу /etc/rc.conf або передаються через конфігураційний файл. При перенаправлення адрес немає потреби в перенаправлення портів, тому що перенаправляються всі дані, що приймаються для конкретного IP-адреси.

Зовнішні IP-адреси машини з natd повинні бути активізовані і бути синонімами для зовнішнього інтерфейсу. Зверніться до rc.conf, щоб це зробити.

За перенаправлення пакетів до демона natd відповідає скрипт з правилами за замовченням /etc/rc.firewall якщо його змінити то ці правила треба вказувати в новоствореному скрипті, строчка яка передає пакети демону виглядає так:

ipfw add divert natd all from any to any via fxp0

При використанні ядерного NAT IPFW використовувати демон natd не потрібно, що набагато спрощує налаштування. Щоб його ввімкнути необхідна задати такі обов’язкові параметри до ядра:

options IPFIREWALL

options IPFIREWALL_NAT

options LIBALIAS

Також можна включити додаткові опції якщо виникне потреба в цьому. Або включення без перезбирання, як модуль (але так менше можливостей для конфігурації) в /etc/rc.conf:

firewall_nat_enable="YES"

Налаштування подібне до демона natd, розглянемо приклад.

Найпростіший випадок (див. рисунок 7.3): маршрутизатор з двома мережними адаптерами підключеними в локальну мережу і в Інтернет. Адреса в локальній мережі 192.168.1.1 (мережевий адаптер fxp0), адреса в Інтернеті 1.2.3.4 (мережевий адаптер em0).

Завдання: "роздавати Інтернет" для локальної мережі, забезпечити кидок портів для внутрішніх адрес, дозволити проходження трафіку на окремі порти самого маршрутизатора.

Рисунок 7.3 – Поширена схема використання NAT

 

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

/etc/rc.conf:

gateway_enable="YES"

ifconfig_em0="inet 1.2.3.4 netmask 255.255.255.0 -rxcsum"

ifconfig_fxp0="inet 192.168.1.1 netmask 255.255.255.0"

defaultrouter="1.2.3.254"

firewall_enable="YES"

firewall_type="/etc/firewall"

/etc/firewall:

nat 1 config log if em0 reset same_ports deny_in \

redirect_port tcp 1.2.3.4:6881 6881 \

redirect_port udp 1.2.3.4:4444 4444 \

redirect_port tcp 192.168.1.24:25 25

add nat 1 ip from any to any via em0

Всі параметри такі самі як і при використанні демона, єдина відмінність це синтаксис. Команда add nat 1 ip from any to any via em0 загортає увесь трафік на інтерфейс em0 з попередньою заміною адреси на адресу і порт зовнішнього інтерфейсу.

В PF також реалізовано NAT, і для більшості системних адміністраторів цей варіант є найпростішим в FreeBSD. Розглянемо докладний приклад використання. Для початку дозволимо запуск PF, для цього в /etc/rc.conf задамо:

gateway_enable="YES" # Дозволяє серверу бути шлюзом

pf_enable="YES" # Запуск pf

pflog_enable="YES" # не обов'язково, можливість писати логи pf

pf_rules="/etc/pf.conf" # Шлях до правил pf

pf_program="/sbin/pfctl" # Шлях до програми управління pf

pf_flags="" # Необхідно для pfctl

defaultrouter="192.168.1.254" # Шлюз провайдера

Можна і перезібрати ядро, з підтримкою pf (при цьому вищенаведені параметри можна не задавати), щоб pf не сварився на відсутність ALTQ (обмежувати пропускну здатність каналу) або для його використання

No ALTQ support in kernel

ALTQ related functions disabled

Задамо такі параметри ядра:

device pf

device pflog

device pfsync

options ALTQ

options ALTQ_CBQ # Class Bases Queuing (CBQ)

options ALTQ_RED # Random Early Detection (RED)

options ALTQ_RIO # RED In/Out

options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)

options ALTQ_PRIQ # Priority Queuing (PRIQ)

options ALTQ_NOPCC # Required for SMP build

Після установки ядра треба змінити правила /etc/pf.conf:

ext_if="em0" # Зовнішній інтерфейс (дивиться до провайдера WAN)

int_if="fxp0" # Внутрішній інтерфейс (дивиться в нашу мережу LAN)

set skip on lo0 # пропускаємо перевірку на петлі

scrub in all # збираємо всі частини пакета перед відправкою

nat on $ext_if from$ int_if: network to any -> ($ext_if)

block all # заборонимо всі звідусіль

pass in on $int_if from any to any # дозволяємо всі з локальної мережі

pass out on $ext_if from $ext_if to any # дозволяємо серверу доступ в Інтернет

pass in on $ext_if proto tcp from any to $ext_if port ssh # дозволяємо ssh

pass in inet proto icmp all icmp-type echoreq # дозволяємо ping

Тепер можна завантажити ці правила командою:

pfctl -f /etc/pf.conf

pfctl -e # Увімкнути pf

pfctl -d # Вимкнути pf

Для того щоб використовувати NAT лише для окремого списку IP /etc/pf.conf необхідно привести до такого вигляду:

ext_if="em0" # Зовнішній інтерфейс (дивиться до провайдера WAN)

int_if="fxp0" # Внутрішній інтерфейс (дивиться в нашу мережу LAN)

table <pf-allow-pc> file "/etc/pf-allow-pc"

set skip on lo0 # пропускаємо перевірку на петлі

scrub in all # збираємо всі частини пакета перед відправкою

nat on $ext_if from <pf-allow-pc> to any -> ($ext_if)

block all # заборонимо всі звідусіль

pass in on $int_if from any to any # дозволяємо всі з локальної мережі

pass out on $ext_if from $ext_if to any # дозволяємо серверу доступ в Інтернет

pass in on $ext_if proto tcp from any to $ext_if port ssh # дозволяємо ssh

pass in inet proto icmp all icmp-type echoreq # дозволяємо ping

І додати ip адреси в /etc/pf-allow-pc (у рядку повинен бути один адреса) тих кому дозволено ходити в Інтернет:

192.168.0.2

192.168.0.3

192.168.0.5


Читайте також:

  1. А. Розрахунки з використанням дистанційного банкінгу.
  2. Альтернативна вартість та її використання у проектному аналізі
  3. Аналіз використання капіталу.
  4. Аналіз використання матеріальних ресурсів
  5. Аналіз використання матеріальних ресурсів.
  6. Аналіз використання обладнання.
  7. Аналіз використання прибутку та резервів його зростання
  8. Аналіз використання робочого часу на підприємстві
  9. Аналіз використання фонду робочого часу.
  10. Аналіз ефективності використання каналів розподілу
  11. Аналіз ефективності використання оборотних активів
  12. Аналіз ефективності використання основних засобів.




Переглядів: 1165

<== попередня сторінка | наступна сторінка ==>
Основи налаштування IPFW і PF | Поняття доменного імені

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

 

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.012 сек.