базі ICMP.
[Bel89] розглядає дві проблеми з ICMP: старі версії Unix можуть розірвати всі з'єднання між хостамі, навіть якщо тільки одне з них зіткнулося з проблемами. Крім того, повідомлення про перенаправлення шляху ICMP можуть бути використані для обману маршрутизаторів і хостов з метою примусити їх повірити у те, що хост зловмисника є маршрутизатором і пакети краще відправляти через нього. Це, у свою чергу, може привести до того, що атакуючий дістане доступ до систем, яким не дозволено мати з'єднання з машиною атакуючого або його мережею.
1.2.5 Структура портів TCP і UDP
Сервіси TCP і UDP використовуються за допомогою схеми клієнт-сервер. Наприклад, процес серверу TELNET спочатку знаходиться в стані очікування запиту встановлення з'єднання. У який-небудь момент часу користувач запускає процес клієнта TELNET, який ініціює з'єднання з сервером TELNET. Клієнт посилає дані серверу, той читає їх, і посилає назад клієнту відповідь. Клієнт читає відповідь і повідомляє про нього користувача. Тому, з'єднання є двонаправленим і може бути використане як для читання, так і для запису.
Як багато одночасних з'єднань TELNET може бути встановлено між системами? З'єднання TCP або UDP унікальним чином ідентифікується за допомогою чотирьох полів, присутніх в кожному з'єднанні:
IP-адреса джерела - адреса системи, яка послала пакет
IP-адреса одержувача - адреса системи, яка приймає пакет
порт відправника - порт з'єднання в системі-відправнику
порт одержувача - порт з'єднання в системі-одержувачі
Порт - це програмне поняття, яке використовується клієнтом або сервером для посилки або прийому повідомлень; порт ідентифікується 16-бітвим числом. Серверні процеси звичайно асоціюються з фіксованим числом, наприклад числом 25 для SMTP або 6000 для X Windows; номер порту є відомим, оскільки він потрібен, крім IP-адреси одержувача, при встановленні з'єднання з конкретним хостом і сервісом. Клієнтські процеси, з другого боку, запрошують номер порту у операційної системи на початку роботи; і номер порту є випадковим, хоча в деяких випадках він є наступним в списку вільних номерів портів.
Для ілюстрації того, як використовуються порти для посилки і прийому повідомлень, розглянемо протокол TELNET. Сервер TELNET слухає повідомлення, що приходять, на порту 23, і сам посилає повідомлення на порт 23. Клієнт TELNET, на тій же або іншій системі, спочатку запрошує невживаний номер порту у ОС, а потім використовує його при посилці і прийомі повідомлень. Він повинен указувати це номер порту, наприклад 3097, в пакетах, призначених для серверу TELNET, щоб цей сервер при відповіді на повідомлення клієнта міг помістити це номер в посилані їм TCP-пакети. Хост клієнта по прийому повідомлення повинен подивитися номер порту в повідомленні і вирішити, який з клієнтів TELNET повинен прийняти це повідомлення. Цей процес показаний на малюнку 1.2
Малюнок 1.2 Взаємодія при TELNET
Існує достатньо поширене правило, згідно якому тільки привілейовані процеси серверу, тобто ті процеси, які працюють з привілеями суперкористувача UNIX, можуть використовувати порти з номерами менше, ніж 1024( так звані привілейовані порти). Серверу в-основном використовують порти з номерами менше, ніж 1024, а клієнти, як правило, повинні запрошувати непривілейовані порти у ОС. Хоча це правило і не є обов'язковим для виконання і не потрібен специфікацією протоколів TCP/IP, системи на основі BSD дотримують його.
В результаті всього цього брандмауери можуть блокувати або фільтрувати доступ до служб на основі перевірки номерів портів в TCP- і UDP-пакетах і подальшого пропускання через себе або видалення пакету на основі політики, вказуючої доступ до яких служб дозволений або заборонений. (детальніше це описано на чолі 2).
Не всі сервери і клієнти TCP і UDP використовують порти таким простим способом, як TELNET, але в цілому, процедура, описана тут, корисна в контексті брандмауера. Наприклад, багато ОС персональних комп'ютерів не використовують поняття суперкористувача UNIX, але все-таки використовують порти описаним вище способом (хоча немає стандарту, що вимагає це).