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

8

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

iptables -A FORWARD -j REJECT

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

iptables -A FORWARD -j ACCEPT

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

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

СНиПы
источник
4
Кстати, вы используете -A, может быть, вы хотите использовать -Pдля установки P olicy (действие по умолчанию, когда не применяется другое правило в цепочке). Например, iptables -P FORWARD DROP(не может быть REJECT).
JoL
Что означает «вопрос должен продемонстрировать разумные навыки управления системой»? :)
Марко

Ответы:

35

У 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.

Дженни Д
источник
18

-AФлаг говорит IPTables , чтобы добавить правило в цепочке, а это означает , что в конечном итоге под REJECTправило, и так как первое правило, он никогда не используется.

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

iptables -D FORWARD -j REJECT 

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

Петтер Н
источник
1

Что насчёт места в конце 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"- для включения.

gooamoko
источник
0

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

iptables -I FORWARD 1 -j ACCEPT

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

Чандр-OPS
источник