Как разрешить только туннельные подключения к порту? - PullRequest
5 голосов
/ 12 июня 2011

Я бы хотел, чтобы git-демон прошел через постоянный ssh-туннель. Я выполнил эту задачу. Как заблокировать любое удаленное ненумерованное соединение с портом GIT_DAEMON (в моем случае 9418)?

Я уже пробовал простые правила в iptables (блокируйте все, кроме localhost):

$ iptables -A INPUT -p tcp -d ! localhost --destination-port 9418 -j DROP

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

Туннель создается одним из двух способов:

Для Windows:

plink.exe -N -i <key> -L 127.0.0.1:9418:192.168.1.69:9418 tunnel@192.168.1.69

Для Linux:

ssh -N -i <key> -L 127.0.0.1:9418:192.168.1.69:9418 tunnel@192.168.1.69

Ответы [ 2 ]

7 голосов
/ 12 июня 2011

На самом деле вы можете достичь этого, вообще не используя iptables, просто сделав git-daemon привязку к интерфейсу обратной связи, например.

git daemon --listen=127.0.0.1

Это сделает его доступным только для локального хоста и не требует прав root для установки.

3 голосов
/ 12 июня 2011

Вы можете попробовать это ( не проверено ):

# accept localhost
iptables -A INPUT -p tcp -d localhost --destination-port 9418 -j ACCEPT

# send everyone else packing
iptables -A INPUT -p tcp --destination-port 9418 -j DROP

Использование этого iptables -L говорит:

ACCEPT     tcp  --  anywhere             localhost.localdomain tcp dpt:git
DROP       tcp  --  anywhere             anywhere            tcp dpt:git

EDIT

Это (вероятно), как ваш туннель должен быть настроен:

ssh -N -i <key> -L 127.0.0.1:9418:127.0.0.1:9418 tunnel@192.168.1.69

Важно, чтобы вторая половина была 127.0.0.1, а НЕ нормальным IP

...