Вопрос: Как заблокировать порт 6379 для внешнего трафика на ubuntu?


Я хочу заблокировать доступ к порту 6379 на моем сервере, но я все же хочу подключиться к нему внутренне. Приложение redis-server запускается на этом порту, и я хочу подключиться к нему только локально (127.0.0.1). Как я могу это сделать?


6
2018-04-21 15:42


Источник




Ответы:


Для этого вам необходимо убедиться, что правила IPTables правильно настроены. Ubuntu обычно оставляет свои серверы широко открытыми по умолчанию, поэтому я по-прежнему не рекомендую их использовать в качестве серверов, если вы не совсем хорошо знаете, как это сделать должным образом.

Я полагаю, что ваш iptables -L -nv выглядит что-то вроде этого, да?

# iptables -L -nv
Chain INPUT (policy ACCEPT 4M packets, 9M bytes)
 pkts bytes target     prot opt in     out     source               destination

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

Chain OUTPUT (policy ACCEPT 8M packets, 4M bytes)
 pkts bytes target     prot opt in     out     source               destination

Он пуст и широко раскрыт. Ubuntu IPTables HowTo, вероятно, поможет в этом немного. (https://help.ubuntu.com/community/IptablesHowTo)

Я рекомендую что-то вроде этого, которые позволяют SSH на любом интерфейсе и tcp 6379 любой интерфейс, но тот, который вы не хотите:

*filter
:INPUT DROP [92:16679]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [203:36556]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -p tcp -m tcp --dport 6379 -j ACCEPT
-A INPUT -i lo -p udp -m udp --dport 6379 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT

Затем вы сохраните этот файл в файле /etc/iptables.rules.

Очевидно, что любые другие порты, которые вы специально хотите открыть, должны быть добавлены.

Примечание. Я добавил конкретные строки 6379 для ясности. Дно ACCEPT прямо перед COMMIT фактически разрешило бы это, потому что все петлевые соединения должны быть разрешены в системе Linux для правильной работы.

Вы также захотите поместить правила в свой файл / etc / network / interfaces, чтобы убедиться, что они добавлены при появлении интерфейса, а не позже в процессе загрузки. Рекомендуется добавить что-то вроде этого:

auto eth0
iface eth0 inet dhcp
  pre-up iptables-restore < /etc/iptables.rules

Изменить: для первоначальной загрузки этой конфигурации вам необходимо запустить команду iptables-restore, указанную выше:

iptables-restore < /etc/iptables.rules

9
2018-04-21 16:05



Я предполагаю, что это откроет порт 6379 для всей сети? Что делать, чтобы сделать это открытым только для 127.0.0.1? - Steve Rodrigue
Нет, потому что правило по умолчанию - DROP. Если у него нет явного правила ACCEPT, он блокируется DROP по умолчанию рядом с: INPUT вверху. - Magellan
Лично я считаю, что правило ACCEPT по умолчанию является просто преступным в «серверном» развертывании. Но неудивительно, что Ubuntu - это, прежде всего, настольный дистрибутив. - Magellan
Хорошо, я просто сделал именно то, что вы просили, но похоже, что я все еще могу подключиться к порту 6379 снаружи. Должен ли я перезагружать сервер или что-то еще? - Steve Rodrigue
Да, но мне все равно, что касается счетчиков, и это работает для меня. Не стесняйтесь редактировать ответ, чтобы он соответствовал более строгим процедурам. - Magellan


Ну, я бы предложил использовать «несложный брандмауэр» (ufw), который также рекомендуется каноническим. Чтение и запись iptables слишком сложна для случайных задач блокировки портов.

Глянь сюда: https://wiki.ubuntu.com/UncomplicatedFirewall


3
2017-10-16 04:39



В старых версиях UFW не было возможности применять правила к выбранным портам, это было все или ничего. И профессиональные системные администраторы должны привыкнуть понимать, что делают их настройки iptables и как работают цепочки. - Magellan


Что-то вроде

iptables -A INPUT -s 0.0.0.0  -i eth0 --protocol tcp --dport 6379 -j DROP

Должно сработать.


2
2018-04-21 15:56



Это дает мне эту ошибку: iptables v1.4.4: неизвестный параметр `--dport ' - Steve Rodrigue
Можете ли вы повторить попытку с новой командой? Я добавил часть --protocol и -i (адаптируется к вашему интерфейсу), теперь он должен работать. - Kedare
Проблема с этим предложением заключается в том, что он не сохраняется при перезагрузках, если не выполняются другие требуемые команды, и предполагается, что существует только один интерфейс без обратной петли. - Magellan
Я бы рекомендовал использовать оператор отрицания: -i! вот - Magellan
Адриан: вы имеете в виду, что если я перезагружу сервер, эта модификация больше не будет активной? - Steve Rodrigue