Я хочу заблокировать доступ к порту 6379 на моем сервере, но я все еще хочу подключиться к нему внутренне. Приложение redis-server работает на этом порту, и я хочу подключиться к нему только локально (127.0.0.1). Как я могу это сделать?
Для этого вам необходимо убедиться, что ваши правила 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, вероятно, немного поможет в этом. (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
Что ж, я бы посоветовал использовать «несложный межсетевой экран» (ufw), который также рекомендуется каноническим. Чтение и запись iptables слишком сложно для случайных задач блокировки портов.
Посмотреть здесь: https://wiki.ubuntu.com/UncomplicatedFirewall
Что-то вроде
iptables -A INPUT -s 0.0.0.0 -i eth0 --protocol tcp --dport 6379 -j DROP
Должно сработать.
Для более новых версий Redis вы можете использовать bind 127.0.0.1
в redis.conf
сделать это напрямую без дополнительной настройки iptables
видеть этот статья