0. VPN, Wireguard, Pi-hole
VPN
VPN virtual private network’ün kısaltılmışı, yani sanal özel ağ demek. İnternete başka bir ip üzerinden bağlanmanızı sağlıyor. VPN ile bölgesel yasak ve kısıtlamaları aşabilirsiniz ve internette gezinirken kimliğinizi saklamanıza yardımcı olur.
Pi-hole
Pi-hole bir proje. Pi kelimesi Raspberry Pi’den geliyor, hole ise bildiğimiz delik. Raspberry Pi kart boyutunda çok uygun fiyatlı bilgisayar. Monitöre ve TV’nize takıp kullanabilirsiniz. Pi-hole, Raspberry Pi cihazınızı reklamları engelleyen bir DNS sunucusuna dönüştürmenizi sağlıyor. Güzel de bir paneli var, logları ve istatistikleri görüp, siteleri beyaz ve kara listelere eklemenizi sağlıyor.
Wireguard
Wireguard bir VPN protokolü, tıpkı OpenVPN gibi. Yeni sayılır fakat çok başarılı. Birkaç haftadır test ediyorum, telefonumda güç tasarrufunda bile bağlantı düşmedi. 3G’den Wifi’ya veya tam tersi geçişlerde de düşme olmuyor ve şarjımın daha iyi gittiğini söyleyebilirim.
Daha küçük bir kod temeli olduğu için(4000 satır kadar), daha az atak alanı olduğu ve denetlemesinin kolay olduğu söyleniyor. Performans için de benchmarklara bakabilirsiniz.
1. VPS kurulumu
Hosting hizmetini Amazon, DigitalOcean, Linode, Hetzner, GCP, Vultr gibi birçok sağlayıcıdan alabilirsiniz. Ben bu yazımda DigitalOcean kullandım.
DigitalOcean’da sanal makinelere Droplets deniyor. Aşina olduğum işletim sistemi Ubuntu 18.04 ile bir sanal makina açıyorum. Tercih ettiğiniz diğer sağlayıcılarda da aşağı yukarı buna benzer bir ekran göreceksiniz.
Bir tane ssh key yaratıyorum. Daha önce yarattığınız bir key yoksa bu şekilde yaratabilirsiniz. Windows kullanıcıları OpenSSH veya Putty yüklemeli bu komutu kullanabilmek için.
ssh-keygen
Anahtarı kaydetmek ve isimlendirmek için böyle bir mesaj alacaksınız.
Generating public/private rsa key pair. Enter file in which to save the key (/Users/USER/.ssh/id_rsa):
Sonra parola girmenizi isteyecek, burası opsiyonel fakat bir parola belirlemenizi öneririm.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
İlk adımda farklı bir isim girmediyseniz, id_rsa ve id_rsa.pub isimli iki dosyanız hazır olacak. id_rsa dosyasının içindekileri böyle terminale bastırabiliriz.
cat ~/.ssh/id_rsa.pub
Bunu sonra sitede ilgili yere kopyalıyoruz.
Sunucuya uzaktan bağlantı kurmak
ssh root@167.71.58.142
Terminalden üstteki komut ile bilgisayarımdan uzak sunucuya bağlanıyorum.
2. Firewall yapılandırması
Sunucumuzu rastgele internet trafiğine açmamak ve daha güvenli hale getirmek için firewall ayarlarını yapıyoruz. UFW ile 53 ve 80 portunu engelliyoruz. Sunucuya SSH ile bağlandıysak, UFW’yi aktif ettiğimizde bağlantımızın kopmaması için port 22'ye izin veriyoruz.
sudo ufw deny 80/any
sudo ufw deny 53/anysudo ufw allow 22/any
Wireguard istemcilerimizden gelen trafiği açıyoruz
sudo ufw allow from 192.168.2.0/24
UFW’yi aktif ediyoruz.
ufw enable
ipv4 trafiğini iletmeyi açıyoruz ki makinemiz router gibi davransın ve istemcilerimiz internete girebilsin. Bunun için:sysctl.conf
’i açyoruz nano /etc/sysctl.conf
ve net.ipv4.ip_forward = 1
, satırını ekliyoruz. Bu kısım bu kadar.
3. Sunucuya Wireguard yükleme
Ubuntu’ya Wireguard yüklemek için yapmanız gerekenler.
sudo add-apt-repository ppa:wireguard/wireguard
sudo apt-get update
sudo apt-get install wireguard
Diğer işletim sistemleri için buraya bakınız.
4. Sunucuda Wireguard yapılandırılması
Wireguard kendisi ve istemcileri için ayrı bir subnete sahip olmalı. Mesela Wireguard’ın subneti 192.168.2.0/24 ise 192.168.2.1–192.168.2.254 arasında her IP uygun. Wireguard server IP adresi 192.168.2.1 olacaktır. Bunu sunucunun public veya dahili IP’si ile karıştırmayın.
Wireguard kimlik doğrulama için public ve private anahtarlar kullanıyor. Hemen bir tane public-private anahtar çifti yaratalım.
wg genkey | tee privatekey | wg pubkey > publickey
Şimdi public ve private key içeren iki tane dosyamız oldu.
Bunları ekrana basalım ve not alalım.
cat publickey
cat privatekey
/etc/wireguard
içine wg0.conf
diye bir dosya açın.
nano /etc/wireguard/wg0.conf
İçine bunu yapıştırın ve kendi ayarlarınıza göre düzenleyin.
[Interface]
Address = 192.168.2.1
PrivateKey = <Buraya sunucunun private anahtarını girin(az önce oluşturduğumuz)>
ListenPort = 1194
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE[Peer]
# iphone6s (istemcinin ismi, başındaki #'ı kaldırmayın çünkü bu yorum satırı)
PublicKey = <Buraya döneceğiz>
AllowedIPs = 192.168.2.3/32
[Interface] kısmı sunucunun ayarları, [Peer] kısmı ise istemcinin. Birden çok [Peer] kısmı açabilirsiniz alt alta.
Address kısmı Wireguard sunucumuzun adresi.
Port Wireguard serverına bağlanabileceğimiz kısım, buraya başka birşey yazabilirsiniz. Sonrasında firewall’dan açmayı unutmayın. sudo ufw allow 1194/any
PostUp ve PostDown wireguard interface’i açılıp kapandığında çalışcak komutları tanımlamak için.
PresharedKey bu opsiyonel. İsterseniz PublicKey’in altına koyabilirsiniz.PresharedKey = <Anahtar>
PresharedKey’i de wg genkey
ile yaratabilirsiniz. 32 bit base64 kodlamada olmalı.
Peer kısmında publickey’i istemci için yarattığımızda dönüp bu dosyaya yapıştıracağız. AllowedIPs kısmı bağlantı sırasında istemciye atanacak dahili IP.
192.168.2.1 yazmayın(bu adresi sunucuya atadık) ve 192.168.2.255'in altında kalın.
Örnek: 192.168.2.3'den başlayın ve her bir istemci için son basamağı değiştirin. (192.168.2.XX/32)
Detaylar için subnet’leri araştırabilirsiniz.
5. İstemci tarafında Wireguard yapılandırılması
İstemci tarafında da public ve private anahtarları üstteki komut ile yaratın. /etc/wireguard
’ın içine wg0.conf
açarak üstte sunucu tarafında yaptığımıza benzer bir config yazacağız. Tek fark interface artık sunucu değil istemci ve peer ise sunucumuz. Aman karıştırmayın.
[Interface]
Address = 192.168.2.<Sunucu tarafında bu istemciye verdiğiniz ip ile aynı olmalı>
PrivateKey = <İstemcide yarattığımız privatekey>
ListenPort = <Herhangi bir port, mesela 21841. Ben burayı boş bırakmıştım>
DNS = 192.168.2.1[Peer]
PublicKey = <SUNUCU PUBLIC ANAHTARI>
Endpoint = <SUNUCU PUBLIC IP>:1194
AllowedIPs = 192.168.2.1/24, 0.0.0.0/0, ::/0PersistentKeepalive = 25
DNS sunucusunu Pi-hole kullanımına hazırlamak için 192.168.2.1
olarak verdik.
[Peer] kısmında Endpoint’e public ip vermeniz lazım. Sunucuda curl ifconfig.me
yazarak bulabilirsiniz. 192.168.2.1 değil. 1194 ise sunucuda verdiğimiz port, eğer 1194 yerine başka birşey ayarladıysanız, burda da değiştirin.
Mobil cihazlar için
Ayarlar gördüğünüz gibi aynı. Yeni bir anahtar çifti yaratıyoruz. Public olanı sunucumuza ekliyoruz. Sunucunun public olanını cihazımızın peer kısmına ekliyoruz. Endpoint sunucumuzun public IP’si.
6. Wireguard’ı başlatmak
sudo wg-quick up wg0
ile wireguard’ı başlatabilirsiniz. sudo wg0
ile durumunu görebilirsiniz. Hem sunucu da hem istemcide Wireguard’ı başlatalım.
Açılışta başlaması için bunu yazabiliriz:sudo systemctl enable wg-quick@wg0.service
7. Pi-hole yükleme
Bu kısmı acısız yapmak için Pi-hole’u docker ile yükleyeceğiz. Hazır bir script de buldum. Fakat bunun için de docker yüklememiz gerekiyor. Nerdeyse tüm işletim sistemleri için docker yüklemeyi detaylı anlatan yazılar var.
Docker yükledikten sonra sunucuda:
nano piholeYarat.sh
ile dosya açıyoruz ve içine:
#!/bin/bash# https://github.com/pi-hole/docker-pi-hole/blob/master/README.mddocker run -d \
--name pihole \
-p 192.168.2.1:53:53/tcp -p 192.168.2.1:53:53/udp \
-p 192.168.2.1:80:80 \
-p 192.168.2.1:443:443 \
-e TZ="America/Chicago" \
-v "$(pwd)/etc-pihole/:/etc/pihole/" \
-v "$(pwd)/etc-dnsmasq.d/:/etc/dnsmasq.d/" \
--dns=127.0.0.1 --dns=1.1.1.1 \
--restart=unless-stopped \
pihole/pihole:latestprintf 'Starting up pihole container '
for i in $(seq 1 20); do
if [ "$(docker inspect -f "{{.State.Health.Status}}" pihole)" == "healthy" ] ; then
printf ' OK'
echo -e "\n$(docker logs pihole 2> /dev/null | grep 'password:') for your pi-hole: https://${IP}/admin/"
exit 0
else
sleep 3
printf '.'
fiif [ $i -eq 20 ] ; then
echo -e "\nTimed out waiting for Pi-hole start start, consult check your container logs for more info (\`docker logs pihole\`)"
exit 1
fi
done;
yapıştırıp kaydediyoruz. chmod +x piholeYarat.sh
ile bu scripti çalıştırmak için gereken yetkiyi verip, ./piholeYarat.sh
ile çalıştırıyoruz. En son bir şifre basacak ekrana, bunu pihole paneline girmek için kullanacaksınız. O yüzden bunu not alın.
VPN’e bağlıyken https://192.168.2.1/admin/index.php adresinden panele girebilirsiniz.
Kaynaklar:
https://www.reddit.com/r/pihole/comments/bl4ka8/guide_pihole_on_the_go_with_wireguard/
https://www.digitalocean.com/community/tutorials/how-to-block-advertisements-at-the-dns-level-using-pi-hole-and-openvpn-on-ubuntu-16-04
https://wiki.archlinux.org/index.php/WireGuard
https://www.linode.com/docs/networking/vpn/set-up-wireguard-vpn-on-ubuntu/