Ошибка iptables: неизвестная опция --dport

19

Команда не IPtables больше не признает один из наиболее часто используемых вариантов при определении правил: --dport.

Я получаю эту ошибку:

[root@dragonweyr /home/calyodelphi]# iptables -A INPUT --dport 7777 -j ACCEPT_TCP_UDP
iptables v1.4.7: unknown option `--dport'
Try `iptables -h' or 'iptables --help' for more information.

Приведенная выше команда add rule является лишь примером для включения соединений Terraria.

Вот то, что я сейчас имею в качестве базовой конфигурации iptables (с listiptablesпсевдонимом iptables -L -v --line-numbers), и очевидно, что --dportона работала в прошлом:

root@dragonweyr /home/calyodelphi]# listiptables 
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       39  4368 ACCEPT     all  --  lo     any     anywhere             anywhere            
2      114 10257 ACCEPT     all  --  any    any     anywhere             anywhere            state RELATED,ESTABLISHED 
3        1    64 ACCEPT     tcp  --  eth1   any     anywhere             anywhere            tcp dpt:EtherNet/IP-1 
4       72 11610 ACCEPT     all  --  eth1   any     anywhere             anywhere            

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

Chain OUTPUT (policy ACCEPT 91 packets, 10045 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain ACCEPT_TCP_UDP (0 references)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere            

Я также пытаюсь определить пользовательскую цепочку (вдохновленную этим вопросом ) для приема соединений tcp & udp, чтобы мне не нужно было определять два правила для всего, для чего я хочу включить tcp и udp (например, Minecraft или Сервер Terraria или другой сервис целиком). Но даже это не работает:

[root@dragonweyr /home/calyodelphi]# iptables -P ACCEPT_TCP_UDP DROP
iptables: Bad built-in chain name.

Это становится очень разочаровывающим, в вежливых терминах (количество ругательств, связанных с этим, заставило бы моряка сказать мне, чтобы я смотрел на меня). Мой Google-фу ужасен, так что мне еще предстоит найти работающее решение для всего этого. Я использую CentOS 6.5 на роутере. Любая помощь и указатели, которые вы, ребята, можете предложить, были бы потрясающими.

РЕДАКТИРОВАТЬ:

Бонусный вопрос: я также планирую настроить переадресацию портов. Все еще необходимо установить правила для приема входящих соединений через определенные порты?

Calyo Delphi
источник

Ответы:

27

Сначала дайте -pопцию вроде -p tcpили -p udp.

Примеры:

iptables -A INPUT -p tcp --dport 22 -m состояние --state NEW -j DROP

iptables -A INPUT -p udp --dport 53 --sport 1024: 65535 -j ПРИНЯТЬ

Вы также можете попробовать, -p allно я никогда не делал этого и не нашел слишком большой поддержки для этого в примерах.

dmourati
источник
1
Я только что попробовал это с, -p allи я получил точно такую ​​же ошибку. unknown option --dport, Это сработало, -p tcpно на самом деле это не поможет мне в этом случае, поскольку приводит к одной и той же проблеме: определению индивидуальных правил tcp / udp для всего.
Calyo Delphi 22.12.13
По моему опыту, использование allникогда не работал с указанием порта. Однако вместо нескольких правил для разных протоколов вы можете думать о правилах в другом направлении. Создайте правила на основе протокола, а затем используйте multiportsопцию, чтобы сгруппировать некоторые правила вместе.
canadmos
Итак, если я хочу включить соединения Terraria и Minecraft, я могу использовать мультипорты, чтобы открыть 7777 и 25565, и создать правило TCP и UDP для каждой пары портов?
Calyo Delphi
3
Опция -p должна быть одним протоколом с концепцией портов ( -p ICMP --dport whateverпо понятным причинам также не будет работать).
Сокол Момот
9

Протокол (-p) требуется, если вы используете --dport. Пример:

-p tcp
Диего Войтасен
источник
Кроме того, он должен указывать протокол, имеющий концепцию портов, как @FalconMomot указывал в комментарии ранее.
CVn
Вы правы, для этой детали :)
Диего Войтасен
3

@dmourati и @diegows уже ответили на ваш первый вопрос, поэтому я займусь вашим вторым вопросом. И бонусный вопрос. И я тоже добавлю бонусный совет;)

iptables -P принимает только встроенные цепи. В filterтаблице, которая была бы INPUT, OUTPUTи FORWARDцепи.

Переадресация портов не обрабатывается INPUTцепочкой, поэтому вам не нужно открывать порт в INPUTцепочке. Это действительно обрабатывается FORWARDцепочкой, хотя. Будьте осторожны с этим.

Дополнительный совет: при обучении и / или поиске и устранении неисправностей iptablesрезультат на iptables-saveголову выше, чем на выходе iptables -L -v --line-numbers. Попробуйте, вы будете приятно удивлены :)

pepoluan
источник
+1 за хороший ответ, но я немного удивлен вашим последним комментарием. Я ненавижу диагностировать iptablesпроблемы из -saveрезультатов; почему ты находишь это лучше чем iptables -L -n -v [--line-numbers]?
MadHatter поддерживает Монику
Простой пример @MadHatter: вы можете легко увидеть, что правила с --dportопциями на самом деле -p tcpвпереди. Вы также можете увидеть, как / когда обработка правил переходит со встроенной цепочки (например, INPUT) на пользовательскую цепочку (например, ACCEPT_TCP_UDP). Эти две важные данные не отображаются в выводе iptables -L -n.
pepoluan
3
Еще одно преимущество: я могу сделать iptables-save > somefile, редактировать somefileс помощью vim, а затем делать, iptables-apply -t 600 somefileчтобы проверить его. Если я случайно заблокирую себя, через 600 секунд правила отменяются.
pepoluan
Бонусный совет очень ценится и уже используется. Я использовал, iptables-saveчтобы помочь себе извлечь уроки из сырого конфигурационного дампа, прежде чем задал этот вопрос. Однако я не ожидал, что FORWARDцепь будет там, где мне нужно обратить внимание на переадресацию портов. Я должен буду прочитать об этом.
Calyo Delphi
@CalyoDelphi, если вы выполните поиск по «диаграмме потоков пакетов netfilter», вы увидите, где применяются все таблицы и цепочки ;-)
pepoluan