Как с помощью iptables заблокировать целые подсети, кроме их шлюзов?

В зависимости от ваших потребностей,одно простое решение может быть:

  1. Сохраните текущие переменные перед внесением изменений с помощью set > tmpили set > /tmp/current
  2. .
  3. Вы модифицируете/запускаете свое приложение
  4. Извлечь то, что было изменено с помощью diff -u <(cat tmp) <(set)или
diff -u <(cat tmp) <(set) | tail -n +3 | grep -v PIPESTATUS | grep -v "_=" | grep -E "^\+"

Где:

tail -n +3:удалить первую ненужную строку команды diff

grep -v PIPESTATUS | grep -v "_=":удалить ненужные переменные

grep -E "^\+":отображать только требуемые/необходимые изменения

Альтернатива:

diff -u <(set -o posix; set) <(bash -lc 'set -o posix; set') | grep -E "^\+"

Примечание:

В вашем скрипте обратите внимание, что execполностью замените процесс, из которого он запущен, это может помешать тому, чего вы пытаетесь достичь

1
04.07.2020, 14:08
1 ответ

Когда правила iptables проверяются, они идут в порядке ввода правил через все правила. Поэтому, на мой взгляд, вы должны сначала принять трафик из/в 10.0.0.1, а затем отклонить весь остальной трафик из подсети. Когда у вас будет трафик для 10.0.0.1, он будет принят по первому правилу, а все остальное будет отклонено по второму правилу. Так,Я бы написал что-то вроде этого:

iptables -t INPUT -s 10.0.0.1 -j ACCEPT
iptables -t INPUT -s 10.0.0.0/8 -J REJECT

iptables -t OUTPUT -d 10.0.0.1 -j ACCEPT
iptables -t OUTPUT -d 10.0.0.0/8 -J REJECT

Это всего лишь дополнение к другим правилам, которые уже должны быть в наличии. Я предполагаю, что вы используете 255.0.0.0, так как это значение по умолчанию для сетей 10.X.X.X. Если нет, используйте другую сетевую маску. Я также не уверен, достаточно ли просто указать источник (-s )и пункт назначения (-d ). Возможно нужно добавить сетевой интерфейс (-i ), протокол (-p )и т.д.

1
18.03.2021, 23:22

Теги

Похожие вопросы