SSH yerel bağlantı noktası yönlendirmeyi nasıl devre dışı bırakabilirim?


20

Ubuntu ve OpenSSH arka plan programı çalıştıran bir sunucum var. Buna S1 diyelim.

Bu sunucuyu, uzak bağlantı noktası yönlendirme kullanarak bir SSH ters tünel yapmak için istemci makinelerden (bunlardan birini C1 diyelim) kullanıyorum, örneğin:

ssh -R 1234:localhost:23 login@S1

S1'de varsayılan sshd_config dosyasını kullanıyorum. Gördüğüm kadarıyla, S1 üzerinde doğru kimlik bilgilerine sahip {login, pwd} olan herkes S1'e giriş yapabilir ve ya uzaktan port yönlendirme ve yerel port yönlendirme yapabilir. Bu tür kimlik bilgileri gelecekte bir sertifika olabilir, bu yüzden sertifikayı alan herkes S1'e başka bir yerden (mutlaka C1 değil) giriş yapabilir ve böylece yerel bağlantı noktası yönlendirmeleri oluşturabilir.

Bana göre, yerel port yönlendirmesine izin vermek çok tehlikeli çünkü bir tür kamu vekili oluşturmaya izin veriyor. Sadece -L iletilerini devre dışı bırakmanın bir yolunu arıyorum.

Aşağıdakileri denedim, ancak bu hem yerel hem de uzaktan yönlendirmeyi devre dışı bırakır:

AllowTcpForwarding No

Ben de aşağıdakileri denedim, bu sadece -L SX izin verir: 1. Hiçbir şeyden daha iyi, ama yine de ihtiyacım olan şey değil, bu bir "hiçbiri" seçeneği.

PermitOpen SX:1

Bu yüzden bir yol olup olmadığını merak ediyorum, böylece tüm yerel liman ileriye gibi bir şey yazmak için yasaklayabilir:

PermitOpen none:none

Aşağıdakiler güzel bir fikir mi?

PermitOpen localhost:1

yani, her zaman olduğu gibi, bunun kökenine bakalım: gerçek probleminiz nedir, neden mobil / gömülü cihazlar için böyle bir şey kurmak istiyorsunuz, neyi çözmek istiyorsunuz?
akira

Burada çözülmesi gereken sorun, aygıtın NAT olabileceğini veya güvenlik duvarının erişebileceğini dikkate alarak, İnternet'ten herhangi bir yerde, İnternet'e bağlı bir mobil / gömülü cihaza bir Telnet oturumu açabilmektir. internetten.
SCO

telnet .. ne için? güvenlik duvarı içine delik delme için 'stun' için google
akira

Yanıtlar:


16

giriş kimlik bilgilerine sahip herkes rastgele bir bağlantı noktasında çalışarak kendi sshd örneklerini getirebilir ve -L yerel iletimler de dahil olmak üzere istediklerine izin verebilir:

% /usr/sbin/sshd -d -f mysshd.config -p 12345

Kullanıcıların makinenizle ilgili bir şey yapmalarına güvenmiyorsanız, ilk etapta giriş yapmalarına izin vermemelisiniz.

(btw, -D bayrağı bir çeşit "proxy-problemli" dir)


Sanırım bu amaç için çok kısıtlayıcı bir hesap kurabilirim (örneğin, kullanıcıyı evine yapıştırabilir, liste yok, dosya sistemine göz atamaz), böylece başlayamaz ve sshd (veya bir sshd ikili dosyası yükleyip başlatamaz). Mesele şu ki, istemciler gömülü aygıtlar olmalıdır. Ancak, muhtemelen sertifikaları gömecekleri ve flash bellekleri dökülebileceği için, sertifikalar sızabilir ve böylece herkesin S1'e giriş yapmasına izin verilir.
SCO

Bu kullanıcı için ChrootDirectory kullanmak hile yapacak, bunu deneyecek!
SCO

1
Yetkili_anahtarlarda ayarlayın command="/sbin/nologin". Bu, sunucuda komut çalıştırmalarını engellemelidir.
justis

"Giriş kimlik bilgilerine sahip olan herkes kendi <whatever> 'i getirebilir" ifadesi yanlıştır. sshbuna izin vermeyen giriş kabuklarını ciddi şekilde kısıtlanmış hesaplara bağlanmak için kullanılabilir. Liman yönlendirme bu tür kısıtlı mermilerdeki bir güvenlik deliğidir. Kullanıcı, izin verilen bir komutu çalıştırmanın yanı sıra tüneller de oluşturabilir.
Kaz

3
sshd_configMan sayfasından alıntı : Kullanıcılara da kabuk erişimi reddedilmedikçe TCP yönlendirmeyi devre dışı bırakmanın güvenliği artırmayacağını unutmayın her zaman kendi ileticilerini yükleyebildikleri için, . (Vurgu madeni).
Kaz

17

Başka bir çözüm, yalnızca belirli kullanıcılara bağlantı noktası yönlendirmeye izin vermek olacaktır:

SSH'den: Kesin rehber

Port yönlendirme, sshd'de global olarak etkinleştirilebilir veya devre dışı bırakılabilir. Bu, / etc / sshd_config içindeki sunucu geneli AllowTcpForwarding yapılandırma anahtar sözcüğü ile yapılır. Anahtar kelime evet (varsayılan, yönlendirmeyi etkinleştirme) veya hayır (yönlendirmeyi devre dışı bırakma) değerine sahip olabilir:

# SSH1, SSH2, OpenSSH
AllowTcpForwarding no

Ek olarak, SSH2 aşağıdaki seçeneklere sahiptir:

# SSH2 only
AllowTcpForwardingForUsers
AllowTcpForwardingForGroups

Bunların sözdizimi AllowUsers ve AllowGroups seçenekleriyle aynıdır. [Bölüm 5.5.2.1, "Hesap erişim kontrolü"] Bağlantı noktası yönlendirme kullanmasına izin verilen kullanıcı veya grupların bir listesini belirtirler; sunucu, başkası için bağlantı noktası yönlendirme isteklerini yerine getirmeyi reddeder. Bunların, istemci kullanıcı adını değil (çoğunlukla bilinmeyen) SSH oturumunun hedef hesabına atıfta bulunduğunu unutmayın.

...

Etkileşimli girişleri de devre dışı bırakma ve uzak tarafta hangi programların çalıştırılabileceğini kısıtlamadığınız sürece, bu bölümdeki yönergelerin bağlantı noktası yönlendirmeyi gerçekten engellemediğini anlamak önemlidir. Aksi takdirde, bilgili kullanıcılar SSH oturumu üzerinden kendi port yönlendirme uygulamalarını çalıştırabilir. Bu ayarlar tek başına teknik olmayan bir toplulukta yeterli bir caydırıcı olabilir, ancak ne yaptığını bilen birini durdurmazlar.


1
Temelde S1'de yalnızca bir kullanıcı yetkilendirilmiş olacak. Bu özel durumda AFAIU, AllowTcpForwardingForUsers / AllowTcpForwardingForGroups kullanmak hile yapmayacaktır, değil mi? Etkileşimli oturum açmayı yasaklamak iyi bir fikirdir, çünkü kullanıcılar ikili dosyaları başlatamaz. Ancak, herhangi bir istemcinin hala -L sözdizimi kullanarak izin vermesi doğru mu? Şimdilik, en iyi seçenekler şöyle olurdu: 1 / Etkileşimli girişi devre dışı bırak, 2 / PermitOpen ile sahte bir ana bilgisayar adı: bağlantı noktası. Bir şey mi kaçırdım ?
SCO

Bunu doğrulamanın en iyi yolu, kurulumu denemek olacaktır.
Christian

Bu seçenekleri ücretsiz OpenSSH yazılımında göremiyorum. A google AllowTcpForwardingForUsersbir yapılandırılan ortaya koymaktadır sshd2_configbazı ticari programlarında kullanılan,. Cevaplardan birine bakın: superuser.com/questions/384643/…
Kaz

^ OpenSSH'nin Matchyapılandırmasında bloklar var. Şunları yapabilirsiniz MatchKullanıcılar ve gruplar üzerinde ve içine AllowTcpForwardingdahilinde.
Kaz

2

Artık yalnızca yerel / uzaktan yönlendirmeye izin verme seçeneği var.

AllowTcpForwarding TCP yönlendirmeye izin verilip verilmediğini belirtir. Kullanılabilir seçenekler, TCP yönlendirmeye izin vermek için "evet" veya "tümü", tüm TCP iletmeyi önlemek için "hayır", yalnızca yerel (ssh (1) perspektifinden) yönlendirmeye izin vermek için "yerel" veya uzaktan kumandaya izin vermek için "uzaktan" yalnızca yönlendirme . Varsayılan "evet" tir. TCP iletmeyi devre dışı bırakmanın, kullanıcıların her zaman kendi ileticilerini yükleyebildikleri için kabuk erişimi reddedilmedikçe güvenliği artırmayacağını unutmayın.

Yani, daha önce de belirtildiği gibi, kabuğu da nologin'e ayarlamalısınız.


0

Bu soruna benim çözüm eklemek oldu: PermitOpen fo.local: 80 sshd_config ana bölümünde .

Bu sadece fo.local: 80 dışında herhangi bir yerel yönlendirme talebini reddeder.


0

Sadece -L iletilerini devre dışı bırakmanın bir yolunu arıyorum

Sizi doğru anlarsam, kullanıcılarınızın tam kabuk erişimi vardır, ancak ağın geri kalanına doğru bağlantı açmasını istemezsiniz.

SSH'nin izin verdiği "yerel bağlantı noktası yönlendirme", bunu yapmanın olası yollarından sadece biridir. Diğerleri bir örneğini başlatılması içerir socat, netcatveya araçlarından başka bir numara.

Linux'ta giden ve gelen bağlantıları kontrol etmenin en iyi yolu Netfilter, IPTables'dır.

ipt_ownerYerel olarak oluşturulan paketler için paket oluşturucunun çeşitli özelliklerini eşleştirmenizi sağlayan owner ( ) adında özel bir modüle sahiptir . OUTPUTVe POSTROUTINGzincirlerinde geçerlidir .

Belirli kullanıcı grupları tarafından oluşturulan giden paketleri reddetmek için kullanabilirsiniz, böylece yalnızca -LSSH seçeneği değil, her türlü bağlantı noktası yönlendirmesine izin verilmez .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.