Firewall под Юниксами - настройка и использование
Спецвыпуск Хакера, номер #005, стр. 005-088-3
media: Ethernet manual
inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 296
sl1: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 296
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
ppp1: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
tun0: flags=10<POINTOPOINT> mtu 3000
tun1: flags=10<POINTOPOINT> mtu 3000
bridge0: flags=0<> mtu 1500
bridge1: flags=0<> mtu 1500
Фильтровка пакетов по портам
Этот метод чаще всего используется администраторами для запрещения использования некоторых сетевых сервисов из внешнего мира. Например:
block in quick on de0 proto tcp from any to server1 port = 23
pass in quick on ne0 proto tcp from 192.168.0.0/24 to server1 port = 23
Данное правило запретит все соединения, идущие с интерфейса de0 с протоколом tcp на 23 порт (telnet) и разрешит подключения с интерфейса ne0 из локальной сети на сервер, сетевое имя которого в нашем примере server1, на 23 порт. Возможные операции для определения порта: = , != , > , < , <= , =>.
Также возможна фильтровка по диапазонам портов:
порт1 <> порт2 вступит в силу, если пакет идет на порт больше значения порт1 и меньше значения порт2.
порт1 >< порт2 вступит в силу, если пакет идет на порт меньше значения порт1 и больше значения порт2.
Например:
block in quick from any to any port 137<>139
Это правило запретит все входящие соединения на порты 137,138,139.
Ответ на блокируемые пакеты
При обычном сканировании TCP портов, если идет попытка подключения на блокируемый нами порт, результатом будет timeout подключения. В нормальной же ситуации, если бы на этом порту ничего не было и мы не блокировали бы его, система, которая пыталась подключиться к нам, получила бы обратно TCP пакет с RST флагом. Чтобы достичь такого же эффекта, используется ключевое слово return-rst. В следующем примере на попытку подключения на 23 порт (telnet) с интерфейса ppp0 мы возвращаем TCP пакет с флагом RST - это будет являться для сканирующей системы знаком, что порт якобы закрыт:
block return-rst in quick on ppp0 proto tcp from any to any port = 23
Такая возможность существует и для возврата заданных типов ICMP пакетов на блокируемые пакеты:
block return-icmp(3) in quick proto icmp from any to any icmp-type 8
В данной ситуации ICMP-пакет будет послан с обратным адресом системы, на которой установлен firewall, а не той системы, которой предназначался пакет. Если же необходимо послать icmp-пакет с обратным адресом системы, которой предназначался пакет, то используется ключевое слово return-icmp-as-dest:
block return-icmp-as-dest(3) proto udp from any to 20.20.20.0/24 port = 111
Запись пакетов в лог
Как и в любом firewall'е, в IPFilter предусмотрена возможность записи пакетов в лог, используя ключевое слово 'log':
block in quick log from proto tcp any to any port = 139
Теперь все TCP пакеты, идущие на 139 порт, будут блокированы и записаны в лог.
В следующем примере мы блокируем и записываем в лог все пакеты, идущие на broadcast адреса с ppp0 интерфейса. Это правило может быть использовано для предотвращения использования твоей сети для smurf атак.