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