Iptables, устанавливающий несколько мультипортов в одном правиле

Многопортовое расширение имеет ограничение (15) для портов, которые могут быть указаны.

Но мне нужно указать гораздо больше номеров портов в одном правиле, поэтому я попытался использовать несколько мультипор в одном правиле, например:

iptables -A INPUT -p tcp -m multiport --destination-ports 59100 -m multiport --destination-ports 3000 -m state --state NEW -j REJECT --reject-with tcp-reset

Результат iptables -L INPUT -n равен

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 59100 multiport dports 3000 state NEW reject-with tcp-reset

Но оказывается, что оба порта не отклоняются, когда я пытаюсь подключиться к клиенту.

Версия v1.4.2-rc1.

Есть ли способ обхода или что мне делать, когда мне нужно указать более 15 портов в одном правиле.

Ответы

Ответ 1

Как обход этого ограничения, я использую два правила для покрытия всех случаев.

Например, если я хочу разрешить или запретить эти 18 портов:

465,110,995,587,143,11025,20,21,22,26,80,443,3000,10000,7080,8080,3000,5666

Я использую следующие правила:

iptables -A INPUT -p tcp -i eth0 -m multiport --dports 465,110,995,587,143,11025,20,21,22,26,80,443 -j ACCEPT

iptables -A INPUT -p tcp -i eth0 -m multiport --dports 3000,10000,7080,8080,3000,5666 -j ACCEPT

Вышеупомянутые правила должны работать и для вашего сценария. Вы можете создать другое правило, если вы нажмете ограничение на 15 портов как для первого, так и для второго правила.

Ответ 2

Вам нужно использовать несколько правил для реализации OR-подобной семантики, так как совпадения всегда AND-ed вместе внутри правила. Кроме того, вы можете выполнить сопоставление с ipsets-индексацией портов (ipset create blah bitmap:port).

Ответ 3

Насколько я знаю, запись нескольких совпадений - логическая операция И; так что ваше правило означает, что если порт назначения "59100" и "3000", то отклонить соединение с tcp- reset; Обходной путь использует параметр -mport. Посмотрите на страницу руководства.

Ответ 4

enable_boxi_poorten

}

enable_boxi_poorten() {
SRV="boxi_poorten"
boxi_ports="427 5666 6001 6002 6003 6004 6005 6400 6410 8080 9321 15191 16447 17284 17723 17736 21306 25146 26632 27657 27683 28925 41583 45637 47648 49633 52551 53166 56392 56599 56911 59115 59898 60163 63512 6352 25834"


case "$1" in
  "LOCAL")
         for port in $boxi_ports; do $IPT -A tcp_inbound -p TCP -s $LOC_SUB --dport $port -j ACCEPT -m comment --comment "boxi specifieke poorten";done
     # multiports gaat maar tot 15 maximaal :((
     # daarom maar for loop maken
     # $IPT -A tcp_inbound -p TCP -s $LOC_SUB -m state --state NEW -m multiport --dports $MULTIPORTS -j ACCEPT -m comment --comment "boxi specifieke poorten"
     echo "${GREEN}Allowing $SRV for local hosts.....${NORMAL}"
    ;;
  "WEB")
     for port in $boxi_ports; do $IPT -A tcp_inbound -p TCP -s 0/0 --dport $port -j ACCEPT -m comment --comment "boxi specifieke poorten";done
     echo "${RED}Allowing $SRV for all hosts.....${NORMAL}"
    ;;
  *)
     for port in $boxi_ports; do $IPT -A tcp_inbound -p TCP -s $LOC_SUB --dport $port -j ACCEPT -m comment --comment "boxi specifieke poorten";done
     echo "${GREEN}Allowing $SRV for local hosts.....${NORMAL}"
    ;;
 esac

}