Ви можете порекомендувати хороший вступ до iptables? [зачинено]


15

Мені потрібно встановити брандмауер на сервері Linux (весь мій попередній досвід роботи з Windows). Мої правила мають бути досить простими - заборонити всім, дозволити деякі порти з усіма, дозволити деякі порти для певних підмереж IP, тоді як мережа невелика, але складна (кожен хост має IP-адреси принаймні 2 192.168 ... мереж, кожен може взаємозв’язати багато різних способів). Я думаю, що використання обгортки iptables може надмірно ускладнювати систему, логічно вводячи багато непотрібних об'єктів, і було б краще просто і безпосередньо використовувати iptables.

Чи можете ви порекомендувати хороший швидкий вступ щодо написання правил iptables?

Відповіді:


26

Посилання на офіційну та рекомендовану документацію існують на веб-сайті Netfilter.

Це не нова тема, ресурси безмежні .

Більшість основних команд досить інтуїтивно і легко може бути посилання на сторінки керівництва .

netfilter - це технологія рівня ядра, яка дозволяє фільтрувати пакет, досить розвинена. Є додаткові таблиці, які можуть обробляти пакети, перекладати пакети та іншим чином впливати на маршрутизацію. iptablesУтиліта є інструментом для програми користувачів , що взаємодіють з Netfilter. Якщо ви хочете дізнатися про розширені функціональні можливості, пропоную вам посилатися на вищезгадану документацію. Для ознайомлення з базовою функціональністю, будь ласка, читайте далі.

Щоб перелічити всі існуючі правила:

iptables -L -n

-n не дозволяє iptables розв’язувати ips, що забезпечує швидший вихід.

Таблиця за замовчуванням - це filterтаблиця, яка використовується для застосування основних правил брандмауера до трьох ланцюгів. Три стандартні ланцюга в filterтаблиці INPUT, OUTPUTі FORWARD.

Ланцюги багато в чому пояснюють себе. Ланцюг INPUT впливає на пакети, що надходять, ланцюг OUTPUT впливає на локально генеровані пакети і, нарешті, Вперед, для будь-яких пакетів, які проходять через систему.

Серед цілей, які ви можете вказати, ви можете DROPпакетів, тобто просто ігнорувати та не відповідати. Ви можете REJECTпакетів, де відповідь icmp буде надіслана до джерела відмови. Нарешті, ви можете ACCEPTїх, що дозволяє пакетам продовжувати маршрутизацію.

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

Зауважте, -Aозначає додавати до кінця ланцюга. Якщо ви хочете вставити вгорі, ви можете використовувати -I. Усі правила обробляються зверху вниз. -Dдля видалення.

До DROPвхідного пакету, що надходить від 192.168.235.235:

iptables -A INPUT -s 192.168.235.235 -j DROP

Це переходить до DROPцілі для всіх протоколів, що надходять з цього IP.

Прийняти:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

Щоб запобігти доступу до цього IP з вашого локального сервера або мережі:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

Ви можете вказати -pпротокол, -sджерело пакету, -dпризначення пакету, порт призначення, порт --dportджерела --sportта багато інших прапорів, які впливатимуть на те, як пакети обробляються правилом.

Якщо ваша INPUTполітика за замовчуванням була, DROPі ви хотіли дозволити всім 192.168.123.0/24підмережам отримати доступ до SSH на вашому сервері, ось такий приклад:

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

Правильно, ви також можете використовувати позначення CIDR !

Взагалі найкраща політика за замовчуванням - це DROPдля всіх ланцюгів. Кожен ланцюг має політику за замовчуванням, яка вказана -Pпрапором. Навіть якщо у вас політика встановлена ​​за замовчуванням DROP, все одно рекомендується, щоб остаточний запис у ланцюжку DROPтакож був.

Наприклад, щоб змінити політику на DROPланцюги INPUT, FORWARD та OUTPUT:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Будьте уважні , якщо ви визначите політику DROP за умовчанням для INPUT на віддаленій системі, не попередньо дозволяючи собі доступ до SSH, ви можете не допустити доступу до системи. Якщо у віддаленій системі, ви можете вказати тимчасовий crontab, щоб виконувати всі правила кожні 5 хвилин як помилку.

Щоб видалити всі правила та дозволити весь трафік:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

Зауважте, -Xвидаляє всі створені ланцюги. -Fзмиває всі правила.

Існують рідні інструменти для збереження та відновлення правил. Зокрема, iptables-saveі iptables-restore. Більшість сучасних дистрибутивів Linux мають saveта restoreфункціонують у файлі iptables init, наданому системі.

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


2
Щойно я натрапив на цю відповідь, шукаючи тут щось випадкове iptables (я шукаю SF / SO перед Google!), І ця дуже детальна відповідь, здається, заслуговує більшої любові до голосування, тому я дав їй дещо!
Ендрю Барбер

+1 приємна відповідь. Я б також зазначив Debian WIKI .
michal.kreuzman


1

Нещодавно я виявив https://help.ubuntu.com/community/IptablesHowTo . Я не думаю, що там є особливо специфічні для Ubuntu.


Я використовую Arch на своєму ноутбуці, але саме те, що потрібно задати, - це Ubuntu Lucid Server. Тож це може стати в нагоді, якщо не застарілим (наскільки я бачу, це адресує Ubuntu 8.04).
Іван
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.