В этот вопрос Я вижу такую строку, которая позволяет мне сказать "разрешить подключение этих 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