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


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


Источник




Ответы:


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


6
2017-09-07 19:15



Большое спасибо за подробное объяснение. Теперь важность order правил в каждой ЦЕПОЧИНЕ яснее. Еще один запрос, относящийся к rule что вы предложили. Будет ли он вести себя так же, как: iptables -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT? - dig_123
Это то же самое. State «старше», и кажется, что conntrack будет стандартом для новых ядер. Видеть serverfault.com/questions/358996/... для более подробного объяснения. - NuTTyX