Логика построения защиты
Данная статья иллюстрирует процесс настройки ipchains в Linux.
Правда, на сегодняшний день актуальным является использование iptables; но - синтаксис изменился несильно, и логика та же.
Прежде всего -
1. Необходимо удалить существующие правила фильтрации.
ipchains -F
2. Ну что ж, поехали. Начнем с того, что запретим все:
ipchains -P input DENY
ipchains -P output REJECT
ipchains -P forward REJECT
В скобках; обратите внимание на первое правило. Для входящего трафика не разрешено уведомление о недоставке пакета (в противном случае имели бы брешь для атаки).
3. И для начала разрешим loopback.
ipchains - A input -i $LOOPBACK_INTERFACE -j ACCEPT
ipchains - A output -i $LOOPBACK_INTERFACE -j ACCEPT
Опции:
A - правило помещается в конец цепочки
i - определяет сетевой интерфейс,
j - действие.
4. Теперь - запрещаем прохождение пакетов с фальсифицированными адресами.
Т.е. -
пакеты, якобы отправленные с внешнего интерфейса нашего шлюза.
пакеты, содержащие в качестве исходящего адреса - loopback.
пакеты, содержащие в качестве исходящего адреса - адреса, входящие в диапазоны, выделенные для использования во внутренних сетях (A, B и С).
пакеты, содержащие в качестве адреса назначения - адреса из A, B и С.
пакеты, содержащие недопустимые широковещательные адреса.
(0.0.0.0 и 255.255.255.255).
пакеты, содержащие адреса группового вещания, применимы лишь в качестве адреса назначения:
ipchaines -A input -i $EXTERNAL_INTERFACE -s $CLASS_D_MULTICAST -j DENY -1
ipchaines -A output -i $EXTERNAL_INTERFACE -s $CLASS_D_MULTICAST -j REJECT -1
Опция 1 определяет логгирование исполнения правила.
5. Теперь - фильтрация ICMP сообщений - Echo Replay, Destination Ureachable и т.д. Необходимо решить, что именно - оставить, а что - запретить.
6. Далее - разрешаем протоколы высших уровней. FTP, HTTP, почтовые протоколы, DNS и др.
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $IPADDR $UNPRIVPORTS -d $NAMESERVER 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -s $IPADDR $UNPRIVPORTS -d $NAMESERVER 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -s $IPADDR $UNPRIVPORTS -d $NAMESERVER 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -s $IPADDR $UNPRIVPORTS -d $NAMESERVER 53 -j ACCEPT
Разрешим сервера имен (53 порт, входящие и исходящие, tcp и udp).
IPADDR - адрес компа
UNPRIVPORTS - непривилегированные порты.
И, наконец - маршрутизация (в случае, когда необходимо соединить несколько подсетей) и masquerade.
ipchains -A forward -I $EXTERNAL_INTERFACE -s LAN-1 -j MASQ