2

Я пытаюсь сбросить все входящие подключения к моему серверу, кроме определенных сетей. В то же время я хочу, чтобы все исходящие соединения от моего сервера к внешней сети (любой сети по любому протоколу) были открыты. Он работает, внеся два изменения в цепочку INPUT:

Примечание. Тестирование проводилось на 3 серверах (ВМ) с IP-адресами в сети 192.168.0.0/24 и всеми правилами, определенными на сервере 3 (IP: 192.168.0.3).

a. iptables -P INPUT DROP
b. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
[root@server3 ~]# iptables -nvL

Chain INPUT (policy DROP 124 packets, 22308 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  265 34603 ACCEPT     all  --  *      *       192.168.0.0/24       0.0.0.0/0           

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 433 packets, 34693 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Тем не менее, мой первый вопрос:

  1. Когда я определил первое правило выше (изменив политику по умолчанию для цепочки INPUT), оно также остановило все исходящие соединения (ssh, ping) с моего сервера (IP: 192.168.0.3). Почему это происходит, если моя политика цепочки OUTPUT по умолчанию все еще принимается, и у меня нет правил, определенных в цепочке OUTPUT?

Я хотел добиться того же, не меняя политику по умолчанию для цепочки INPUT, например:

c. iptables -I INPUT -j DROP
d. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

Но он все еще блокирует все входящие / исходящие соединения с / с моего сервера3. Это подводит меня ко второму вопросу:

  1. Как правила c. a. работать по-другому? Пожалуйста, помогите понять, как я новичок в брандмауэрах Linux.

1 ответ1

6

Если у вас есть политика DROP INPUT по умолчанию, даже пакеты ответа от ваших исходящих соединений будут отброшены.

Чтобы принять их, добавьте это правило ввода:

iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Что касается вашего последнего вопроса, в вашем примере c and d (предполагая, что перед этими командами есть пустые правила) вы устанавливаете первое правило drop everything и второе правило, которое будет принимать трафик из определенной сети. IPTABLES получает совпадение как можно скорее, поэтому первое правило всегда совпадает (без условий), поэтому каждое правило после этого не будет выполнено. Исключения из правила должны быть определены до правила.

В первом примере -P INPUT DROP вы устанавливаете последнее правило, которое будет отлавливать все, что не было найдено ранее, поэтому любое добавленное исключение будет выполнено до этого правила по умолчанию (-P).

-I вставляю в определенную позицию (например, в моей предыдущей команде я устанавливаю правило ESTABLISHED, RELATED, чтобы оно было первым, чтобы оно совпадало независимо от того, что вы установили после этого.

-A добавляет в список правил, так что если будет сопоставлено непосредственно перед значением по умолчанию.

Если вы хотите добиться того же, что и в первом примере, с явными правилами (такими как c and d), вам следует обмениваться этими возможностями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .