На вашем маршрутизаторе, если вы можете запустить iptables, по умолчанию отбросьте все входящие сообщения на внешний интерфейс, а затем добавьте исключения:
Простой пример того, что вы описываете, предполагает, что eth1 - это внешнее устройство:
iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -j DROP
iptables -I FORWARD -i eth1 -s 123.123.123.123 -j ACCEPT
iptables -I FORWARD -i eth1 -s 123.124.0.0/16 -j ACCEPT
Строки означают следующее:
- Разрешить уже подтвержденный трафик, например ответы на ваши собственные запросы
- Брось все
- Разрешить IP
123.123.123.123
- Разрешить всю подсеть
123.124.xxx.xxx
Обратите внимание на переключатель -I
вместо -A
в строках 3 и 4. Это означает, что правило должно быть помещено первым в списке, а не добавляться к нему.
Если вам нужно запустить это на самой машине с Linux, то же самое должно работать, но вам нужно заменить FORWARD
на INPUT
, и вы можете пропустить интерфейс ввода. Кроме того, вы, вероятно, захотите добавить правило ACCEPT
для 192.168.1.0/24
поскольку ваша локальная сеть, скорее всего, заслуживает доверия.
Для получения дополнительной информации см. Этот учебник или руководство