( Признаюсь, я не понимаю всех настроек переключателей, но это не относится к вопросу.)
Ваше текущее правило в filter/INPUT запрещает пакетам от eth1.10 достигать IP-адресов, принадлежащих маршрутизатору , отличных от 192.168.10.0/28, поэтому оно действительно имеет предполагаемый эффект, заключающийся в запрете IP-адресов, исходящих от eth1..10 для доступа к 192.168.1.1.
Зачем это нужно?
Это связано с тем, что система Linux с несколькими интерфейсами будет рассматривать свои IP-адреса как пул и может использовать любой из своих IP-адресов на любом из своих интерфейсов. Здесь не используется маршрутизация (переадресация ). Единственный известный мне метод решения этой проблемы — iptables ' filter/INPUT.
Как избежать необходимости указывать IP-адреса в этом правиле, чтобы сделать его несколько общим?
Существует специальное совпадение iptables -extensions , которое может помочь, но его нужно использовать дважды в дополнительной цепочке для логического склеивания:addrtype
с его --limit-iface-in
и без него. вариант. Таким образом, вы можете заменить свое правило и иметь правило, зависящее только от имени интерфейса:
iptables -N dropotherlocalips
iptables -A dropotherlocalips -i eth1.10 -m addrtype --dst-type LOCAL --limit-iface-in -j RETURN
iptables -A dropotherlocalips -i eth1.10 -m addrtype --dst-type LOCAL -j DROP
iptables -I INPUT -j dropotherlocalips
Первое правило соответствует локальному IP-адресу только на том же интерфейсе и возвращает (, т.е. ничего не делает ). Второе правило отбрасывает все локальные IP-адреса, таким образом, в конце концов отбрасываются локальные IP-адреса, расположенные не на одном интерфейсе.
Обратите внимание: если вы хотите, чтобы это правило было более общим и работало на любой стороне, вы можете просто удалить -i eth1.10
в dropotherlocalips:
iptables -A dropotherlocalips -m addrtype --dst-type LOCAL --limit-iface-in -j RETURN
iptables -A dropotherlocalips -m addrtype --dst-type LOCAL -j DROP
это, кроме того, предотвратит эхо-запрос со стороны eth1
192.168.10.1.
I want to completely isolate the network 192.168.1.0 from 192.168.10.0...
Вы должны (но вы уже это сделали, не так ли? )также добавьте для этого правило filter/FORWARD, например:
iptables -I FORWARD -i eth1.10 -d 192.168.1.0/24 -j DROP
Я не вижу здесь, как избежать указания LAN в правиле, если только eth1.10 не запрещает любой пункт назначения, но тогда его вообще не нужно было бы маршрутизировать. Или FORWARD может иметь политику DROP и разрешать только маршрутизацию/переадресацию, явно прописанную в правилах.
С этими правилами 192.168.1.0/24 полностью недоступен на уровне IP из eth1.10, включая 192.168.1.1.
ДОПОЛНИТЕЛЬНО, для придирки:ARP все еще может сообщить о существовании 192.168.1.1 из локальной сети eth1.10.
Приведенные выше правила не помешают хосту, находящемуся за eth1.10–, узнать (, например, путем грубого -принудительного сканирования )существования 192.168.1.1 посредством ARP, который не фильтруется iptables . Это по-прежнему происходит из-за того, что Linux рассматривает все свои IP-адреса как пул даже при ответе на объяснение ARP (в настройке по умолчанию arp_filter
, но см. также нижеarp_announce
иarp_ignore
). Таким образом, используя arping из системы Linux в 192.168.10.0/28 (, поступающую на маршрутизатор eth1.10 )с интерфейсом eno1 (, измените имя):
$ ping -c2 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 10ms
$ ip neighbour
192.168.10.1 dev eno1 lladdr b6:f2:aa:82:21:d4 REACHABLE
$ arping -c2 -I eno1 192.168.1.1
ARPING 192.168.1.1 from 192.168.10.10 eno1
Unicast reply from 192.168.1.1 [B6:F2:AA:82:21:D4] 0.552ms
Unicast reply from 192.168.1.1 [B6:F2:AA:82:21:D4] 0.552ms
Sent 2 probes (1 broadcast(s))
$
Поскольку MAC-адрес тот же, это означает, что 192.168.1.1 находится на узле 192.168.10.1 :маршрутизатора.
Минимальная настройка, позволяющая избежать этого (, когда нет сложной конфигурации маршрутизации, требующей arp_filter
), будет на маршрутизаторе :
.
echo 1 > /proc/sys/net/ipv4/conf/eth1.10/arp_ignore=1
(илиsysctl -w net.ipv4.conf.eth1/10.arp_ignore=1
)
То есть изarp_ignore
:
1 - reply only if the target IP address is local address configured on the incoming interface
В качестве альтернативы вы можете использовать arp_filter=1
(, что имеет смысл только в том случае, если вы уже используете ip rule
и дополнительные таблицы, потому что вам, вероятно, придется в любом случае )или даже фильтровать запросы ARP с помощью arptables
, чтобы предотвратить это.
Ваш файл secretinfo.txt
имеет длину 81 символ. Когда вы cat
его содержимое, отображается только небольшая его часть.
Одна из причин может заключаться в том, что в нем несколько строк 4565
, и вы подставляете скрытую, а не отображаемую. Таким образом, попробуйте заменить все возможные строки, а не только первую из каждой строки:
sed -i ‘s/4565/1111/g’ /var/SensitiveData/secretinfo.txt
Другая причина может состоять в том, что между отображаемыми символами есть невидимые символы. Попробуйте команду hd
(hexdump
), чтобы выяснить точное содержимое файла secretinfo.txt
. Только тогда вы сможете создать соответствующую команду sed
.
Кстати, не делайте этого:
cat /var/SensitiveData/secretinfo.txt | sed -i ‘s/4565/1111/’ > /var/SensitiveData/secretinfo.txt
Во-первых, вы читаете файл во время его изменения (это может работать при определенных условиях, но учтите, что это не находится под вашим контролем, и избегайте этой конструкции ).
Во-вторых, опция -i
требует, чтобы в качестве аргумента был указан файл, и команда не выводит результат, поэтому ваше перенаправление просто очищает файл.