Це команда ferm, яку можна запустити у безкоштовного хостинг-провайдера OnWorks за допомогою однієї з наших безкоштовних онлайн-робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS
ПРОГРАМА:
ІМ'Я
ferm - аналізатор правил брандмауера для Linux
СИНТАКСИС
ферм опції вхідний файл
ОПИС
ферм є інтерфейсом для Iptables. Він читає правила зі структурованого файлу конфігурації
та дзвінки Iptables(8), щоб вставити їх у запущене ядро.
фермМета — зробити правила брандмауера легкими для написання та читання. Воно намагається зменшити
виснажливе завдання запису правил, що дозволяє адміністратору брандмауера витрачати гроші
більше часу на розробку хороших правил, ніж на належне впровадження правила.
Щоб досягти цього, ферм використовує просту, але потужну мову налаштування, що дозволяє
змінні, функції, масиви, блоки. Це також дозволяє включати інші файли, дозволяючи
створювати бібліотеки структур і функцій, які зазвичай використовуються.
ферм, вимовляється як "фірма", означає "для легкого створення правил".
УВАГА!
Ця сторінка посібника робить НЕ хочу навчити вас, як працює брандмауер і як правильно писати
правил. На цю тему вже є достатньо документів.
ВСТУП
Почнемо з простого прикладу:
ланцюжок INPUT {
proto tcp ACCEPT;
}
Це додасть правило до попередньо визначеного ланцюжка введення, відповідаючи та приймаючи весь tcp
пакети. Гаразд, давайте ускладнимо:
ланцюжок (ВХІД ВИВІД) {
proto (udp tcp) ACCEPT;
}
Це вставить 4 правила, а саме 2 у ланцюжок вводу та 2 у ланцюг виведення, відповідність і
приймає пакети як udp, так і tcp. Зазвичай ви вводите це:
iptables -A INPUT -p tcp -j ПРИЙНЯТИ
iptables -A ВИВІД -p tcp -j ПРИЙНЯТИ
iptables -A INPUT -p udp -j ПРИЙНЯТИ
iptables -A ВИВІД -p udp -j ПРИЙНЯТИ
Зверніть увагу, скільки менше нам потрібно набирати текст? :-)
Загалом, це все, хоча ви можете зробити це набагато складніше.
Щось подивитися:
ланцюжок INPUT {
поліс ACCEPT;
daddr 10.0.0.0/8 proto tcp dport ! ftp jump mychain sport :1023 TOS 4 settos 8 mark 2;
daddr 10.0.0.0/8 proto tcp dport ftp REJECT;
}
Я хочу сказати, що *ви* повинні створити гарні правила, тримати їх доступними для читання
інших, і не перетворюйте це на безлад.
Читачеві було б корисно, якби результуючі правила брандмауера були розміщені тут для довідки.
Крім того, ви можете включити вкладену версію з кращою читабельністю.
Спробуйте використовувати коментарі, щоб показати, що ви робите:
# цей рядок вмикає прозоре http-проксі для внутрішньої мережі:
proto tcp if eth0 daddr ! 192.168.0.0/255.255.255.0
dport http ПЕРЕНАСПРАВЛЕННЯ на порти 3128;
Ви будете вдячні за це пізніше!
ланцюжок INPUT {
поліс ACCEPT;
інтерфейс (eth0 ppp0) {
# заборонити доступ відомим хакерам, повернутися сюди, якщо збігів немає
Виявлено, що # відновлює нормальний брандмауер
стрибають поганці;
протокол tcp jump fw_tcp;
протокол udp jump fw_udp;
}
}
Чим більше гнізд, тим краще воно виглядає. Переконайтеся, що вказано правильне замовлення
не хотів би цього робити:
ланцюжок ВПЕРЕД {
прото ! udp DROP;
proto tcp dport ftp ACCEPT;
}
тому що друге правило ніколи не збігається. Найкращий спосіб - спочатку вказати все, що є
дозволили, а потім заперечували все інше. Подивіться на приклади, щоб отримати більше хороших знімків.
Більшість людей роблять щось подібне:
proto tcp {
dport (
ssh http ftp
) ПРИЙНЯТИ;
dport 1024:65535 ! syn ПРИЙНЯТИ;
КРАПЛЯ;
}
СТРУКТУРА OF A БІЗНЕСНА СТІНКА Фото
Структура правильного файлу брандмауера виглядає як спрощений C-код. Лише декілька
синтаксичні символи використовуються у файлах конфігурації ferm. Крім цих спец
символи, ferm використовує «ключі» та «значення», сприймайте їх як опції та параметри або як
змінні та значення, що завгодно.
Цими словами ви визначаєте характеристики свого брандмауера. Кожен брандмауер
складається з двох речей: по-перше, подивіться, чи мережевий трафік відповідає певним умовам, і
по-друге, що робити з цим трафіком.
Ви можете вказати умови, дійсні для програми інтерфейсу ядра, яку ви використовуєте,
ймовірно Iptables(8). Наприклад, в iptables, коли ви намагаєтеся зіставити TCP-пакети,
ти б сказав:
iptables --протокол tcp
У ferm це стане:
протокол tcp;
Просто введення цього в ferm нічого не робить, вам потрібно сказати ferm (насправді вам потрібно
сказати Iptables(8) і ядро), що робити з будь-яким трафіком, який відповідає цій умові:
iptables --protocol tcp -j ПРИЙНЯТИ
Або в перекладі на ферм:
протокол tcp ACCEPT;
Команда ; характер знаходиться в кінці кожного правила ферми. Ferm ігнорує розриви рядків, тобто
наведений вище приклад ідентичний наступному:
протокол tcp
ПРИЙНЯТИ;
Ось список спеціальних символів:
; Цей символ завершує правило.
Розділивши їх крапкою з комою, ви можете написати кілька правил в одному рядку, хоча це
знижує читаність:
протокол tcp ACCEPT; протокол udp DROP;
{} Символ вкладеності визначає «блок» правил.
Фігурні дужки містять будь-яку кількість вкладених правил. Усі матчі до
блок переносяться до цих.
Закриваюча фігурна дужка завершує набір правил. Ви не повинні писати ';' після
це, тому що це було б пусте правило.
приклад:
ланцюг INPUT proto icmp {
ехо-запит типу icmp ACCEPT;
КРАПЛЯ;
}
Цей блок показує два правила всередині блоку, які обидва будуть об’єднані з будь-чим
перед ним, тож ви отримаєте два правила:
iptables -A INPUT -p icmp --icmp-type echo-request -j ПРИЙНЯТИ
iptables -A INPUT -p icmp -j DROP
Може бути кілька рівнів вкладеності:
ланцюжок INPUT {
proto icmp {
ехо-запит типу icmp ACCEPT;
КРАПЛЯ;
}
daddr 172.16.0.0/12 ВІДХИЛИТИ;
}
Зауважте, що на правило «REJECT» не впливає «proto icmp», хоча це не так
';' після закриваючої фігурної дужки. Перекладено на iptables:
iptables -A INPUT -p icmp --icmp-type echo-request -j ПРИЙНЯТИ
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -d 172.16.0.0/12 -j REJECT
$ Розширення змінної. Замінює '$FOO' на значення змінної. Дивіться розділ
ЗМІННІ for details.
& Виклик функції. Дивіться розділ ФУНКЦІЇ for details.
() Символ масиву. Використовуючи круглі дужки, ви можете визначити «список» значень, які
слід застосовувати для ключа зліва від нього.
приклад:
протокол (tcp udp icmp)
це призведе до трьох правил:
... -p tcp ...
... -p udp ...
... -p icmp ...
Лише значення можуть бути «списком», тому ви не можете зробити щось подібне:
proto tcp (ACCEPT LOG);
але ви можете зробити це:
ланцюг (ВХІД ВИВІД ВПЕРЕД) proto (icmp udp tcp) DROP;
(що призведе до дев'яти правил!)
Значення розділені пробілами. Символ масиву є лівим і правим
асоціативний, на відміну від вкладеного блоку, який є лише лівоасоціативним.
" # " Символ коментаря. Все, що слідує за цим символом до кінця рядка, є
ігнорується.
"`команда`"
Виконайте команду в оболонці та вставте результат процесу. Дивіться розділ
задній план for details.
"рядок"
Введіть рядок, який може містити пробіли, знак долара тощо.
LOG log-prefix ' привіт, це мій префікс журналу!';
"рядок"
Введіть рядок у лапки (див. вище), але посилання на змінні зі знаком долара є
оцінено:
DNAT до "$myhost:$myport";
Ключові слова
У попередньому розділі ми вже представили деякі основні ключові слова, такі як "ланцюг",
"протокол" і "ПРИЙМАТИ". Давайте дослідимо їхню природу.
Є три види ключових слів:
· розташування ключові слова визначають, де буде створено правило. Приклад: «стіл», «ланцюжок».
· матч ключові слова виконують перевірку всіх пакетів, що проходять. Чинне правило без
ефект, якщо один (чи більше) збігів не пройде. Приклад: "proto", "daddr".
Більшість збігів супроводжуються параметром: "proto tcp", "daddr 172.16.0.0/12".
· мета ключові слова визначають, що робити з пакетом. Приклад: "ПРИЙНЯТИ", "ВІДХИЛИТИ",
«стрибок».
Деякі цілі визначають більше ключових слів для визначення деталей: "REJECT reject-with icmp-
мережа недоступна».
Кожне правило складається з a розташування і мета, плюс будь-яке число сірники:
таблиця фільтр # розташування
proto tcp dport (http https) # збіг
ПРИЙНЯТИ; # ціль
Власне кажучи, існує четвертий вид: ферм ключові слова (які керують внутрішніми ferm
поведінка), але вони будуть пояснені пізніше.
Параметри
Багато ключових слів приймають параметри. Вони можуть бути вказані як літерали, посилання на змінні або
списки (масиви):
прото udp
saddr $TRUSTED_HOSTS;
proto tcp dport (http https ssh);
LOG-префікс журналу "прикольне сповіщення wardriver: ";
Деякі з них можна заперечувати (списки не можна заперечувати):
прото !esp;
proto udp dport !домен;
Ключові слова, які не приймають параметрів, заперечуються префіксом «!»:
прото tcp !syn;
Читати Iptables(8), щоб побачити, де ! може бути використано.
BASIC КЛЮЧОВІ СЛОВА
Місце проведення ключові слова
домен [ip|ip6]
Встановити домен. "ip" є типовим і означає "IPv4" (iptables). "ip6" для IPv6
підтримка, використовуючи "ip6tables".
таблиця [фільтр|nat|викривлення]
Визначає, до якої таблиці netfilter це правило буде вставлено: "filter" (за замовчуванням),
"nat" або "mangle".
ланцюг [chain-name]
Визначає ланцюжок netfilter (у межах поточної таблиці), яким буде це правило
вставлено до. Загальні попередньо визначені назви ланцюжків: «ВХІД», «ВИВІД», «ВПЕРЕД»,
"PREROUTING", "POSTROUTING", залежно від таблиці. Дивіться netfilter
документація для деталей.
Якщо ви вкажете тут неіснуючий ланцюжок, ferm додасть правило до спеціального ланцюжка
з такою назвою.
політика [ПРИЙНЯТИ|ВИПУСТИТИ|..]
Визначає політику за умовчанням для поточного ланцюга (лише вбудована). Може бути одним із
вбудовані цілі (ПРИЙНЯТИ, ВІДХИЛИТИ, ВІДХИЛИТИ, ...). Пакет, який не відповідає жодним правилам
у ланцюжку буде оброблятися відповідно до політики.
Щоб уникнути неоднозначності, завжди вказуйте політики всіх попередньо визначених ланцюжків
явно.
@subchain ["CHAIN-NAME"] { ... }
Працює як звичайні оператори блоку (тобто без @subchain ключове слово), крім
Що ферм переміщує правила у фігурних дужках у новий настроюваний ланцюжок. Ім'я
для цього ланцюга автоматично вибирається ферм.
У багатьох випадках це швидше, ніж просто блок, оскільки ядро може пропустити a
величезний блок правил, коли попередня умова хибна. Уявіть собі такий приклад:
ланцюжок фільтрів таблиць INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) {
proto tcp dport (http https ssh) ACCEPT;
proto udp dport домен ACCEPT;
}
}
Це генерує 20 правил. Коли надходить пакет, який не проходить saddr
збіг, тим не менш перевіряє всі 20 правил. с @subchain, ця перевірка виконана
один раз, що призводить до швидшої фільтрації мережі та меншого навантаження на ЦП:
ланцюжок фільтрів таблиць INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @subchain {
proto tcp dport (http https ssh) ACCEPT;
proto udp dport домен ACCEPT;
}
}
За бажанням ви можете визначити назву підланцюжка:
saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain "foobar" {
proto tcp dport (http https ssh) ACCEPT;
proto udp dport домен ACCEPT;
}
Ім’я може бути рядковим літералом у лапках або розгорнутим виразом
наприклад @cat("interface_", $iface) або @substr($var,0,20).
Ви можете досягти того ж, явно оголосивши власний ланцюжок, але ви можете відчути
що за допомогою @subchain вимагає менше набору тексту.
Базовий Iptables матч ключові слова
інтерфейс [ім'я-інтерфейсу]
Визначте назву інтерфейсу, вашу зовнішню мережеву карту, як-от eth0, або комутоване з’єднання
ppp1 або будь-який інший пристрій, який ви хочете зіставити для передачі пакетів. Це рівнозначно
до перемикача "-i". Iptables(8).
зовнішнє обличчя [ім'я-інтерфейсу]
Те саме, що інтерфейс, тільки для відповідності вихідного інтерфейсу для пакета, як у
Iptables(8).
протокол [назва-протоколу|номер-протоколу]
На даний момент ядром підтримуються TCP, UDP і ICMP, або їх відповідні
числа.
saddr|daddr [специфікація адреси]
Збіги в пакетах, що надходять із зазначеної адреси (saddr) або спрямовані на
адреса (тато).
Приклади:
saddr 192.168/8 ПРИЙНЯТИ; # (ідентичний наступному:)
saddr 192.168.0.0/255.255.255.0 ПРИЙНЯТИ;
daddr my.domain.com ACCEPT;
фрагмент
Вкажіть, що потрібно зіставляти лише фрагментовані IP-пакети. Коли пакети є
більше максимального розміру пакета, який може обробити ваша система (так званий Максимальний
одиниця передачі або MTU) вони будуть розділені на шматки та надіслані один за одним як
одиничні пакети. Побачити Ifconfig(8), якщо ви хочете знайти MTU для вашої системи (the
за замовчуванням зазвичай 1500 байт).
Фрагменти часто використовуються в DOS-атаках, тому що їх неможливо знайти
визначити джерело пакета фрагмента.
спорт|дпорт [специфікація порту]
Збігається з пакетами на вказаному порту TCP або UDP. "спорт" відповідає джерелу
порт, а dport відповідає порту призначення.
Цей збіг можна використовувати лише після того, як ви вказали "протокол tcp" або "протокол udp",
оскільки лише ці два протоколи насправді мають порти.
І кілька прикладів дійсних портів/діапазонів:
dport 80 ПРИЙНЯТИ;
dport http ПРИЙНЯТИ;
dport ssh:http ПРИЙНЯТИ;
dport 0:1023 ПРИЙНЯТИ; # еквівалентно :1023
dport 1023:65535 ПРИЙНЯТИ;
син Укажіть, що прапор SYN у пакеті tcp має відповідати, до якого звикли
створити нові tcp-з'єднання. Ви можете ідентифікувати вхідні з'єднання за допомогою цього і
вирішіть, чи хочете ви це дозволити, чи ні. Пакети, які не мають цього прапора, є
ймовірно, через уже встановлене з’єднання, тому це вважається розумним
безпечно пропускати їх.
Модулі [назва-модуля]
Завантажте модуль iptables. Більшість модулів забезпечують більше відповідних ключових слів. Ми дійдемо
що пізніше.
Базовий мета ключові слова
стрибати [назва-ланцюжка-користувачів]
Переходить до спеціального ланцюжка. Якщо жодне правило в спеціальному ланцюжку не відповідає, netfilter повертає
до наступного правила в попередньому ланцюжку.
realgoto [назва-ланцюжка-користувачів]
Перейдіть до спеціальної мережі. На відміну від стрибати варіант ПОВЕРНЕННЯ не буде продовжувати обробку
у цьому ланцюжку, а замість цього в ланцюжку, через який нам телефонували стрибати.
Ключове слово realgoto був обраний у перехідний період, тому що На
(вже застаріле) раніше було псевдонімом для стрибати.
ПРИЙНЯТИ Приймає відповідні пакети.
DROP Відкидайте відповідні пакети без додаткового повідомлення.
ОТХОДИТИ Відхиляє відповідні пакети, тобто надсилає пакет ICMP відправнику, який є портом
недоступний за замовчуванням. Ви можете вказати інший тип ICMP.
ВІДМОВИТИ; # за замовчуванням icmp-port-unreachable
REJECT reject-with icmp-net-unreachable;
Введіть "iptables -j REJECT -h", щоб отримати детальну інформацію.
ПОВЕРНЕННЯ Завершіть поточний ланцюжок і поверніться до ланцюжка викликів (якщо «стрибок
[custom-chain-name]").
NOP Ніяких дій.
ДОДАТКОВИЙ КЛЮЧОВІ СЛОВА
Netfilter є модульним. Модулі можуть надавати додаткові цілі та відповідати ключовим словам. Список
кількість модулів netfilter постійно зростає, і ferm намагається не відставати від їх підтримки
все. У цьому розділі описано модулі, які наразі підтримуються.
Iptables матч Модулі
рахунок Трафік облікового запису для всіх хостів у визначеній мережі/масці мережі. Це один із
відповідні модулі, які поводяться як цільові, тобто вам доведеться здебільшого використовувати NOP
мета.
mod обліковий запис aname mynetwork aaddr 192.168.1.0/24 ashort NOP;
addrtype
Перевірте тип адреси; адреса джерела або адреса призначення.
mod addrtype src-type BROADCAST;
mod addrtype dst-type LOCAL;
Введіть "iptables -m addrtype -h", щоб отримати докладнішу інформацію.
ah Перевіряє заголовок SPI в пакеті AH.
мод ah ahspi 0x101;
мод ahspi ! 0x200:0x2ff;
Додаткові аргументи для IPv6:
mod ah ahlen 32 ПРИЙНЯТИ;
mod ah ahlen !32 ПРИЙНЯТИ;
mod ah ahres ПРИЙНЯТИ;
коментар Додає до правила коментар довжиною до 256 символів без ефекту. Зауважте, що
на відміну від ferm коментарів ('#'), цей буде відображатися в "iptables -L".
mod comment comment "Це мій коментар." ПРИЙНЯТИ;
стан
Збігається, якщо значення в /proc/net/ipt_condition/NAME дорівнює 1 (шлях є
/proc/net/ip6t_condition/NAME для домену ip6).
мод умова умова (abc def) ACCEPT;
умова мода умова !foo ПРИЙНЯТИ;
connbytes
Зіставте кількість байтів або пакетів у з’єднанні (або одному з двох потоків
що становить з’єднання), переданих на даний момент, або середнім байтом на
пакет.
mod connbytes connbytes 65536: connbytes-dir обидва байти connbytes-mode ACCEPT;
mod connbytes connbytes !1024:2048 connbytes-dir відповідь connbytes-mode пакети ACCEPT;
Допустимі значення для каталог connbytes: оригінал, відповісти, обидва; для connbytes-mode:
пакети, bytes, avgpkt.
connlimit
Дозволяє обмежити кількість паралельних підключень TCP до сервера на
IP-адреса клієнта (або адресний блок).
mod connlimit connlimit-above 4 REJECT;
mod connlimit connlimit-above !4 ПРИЙНЯТИ;
mod connlimit connlimit-above 4 connlimit-mask 24 REJECT;
connmark
Перевірте поле позначки, пов’язане зі з’єднанням, установлене цільовим елементом CONNMARK.
мод connmark mark 64;
mod connmark mark 6/7;
контракт
Перевірте інформацію про відстеження підключення.
mod conntrack ctstate (ВСТАНОВЛЕНО ПОВ’ЯЗАНЕ);
mod conntrack ctproto tcp;
mod conntrack ctorigsrc 192.168.0.2;
мод conntrack ctorigdst 1.2.3.0/24;
mod conntrack ctorigsrcport 67;
mod conntrack ctorigdstport 22;
мод conntrack ctreplsrc 2.3.4.5;
mod conntrack ctrepldst ! 3.4.5.6;
мод conntrack ctstatus ГАРАНТІЙ;
мод conntrack ctexpire 60;
mod conntrack ctexpire 180:240;
Введіть "iptables -m conntrack -h", щоб отримати детальну інформацію.
dccp Перевірте специфічні атрибути DCCP (протокол керування перевантаженням даних). Це
модуль завантажується автоматично, коли ви використовуєте "протокол dccp".
proto dccp sport 1234 dport 2345 ACCEPT;
proto dccp dccp-types (SYNCACK ACK) ACCEPT;
proto dccp dccp-types !REQUEST DROP;
прото dccp dccp-опція 2 ПРИЙНЯТИ;
dscp Зіставте 6-бітове поле DSCP у полі TOS.
мод dscp dscp 11;
мод dscp dscp-class AF41;
ecn Зіставте біти ECN заголовка TCP IPv4.
мод ecn ecn-tcp-cwr;
мод ecn ecn-tcp-ece;
мод ecn ecn-ip-ect 2;
Введіть "iptables -m ecn -h", щоб отримати детальну інформацію.
особ Перевіряє заголовок SPI в пакеті ESP.
мод esp espspi 0x101;
мод esp espspi ! 0x200:0x2ff;
eui64 «Цей модуль відповідає частині EUI-64 автоматично налаштованої IPv6-адреси без збереження стану.
Він порівнює EUI-64, отриманий з MAC-адреси джерела в кадрі Ehternet
молодші 64 біти адреси джерела IPv6. Але біт "Універсальний/локальний" не є
в порівнянні. Цей модуль не збігається з іншим фреймом рівня посилань і дійсний лише в
ланцюги PREROUTING, INPUT і FORWARD."
мод eui64 ПРИЙНЯТИ;
нечіткий «Цей модуль відповідає обмеженню швидкості на основі контролера нечіткої логіки [FLC]».
mod fuzzy нижня межа 10 верхня межа 20 ACCEPT;
hbh Відповідає заголовку параметрів Hop-by-Hop (ip6).
mod hbh hbh-len 8 ПРИЙНЯТИ;
mod hbh hbh-len !8 ПРИЙНЯТИ;
mod hbh hbh-opts (1:4 2:8) ПРИЙНЯТИ;
hl Відповідає полю Hop Limit (ip6).
mod hl hl-eq (8 10) ПРИЙНЯТИ;
mod hl hl-eq !5 ПРИЙНЯТИ;
mod hl hl-gt 15 ПРИЙНЯТИ;
mod hl hl-lt 2 ПРИЙНЯТИ;
helper Перевіряє, який допоміжний модуль conntrack відстежує це з’єднання. Порт може бути
вказано за допомогою "-portnr".
mod helper helper irc ACCEPT;
mod helper helper ftp-21 ACCEPT;
icmp Перевірте специфічні атрибути ICMP. Цей модуль автоматично завантажується під час використання
"протокол icmp".
прото icmp icmp-тип ехо-запит ACCEPT;
Цю опцію також можна використовувати в be ip6 домен, хоча це називається icmpv6 in
ip6tables.
Використовуйте "iptables -p icmp "-h"", щоб отримати список дійсних типів ICMP.
iprange Зіставте діапазон IPv4-адрес.
mod iprange src-range 192.168.2.0-192.168.3.255;
mod iprange dst-range ! 192.168.6.0-192.168.6.255;
параметри ipv4
Параметри заголовка IPv4, такі як маршрутизація джерела, маршрут запису, позначка часу тощо
маршрутизатор-оповіщення.
mod ipv4options ssrr ACCEPT;
mod ipv4options lsrr ACCEPT;
mod ipv4options no-srr ACCEPT;
mod ipv4options !rr ПРИЙНЯТИ;
mod ipv4options !ts ACCEPT;
mod ipv4options !ra ПРИЙНЯТИ;
mod ipv4options !any-opt ACCEPT;
ipv6header
Відповідає заголовку розширення IPv6 (ip6).
mod ipv6header header !(hop frag) ACCEPT;
mod ipv6header header (auth dst) ACCEPT;
hashlimit
Подібно до «ліміту модифікації», але додає можливість додавати для кожного пункту призначення або порту
обмеження, керовані в хеш-таблиці.
мод hashlimit hashlimit 10/хвилина hashlimit-burst 30/хвилина
hashlimit-mode dstip hashlimit-name foobar ACCEPT;
Можливі значення для hashlimit-mode: dstip dstport srcip srcport (або список із
більше одного з них).
Існує більше можливих налаштувань, введіть «iptables -m hashlimit -h».
документація.
Перевірте довжину упаковки.
мод довжина довжина 128; # рівно 128 байт
мод довжина 512:768; # діапазон
мод довжина довжина ! 256; # відхилено
обмежувати Обмежує швидкість пакетів.
обмеження модифікації обмеження 1/с;
обмеження модифікації 15/хвилинний ліміт-вибух 10;
Введіть "iptables -m limit -h", щоб отримати детальну інформацію.
макінтош Збігається з MAC-адресою джерела.
мод mac mac-source 01:23:45:67:89;
позначити Зіставляє пакети на основі поля позначки netfilter. Це може бути 32-бітове ціле число
між 0 і 4294967295.
mod mark mark 42;
mh Відповідає заголовку мобільності (домен ip6).
proto mh mh-type binding-update ACCEPT;
багатопортовий
Відповідність набору портів джерела або призначення (лише UDP і TCP).
mod multiport source-ports (https, ftp);
mod multiport destination-ports (домен mysql);
Це правило має велику перевагу перед «dport» і «sport»: воно генерує лише одне правило
до 15 портів замість одного правила для кожного порту.
n-й Зіставте кожен n-й пакет.
mod nth кожні 3;
mod n-й лічильник 5 кожні 2;
mod n-й початок 2 кожні 3;
mod n-й початок 5 пакет 2 кожні 6;
Введіть "iptables -m nth -h", щоб отримати детальну інформацію.
осф Зіставляти пакети залежно від операційної системи відправника.
мод osf жанр Linux;
мод osf! жанр FreeBSD ttl 1 log 1;
Введіть "iptables -m osf -h" для отримання деталей.
власник Перевірте інформацію про автора пакету, а саме ідентифікатор користувача, ідентифікатор групи, ідентифікатор процесу,
ідентифікатор сеансу та назва команди.
власник мода uid-власник 0;
власник мода gid-owner 1000;
власник мода pid-owner 5432;
власник мода sid-owner 6543;
власник мода cmd-власник "sendmail";
(«cmd-owner», «pid-owner» і «sid-owner» потребують спеціальних патчів ядра, а не
включено в ядро vanilla Linux)
physdev Збігається з фізичним пристроєм, на якому пакет надійшов або збирається залишити
машина. Це корисно для мостових інтерфейсів.
мод physdev physdev-in ppp1;
mod physdev physdev-out eth2;
mod physdev physdev-is-in;
mod physdev physdev-is-out;
mod physdev physdev-is-bridged;
pkttype Перевірте тип пакета канального рівня.
mod pkttype pkt-type unicast;
мод pkttype pkt-type broadcase;
mod pkttype pkt-type multicast;
політика Відповідає політиці IPsec, застосованій до цього пакета.
mod policy dir out pol ipsec ACCEPT;
mod policy strict reqid 23 spi 0x10 proto ah ACCEPT;
mod policy mode tunnel tunnel-src 192.168.1.2 ACCEPT;
mod policy mode tunnel tunnel-dst 192.168.2.1 ACCEPT;
mod policy strict next reqid 24 spi 0x11 ACCEPT;
Зверніть увагу, що ключове слово тому також використовується як скорочена версія протокол
(вбудований модуль відповідності). Ви можете вирішити цей конфлікт, завжди використовуючи long
ключове слово протокол.
PSD Виявлення сканування портів TCP/UDP.
мод psd psd-weight-threshold 21 psd-delay-threshold 300
psd-lo-ports-weight 3 psd-hi-ports-weight 1 DROP;
частка Реалізує мережеві квоти, зменшуючи лічильник байтів з кожним пакетом.
мод квоти квоти 65536 ПРИЙНЯТИ;
випадковий Зіставляти випадковий відсоток усіх пакетів.
мод випадкове середнє 70;
царство Зіставте область маршрутизації. Корисно в середовищах, що використовують BGP.
mod realm realm 3;
останній Тимчасово позначити вихідні IP-адреси.
останній набір модів;
mod recent rcheck секунд 60;
нещодавно встановлена назва rsource "badguy";
mod recent set rdest;
mod recent rcheck rsource name "badguy" seconds 60;
мод останнє оновлення секунд 120 hitcount 3 rttl;
Цей модуль netfilter має недолік конструкції: хоча він реалізований як відповідник
модуль, він має цільову поведінку під час використання ключового слова "set".
<http://snowman.net/projects/ipt_recent/>
rt Відповідність заголовку маршрутизації IPv6 (лише ip6).
mod rt rt-type 2 rt-len 20 ПРИЙНЯТИ;
mod rt rt-type !2 rt-len !20 ПРИЙНЯТИ;
mod rt rt-segsleft 2:3 ПРИЙНЯТИ;
mod rt rt-segsleft !4:5 ПРИЙНЯТИ;
mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-not-strict ACCEPT;
sctp Перевірте специфічні атрибути SCTP (Stream Control Transmission Protocol). Це
модуль завантажується автоматично, коли ви використовуєте "протокол sctp".
proto sctp sport 1234 dport 2345 ACCEPT;
proto sctp лише типи фрагментів DATA:Be ACCEPT;
proto sctp chunk-types any (INIT INIT_ACK) ACCEPT;
proto sctp chunk-types !all (HEARTBEAT) ACCEPT;
Використовуйте "iptables -p sctp "-h"", щоб отримати список дійсних типів фрагментів.
комплект Перевіряє IP/порт/MAC-адресу джерела або призначення за набором.
мод set set badguys src DROP;
Побачитиhttp://ipset.netfilter.org/> для отримання додаткової інформації.
були Перевіряє стан відстеження підключення.
mod state state INVALID DROP;
mod state state (ESTABLISH RELATED) ACCEPT;
Введіть "iptables -m state -h", щоб отримати докладнішу інформацію.
статистики
Наступник n-й та випадковий, наразі незадокументований у Iptables(8) сторінка посібника.
mod statistic mode випадкова ймовірність 0.8 ACCEPT;
mod statistic mode nth кожні 5 пакетів 0 DROP;
рядок Відповідає рядку.
mod string string "foo bar" ACCEPT;
mod string algo kmp від 64 до 128 hex-string "deadbeef" ACCEPT;
тпп Перевіряє специфічні атрибути TCP. Цей модуль автоматично завантажується під час використання
"протокол tcp".
прото tcp sport 1234;
протокол протоколу TCP dport 2345;
proto tcp tcp-flags (SYN ACK) SYN;
proto tcp tcp-flags ! (SYN ACK) SYN;
proto tcp tcp-flags ALL (RST ACK);
прото tcp syn;
proto tcp tcp-опція 2;
протокол tcp mss 512;
Введіть "iptables -p tcp -h", щоб отримати детальну інформацію.
tcpmss Перевірте поле TCP MSS пакета SYN або SYN/ACK.
mod tcpmss mss 123 ПРИЙНЯТИ;
mod tcpmss mss 234:567 ПРИЙНЯТИ;
час Перевірте, чи час надходження пакета відповідає заданому діапазону.
мод час timestart 12:00;
мод час timestop 13:30;
мод час днів (Пн Ср Пт);
мод час datestart 2005:01:01;
мод час дата початку 2005:01:01:23:59:59;
mod time datestop 2005:04:01;
час моди місяць день (30 31);
мод час будні (ср чт);
час моди timestart 12:00 UTC;
час моди timestart 12:00 localtz;
Введіть "iptables -m time -h", щоб отримати детальну інформацію.
малюк Відповідає пакету за вказаним TOS-значенням.
mod tos tos Мінімізація витрат ACCEPT;
mod tos tos !Normal-Service ACCEPT;
Введіть "iptables -m tos -h", щоб отримати детальну інформацію.
ТТЛ Збігається з полем ttl (час життя) у заголовку IP.
mod ttl ttl-eq 12; # ttl дорівнює
мод ttl ttl-gt 10; # ttl більше ніж
mod ttl ttl-lt 16; # ttl менше ніж
u32 Порівнює необроблені дані з пакета. У фермі можна вказати більше одного фільтра
список; вони не поширюються на кілька правил.
mod u32 u32 '6&0xFF=1' ACCEPT;
mod u32 u32 ('27&0x8f=7' '31=0x527c4833') DROP;
нечистий Знаходить пакети, які здаються неправильними або незвичними. Цей матч не має далі
параметри
Iptables мета Модулі
Наступні додаткові цілі доступні у ferm за умови, що ви їх увімкнули
ваше ядро:
КЛАСИФІКУВАТИ
Встановіть клас CBQ.
CLASSIFY комплект-клас 3:50;
КЛАСТЕРИП
Налаштуйте простий кластер вузлів, які спільно використовують певну IP- та MAC-адресу.
З'єднання статично розподілені між вузлами.
CLUSTERIP новий hashmode sourceip clustermac 00:12:34:45:67:89
total-nodes 4 local-node 2 hash-init 12345;
CONNMARK
Встановлює значення позначки netfilter, пов’язане з підключенням.
CONNMARK встановити позначку 42;
CONNMARK зберегти позначку;
CONNMARK позначка відновлення;
CONNMARK маска позначки збереження 0x7fff;
CONNMARK маска позначки відновлення 0x8000;
CONNSECMARK
Цей модуль копіює позначки безпеки з пакетів у з’єднання (якщо вони не позначені),
і від з’єднань назад до пакетів (також лише якщо вони не позначені). Зазвичай використовується в
у поєднанні з SECMARK він дійсний лише в таблиці mangle.
CONNSECMARK зберегти;
відновлення CONNSECMARK;
ДНАТ до [IP-адреса|IP-діапазон|IP-порт-діапазон]
Змініть адресу призначення пакета.
DNAT до 10.0.0.4;
DNAT до 10.0.0.4:80;
DNAT до 10.0.0.4:1024-2048;
DNAT до 10.0.1.1-10.0.1.20;
ECN Ця ціль дозволяє вибірково обходити відомі чорні діри ECN. Це може тільки
використовуватися в таблиці викривлення.
ECN ecn-tcp-видалити;
HL Змініть поле IPv6 Hop Limit (лише ip6/mangle).
HL hl-набір 5;
HL hl-dec 2;
HL hl-inc 1;
IPV4OPTSSTRIP
Видалення всіх параметрів IP з пакета. Цей модуль не приймає жодних опцій.
IPV4OPTSSTRIP;
ВХІД Реєструвати всі пакети, які відповідають цьому правилу, у журналі ядра. Будьте обережні з колодою
затоплення. Зверніть увагу, що це «незавершена мета», тобто обхід правила
продовжується на наступному правилі.
LOG попередження на рівні журналу log-prefix "Погляньте на це: ";
LOG log-tcp-sequence log-tcp-options;
LOG log-ip-options;
MARK Встановлює поле позначки netfilter для пакета (32-бітове ціле число від 0 до
4294967295):
МАРКА встановити-марку 42;
MARK set-xmark 7/3;
МАРК і-знак 31;
МАРКА або-марка 1;
MARK xor-mark 12;
МАСКАРАД
Маскаради відповідні пакети. Необов’язково слід порт або діапазон портів для
iptables. Вкажіть як «123», «123-456» або «123:456». Параметр діапазону портів
вказує, з яких локальних портів мають виходити масковані з’єднання.
МАСКАРАД;
МАСКАРАД до портів 1234:2345;
MASQUERADE до портів 1234:2345 випадковий;
ДЗЕРКАЛО Експериментальна демонстраційна мішень, яка інвертує поля джерела та призначення
в IP-заголовку.
ДЗЕРКАЛО;
NETMAP Зіставте всю мережу на іншу мережу в nat таблиці.
NETMAP до 192.168.2.0/24;
НЕ СЛЕЖИТИ Вимкнути відстеження з’єднання для всіх пакетів, які відповідають цьому правилу.
proto tcp dport (135:139 445) NOTRACK;
NFLOG Журнал пакетів через netlink; це наступник УЛОГ.
NFLOG nflog-group 5 nflog-prefix "Подивіться на це: ";
NFLOG nflog-діапазон 256;
NFLOG nflog-поріг 10;
NFQUEUE Постановка черги в просторі користувача, потрібна підтримка ядра nfnetlink_queue.
proto tcp dport ftp NFQUEUE queue-num 20;
ЧЕРГУ Черги в просторі користувача, попередник NFQUEUE. Усі пакети потрапляють до черги 0.
proto tcp dport ftp ЧЕРГА;
ПЕРЕДАЧА до-портів [порти]
Прозоре проксі: змініть IP-адресу призначення пакета на машину
себе.
proto tcp dport http REDIRECT to-ports 3128;
proto tcp dport http ПЕРЕНАПРАВЛЕННЯ на порти 3128 випадковий;
САМЕ Подібно до SNAT, але клієнт зіставляється з однаковою IP-адресою джерела для всіх своїх
сполук.
ТЕ ЖЕ до 1.2.3.4-1.2.3.7;
ТЕ ЖЕ до 1.2.3.8-1.2.3.15 nodst;
САМЕ до 1.2.3.16-1.2.3.31 випадковий;
SECMARK Це використовується для встановлення значення позначки безпеки, пов’язаного з пакетом для використання
підсистеми безпеки, такі як SELinux. Він дійсний лише в таблиці Mangle.
SECMARK selctx "system_u:object_r:httpd_packet_t:s0";
УСТАНОВКА [додати-набір|удалити-набір] [setname] [прапор(и)]
Додайте IP до вказаного набору. Побачитиhttp://ipset.netfilter.org/>
proto icmp icmp-type echo-request SET add-set badguys src;
СНАТ до [IP-адреса|IP-діапазон|IP-порт-діапазон]
Змініть адресу джерела пакета.
SNAT до 1.2.3.4;
SNAT до 1.2.3.4:20000-30000;
SNAT до 1.2.3.4 випадковий;
TCPMSS Змініть значення MSS для пакетів TCP SYN.
TCPMSS set-mss 1400;
TCPMSS clamp-mss-to-pmtu;
КАШЕЛЬ набори [значення]
Встановіть це значення для біта типу служби пакета tcp. Це буде використано
будь-який планувальник трафіку готовий, переважно ваша власна Linux-машина, але можливо
більше. Оригінальні tos-біти порожні та перезаписані цим значенням.
TOS set-tos Maximize-Throughput;
TOS and-tos 7;
ГС або-тос 1;
TOS xor-tos 4;
Введіть "iptables -j TOS -h", щоб отримати детальну інформацію.
TTL Змініть поле заголовка TTL.
TTL ttl-set 16;
TTL ttl-dec 1; # зменшити на 1
TTL ttl-inc 4; # збільшити на 4
УЛОГ Реєструвати пакети в програмі простору користувача.
ULOG ulog-nlgroup 5 ulog-prefix "Подивіться на це: ";
ULOG ulog-cprange 256;
ULOG ulog-qthreshold 10;
ІНШІ ДОМЕНИ
З версії 2.0 ферм підтримує не тільки ip та ip6, Але і ARP (таблиці ARP) і eb
(таблиці мостів Ethernet). Поняття подібні до Iptables.
arptables ключові слова
вихідний IP, адресат-ip
Збігається з адресою IPv4 джерела або призначення. Такий же, як saddr та тато , ip
домен
джерело-mac, призначення-mac
Відповідає MAC-адресі джерела або призначення.
інтерфейс, зовнішнє обличчя
Інтерфейс введення та виведення.
h-довжина
Апаратна довжина пакета.
ланцюг INPUT h-довжина 64 ACCEPT;
опкод Код операції, детальніше див Iptables(8).
код операції 9 ACCEPT;
h-тип Тип апаратного забезпечення.
h-тип 1 ACCEPT;
прототип
Тип протоколу.
прототип 0x800 ACCEPT;
Скривлення
Ключові слова mangle-ip-s, mangle-ip-d, mangle-mac-s, mangle-mac-d, mangle-target
може використовуватися для спотворення ARP. Побачити Iptables(8) для деталей.
ebtables ключові слова
тому Збігається з протоколом, який створив кадр, наприклад IPv4 or PPP. Список див
/etc/ethertypes.
інтерфейс, зовнішнє обличчя
Фізичний інтерфейс введення та виведення.
логічний вхід, логічний вихід
Інтерфейс логічного мосту.
saddr, тато
Відповідає MAC-адресі джерела або призначення.
матч Модулі
Підтримуються такі модулі відповідності: 802.3, arp, ip, mark_m, pkttype, stp,
vlan, журнал.
Мета Розширення
Підтримуються наступні цільові розширення: arpreply, dnat, mark, redirect,
снат.
Зверніть увагу, що існує конфлікт між --позначка від mark_m модуль відповідності
та -j позначити. Оскільки обидва будуть реалізовані за допомогою ключового слова ferm позначити, Ми
вирішив вирішити це, написавши ім’я цілі великими літерами, як і в іншому
домени. Наступний приклад переписує оцінку 1 на 2:
позначка 1 МАРК 2;
ADVANCED ОСОБЛИВОСТІ
Змінні
У складних файлах брандмауера корисно використовувати змінні, наприклад, щоб надати мережу
інтерфейс має значущу назву.
Щоб встановити змінні, напишіть:
@def $DEV_INTERNET = eth0;
@def $PORTS = (http ftp);
@def $MORE_PORTS = ($PORTS 8080);
У реальному коді ферми змінні використовуються як будь-який інший параметр ключового слова:
ланцюг INPUT інтерфейс $DEV_INTERNET proto tcp dport $MORE_PORTS ACCEPT;
Зверніть увагу, що змінні можна використовувати лише в параметрах ключових слів ("192.168.1.1", "http"); Вони
не може містити ключові слова ferm, такі як "прото" або "інтерфейс".
Змінні дійсні лише в поточному блоці:
@def $DEV_INTERNET = eth1;
ланцюжок INPUT {
proto tcp {
@def $DEV_INTERNET = ppp0;
інтерфейс $DEV_INTERNET dport http ACCEPT;
}
інтерфейс $DEV_INTERNET DROP;
}
буде розширено до:
ланцюжок INPUT {
proto tcp {
інтерфейс ppp0 dport http ACCEPT;
}
інтерфейс eth1 DROP;
}
"def $DEV_INTERNET = ppp0" дійсний лише в блоці "proto tcp"; батьківський блок
все ще знає "встановити $DEV_INTERNET = eth1".
Файли включення є особливими - змінні, оголошені у включеному файлі, все ще доступні
блок виклику. Це корисно, коли ви включаєте файл, який оголошує лише змінні.
автоматичний змінні
Деякі змінні встановлюються всередині ferm. Скрипти Ferm можуть використовувати їх, як і будь-які інші
змінна.
$FILENAME
Ім'я файлу конфігурації відносно каталогу ferm, у якому було запущено.
$FILEBNAME
Базова назва файлу конфігурації.
$DIRNAME
Каталог файлу конфігурації.
$DOMAIN Поточний домен. Один з ip, ip6, ARP, eb.
$TABLE Поточна таблиця netfilter.
$CHAIN Поточний ланцюжок netfilter.
$LINE Рядок поточного сценарію. Його можна використовувати так:
@def &log($msg) = {
LOG-префікс журналу "rule=$msg:$LINE ";
}
.
.
.
&log("повідомлення журналу");
Функції
Функції подібні до змінних, за винятком того, що вони можуть мати параметри, і вони надають
ferm команди, а не значення.
@def &FOO() = прото (tcp udp) домен dport;
&FOO() ПРИЙНЯТИ;
@def &TCP_TUNNEL($port, $dest) = {
ланцюг фільтрів таблиць FORWARD інтерфейс ppp0 proto tcp dport $port daddr $dest outerface eth0 ACCEPT;
таблиця nat chain PREROUTING інтерфейс ppp0 proto tcp dport $port daddr 1.2.3.4 DNAT до $dest;
}
&TCP_TUNNEL(http, 192.168.1.33);
&TCP_TUNNEL(ftp, 192.168.1.30);
&TCP_TUNNEL((ssh smtp), 192.168.1.2);
Виклик функції, яка містить блок (наприклад, '{...}'), має бути останньою командою у фермі
правило, тобто після нього має стояти «;». '&FOO()Таким чином, приклад не містить блоку
ви можете написати "ПРИЙМАЮ" після дзвінка. Щоб уникнути цього, ви можете змінити порядок ключових слів:
@def &IPSEC() = { прото (особливо); proto udp dport 500; }
ланцюжок INPUT ACCEPT &IPSEC();
Зворотні галочки
З зворотними галочками ви можете використовувати вихід зовнішньої команди:
@def $DNSSERVERS = `сервер імен grep / Etc / resolv.conf | awk '{print $2}'`;
ланцюг INPUT proto tcp saddr $DNSSERVERS ACCEPT;
Команда виконується за допомогою оболонки (/ Бен / ш), як і зворотні галочки в perl. ferm робить
не робіть жодного розширення змінних тут.
Потім результат токенізується та зберігається як список ферм (масив). Рядки, що починаються з "#"
ігноруються; інші рядки можуть містити будь-яку кількість значень, розділених пробілами.
Включає в себе
Команда @включати ключове слово дозволяє включати зовнішні файли:
@include 'vars.ferm';
Назва файлу є відносною до файлу, що викликає, наприклад, якщо включати з
/etc/ferm/ferm.conf, наведене вище твердження включає /etc/ferm/vars.ferm. Змінні і
функції, оголошені у включеному файлі, все ще доступні у файлі виклику.
включати працює в блоці:
ланцюжок INPUT {
@include 'input.ferm';
}
Якщо вказати каталог (з символом «/»), усі файли в цьому каталозі є
включено, відсортовано за алфавітом:
@include 'ferm.d/';
Із символом кінцевої вертикальної лінії ферм виконує команду оболонки та аналізує її вихід:
@include '/root/generate_ferm_rules.sh $HOSTNAME|'
Умовно
Ключове слово @якщо вводить умовний вираз:
@if $умова DROP;
Значення оцінюється як істинне так само, як у Perl: нуль, порожній список, порожній рядок є хибними,
все інше вірно. Приклади справжніх значень:
(ab); 1; 'foo'; (0 0)
Приклади помилкових значень:
(); 0; '0'; ''
Там таке ж @інше:
@if $умова DROP; @else REJECT;
Зверніть увагу на крапку з комою перед @інше.
Можна використовувати фігурні дужки після будь-якого @якщо or @інше:
@if $умова {
МАРКА встановити-марку 2;
ПОВЕРНЕННЯ;
} @else {
МАРКА встановити-марку 3;
}
Оскільки закриваюча фігурна дужка також завершує команду, крапка з комою не потрібна.
Немає ніякого @elsif, Використовуйте @інше @якщо замість цього.
приклад:
@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || луна`;
@if $have_ipv6 {
домен ip6 {
# ....
}
}
гачки
Щоб запускати власні команди, ви можете встановити хуки:
@hook pre "echo 0 >/proc/sys/net/ipv4/conf/eth0/forwarding";
@hook post "echo 1 >/proc/sys/net/ipv4/conf/eth0/forwarding";
@hook flush "echo 0 >/proc/sys/net/ipv4/conf/eth0/forwarding";
Зазначена команда виконується за допомогою оболонки. "pre" означає запустити команду раніше
застосовуючи правила брандмауера, а «опублікувати» означає виконання команди після цього. «промивні» гачки
запускаються після того, як ferm скине правила брандмауера (параметр --flush). Ви можете встановити будь-який
кількість гачків.
Вбудовувана ФУНКЦІЇ
Є кілька вбудованих функцій, які можуть бути вам корисними.
@eq(a,b)
Перевіряє два значення на рівність. приклад:
@if @eq($DOMAIN, ip6) DROP;
@ne(a,b)
Подібно до @eq, це перевірка на нерівність.
@not(x)
Заперечує логічне значення.
@resolve((ім'я хосту1 ім'я хоста2 ...), [тип])
Зазвичай імена хостів розпізнаються iptables. Щоб дозволити ferm розпізнавати імена хостів, використовуйте
функція @resolve:
saddr @resolve(my.host.foo) proto tcp dport ssh ACCEPT;
saddr @resolve((another.host.foo third.host.foo)) proto tcp dport openvpn ACCEPT;
daddr @resolve(ipv6.google.com, AAAA) proto tcp dport http ACCEPT;
Зверніть увагу на подвійні дужки у другому рядку: внутрішня пара для створення списку ферм,
і зовнішня пара як розділювачі параметрів функції.
Другий параметр необов’язковий і визначає тип запису DNS. За замовчуванням "A".
Будьте обережні з дозволеними іменами хостів у конфігурації брандмауера. Запити DNS можуть блокувати
налаштування брандмауера протягом тривалого часу, залишаючи машину вразливою, інакше вони можуть вийти з ладу.
@cat(a, b, ...)
Об’єднайте всі параметри в один рядок.
@substr(вираз, зміщення, довжина)
Витягує підрядок із виразу та повертає його. Перший символ зі зміщенням 0. Якщо
OFFSET є від’ємним, починається так далеко від кінця рядка.
@length(вираз)
Повертає довжину значення EXPR у символах.
@basename(шлях)
Повертає базову назву файлу для заданого шляху (File::Spec::splitpath).
@dirname(шлях)
Повертає назву останнього каталогу для заданого шляху, припускаючи, що останній компонент є a
ім'я файлу (File::Spec::splitpath).
@ipfilter(список)
Відфільтровує IP-адреси, які явно не відповідають поточному домену. Тобто
корисно для створення загальних змінних і правил для IPv4 і IPv6:
@def $ДОВІРЕНІ_ХОСТИ = (192.168.0.40 2001:abcd:ef::40);
домен (ip ip6) ланцюг INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh ACCEPT;
}
РЕЦЕПТИ
Команда ./приклади/ каталог містить численні конфігурації ferm, які можна використовувати для початку
новий брандмауер. Цей розділ містить більше зразків, рецептів і прийомів.
Easy порт пересилка
Функція Ferm робить рутинні завдання швидкими та легкими:
@def &FORWARD_TCP($proto, $port, $dest) = {
ланцюг фільтрів таблиць FORWARD інтерфейс $DEV_WORLD outerface $DEV_DMZ daddr $dest proto $proto dport $port ACCEPT;
таблиця nat chain PREROUTING інтерфейс $DEV_WORLD daddr $HOST_STATIC proto $proto dport $port DNAT до $dest;
}
&FORWARD_TCP(tcp, http, 192.168.1.2);
&FORWARD_TCP(tcp, smtp, 192.168.1.3);
&FORWARD_TCP((tcp udp), домен, 192.168.1.4);
віддалений ферм
Якщо цільова машина не може працювати ферм з якоїсь причини (можливо, вбудований пристрій
без Perl), ви можете редагувати ферм файл конфігурації на іншому комп’ютері та дозвольте ферм
створіть там сценарій оболонки.
Приклад для OpenWRT:
ferm --remote --shell mywrt/ferm.conf >mywrt/firewall.user
chmod +x mywrt/firewall.user
scp mywrt/firewall.user mywrt.local.net:/ тощо /
ssh mywrt.local.net /etc/firewall.user
ВАРІАНТИ
--noexec Не виконуйте Iptables(8) команди, але натомість пропустіть. Таким чином ви можете
аналізуйте свої дані, використовуйте --лінії щоб переглянути результат.
--змивати Очищає правила брандмауера та встановлює політику всіх ланцюжків на ПРИЙНЯТИ. ферм
потрібен файл конфігурації для визначення доменів і таблиць
постраждалих.
--лінії Показати рядки брандмауера, створені на основі правил. Їх покажуть
безпосередньо перед їх виконанням, тому якщо ви отримуєте повідомлення про помилку від Iptables(8)
тощо, ви можете побачити, яке правило викликало помилку.
--інтерактивні
Застосуйте правила брандмауера та попросіть користувача підтвердження. Повертається до
попередній набір правил, якщо протягом 30 секунд немає дійсної відповіді користувача (див
--час вийшов). Це корисно для віддаленого адміністрування брандмауера: ви можете перевірити
правил, не боячись замкнутися.
--час вийшов S If --інтерактивні використовується, а потім відкотити, якщо немає правильної відповіді користувача
через цю кількість секунд. За замовчуванням 30.
--допомога Показати короткий список доступних параметрів командного рядка.
-- версія Показує номер версії програми.
--швидко Увімкнути швидкий режим: ferm генерує iptables-збереження(8) і встановлює його
з iptables-відновлення(8). Це набагато швидше, тому що ferm calls Iptables(8)
один раз для кожного правила за замовчуванням.
Швидкий режим увімкнено за замовчуванням, оскільки ферм 2.0, цей параметр не підтримується.
--повільно Вимкніть швидкий режим, тобто біг Iptables(8) для кожного правила, і не використовуйте
iptables-відновлення(8).
-- оболонка Створіть сценарій оболонки, який викликає iptables-відновлення(8) і друкує його.
Має на увазі --fast --lines.
-дистанційне Створення правил для віддаленої машини. Має на увазі --noexec та --лінії. Може бути
в поєднанні з -- оболонка.
--домен {ip|ip6}
Обробляти лише вказаний домен. ферм вихід може бути порожнім, якщо домен є
не налаштовано у вхідному файлі.
--зах '$name=value'
Замінити змінну, визначену у файлі конфігурації.
Використовуйте ferm онлайн за допомогою сервісів onworks.net
