Разница между политикой по умолчанию iptables для DROP и вставкой отдельной политики в цепочку ввода для DROP всех соединений

9366
dig_123

Я пытаюсь сбросить все входящие подключения к моему серверу, кроме определенных сетей. В то же время я хочу, чтобы все исходящие соединения от моего сервера к внешней сети (любой сети по любому протоколу) были открыты. Он работает, внеся два изменения в цепочку 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.
2

1 ответ на вопрос

6
NuTTyX

Если у вас есть политика 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), вам следует обмениваться этими возможностями.

Большое спасибо за подробное объяснение. Теперь важность «порядка» правил в каждой ЦЕПИ более ясна. Еще один запрос, касающийся предложенного вами правила. Будет ли он вести себя так же, как: `iptables -I INPUT 1 -m состояние - состояние УСТАНОВЛЕНО, СВЯЗАНО -j ПРИНЯТЬ`? dig_123 10 лет назад 0
Это то же самое. `State`" старше ", и кажется, что` conntrack` будет стандартом для новых ядер. См. Http://serverfault.com/questions/358996/iptables-whats-the-difference-between-m-state-and-m-conntrack для более подробного объяснения. NuTTyX 10 лет назад 1