Назад | Перейти на главную страницу

Linux iptables отклонен - ​​как мне снова включить его?

поэтому у меня есть клиент в моей сети, подключенный к маршрутизатору через мой компьютер с помощью arpspoof. Когда я знаю, что хочу остановить пересылку пакетов, я выполняю:

iptables -A FORWARD -j REJECT

это работает, как я ожидал. Но когда я пытаюсь сделать что-то вроде:

iptables -A FORWARD -j ACCEPT

Я не могу заставить пакеты проходить, как в начале.

Я что-то делаю не так или есть какие-то другие аргументы, отличные от "ПРИНЯТЬ"?

IPtables имеет список правил, и для каждого пакета он проверяет список правил по порядку. Как только будет найдено правило, которое соответствует пакету и задает политику (ACCEPT, REJECT, DROP), определяется судьба соответствующего пакета; правила больше не рассматриваются.

Это означает, что порядок, в котором вы запускаете команды, важен. Когда вы используете iptables -A, вы добавляете правило в конец списка правил, поэтому в итоге вы получите список правил, который выглядит следующим образом:

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
ACCEPT     all  --  anywhere             anywhere

Поскольку REJECT приходит правило перед в ACCEPT правило, оно запускается первым, и поэтому пересылка не происходит.

Поэтому вам нужно будет удалить REJECTправило вместо добавления ACCEPT правило. Чтобы удалить правило REJECT, запустите

iptables -D FORWARD -j REJECT 

Для получения дополнительной информации прочтите справочную страницу iptables.

В -A flag указывает iptables добавить правило в цепочку, что означает, что оно попадает под ваш REJECT rule, и поскольку первое правило совпадает, оно никогда не используется.

Вы перечисляете свои правила с iptables -L FORWARD и вы сами в этом убедитесь. Чтобы избавиться от добавленного правила, запустите

iptables -D FORWARD -j REJECT 

Пока таких правил в цепочке больше не будет.

Что насчет того, чтобы поставить в конце FORWARD Правило для перехода в новую цепочку, в котором будет только одно правило. Это может быть ACCEPT или REJECT. Сказать...

iptables -N accept-chain
iptables -A accept-chain -j ACCEPT
iptables -A FORWARD -j accept-chain

После этого вы можете изменить это одно правило в accept-chain что-то вроде

iptables -R accept-chain 1 -j REJECT

отключить трафик или -j ACCEPT включить.

Также что можно включить и выключить маршрутизацию

echo "0" > /proc/sys/net/ipv4/ip_forward

для отключения пересылки пакетов и "1" - для включения.

Порядок имеет значение. Это вставит ваше правило вверху вместо добавления.

iptables -I FORWARD 1 -j ACCEPT

-I должен вставить, а # 1 - это позиция