Iptables, устанавливающий несколько мультипортов в одном правиле - PullRequest
19 голосов
/ 17 июня 2011

У многопортового расширения есть предел (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 портов в одном правиле.

Ответы [ 4 ]

31 голосов
/ 03 июля 2012

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

Например, если я хочу разрешить или запретить эти 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 портов для первого и второго правила.

3 голосов
/ 30 марта 2012

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

0 голосов
/ 04 октября 2012
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

}
0 голосов
/ 30 марта 2012

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

...