Howto настройка firewall

вступ

Це керівництво розкриває, як налаштувати стандартний Ubuntu PC як заміну для нормального споживчого маршрутизатора (router), але набагато сильніший і зі значно більшою кількістю функціональних можливостей. Це також стосується деякої QOS фільтрації, щоб допомогти поліпшити швидкість мережі і час очікування. Якщо Ви не впевнені у якимись кроками, команди відновлення, які можуть допомогти, перераховані в кінці. Також перераховані інструкції щодо того, як повністю повернутися всі зміни, вироблені в цьому навчальному посібнику.

Я написав ці практичні рекомендації, тому що я хотів налаштувати свій сервер Ubuntu як маршрутизатор, і через відсутність іншого сучасного і доступного керівництва howtos на цю тему, я повинен був створити все це самостійно. Я хотів задокументувати, то що я вивчив, щоб таким чином заощадити багато часу і зусиль інших людей.

Передбачається, що, якщо Ви Новомосковскете це керівництво, у Вас дійсно є основне практичне знання того, що фактично РОБЛЯТЬ firewall / gateway, що таке NAT і основи організації IP мережі. В іншому випадку я пропоную Вам ознайомитися і переварюєте з наступною інформацією, а потім повернутися до прочитання цього керівництва:

Також Вам потрібен буде термінал на машині, на якій Ви робите настройки. Я не рекомендую робити настройки тільки віддалено по ssh, якщо у Вас також немає фізичного доступу до pc, занадто помилитися в правилах firewall і заблокувати систему для віддаленого доступу.

Основна установка (необхідний мінімум, необхідний щоб отримати функціонування і забезпечити NAT маршрутизатор)

вимоги

Щоб налаштувати систему Вам потрібен запасний pc з встановленою системою Ubuntu і двома мережевими картами. Система не нужнается в потужній специфікації. Я запустив свій маршрутизатор на 600 мегагерц P3 з 512 МБ пам'яті, але я думаю, що Ви могли б легко зробити те ж саме на чому-небудь швидше ніж P2 на 200 мегагерц і 128 МБ пам'яті. Будь-яка версія Ubuntu працюватиме, desktop або випуск server. Єдине реальне відмінність - те, що у сервера немає ніякого графічного інтерфейсу. Це не проблема, ми будемо так чи інакше в основному використовувати командний рядок.

Програмне забезпечення

Це керівництво використовує webmin як web інтерфейс, щоб налаштовувати необхідні правила iptables і сервери. Мені подобається використовувати webmin замість скриптів, тому що webmin більш удоебан і більш легкий для розуміння ніж скрипт з тими ж самими функціональними можливостями. Відкрийте термінал і запустіть командами нижче, щоб встановити все необхідне програмне забезпечення:

sudo aptitude install bind9 dhcp3-server perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libmd5-perl

Ви можете знайти останню версію webmin тут як пакет для debian:

Останньою версією під час написання цього керівництва була версія 1.430, щоб встановити цю версію виконайте наступну команду:

ПРИМІТКА: Це - НАДЗВИЧАЙНО погана ідея залишити webmin відкритим для зовнішнього світу. Тільки Ваш пароль користувача стоїть між віддаленим хакером і повним контролем над Вашим pc. НЕ РОБІТЬ ЦЬОГО. Якщо Ви дійсно потребуєте надають допуск webmin віддалено, я припускаю, що Ви знаєте що Ви робите, і знаєте, як використовуватися ssh tunnelling

Всі сторінки конфігурації доступні через головне меню зліва.

Тепер Webmin готовий до роботи.

Налаштування мережевих карт

Оскільки Ви хочете використовувати цей комп'ютер як маршрутизатор, у Вас має вже бути дві мережевих карти. Ви повинні знати їх імена, і повинні вирішити який інтерфейс повинен бути для інтернет з'єднання і який повинен бути пов'язаний з місцевою мережею. Щоб дізнатися, які мережеві карти Ви маєте на своїй системі, використовуйте команду:

Ви можете отримати досить багато інтерфейсів, в залежності від Вашої системи, але єдині, які Вас хвилюють є інтерфейсами ethernet (ті що називют на подобі ethXX). Вони будуть зазвичай маркуватися eth0 і eth1, але могли б бути будь-якими числами, таким чином я з цього часу назву їх як eth_BAD і eth_SAFE. eth_BAD - інтернет-адаптер, eth_SAFE - адаптер місцевої мережі. Запишіть який інтерфейс для чого, тому що Ви будете звертатися з ними часто.

Ми спочатку налаштуємо routing, використовуючи для цього дуже сильний і гнучкий linux firewall, iptables.

Важливо відзначити, що, якби Ви зробите помилку тут, Ви можете повністю пошкодити всю організацію мережі, яка напевно відключить Ваш доступ до Інтернету і також завадить Вам отримати доступ до webmin, щоб ліквідувати проблему. Якщо Ви зіткнетеся з подібними труднощами, деякі команди в кінці цього керівництва допоможуть ліквідувати проблему.

Тепер ми повинні налаштувати перенаправлення (forwarding) пакета, інакше NAT не працюватиме. Ви можете зробити це, редагуючи наступний файл:

sudo cp / etc / sysctl. conf / etc / sysctl. conf. bak sudo nano / etc / sysctl. conf

Цей файл повинен включати наступну сходинку:

# Uncomment the next line to enable packet forwarding for IPv4
net. ipv4. ip_forward = 1

Для того щоб включилося перенаправлення пакетів перезавантажте систему.

На цей момент Ваш комп'ютер повинен отримати доступ в інтернет через інтерфейс eth_BAD, якщо інтернет все ще не доступний - поверніться до попередніх кроків і зробіть так щоб все запрацювало.

lshw - class network

Відключення інтерфейс позначений прапорцем DISABLED. Для включення інтерфейсу натисніть кнопку "Add a new interface", і введіть наступну інформацію:

"Name" - Введіть ім'я інтерфейсу, ймовірно eth0, eth1 або щось схоже.
"IP Address" - Переконайся що "Static" radio кнопка натиснута, і введи 192.168.0.1 в текстове поле.
"Netmask" - Повинно бути 255.255.255.0
"Broadcast" - 192.168.0.255
"Activate at boot?" - Вибирайте Yes

Потім натисніть "Create", натисніть радіо кнопку наступну за створення інтерфейсу і натисніть "Apply" для активації цих налаштувань. Чудово! Два мережевих інтерфейсу тепер налаштовані.

Налаштування локальної мережі

конфігурація DHCP

Ми спочатку налаштуємо DHCP. Відкрийте закладку "Servers" в панелі webmin, і відкрийте DHCP Server. У розділі підмережі зверху, натисніть "Add new subnet". Введіть наступні дані:

"Subnet description" - Ім'я підмережі, Я використовую "Local network on eth_SAFE"
"Network address" - 192.168.0.0
"Netmask" - 255.255.255.0
"Address ranges" - це може будь-який діапазон який ти захочеш, 192.168.0.100 - 192.168.200 має бути достатньо.

SCREENSHOT: Configuring DHCP subnet

Залиште всі інші настройки та натисніть "Create". Тепер має з'явитися нова іконка з назвою 192.168.0.0. Натисніть цю іконку, ти повернешся до екрану, схожим на попередній, виключаючи деякі нові кнопки внизу. Натисни одну з них "Edit Client Options".

"Subnet mask" - 255.255.255.0
"Default routers" - 192.168.0.1
"Broadcast address" - 192.168.0.255
"DNS servers" - 192.168.0.1

Натисніть "Save" і ще раз "Save". І ще одна річ, которуб потрібно зробити на цій сторінці - скрол вниз і натисніть "Edit network interface". Виберете eth_SAFE в списку і натисніть "Save".

DHCP сервер тепер налаштований. Натисніть "Start Server" кнопку внизу сторінки, сервер повинен запуститися без помилок. Якщо помилки все ж є - ти допустив де то помилку.

конфігурація firewall

Налаштування ip masquerading (routing)

Тепер ми погрущімся в налаштування iptables. Відтепер ви можете повністю і зіпсувати налаштування своєї мережі якщо ви не обережні, так що переконайтеся що ви знаєте як виправити свої помилки.

В панелі webmin виберете "Linux Firewall". Вибрати радіо кнопку "Do network address translation" і вибрати eth_BAD як інтерфейс, на якому ви будете робити це. Вибрати чек бокс "Enable firewall at boot time" і натисніть "Setup Firewall". Натисніть "Apply Configuration".

Налаштування firewall

На цьому етапі твій сервер налаштований як працює router / dns / dhcp server, це повинно працювати в цьому налаштуванні для всього що тобі потрібно, але це не безпечно. Ми повинні визначити кілька правил які визначають хто може робити з'єднання з нашим сервером, ми просто не хочемо щоб хто-небудь з великого жахливого інтернету увірвався в наш домашній файловий сервер, наприклад. Ми зробимо це використовуючи iptables фільтрацію.

Linux firewall працює з трьома IP таблицями: MANGLE, PREROUTING і FILTER. Власне файрволінг здійснюється за допомогою FILTER, таким чином в "Linux Firewall" секції webmin, змініть IPTable випадає на "Packet Filtering (filter)" IPTable.

Три "ланцюжка" перераховані там. Кожен ланцюжок визначає що робити з пакетом в залежності від того куди він йде. Три ланцюжка INPUT, FORWARD OUTPUT. Для кожного ланцюжка ти можеш додавати правила (rules), які говорять файрвол що зробити з пакетом, який відповідає певним критеріям. Ти ймовірно захочеш внести в чорний список (blacklist) все INPUT і FORWARD пакети за замовчуванням, і потім включати по одному в залежності від потреб. Змінити дію за замовчуванням (default action) для INPUT FORWARD на "DROP" (від перекладача: в разі помилки ви можете відключити дію за замовчуванням, дивіться додаткові команди в кінці статті).

Для додавання правила просто клікніть "Add Rule" кнопку і заповни критерії пакету і дію (action) для цього пакета.

Тут перераховано необхідний мінімум правил які тобі ПОТРІБНІ щоб твоя мережа працювала нормально:

INPUT

Accept if protocol is ICMP (note: This allows your server to respond to pings. It is not strictly necessary, but it does not really pose a security risk and makes network troubleshooting a LOT easier. If you're extremely paranoid, feel free not to bother with this option)
Accept if input interface is lo
Accept if input interface is eth_SAFE
Accept if input interface is eth_BAD and state of connection is ESTABLISHED, RELATED

Accept if input interface is eth_SAFE and output interface is eth_BAD
Accept if input interface is eth_BAD and output interface is eth_SAFE and state of connection is ESTABLISHED, RELATED

Правила ці імплементує дуже простий файрвол який не дозволяє абсолютно нічого з зовнішньої мережі, за винятком того що це частина настроювання з'єднання. Це так само передбачає що внутрішня мережа повністю трастед і дозволяє безперешкодний доступ до сервера і зовнішньому мережному простору з внутрішньої мережі. Це установки за замовчуванням для більшості NAT пристроїв.

На цьому місці ти фактично закінчив настройку. Ти можеш залишити свій сервер як простий раутер без додаткових правил на цьому етапі. Це дуже безпечно і буде працювати добре для більшості цілей. Якщо, все ж, ти хочеш запустити публічно доступний сервер, QOS фільтрацію або якщо внутрішня мережа не досить заслуговує довіри, ти повинен додати деякі додаткові правила. Новомосковський далі.

До речі, мої INPUT і FORWARD таблиці виглядають як тут вказано. Я додав додатково правила щоб дозволити деяким серверам бути доступнцмі для зовнішньої мережі:

Більш просунуті завдання

Більше функцій від IPTable

Якщо ти насправді хочеш використовувати IPTables нормально, ти повинен зрозуміти що це і як це працює, в якій черговості таблиці застосовуються. Я рекомендую почитати статті в вікі:

Важливо відзначити на цьому етапі, що IPTables будуть застосовувати твої правила для кожного пакета в черговості від верху до низу. Кожне правило порівнюється з пакетом. І як тільки як ACCEPT або DROP правило виявлено яке відповідає типу пакета, ця дія буде взято і виконано. Якщо ж пакет дістався до кінця списку правил без відповідностей, буде використано дію за замовчуванням (default action). Ось два приклади:

Ruleset:
ACCEPT if input interface is eth1
DROP if port is 22

Any incoming packets on eth1 will be allowed through, EVEN IF the port is 22.

Ruleset:
DROP if port is 22
ACCEPT if input interface is eth1

Тепер кожен, хто входить пакет буде дозволений для eth1 за винятком порту 22.

Сервера, що біжать на раутерів.

Якщо ти хочеш запустити сервер на твоєму раутерів (веб сервер або SSH сервер), ти повинен відкрити ці порти для зовнішньої мережі. Це просто зробити за допомогою додавання правила для INPUT фільтр явно дозволяючи вхідні повідомлення. Просто натисни "Add Rule" і дозволь пакети певного типу і порту, який необхідний для сервера. SSH сервер міг би бігти на порту 22 і приймати TCP пакети, таким чином правило виглядало б так:

Accept if protocol is TCP and destination port is 22.

Дозволити статичний IP в локальній мережі

Іноді необхідно запустити сервер на PC в локальній мережі і потрібно зробити порт форвардного (port forwarding), наприклад web server або bittirrent client.

Відкрийте в webmin сторінку "Servers", виберете DHCP server. У розділі hosts тисніть "Add a new host". Заповніть дані як зазначено нижче:

порт форвардного

Ви повинні зробити дві речі. Спочатку ви повинні встановити правило PREROUTING щоб вказати IPTables куди перенаправляти вхідні пакети, але так само ти повинен явно дозволити ці пакети форвард (FORWARD) інакше ні будуть заблоковані фільтром. Це замечтально і логічно, але іноді може призводити до головоломок, якщо ти забув про один з кроків.

В Webmin тисни "Networking" і потім "Linux Firewall". Зміни IP Table в випадаючому списку на "Network address translation (nat)". У PREROUTING ланцюжку зверху, тисни Add Rule. Заповни дані як зазначено нижче:

"Action to take" - Жми "Destination nat" radio button
"IPs and ports for DNAT" - Введи lan ip хоста і порт на який ти хочеш щоб клієнти з'єднувалися зовні
"Network protocol" - Тобі потрібно вказати udp або tcp (якщо ти насправді хочеш використовувати якийсь інший протокол то це керівництво не може тобі допомогти)
"Destination TCP or UDP port" - Порт на якому сервер насправді слухає на цьому хості (примітка $: це не повинен бути той же самий порт, на який приєднуються зовнішні клієнти)

Тепер ти можеш тільки "Apply configuration" і все.

щоб відключити всі правила IPTable

Якщо твій раутер після твоїх змін заблокувався без паніки, запусти наступну комманду яка буде вивільняти всі правила iptables, це поверне доступ до webadmin назад:

sudo iptables -F

корисні опції iptables (від перекладача):

sudo iptables -S
sudo iptables -P INPUT ACCEPT

  1. Перша комманда виводить список всіх ланцюжків і правил з усіма опціями налаштувань.
  2. Друга команда дозволяє змінити дію за замовчуванням для ланцюжка INPUT

Увага: це комманда повністю відкриє доступ до твого раутерів зовні.

Для повного скасування всіх змін в цьому керівництві запусти цю команду:

sudo aptitude purge webmin bind9 dhcp3-server sudo cp / etc / sysctl. conf. bak / etc / sysctl. conf

Після перезавантаження все настройки повинні повернутися.

тепер я розумію mmc. нах, ігнор

Howto настройка firewall

До речі, хлопці, якщо у вас є цікаві HOWTO по Webmin - постите сюди. Англійською теж зійде, годину часу і переклад готовий. Особливо цікавлять керівництва по BIND DNS, може хто то бачив хоча б згадки про SVN для Webmin, цікаві і іняорматівние керівництва з адміністрування віртуальних хостів.

Howto настройка firewall