поэтому у меня есть клиент в моей сети, подключенный к маршрутизатору через мой компьютер с помощью 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 - это позиция