Фильтрация нелегальных адресов в брандмауэре.
Метки: ICMP | IPTables | ISP | spufing
Среда, 8 апреля 2009 г.
Просмотров: 2242
Loopback-адреса.
Адреса обратной петли (127.0.0.0 - 127.255.255.255) никогда не могут использоваться за пределами интерфейса lo. Если пакеты с loopback-адресами появились на интерфейсе, отличном от lo, значит, они были подделаны (spoffed).
В следующем примере кода будет создана пользовательская цепочка bad_packets, которая будет отбрасывать адреса, перечисленные выше. Все отброшенные пакеты будут запротоколированы - хороший способ отладки неправильно сконфигурированных приложений и попыток спуффинга.
$IPT -A bad_packets -s 10.0.0.0/8 -j DROP
$IPT -A bad_packets -s 172.16.0.0/12 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -s 172.16.0.0/12 -j DROP
## Адреса диапазона 192.168.0.0 - 192.168.0.255
## могут использоваться, только если они приходят из DMZ
$IPT -A bad_packets -i $IF_EXT -s 192.168.0.0/24 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -i $IF_EXT -s 192.168.0.0/24 -j DROP
$IPT -A bad_packets -i $IF_LAN -s 192.168.0.0/24 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -i $IF_LAN -s 192.168.0.0/24 -j DROP
## Адреса диапазона 192.168.1.0 - 192.168.1.255
## могут использоваться, только если они приходят из LAN
$IPT -A bad_packets -i $IF_EXT -s 192.168.1.0/24 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -i $IF_EXT -s 192.168.1.0/24 -j DROP
$IPT -A bad_packets -i $IF_DMZ -s 192.168.1.0/24 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -i $IF_DMZ -s 192.168.1.0/24 -j DROP
## Зарезервированные, multicast, broadcast и loopback-адреса
$IPT -A bad_packets -s 169.254.0.0/16 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad packets -s 169.254.0.0/16 -j DROP
$IPT -A bad_packets -s 192.0.2.0/16 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -s 192.0.2.0/16 -j DROP
$IPT -A bad_packets -s 0.0.0.0/8 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -s 0.0.0.0/8 -j DROP
SIPT -A bad_packets -s 224.0.0.0/4 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -s 224.0.0.0/4 -j DROP
$IPT -A bad_packets -s 240.0.0.0/5 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -s 240.0.0.0/5 -j DROP
$IPT -A bad_packets -s 127.0.0.0/8 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -s 127.0.0.0/8 -j DROP
## Обычно пакеты , адресованные для
## адреса 255.255.255.255, должны быть отброшены
$IPT -A bad_packets -d 255.255.255.255 -j LOG --log-prefix "нелегальные_адреса"
$IPT -A bad_packets -d 255.255.255.255 -j DROP
Широковещательные пакеты, адресованные внешнему интерфейсу, также должны быть отброшены, поскольку они могут являться частью DoS-атаки.
Если ISP использует динамическую адресацию, уничтожение этих пакетов может вызвать проблему, поскольку широковещательный адрес будет меняться при каждом подключении. Однако сценарий nat.sh содержит параметры ядра, позволяющие игнорировать широковещательные ICMP-сообщения, следовательно, установка правила IPTables не является жизненно необходимой.
Если имеется статический внешний адрес, нужно добавить следующие правила (в этом случае внешний IP-адрес 1.2.3.17):
$IPT -A bad_packets -d 1.2.3.0 -j DROP
$IPT -A bad_packets -d 1.2.3.255 -j LOG --log-prefix
"broadcast"
$IPT -A bad_packets -d 1.2.3.255 -j DROP
Все, что остается сделать, - это вставить созданную цепочку в начало цепочек INPUT, OUTPUT и FORWARD:
$IPT -I OUTPUT -j bad_packets
$IPT -I FORWARD -j bad_packets