Bir OpenVPN istemcisinin SSH ile diğerine havuzu açmadan erişmesine izin verin
client-to-client kapalı kalsın, çekirdek tek bir akışı iletsin ve havuzun geri kalanı kapalı kalsın. Sunucuda iki kural, hedefte bir kural.
Bir istemcinin başka bir istemcinin SSH hizmetine ulaşması gerekiyor ve havuzun geri kalanı bugünkü kadar yalıtılmış kalmalı. Cazip anahtar client-to-client; eşler arası erişimi herkes için birden açar ve kararı çekirdek yerine OpenVPN'a bırakır. Daha dar bir yanıt bu anahtarı kapalı tutar ve sunucunun kendi yönlendirmesi ile güvenlik duvarının tam olarak tek bir akışı taşımasına izin verir.
Mekanizma kural metninden daha önemlidir, çünkü iki yaklaşım paketi farklı yerlere koyar. Hangisini seçtiğinizi bilmek, hem hiçbir şey yapmıyormuş gibi görünen kuralı hem de onsuz bağlanan eşi açıklar.
client-to-client paketi nereye taşır
client-to-client açıkken sunucu, eş paketini tünel aygıtından yeniden dışarı göndermek yerine dahili olarak iletir; böylece paket çekirdeğin iletim yoluna hiç ulaşmaz. Bu kullanışlıdır ve aynı zamanda güvenlik duvarınızın denetlemesi gereken akışı hiç görmediği anlamına gelir. Seçeneği kapalı bırakın; sunucu paketi aynı arayüzden yeniden dışarı yönlendirir ve bu da onu netfilter'ın önüne koyar. Aynı arayüzden girer, aynı arayüzden çıkar ve FORWARD zinciri söz sahibi olur.
Takas açıktır: bir politika noktası kazanırsınız ve kısayolun sizin için yaptığı yönlendirme ile iletim işini üstlenirsiniz. Bu iş tek bir akış için küçüktür ve eklediğiniz her istisnayla büyür. İstisnaları şimdi sayın, çünkü eşler arası politika gerçekte kural kümesinde yaşar.
Eş paketinin gerçekte izlediği yol
Bir Linux Community OpenVPN 2.6 hizmeti, DCO yerine kullanıcı alanında TUN işleme, alt ağ topolojisi, tun0 ve istemci A'nın 10.44.0.21, istemci B'nin 10.44.0.37 adresinde olduğu 10.44.0.0/24 havuzu varsayın. Alt ağ topolojisinde A'nın aldığı adres ve ağ maskesi havuzu zaten kapsar, bu yüzden A paketi ek bir itilen yola ihtiyaç duymadan tünel aygıtına gönderir. A üzerindeki etkin yolu varsaymak yerine denetleyin.
Sunucuda paket B'ye adreslenmiş olarak gelir; B yerel bir adres olmadığı için paket iletilir. Bunun olabilmesi için IPv4 iletimi açık olmalıdır ve yol araması paketi tun0 üzerinden yeniden dışarı göndermelidir. Bu nedenle güvenlik duvarı, her iki tarafta aynı arayüze sahip iletilen bir akış görür ve çoğu kural kümesinin kaçırdığı ayrıntı budur. Burada kaynak çevirisi gerekmez ve A'nın adresini bozulmadan tutmak, B'nin kendi kaynak tabanlı kuralını uygulamasını sağlayan şeydir.
Sunucuda iki kural, bu sırayla
Üç kural tüm izni taşır: iletim, çift istisnası ve tünel çifti için varsayılan düşürme. Kabul kuralı çifti ve hizmeti adlandırır, böylece izin büyüyen bir havuzda da geçerli kalır. Onu tünelden tünele trafiğe yönelik her türlü toptan reddin önüne koyun, çünkü ilk eşleşme kazanır:
sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROPBu komutlar örnektir ve ana makinenizin kuralları kalıcı kılmak için kullandığı mekanizmaya aittir; çalışma zamanında yapılan ekleme bir sonraki açılışta kaybolur. B'nin yanıtlarının ve TCP el sıkışmasının ikinci, aynalı bir kabul olmadan geri dönmesini sağlayan şey durum bilgili kuraldır.
Kural listesi yerine sayaçları sonradan denetleyin, çünkü hiç eşleşmeyen bir kural çalışanla tamamen aynı görünür. Sayaçlar sıfırda kalıyorsa paket sandığınız yolu izlemiyordur.
B'nin hâlâ izin vermesi gerekenler
SSH hizmetini B çalıştırır, dolayısıyla tünel adresinde bir şeyin dinleyip dinlemediğine ve kendi ana makine güvenlik duvarının kaynağı kabul edip etmediğine B karar verir. Sunucudaki bir ağ izni, B'deki herhangi bir hesap için izin değildir ve ana makine anahtarı doğrulaması ile kullanıcı kimlik doğrulaması her yerden olduğu gibi geçerli olmaya devam eder.
Önce olumlu durumu test edin: A'dan B'nin tünel adresine yeni bir SSH bağlantısı, beklenen ana makine anahtarıyla kabul edilmeli. Ardından başka bir eş veya başka bir bağlantı noktası deneyin ve reddedildiğini doğrulayın, çünkü sessizce her şeye izin veren bir izin, önemli hâle gelene kadar çalışandan ayırt edilemez. Bu testin iki yarısı da gereklidir ve ikincisi insanların atladığıdır.
Atanan adresleri, her iki istemcideki etkin yolları ve sunucu ile B'deki tam kuralları kaydedin. Ağ geçidine başarılı bir ping veya sunucuda açık bir bağlantı noktası bunların hiçbirini kanıtlamaz, çünkü eşler arası iletim hâlâ engelliyken her ikisi de doğru olabilir. Bu sayıları tünel açıkken yazın, çünkü bir istemcinin yeniden bağlandıktan sonra aldığı adres farklı olabilir.