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

правила iptables для блокировки удаленных перенаправленных портов ssh

Я пытаюсь настроить правило iptables, которое будет блокировать доступ к удаленным перенаправленным соединениям ssh через локальные удаленные перенаправленные соединения ssh. Итак, IOW:

Client A connects to server:
ssh -R 10000:localhost:23 someserver

Client B connects to server:
ssh -L 23:localhost:10000 someserver

Я не могу заставить iptables заблокировать это. Мне нужна пересылка в некоторых случаях, которые не могут быть покрыты настройками sshd_config (у меня будет программа, специально выделяющая порт, который клиент может пересылать, и, надеюсь, программа затем добавит правило iptables, чтобы разрешить это).

Я пробовал:

iptables --flush

iptables -A INPUT -i lo -p tcp --dport 0:1024 -j ACCEPT
iptables -A OUTPUT -o lo -p tcp --dport 0:1024 -j ACCEPT
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT

Но он по-прежнему позволяет локальным перенаправленным соединениям ssh получать доступ к удаленному перенаправленному порту. Любые идеи о том, как заставить iptables справиться с этим?


РЕДАКТИРОВАТЬ: Пытался перейти на:

 
iptables --flush
iptables --policy INPUT DROP 
iptables --policy OUTPUT DROP 

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT 
iptables -A OUTPUT -o eth1 -p tcp --sport 22 -j ACCEPT 
iptables -A INPUT -j REJECT 

Тем не менее я могу устанавливать перенаправленные соединения. Очевидно, это было не совсем так. Спасибо за ответ. У вас есть еще какие-нибудь идеи для меня?

Не было бы проще отключить перенаправление ssh на ssh-сервере? Просто измени AllowTcpForwarding от да до нет в вашем / etc / ssh / sshd_config. Если это не подходит, вы можете попробовать что-нибудь вроде

iptables -A OUTPUT -o eth1 -p tcp --cmd-owner "sshd" -j DROP

Догадаться. Мой исходный набор правил отлично все блокировал. Проблема заключалась в том, что на этом сервере localhost сначала разрешает (через / etc / hosts) в :: 1 (петля IPv6). Из-за этого эти правила не работали. После того, как я удалил эту запись из моего файла / etc / hosts, я смог заставить все работать нормально. Мой тестовый сценарий выглядит так:

#!/bin/bash
iptables --flush

iptables -A INPUT -i lo -p tcp --dport 0:1024 -j ACCEPT
iptables -A OUTPUT -o lo -p tcp --dport 0:1024 -j ACCEPT
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j REJECT

#iptables -I INPUT 1 -i lo -p tcp --dport 10001 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -I OUTPUT 1 -o lo -p tcp --dport 10001 -m state --state NEW,ESTABLISHED -j ACCEPT

Включив последние две строки, я могу открыть локальное перенаправленное соединение ssh на порт 10001. Если они отключены, я не могу. Отлично!

Перенаправленные соединения будут исходить из локальной системы. Вам нужно будет удалить приведенное ниже правило, разрешающее исходящие подключения, а затем, при необходимости, заменить его несколькими правилами, разрешающими только исходящие подключения, которые вы явно разрешаете.

iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Учтите, что вместо localhost можно использовать:

  • любой адрес обратной связи 127.x.x.x
  • адрес любого сетевого интерфейса на сервере

а также вы ничего не писали о попытке клиента B подключиться напрямую к clientA:

ssh -L 23: clientA: 80 someserver (Я выбрал порт 80 b / c, возможно, ваш брандмауэр разрешает исходящий трафик)

Мне очень жаль, но при наличии всех этих (и других) опций, а также ваших базовых знаний об iptables очень вероятно, что вы оставите зияющие дыры в своей настройке. Если на кону есть что-то действительно ценное, я бы посоветовал попросить кого-нибудь, кто лучше знает, сделать все это.