Навіщо використовувати правила брандмауера iptables, навіщо стверджувати НОВИЙ стан на всіх дозволених портах?


23

Я часто бачу iptables, налаштовані таким чином, щоб усі пакети були пов'язані зв'язаними, а конкретні порти послуг - для нових підключень.

У чому причина заяви НОВОГО? Якщо з'єднання НЕ НОВО, я думаю, це пов'язано, тому певне правило порту не виконає жодного. То чому б чітко визначати порти сервісу з НОВОЮ, а не лише протокол і номером порту?

Відповіді:


21

Правила в брандмауері netfilter (iptables) перевіряються послідовно, і доля пакету (ACCEPT, DROP, REJECT тощо) визначається на основі першого матчу.

Здійснюючи брандмауер справним і першим правилом, типова -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTпереважна більшість законного трафіку на ваш сервер приймається після передачі лише цього єдиного правила. Цей трафік не повинен перетинати будь-які інші правила.

Залежно від розміру вашої бази правил, це може означати значну різницю у роботі брандмауера.

Єдиний трафік, необхідний для перевірки брандмауера, - це явно нові з'єднання.

Тобто порівняйте брандмауер для публічного веб-сервера з доступом для кількох веб-майстрів зі своїх робочих станцій:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

Приблизно 99% законних пакетів належатимуть встановленим з'єднанням, лише потрапляючи на перше правило. З пакетів, що не відповідають цьому правилу, більшість має становити нові підключення до вашого веб-сайту, мультипортовий модуль може надати доступ до HTTP або HTTPS в одному правилі. Веб-майстри входять з ряду робочих станцій з фіксованими адресами за допомогою ssh та sftp, а все інше відхиляється.

Брандмауер, де правила впорядковуються логічно портом TCP:

-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 443 -j ACCEPT

Тут кожен пакет вашого веб-сервера HTTP повинен бути перевірений відповідно до 5 правил, перш ніж буде надано доступ. І більше сервісів, що працюють на сервері, які можуть легко стати 50 правилами або набагато більше, коли ви, наприклад, використовуєте fail2ban або подібні продукти.


1
Відмінна відповідь (+1 від мене!) За винятком того, що ви говорите " доступ дозволений на основі першого матчу ". Якщо перший матч трапиться у ВІДКЛЮЧЕННЯ або ВІДКРИТИ, це не дозволить отримати доступ; якщо це LOG, то вам доведеться продовжувати знаходити більш пізню відповідність; і якщо користувацькі ланцюги залучаються, речі можуть стати досить бароко. Я б сказав, що " доля пакета визначається на основі першої диспозитивної відповідності ".
MadHatter підтримує Моніку

5
Чи можете ви задуматися про випадок, коли related/establishedрядок присутній, але наступні правила не стверджують NEW?
Даніель Відрік

13

NEW означає, що пакет розпочав нове з'єднання.

Він обробляється модулями ядра, які називають ip_conntrack_*ваш Брандмауер станом . Державні брандмауери можуть дивитись потоки руху.

Якщо ви просто вказуєте номер протоколу та порту, ваш Брандмауер не має стану, а без стану. Це означає, що він просто обмежує або блокує пакети. Цей тип брандмауерів не обізнаний з потоками даних.

Хорошим прикладом є FTP: активний FTP використовує порт 21 для каналу управління, але потім використовує порт 20 для каналу даних. У випадку, коли існує брандмауер, вам не потрібно відкривати порт 20, оскільки він пов'язаний з попереднім встановленим з'єднанням на порту 21.

Ось витяг із iptablesсторінки чоловіка:

НОВО - означає, що пакет розпочав нове з'єднання або іншим чином пов'язаний із з'єднанням, яке не бачило пакетів в обох напрямках.

Встановлено - означає, що пакет пов'язаний із з'єднанням, яке бачило пакети в обох напрямках.

ЗВ'ЯЗАНО - означає, що пакет починає нове з'єднання, але асоціюється з існуючим з'єднанням, таким як передача даних FTP або помилка ICMP.


1
Який механізм буде "асоціювати" порт 20 з портом 21? Чи можна відкрите IP-з'єднання перенести на інший порт?
дрон

nf_conntrack_ftp.ko
mateusza

7
-A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -DROP

Вищенаведений набір правил дозволить пакетам до порту 22 TCP зі станом INVALIDпропускуACCEPT

Недійсне : Якщо жодне з попередніх станів не застосовується, пакет знаходиться в стані INVALID. Це може бути спричинене різними типами скритових зондів, або це може означати, що у вас не вистачає записів CONNTRACK (які ви також повинні бачити, зазначені у своїх журналах). Або просто може бути цілком доброякісним.

/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables


Стверджуючи ДЕРЖАВНІ NEWгарантує , що недійсні пакети не помилково accetped.

І щоб уточнити значення:

  • НОВЕ : Це нові З'єднання
  • Встановлено : Це пакет, що бере участь у поточному з'єднанні
  • ПОВ'ЯЗАНО : Це новий зв'язок, але він був передбачений наявним з'єднанням
  • ІНВАЛІД : Ніщо з вищезазначеного не застосовується.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.