Почему эти 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 постоянными.