Selamlar Sayın LSociety okuru. Bu yazımda AWS EC2 Ubuntu sanal makinesi üzerinde WireGuard ile kendi VPN’imizi kuracağız.
VPN denilince akla ilk olarak yasaklı sitelere erişmek gelse de aslında tek kullanım amacı bu değildir. VPN’ler, veri güvenliğini artırmak, çevrimiçi gizliliği korumak, uzaktan çalışan ekiplerin güvenli bir şekilde şirket ağına erişmesini sağlamak gibi birçok farklı alanda kullanılır. Kendi VPN’inizi kurarak, hem trafiğinizin kontrolünü elinize alabilir hem de üçüncü taraf sağlayıcılara olan bağımlılığınızı azaltabilirsiniz.
Güvenlik tarafından örnek vermek gerekirse, en basitinden kablosuz ağ güvenliği diyebilirim. VPN kullanımı; ARP Poison ve Evil Twin gibi “Man In The Middle” saldrılarının hepsine engel olur. Konunun anlaşılması adına bu videoyu izlemenizi tavsiye ederim.
Ben kurulumu AWS EC2 üzerindeki Ubuntu 24.04 makinemle yapacağım. Buradaki yazımdan yardım alarak siz de clouddaki ücretsiz sanal makinenizi hazırlayıp VPN kurulum adımlarına geçebilirsiniz.
Hazırsanız kuruluma başlayalım.
Kurulum ve Anahtar Çifti Oluşturma
WireGuardı kuralım:
sudo apt update
sudo apt install wireguard -y
Peerlara (VPN ile birbirne bağlanacak cihazlar) güvenle bağlanabilmek için public ve private keylere ihtiyacımız var. Bu keyleri WireGuard ile oluşturacağız. İlk olarak private keyimizi oluşturalım:
wg genkey | sudo tee /etc/wireguard/private.key
Base64 formatındaki keyi ekranda göreceksiniz. İlerideki adımlarda bu keyi kullanacağız. Şimdiden bir yere not alabilir veya ihtiyaç halinde /etc/wireguard/private.key dosyasını okuyabilirsiniz.
/etc/wireguard altında private keyimizi oluşturduk. Keyin gizli kalması gerektiğinden dosya izinlerini yalnızca root kullanıcısının erişebileceği şekilde değiştirelim:
sudo chmod go= /etc/wireguard/private.key
Private keyimiz hazır olduğuna göre public keyimizi de oluşturabiliriz:
sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
Bu komut ile private keyimizden bir public key türettik.
Konfigürasyonları Ayarlama
WireGuard konfigürasyonumuzu hazırlamaya başlayabiliriz. (/etc/wireguard/wg0.conf):
sudo nano /etc/wireguard/wg0.conf
Aşağıdaki ayarları dosyaya yapıştıralım:
[Interface]
PrivateKey = <PRIVATE-KEY>
Address = 10.0.0.1/24
ListenPort = 51820
- PrivateKey satırına, private keyimizi yapıştıralım (/etc/wireguard/private.key’ dosyasında kayıtlı)
- Adress satırı, belirlediğimiz IP aralığından WireGuard arayüzüne (interface) verilecek olan IP adresini ve alt ağ maskesini belirtir.
Tünel arayüzü ve bağlanan cihazlar için bir ip aralığı belirlememiz gerekiyor. Aşağıdaki ip aralıklarından birini seçebilirsiniz:
10.0.0.0
–10.255.255.255
172.16.0.0
–172.31.255.255
192.168.0.0
–192.168.255.255
Ben bu kurulumda 10.0.0.0/24 ip aralığını kullanacağım.
- ListenPort, kurulacak bağlantılarda kullanacağımız porttur. Default olarak 51820 portu kullanılır ancak isterseniz değiştirebilirsiniz.
Dosyayı kaydedip kapatalım. (CTRL+O , ENTER , CTRL+X)
WireGuard Servisini Başlatma
Artık WireGuard Serverimizi başlatabiliriz.
Makinenin her yeniden başlatılması sırasında WireGuardı başlatmak için gerekli komutu çalıştıralım:
sudo systemctl enable wg-quick@wg0.service
WireGuard servisini başlatalım:
sudo systemctl start wg-quick@wg0.service
Servisin durumunu kontrol edelim:
sudo systemctl status wg-quick@wg0.service
Resimdeki gibi “active” yazısını gördüyseniz, WireGuard başarıyla başlatılmıştır.
Peer Kurulumu
Peer olarak yine bir Ubuntu kullanacağım.
Eğer mobil cihazdan bağlanmak isterseniz App Store ve Play Storeda WireGuard uygulamasını bulabilirsiniz, yazımın sonunda mobil uygulama için konfigürasyonları paylaşacağım.
AWS’de uyguladığımız birçok adımı peerda da uygulayacağız. İlk olarak WireGuard kuralım:
sudo apt update
sudo apt install wireguard -y
Private ve public keylerimizi oluşturalım:
wg genkey | sudo tee /etc/wireguard/private.key
sudo chmod go= /etc/wireguard/private.key
sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
Konfigürasyonlarımızı yapalım:
sudo nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <Peer Private Key>
ListenPort = 51820
Address = 10.0.0.2/24
[Peer]
PublicKey = <Server(AWS) Public Key>
Endpoint = <Server_IP:Port>
AllowedIPs = 10.0.0.1/32
Interface kısmına peer bilgilerini, Peer kısmına da bağlanacağımız WireGuard Serverin(AWS) bilgilerini giriyoruz.
Wireguard servisimizi başlatıp kontol edelim:
sudo systemctl enable wg-quick@wg0.service
sudo systemctl start wg-quick@wg0.service
sudo systemctl status wg-quick@wg0.service
Peerımızda WireGuardı başarıyla başlattıysak, WireGuard Server’a (AWS) dönüp peerımızı ekleyelim.
AWS üzerinde:
sudo wg set wg0 peer <Peer Public Key> allowed-ips 10.0.0.2
(WireGuard Peerinin public keyini girmeyi unutmayın)
Bu adımı da başarıyla tamamladıysanız iki ortam arasındaki bağlantı kurulmuş demektir.
WireGuard Serverinizden(AWS) 10.0.0.2 adresine ping atarak test edebilirsiniz:
ping 10.0.0.2
AWS Üzerinden İnternete Çıkmak İçin
WireGuard Server (AWS) Network Ayarları
Bağlantı yapacak cihazların internet trafiğini yönlendirmek için IP yönlendirmeyi ayarlayalım:
sudo nano /etc/sysctl.conf
Dosyanın sonuna bu satırı ekleyelim:
net.ipv4.ip_forward=1
Dosyayı kaydedip kapatalım. (CTRL+O , ENTER , CTRL+X)
Yeni ayarların yüklenmesi için bu komutu çalıştıralım:
sudo sysctl -p
WireGuard Server (AWS) Firewall (ufw) Ayarları
Gelen ve giden trafiğin doğru bir şekilde yönlendirilmesi için bazı firewall ayarlarının yapılması gerekiyor.
İlk olarak genel ağ arayüzünü (public network interface) bulalım:
ip route list default
Ekrana gelen çıktıda “dev” kelimesinden sonraki kısım aradığımız arayüz olacaktır. Örneğin:
Bendeki arayüz adı “ens5”. Arayüz adını bir kenara not edelim.
Firewall kurallarını eklemek için konfigürasyon dosyamıza geri dönelim:
sudo nano /etc/wireguard/wg0.conf
SaveConfig = true satırının altına bu satırları ekleyelim:
PostUp = ufw route allow in on wg0 out on ens5
PostUp = iptables -t nat -I POSTROUTING -o ens5 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on ens5
PreDown = iptables -t nat -D POSTROUTING -o ens5 -j MASQUERADE
Ağ arayüzü adınız ens5’ten farklıysa kendi ağ arayüzü adınızla değiştirmeyi unutmayın.
Dosyayı kaydedip kapatalım. (CTRL+O , ENTER , CTRL+X)
PostUp
satırları, VPN bağlantısı kurulduktan sonra devreye girer. İlk olarak, ufw route allow in on wg0 out on ens5
kuralı, WireGuard arayüzü (wg0
) üzerinden gelen trafiğin dış ağ arayüzü (ens5
) üzerinden yönlendirilmesine izin verir. Ardından, iptables
ile NAT (Ağ Adres Çevirisi) uygulanarak, dış ağa çıkarken trafiğin kaynak IP adresi gizlenir ve sistemin IP’sine çevrilir (MASQUERADE
).
PreDown
satırları ise VPN bağlantısı kesilmeden önce devreye girer. ufw
ile yönlendirme izni iptal edilir ve iptables
kuralı silinerek NAT işlemi sonlandırılır. Bu adımlar, bağlantı sonlandırılırken tüm kuralların temizlenmesini ve gereksiz açıkların oluşmasını engeller.
Son olarak konfigürasyonda belirttiğimiz portu(51820) ve ssh portumuzu ufw kurallarına ekleyelim:
sudo ufw allow 51820/udp
sudo ufw allow 22/tcp
ufw’yi başlatalım:
sudo ufw disable
sudo ufw enable
SSH bağlantısının etkilenebileceğine dair gelen mesajı onaylayıp (y) Enter’a basalım.