Почему эти 3 правила вызывают проблемы для меня в iptables? (Ошибка строки COMMIT)

Я пытаюсь экспортировать свои правила с одного сервера на другой, но по какой-то причине они не работают на одном. Один сервер - это Xen, а другой - OpenVZ (именно этот вызывает проблемы). Оба работают под управлением Ubuntu (хотя разные версии, 8.04 и 10.10 соответственно), а также разные версии iptables (1.3.8 и 1.4.4 соответственно).

Я нормально экспортировал свои правила, но когда я их запускаю, я получаю сообщение об ошибке в строке COMMIT. Поэтому я прокомментировал каждую строку в моих правилах одну за другой и обнаружил, что эти три строки являются виновниками:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 23 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

Что не так с этими строками? Они выглядят хорошо для меня, и они отлично работают на моем сервере Xen...

Это содержимое исходного файла правил:

*filter


#  Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT


#  Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#  Allows all outbound traffic
#  You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT


# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT


# Allows Tomcat, sms, and newrelic
-A INPUT -p tcp --dport 8080 -j ACCEPT
#-A INPUT -p tcp --dport 8009 -j ACCEPT


#  Allows SSH connections
#
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
#
-A INPUT -p tcp -m state --state NEW --dport 23 -j ACCEPT


# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT


# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7


# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

ОБНОВИТЬ:

Итак, похоже, что единственной общей чертой между всеми этими тремя является опция "-m", ни одно из правил, которые работают, не имеет этой опции... что дает?

2 ответа

Решение

Ошибки, вероятно, связаны с тем, что вам нужно загрузить соответствующие модули ядра, прежде чем можно будет выполнить некоторые параметры. В зависимости от дистрибутива некоторые из них загружаются по умолчанию, а другие могут загружаться автоматически, если используются определенные параметры. Казалось бы, в вашем случае вам может понадобиться загрузить некоторые вручную, используя modprobe.

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Чтобы использовать условие состояния, вам необходимо загрузить модуль ip_conntrack.

-A INPUT -p tcp -m state --state NEW --dport 23 -j ACCEPT

Та же проблема здесь

-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

Не уверен, почему этот вызывает проблемы.

Я бы рекомендовал внимательно прочитать справочные страницы для iptables в этом конкретном дистрибутиве, а затем проверить, какие модули ядра загружены, и, возможно, добавить несколько строк вверху командного файла для загрузки необходимых модулей ядра.

Вот соответствующий вывод от одного из наших общедоступных шлюзов, который использует аналогичные правила iptables.

#> lsmod | grep ip
iptable_mangle         11392  0 
ipt_recent             16672  2 
ipt_LOG                13828  4 
iptable_nat            13840  0 
nf_nat                 25496  2 nf_nat_ftp,iptable_nat
ipv6                  287784  65 sit
dm_multipath           23704  0 

Копировать / Вставить не подходит

Вы должны использовать

iptables-save > somefilename.rules

экспортировать правила в формате, совместимом с тем, что ожидает iptables-restore

а потом

iptables-restore

продолжить восстановление

Смотрите также довольно хороший урок о том, как сделать правила iptables постоянными.

Другие вопросы по тегам