Назад | Перейти на главную страницу

Разрешить iptables разрешать диапазон IP только для определенного порта

В этот вопрос Я вижу такую ​​строку, которая позволяет мне сказать "разрешить подключение этих IP-адресов"

iptables -A INPUT -m iprange --src-range 10.50.10.20-80 -j ACCEPT

Теперь я хочу еще больше обезопасить это, чтобы это правило применялось только к определенным портам. Я использовал такую ​​команду для своих обычных портов:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Могу ли я объединить эти два, чтобы сделать определенный порт разрешенным только для диапазона, например

iptables -A INPUT -m iprange --src-range 10.50.10.20-80 --dport 12345 -j ACCEPT

Очевидно, я не решаюсь просто делать вызовы iptables волей-неволей. :) Спасибо!

Последняя строка, которая у вас там, должна работать, вам просто нужно убедиться, что у вас есть протокол -p, поскольку --dport не работает как опция сам по себе.

iptables -A INPUT -m iprange --src-range 10.50.10.20-80 -p tcp --dport 12345 -j ACCEPT

В качестве альтернативы установите ipset и вы сможете изменить список IP-адресов, не беспокоя iptables правила:

ipset -N AllowedSources ipmap --network 10.50.10.0/24
for i in $LIST_OF_ALLOWED_SOURCES; do ipset -A AllowedSources $i; done
iptables -A INPUT -m set --match-set AllowedSources src -p tcp --dport 12345 -j ACCEPT

Теперь, если вам нужно добавить еще один разрешенный источник:

ipset -A AllowedSources a.b.c.d

Или вам нужно "отбросить" хост из разрешенных источников:

ipset -D AllowedSources e.f.g.h

Вы можете сохранить свои наборы:

ipset --save > /etc/ipset.conf

Что вы можете восстановить во время загрузки, перед вы реализуете свой iptables (иначе iptables будет жаловаться!):

ipset --restore < /etc/ipset.conf

Вы даже можете создать набор IP, который будет соответствовать исходному IP. и порт назначения, например:

ipset -N AllowedAccess ipporthash --network 10.50.0.0/16
# These hosts may access port 12345
for i in $LIST_OF_ALLOWED_TO_12345; do ipset -A AllowedAccess $i,12345; done
# These hosts may access port 23456
for i in $LIST_OF_ALLOWED_TO_23456; do ipset -A AllowedAccess $i,23456; done
# These hosts may access port 34567
for i in $LIST_OF_ALLOWED_TO_34567; do ipset -A AllowedAccess $i,34567; done
# Now that the IP set has been created, we can use it in iptables
iptables -A INPUT -m set --match-set AllowedAccess src,dst -j ACCEPT
# Note that we use "src,dst", meaning that we want to match source IP, but
# destination port
# Also note, if you need to match against a single port, the ipmap method
# will be slightly faster.

Еще ipset: http://ipset.netfilter.org/

Если вы используете Ubuntu, вы не можете установить ipset пакет из своего репо. Воспользуйтесь моим советом: http://pepoluan.posterous.com/powertip-howto-install-ipset-on-ubuntu

Вы правильно поняли основную идею, вы жестяная банка вот так объедините их в одно правило.

Однако, несмотря на то, что говорят некоторые ответы, вы не должен используйте диапазон вроде 10.50.10.20-80 (он расширится до 10.50.10.20-80.0.0.0 - для проверки используйте команду iptables). Вам необходимо использовать полный IP-адрес из диапазона, например 10.50.10.20-10.50.10.80.

Кроме того, если вы укажете номер порта, вам необходимо указать протокол, который поддерживает порты, поэтому пересмотренное правило будет следующим:

iptables -A INPUT -p tcp -m iprange --src-range 10.50.10.20-10.50.10.80 --dport 12345 -j ACCEPT

Документация на iprange: https://www.frozentux.net/iptables-tutorial/chunkyhtml/x2702.html#TABLE.IPRANGEMATCH