Please Donate to Bitcoin Address : [[address]]

Donation of [[value]] BTC Received. Thank You.
[[error]]

How to Install Headless Torrent Server in FreeBSD 11.2-RELEASE

Hello everyone,

This is how you can install a headless torrent server (transmission-daemon) in FreeBSD 11.2 so you can keep feeding the internet also the world.

You just need a VPS which has a reachable IP address but please keep that in mind this document has been prepared for IPv4. IPv6 configuration might need some extra work to do beside this blog post. Enjoy it!

Introduction

First of all, if you do not have any idea what’s FreeBSD, please refer here.

So it’s a free-software distribution developed by a large community in all over the world.

I’m a GNU/Linux System Engineer myself but I think I have a special interest for BSD kernel and its distributions all the time. So one day I spawned up a droplet through DigitalOcean with a FreeBSD cloud image pre-installed and it was ready to ssh (which I find so cool). I’m going to explain in this blog post technically how to install and configure transmission torrent server in FreeBSD 11.2 release and gonna mention some system administration practices such as firewalling in FreeBSD etc.

I hope no one is going to be mad at me from BSD community ((i have doubts if it even exists in Turkey but whatever) if I do some mistakes in this blog post technically (or, culturally I would say) because I have very strict GNU/Linux habits and it’s hard to switch my entire skill set to do the same thing with different ways is not a piece of cake that easily for me.

Preparation

Prior proceed with the transmission server installation, we need to check and fix couple of things because it’s going to be a production torrent server.

  1. OpenSSH configuration
  2. Package/Kernel Updates
  3. Firewall (PF)
1. User Management, Authorization and OpenSSH

OpenSSH is pretty much the same software as we’re always using in our favorite GNU/Linux Distros (ok ok also in Mac too) but we need to ensure some of the openssh-server configuration.

I’m a fanatic of Math and Cryptology Science so I always trust to Math when it comes to authentication. I always disable password authentication for any user and permit root login for any method (cryptic or not). So ensure you have a RSA key-pair to use it for secure authentication.

First we need to create an admin user, it’s very simple, run below command and follow up with the instructions in CLI :

Note: make sure that this user is a member of “wheel” group because we need sudo to become root.


# adduser

Ensure /usr/local/etc/sudoers file has the correct configuration for wheel group :

# vi /usr/local/etc/sudoers ---  yeah I know what you're thinking "vi" is the default text editor in FreeBSD

%wheel ALL=(ALL) ALL

Copy your ssh public key to your newly created user’s home directory and make sure you can SSH without problem with that user

Now harden your openssh server a little bit :


# vi /etc/ssh/sshd_config PermitRootLogin no PasswordAuthentication no

I never open my root user to the world (better safe and “little paranoid” than sorry) but below also a good option :


PermitRootLogin without-password

Restart your service :


# service sshd restart

BSD distros are systemd-free operating systems. I hate that shit to be honest and trying to find some peace in my free times via tinkering BSD systems recently.

2. Package Management

pkg is the package manager for FreeBSD. There’s an also another popular way to install stuff in FreeBSD which is called “ports”. I enjoy it a lot myself but it seems like it’s compiling the source code and its dependencies all the time to install programs on your computer, I’m pretty sure that the binaries will be pretty stable btw, however; I’m going to install stuff via pkg package manager to not waste much of your time in this blog post.

Update your package index :

$ sudo pkg update

Upgrade your packages :

$ sudo pkg upgrade

Reboot (if necessary)

3. Firewalling in BSD (PF)

Packet Filter (from here on referred to as PF) is OpenBSD’s system for filtering TCP/IP traffic and doing Network Address Translation. PF is also capable of normalizing and conditioning TCP/IP traffic, as well as providing bandwidth control and packet prioritization. PF has been a part of the GENERIC kernel since OpenBSD 3.0. For more info, please refer here.

In order to enable pf (or all services) we need to manipulate old-good rc files.

Run below commands to enable PF in the system :

$ sudo sysrc pf_enable="YES"
$ sudo sysrc pf_rules="/usr/local/etc/pf.conf"
$ sudo sysrc pflog_enable="YES"
$ sudo sysrc pflog_logfile="/var/log/pflog"

If my understanding is correct, above sysrc is a tool to safely edit system rc files so it simply adds above configuration to /etc/rc.conf if you do not say the otherwise. Now as you can see we’ve configured PF to look for its rules on /usr/local/etc/pf.conf. Here’s my pf.conf for a FreeBSD transmission server and some extra cool stuff like some preventions for SSH bruteforce attacks :


me="vtnet0" table persist icmp_types = "echoreq" junk_ports="{ 135,137,138,139,445,68,67,3222 }" junk_ip="224.0.0.0/4" martians = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \ 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \ 0.0.0.0/8, 240.0.0.0/4 }" set loginterface vtnet0 scrub on vtnet0 reassemble tcp no-df random-id # ---- First rule obligatory "Pass all on loopback" pass quick on lo0 all # ---- Block junk logs block quick proto { tcp, udp } from any to $junk_ip block quick proto { tcp, udp } from any to any port $junk_ports # --- Drop Martians block drop in quick on $me from $martians to any block drop out quick on $me from any to $martians # --- antispoof quick for $me # ---- Second rule "Block all in and pass all out" block in log all pass out log all keep state ############### FIREWALL ############################################### # ---- Allow all traffic from my VPN pass quick proto {tcp, udp} from 91.189.88.154 to $me keep state # ---- block SMTP out block quick proto tcp from $me to any port 25 # ---- Allow incoming Web/Transmission traffic pass quick proto tcp from any to $me port { 80, 443, 9091, 51413 } flags S/SA keep state pass quick proto udp from any to $me port { 123, 51413 } # ---- Allow my team member SSH access pass quick proto tcp from any to $me port ssh flags S/SA keep state # ---- Block bruteforcers block log quick from # ---- Allow SSH from trusted sources, but block bruteforcers pass quick proto tcp from any to $me port ssh \ flags S/SA keep state \ (max-src-conn 10, max-src-conn-rate 20/60, \ overload flush global) # --- # ---- Allow ICMP and be a Good Sysadmin pass in inet proto icmp all icmp-type $icmp_types keep state pass out inet proto icmp all icmp-type $icmp_types keep state # ---- This is for high TCP ports, you'll need it if you use ssh -D to this server for example. pass out inet proto tcp from $me to port > 50276 keep state

Run checks in case of you have any faulty configuration :

$ sudo service pf check

Checking pf rules.

Start the pf :

$ sudo service pf start

Now we have a secure FreeBSD VPS ready to serve anything on the internet!

Installing Torrent Server

In order to install torrent server, run below command :


$ sudo pkg install transmission-cli transmission-daemon transmission-web

Enable it in the rc :


$ sudo sysrc transmission_enable="YES"

You will need a settings.json file for transmission server configuration, my configuration with rpc-enabled can be found below :

$ sudo vi /usr/local/etc/transmission/home

{
"alt-speed-down": 50,
"alt-speed-enabled": false,
"alt-speed-time-begin": 540,
"alt-speed-time-day": 127,
"alt-speed-time-enabled": false,
"alt-speed-time-end": 1020,
"alt-speed-up": 50,
"bind-address-ipv4": "0.0.0.0",
"bind-address-ipv6": "::",
"blocklist-enabled": false,
"blocklist-url": "",
"cache-size-mb": 4,
"dht-enabled": true,
"download-dir": "/usr/local/etc/transmission/home/Downloads",
"download-limit": 100,
"download-limit-enabled": 0,
"download-queue-enabled": true,
"download-queue-size": 5,
"encryption": 1,
"idle-seeding-limit": 30,
"idle-seeding-limit-enabled": false,
"incomplete-dir": "//Downloads",
"incomplete-dir-enabled": false,
"lpd-enabled": false,
"max-peers-global": 200,
"message-level": 2,
"peer-congestion-algorithm": "",
"peer-id-ttl-hours": 6,
"peer-limit-global": 200,
"peer-limit-per-torrent": 50,
"peer-port": 51413,
"peer-port-random-high": 65535,
"peer-port-random-low": 49152,
"peer-port-random-on-start": false,
"peer-socket-tos": "default",
"pex-enabled": true,
"pidfile": "/var/run/transmission/daemon.pid",
"port-forwarding-enabled": true,
"preallocation": 1,
"prefetch-enabled": true,
"queue-stalled-enabled": true,
"queue-stalled-minutes": 30,
"ratio-limit": 2,
"ratio-limit-enabled": false,
"rename-partial-files": true,
"rpc-authentication-required": true,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-host-whitelist": "",
"rpc-host-whitelist-enabled": false,
"rpc-password": "s3cr3tp4sswO0rd",
"rpc-port": 9091,
"rpc-url": "/transmission/",
"rpc-username": "aydintd",
"rpc-whitelist": "127.0.0.1,167.99.137.255",
"rpc-whitelist-enabled": true,
"scrape-paused-torrents-enabled": true,
"script-torrent-done-enabled": false,
"script-torrent-done-filename": "",
"seed-queue-enabled": false,
"seed-queue-size": 10,
"speed-limit-down": 100,
"speed-limit-down-enabled": false,
"speed-limit-up": 100,
"speed-limit-up-enabled": false,
"start-added-torrents": true,
"trash-original-torrent-files": false,
"umask": 18,
"upload-limit": 100,
"upload-limit-enabled": 0,
"upload-slots-per-torrent": 14,
"utp-enabled": true
}

Make sure transmission’s home directory has the correct ownerships :

$ sudo chown -R transmission:transmission /usr/local/etc/transmission/home

Start the transmission service and check if it’s listening on port 9091 and 51413 via sockstat :

$ sudo service tranmission start

$ sudo service tranmission status
transmission is running as pid 5445.

$ sudo sockstat -4 -l
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
root sshd 9344 4 tcp4 *:22 *:*
transmission transmissi5445 9 udp4 *:23295 *:*
transmission transmissi5445 10 tcp4 *:9091 *:*
transmission transmissi5445 11 tcp4 *:51413 *:*
transmission transmissi5445 13 udp4 *:51413 *:*
root sendmail 838 3 tcp4 127.0.0.1:25 *:*
root syslogd 438 7 udp4 *:514 *:*

Now you should be able to access to your transmission server’s web-gui on :

http://your.server.ip.address:9091/web/transmission

Be aware that when you navigate to the above web page, tranmission web-gui will pop-up a dialog box to ask you the username and the password for RPC you’ve configured in the settings.json. RPC on the open world is not so much a reliable way, but you can handle the security issues via using rpc-whilelists as well.

In web-gui you can easily upload any kind of torrent file or directly point to its URL and it will download the related torrent content for you in “download-folder” in your remote VPS or home server powered by FreeBSD. Transmission can be used by it’s CLI tool as well :

$ transmission-cli path/of/torrent -w path/to/save/the/downloaded/file

That should be all!

Happy Torrenting!

ps. Sharing is caring 😉

5 Aralık 2018

Posted In: Aburcubur, Genel, Teknik

Etiketler:, , , , , ,

Leave a Comment

HA Network ihtiyacı olanlara çözümler – LACP Bonding

Merhabayın.

Bu blog yazısında high-available network ihtiyacı olanlara kernel seviyesinde ağ arayüzlerini nasıl yüksek erişilebilir olarak yapılandırabileceklerinden bahsedeceğim.

Bu günlerde otu boku clusterlamakla uğraştığımdan, bugüne kadar clusterlamadığım tek bir mekanizma olduğu gerçeği kafama dank etti. O da ağ erişilebilirliğinin kendisi.

Cluster mı? HA mı? Ne diyosun diyenlere bir özet geçeyim.

Sistemcilerin büyük dertlerinden biri de verdikleri servislerin failover mekanizmalarının olması ve bu servisleri çeşitli felaket senaryolarına göre ayarlamaktır. Yani bugüne kadar adam akıllı sistem yöneticisi olarak çalışmış herkes bir servis grubunu yüksek bulunur ve otomatik failover mekanizmalarıyla beraber kümelemeye çalışmıştır. Bir senaryo örneği vereceğim basitçe. Bir web servisi koşturuyorsunuz, uygulamanız da veritabanı olarak arkada herhangi bir SQL ve/veya NoSQL veritabanı kullanıyor. Gün geldi oldu ya, web servisinin koştuğu makine bir anda kapandı. Ya da SQL sunucunuzun koştuğu makineye herhangi bir sebepten dolayı ağ üzerinden erişilemez duruma geldi. Ya da oldu ya talih bu, işinizi iyi yapmadınız ve sunucunuzda kök dosya sisteminin bağlı olduğu fiziksel disk doldu sizden habersiz, işletim sisteminiz de I/O gerçekleştirebilecek alan bulamadığından web servisiniz çalışamaz duruma geldi. Bu durumların hepsinde de servis kesintisine uğradınız. Müşteriler mutsuz, patron mutsuz, herkes mutsuz.

İşte bu gibi senaryoları en kısa servis kesintisiyle atlatmak sistem yöneticilerinin en önemli görevlerinden biri. E bunu nasıl yapıyoruz? Benim gözlemlediğim, günümüzde her uygulamanın ya kendi failover mekanizmaları yazılımın kendi içersinde geliştiriliyor ya da bu işi yapmak üzere tasarlanmış, koşturduğunuz uygulamadan bağımsız üçüncü parti clustering ve HA fonksiyonlarını sisteminize entegre edebileceğiniz bir dizi yazılımı düzgün bir şekilde ayarlayarak bu işi yapabiliyoruz. Yukarıdaki senaryo için her bir servis bileşeninizi ayrı-ayrı yüksek bulunur ve failover edebilecek şekilde ayarlamalısınız demek oluyor bu. Yani atıyorum nginx koşturuyorsanız, nginx servislerinizi yine atıyorum 3 ayrı makineye yayıp, öne bir HAProxy, corosync+pacemaker ile bu 3 nginx web servisi için HA ve failover sağlayabilirsiniz. Ya da arkadaki nosql veritabanınız atıyorum mongodb ise, mongodb’nin failover ve HA mekanizmaları için yazılımın kendi içersinde deployment metodları (replika setleri vs) ve bir dizi ayarlar serisi gerektiren bir iş yükünüz var demek oluyor bu. Her bir bileşenin, projenizin sistem ayağında pros/cons değerlendirmesi ve kullanacağınız mekanizmaları seçmek de sizin işiniz bu arada.  Better safe than sorry demişler. İşleri en baştan sağlam tutmak her zaman en iyisidir.

Continue reading HA Network ihtiyacı olanlara çözümler – LACP Bonding

1 Mart 2017

Posted In: Sistem, Teknik

Etiketler:, , , , , ,

One Comment

Sansür Ülkeleri İçin Bir Linux Sunucuya Tor Bridge Kurmak

Merhaba,

Normalde daha fazla Türkçe teknik blog yazısı yazmayacaktım kimse okumuyor diye. Ancak ülkenin şartlarını her birimiz biliyoruz. VPN firmalarının websitelerine kadar sansürlenen bir internetle başbaşa kalmış durumdayız. Şunu söylemek istiyorum ki, gayet sıradan ve tek özelliği sunucu yönetmekten anlamak olan basit bir vatandaş olarak edindiğim Tor Network bilgisini ve her birinizin herhangi bir VPS kiralayarak kurup kullanabileceği bir Tor Bridge, sunucu ve istemci tarafında nasıl yapılandırılır bunu blog yazısında anlatacağım.  İstiyorum ki bu sansürlerden kralı gelse etkilenmesin hiç kimse. Bakın beni tanıyan bilir ben “politik” olmayı sevmem. Ancak buradan şunu anlayın; bu blog yazısı ile bu “sansürcü” zihniyete yekten tepkimi koyuyorum. Varsa içinizde bu tip zihniyetler, allah aşkına sansürleyin beni. Yiyosa 😉

Geçiyorum teknik kısıma, kemerleri falan bağlayın. Hazır olun çünkü kızdım ve ağır yazdım. Saat şu an 02:20 AM. Ona göre.

Ön Hazırlık – Tor Bridge Nedir?

Beni uğraştırmayın, okuyun : https://www.torproject.org/docs/bridges#Understanding

Şu bilgiyi not olarak düşeyim, Tor’u engellediğini “sananlar”, çok kullanılan Tor Bridge’lerinin IP’lerini birer birer alıp sansürlüyorlar. Bizim de amacımız yeni kiralanmış herhangi bir VPS’e yepisyeni bir Tor Bridge kurmak. Kısaca sansür yiyene kadar bu Tor Bridge’leri üzerinden Tor Ağına dahil olabilmeyi başarmak. Sansür yemenizi nasıl geciktirebileceğinizi de anlatacağım.

Ben bütün aşağıdaki teknik işlemleri CentOS 7 GNU/Linux dağıtımı üzerinde gerçekleştirdim. Debian/Ubuntu vs. için daha iyi dokümanlar var araştırırsanız.

Başlamadan önce herhangi bir public erişilebilir IPv4 (veya IPv6 ancak ben IPv4 için anlattım) sunucu kiralamanız gerekiyor, başka bir şeye gerek yok.

Tor ve obfs4proxy Kurulumu

Normal bir sistem yöneticisi olduğunuzu farzedemiyorum çünkü halka hitap etmem gerekiyor konu gereği. Dolayısıyla sunucunuzda ilk önce firewalld servisinin çalıştığına emin olun ve belli başlı portlar hariç diğer portlar dışarıya kapalı olsun. Firewall ayarlarını konu içersinde anlatacağım.

Tor kurmak için aşağıdaki şekilde epel deposunu kurup, tor’u sunucuya kurun :

# yum install epel-release ; yum update
# yum install tor -y

Kurulum bittikten sonra, malesef obfs4proxy’nin bir RPM paketi olmadığından, sunucuya go-lang kurup, obfs4proxy binary’sini sunucu sisteme almamız gerekecek.
Aşağıdaki adımları birebir takip edin :

# yum install golang git -y
# go version
go version go1.6.3 linux/amd64
# export GOPATH=`mktemp -d`
# go get git.torproject.org/pluggable-transports/obfs4.git/obfs4proxy
# cp $GOPATH/bin/obfs4proxy /usr/local/bin/

Bütün kurulum işlemleri bu kadar.

Gelelim yapılandırmaya.

Tor ve obfs4proxy’nin Tor Bridge Olarak Yapılandırılması

Tek bir yapılandırma dosyası var /etc/tor/torrc, dosyayı açın ve aşağıdaki gibi Tor Bridge’i yapılandırın :

RunAsDaemon 1
ORPort 443
BridgeRelay 1
ControlPort 9051
HashedControlPassword 16:7838ED53E0A003F66098A977910E3786F6549E541540FDD85266385875
ServerTransportPlugin obfs4 exec /usr/local/bin/obfs4proxy
ServerTransportListenAddr obfs4 0.0.0.0:4443
ExtORPort auto
Exitpolicy reject *:*
#PublishServerDescriptor 0

#Set your bridge nickname and contact info
ContactInfo aydintd@gmail.com
Nickname aydintd
Log notice file /var/log/tor/notices.log

Bu ayarları tek tek açıklamayacağım, çoğu gayet açık zaten isminden ancak bazıları hakkında bilgi vermekte yarar var :

ORPort : 443 , Bridge’nizin 443. portta çalışacağınızı söylüyorsunuz. 443 tercih ediliyor çünkü sansürcü zihniyet 443. portu blocklamaktan çekiniyor. Çünkü 443 HTTPS default portu 🙂 9001 vs. gibi portlar da yaygın, ancak 9001 görüp ISP tarafından blocklanabilirsiniz. Bu yüzden çok sık kullanılan (ne bileyim https olur, ftp olur) portlardan birini Tor Bridge servisi olarak network interface’ine bağlamanız daha güvenilir bir yöntem.
ControlPort : Tor Control Portu, bu port normalde dışarıya açılmaz ve tor süreçlerini yönetebileceğiniz bir CLI araç vs amacıyla bind ediyorsunuz, konudan bağımsız ancak bir güvenlik önlemi olarak sunucuda aşağıdaki durumdan dolayı tanımlamak durumundayız. Optional ama size kalmış, ben obsesif davrandım.
HashedControlPassword : Bu hash, control portu için bir parola üretip parolasız girişleri engellemek için. Bu hash’i şu komut ile üretip, çıktısını ayar dosyasında ilgili yerde tanımlamanız yeterli : tor --hash-password s3cr3tp4ssw0rd s3cr3tp4ssw0rd parolası kullanarak 127.0.0.1:9051 ‘de çalışan Tor servisine bağlanabilirsiniz demek oluyor yani. Öntanımlı olarak parolasız girişli geliyor. Güvenlik önlemi yani.
PublishServerDescriptor : Bu ayar’ın 0 olması, Tor Bridge sunan public sitelere, sizin bridge’nizin eklenmemesini istediğiniz anlamına geliyor. Ben öntanımlı kapalı tuttum her yerde indexlensin ve herkes kullanabilsin diye, ancak ISP’lerin atlas.torproject.org vs. gibi yerlerden bu bridge tanımlarını alıp engellediğini unutmayın. Eğer indexlenmesine izin vermezseniz ISP’lerin VPS’inizin IP’sini blocklama ihtimalini daha da çok düşürürsünüz.

Sıkıldım, diğer ayarlar için okuyun işte : https://www.torproject.org/docs/tor-manual.html.en

Yukarıdaki linkten daha açık nasıl anlatabilirim bilmiyorum zaten. Neyse.

Bu şekilde ayarları yaptıktan sonra dosyayı kaydedip çıkın.

Son olarak sunucunun güvenlik duvarında dışarı açık olması gereken ORPort ve ServerTransportListenAddr’de tanımladığınız portlara izin verin, benim örneğimde bunlar :

# firewall-cmd --zone=public --permanent --add-port=4443/tcp
# firewall-cmd --zone=public --permanent --add-port=443/tcp
# firewall-cmd --reload

Tor servisini başlatın (ya da yeniden başlatın)

# systemctl restart tor

/var/log/tor/notice.log da aşağıdakine benzer bir çıktı görmeniz gerekiyor :

Jan 20 02:03:03.000 [notice] Tor 0.2.8.12 opening log file.
Jan 20 02:03:03.686 [warn] OpenSSL version from headers does not match the version we're running with. If you get weird crashes, that might be why. (Compiled with 1000105f: OpenSSL 1.0.1e 11 Feb 2013; running with 1000105f: OpenSSL 1.0.1e-fips 11 Feb 2013).
Jan 20 02:03:03.726 [notice] Tor v0.2.8.12 running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.1e-fips and Zlib 1.2.7.
Jan 20 02:03:03.727 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jan 20 02:03:03.727 [notice] Read configuration file "/usr/share/tor/defaults-torrc".
Jan 20 02:03:03.727 [notice] Read configuration file "/etc/tor/torrc".
Jan 20 02:03:03.731 [notice] Based on detected system memory, MaxMemInQueues is set to 744 MB. You can override this by setting MaxMemInQueues by hand.
Jan 20 02:03:03.732 [notice] Opening Socks listener on 127.0.0.1:9050
Jan 20 02:03:03.732 [notice] Opening Control listener on 127.0.0.1:9051
Jan 20 02:03:03.732 [notice] Opening OR listener on 0.0.0.0:443
Jan 20 02:03:03.732 [notice] Opening Extended OR listener on 127.0.0.1:0
Jan 20 02:03:03.732 [notice] Extended OR listener listening on port 37342.
Jan 20 02:03:03.000 [notice] Parsing GEOIP IPv4 file /usr/share/tor/geoip.
Jan 20 02:03:03.000 [notice] Parsing GEOIP IPv6 file /usr/share/tor/geoip6.
Jan 20 02:03:04.000 [notice] Configured to measure statistics. Look for the *-stats files that will first be written to the data directory in 24 hours from now.
Jan 20 02:03:04.000 [warn] Fixing permissions on directory /var/lib/tor
Jan 20 02:03:04.000 [notice] We were built to run on a 64-bit CPU, with OpenSSL 1.0.1 or later, but with a version of OpenSSL that apparently lacks accelerated support for the NIST P-224 and P-256 groups. Building openssl with such support (using the enable-ec_nistp_64_gcc_128 option when configuring it) would make ECDH much faster.
Jan 20 02:03:04.000 [notice] Your Tor server's identity key fingerprint is 'aydintd BD4BDF95BB083BE330B17935DA7C7D9FD4C0E5A2'
Jan 20 02:03:04.000 [notice] Your Tor bridge's hashed identity key fingerprint is 'aydintd DF45BB0E8E28844B098FCFA675FAAEA94353E872'
Jan 20 02:03:04.000 [notice] Bootstrapped 0%: Starting
Jan 20 02:03:08.000 [notice] Bootstrapped 80%: Connecting to the Tor network
Jan 20 02:03:08.000 [notice] Opening Control listener on /run/tor/control
Jan 20 02:03:08.000 [notice] Bootstrapped 85%: Finishing handshake with first hop
Jan 20 02:03:09.000 [notice] Bootstrapped 90%: Establishing a Tor circuit
Jan 20 02:03:09.000 [notice] Registered server transport 'obfs4' at '[::]:4443'
Jan 20 02:03:10.000 [notice] Tor has successfully opened a circuit. Looks like client functionality is working.
Jan 20 02:03:10.000 [notice] Bootstrapped 100%: Done
Jan 20 02:03:10.000 [notice] Now checking whether ORPort 46.101.137.210:443 is reachable... (this may take up to 20 minutes -- look for log messages indicating success)
Jan 20 02:03:10.000 [notice] Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.
Jan 20 02:03:10.000 [notice] Performing bandwidth self-test...done.

Loglardan da görülebileceği gibi son 3 satır önemli. Sizin sunucunuz için de aynı satırları görebiliyor olmanız gerekli. Yoksa bir şeyler yanlış gidiyor demektir. Tekrar gözden geçirin yaptıklarınızı.

Son olarak da client’lar için sunucumuza kurduğumuz bridge tanımını nerden alacağız, bunun yanıtına gelecek olursak:

Önce Tor Bridge’in fingerprint değerini ya yukarıdaki loglardan ya da /var/lib/tor/fingerprintdosyasından alın :

aydintd BD4BDF95BB083BE330B17935DA7C7D9FD4C0E5A2

Daha sonra aşağıdaki dosya içeriğini alın ve yukarıdaki fingerprint bilgisi ve sunucu IP ve ORPort olarak ayarladığımız port numarasını aşağıdaki gibi bir formatta birleştirin :

# cat /var/lib/tor/pt_state/obfs4_bridgeline.txt

obfs4 IP ADDRESS:PORT FINGERPRINT cert=1lyG4Rkuk0deYXjBO9TGS/vE5SceYm4wYb4num+l/Ib3EUX3Tma/lY8jov2YUOf9toAJXw iat-mode=0

Benim durumumda son durum şöyle bir satır :

obfs4 46.101.137.210:443 BD4BDF95BB083BE330B17935DA7C7D9FD4C0E5A2 cert=1lyG4Rkuk0deYXjBO9TGS/vE5SceYm4wYb4num+l/Ib3EUX3Tma/lY8jov2YUOf9toAJXw iat-mode=0

İşte son olarak elde ettiğimiz bu ayarı, Tor Browser’ımıza obfs4 bridge’i olarak manuel yapılandırma yaparak eklediğimizde, Tor network’üne bu kurduğumuz VPS üzerinden çıkabileceğiz.

Tor Browser’da (İstemcide) Yapılması Gerekenler

Tor Browser’ı makinenize indirin önce : https://www.torproject.org/download/download (Platformunuza göre ilgili binary/paket vs seçin)

Daha sonra Tor Browser’ı başlatın ve Open Settings’e tıklayın.

Burada bizim gibi sansürlü ülkeler için bir seçenek var. Configure seçeneğine tıklayın. Daha sonraki ekranda ‘Yes’ seçeneği seçip, Next’e tıklayın.
Bu ekranda da yukarıda sunucudan çıkardığımız bridge relay ayarını tek satır olacak şekilde Enter Custom Bridges formundaki kısma ekleyin.
obfs4 46.101.137.210:443 BD4BDF95BB083BE330B17935DA7C7D9FD4C0E5A2 cert=1lyG4Rkuk0deYXjBO9TGS/vE5SceYm4wYb4num+l/Ib3EUX3Tma/lY8jov2YUOf9toAJXw iat-mode=0
Next dedikten sonra, local proxy’niz varsa ‘Yes’ (proxy yapılandırcaksınız tabi bi de) yoksa ‘No’ seçip devam edin ve Connect’e tıklayın.

Tor browser sorunsuz bir şekilde VPS’iniz üzerinden bridge relayinizi kullanarak Tor networküne dahil olmuş oldu.
Test for Network Settings’e açılış ekranında tıklayıp, Tor soğanından This Browser : Bridge obfs4 (Germany) vs bir tanım görmeniz gerekiyor. (VPS’i nereden almışsanız orası)

Daha detaylı istemci yapılandırması şurada da anlatılmış çok güzel : https://anonimmedya.com/tor-erisim-engeli-kopru

Hepsi bu.

Son olarak şunu demeden edemeyeceğim :

Yaşasın Özgür Yazılım! Yaşasın Özgür İnternet!

20 Ocak 2017

Posted In: Sistem, Teknik

Etiketler:, , , , ,

Leave a Comment

QEMU/KVM Sanallaştırma Sunucularında CPU Optimizasyonları

Merhaba,

Bu teknik yazıyı yazma amacım, özellikle production ortamlarında sanallaştırma sunucusu olarak KVM koşturan kişilerin optimizasyon ihtiyaçlarını bir nebze karşılamak. Belki öntanımlı gelen ayarlarla kullanıp, herhangi bir optimizasyona şu ana kadar ihtiyacı olmamış olanlar olabilir. Ancak Openstack vb. gibi “compute” çok yapılan tabiri caizse “hayvan gibi” (bkz: beast :P) uygulamalarda, eğer sanallaştırma platformunuz KVM ise aşağıda bahsedeceğim CPU iyileştirmelerini denemek isteyebilirsiniz.

Ön Bilgiler

KVM’de hiç bir CPU optimizasyonu yapmamışsanız, oluşturduğunuz sanal makineler öntanımlı olarak genelde o an için sanallaştırma sunucusunda hangi CPU boştaysa onun üzerinde koşmaya başlıyor. Ancak bu en ideal performansında sanal makinelerinizi çalıştırabileceğiniz manasına gelmiyor. Çünkü NUMA mimarisi diye bir mimari var. (lütfen devam etmeden wikipedia içeriğini okuyun)

NUMA mimarisinde bir sanal makineyi daha önceden belirlediğiniz bir NUMA node’una kilitlemek, KVM’in öntanımlı “NUMA node’una bakılmaksızın hangi cpu boştaysa onda çalıştır” policy’sine göre çok daha performanslı oluyor. Çünkü bir sanal makineyi bir NUMA düğümü içersindeki bir (ya da birden çok) CPU’ya kilitlediğinizde, ilgili sanal makinenin sistemden bellek ayırma işlemlerinin her zaman ilgili çalıştığı NUMA düğümünün içersinde kalacağını garanti etmiş oluyorsunuz. Aksi takdirde NUMA düğümleri arasında, hiç gereği olmamasına rağmen cross-node memory transport denilen NUMA düğümleri arası bellek taşınması işlemi de yapılması gerekiyor. E bu da yoğun compute ve memory allocation yapılacak olan sanal makinelerde bir performans kaybına yol açıyor haliyle.

E libvirt’in de NUMA için CPU pinning vb. desteği var, o halde nasıl kullanacağız? Şimdi ona bakalım.

Continue reading QEMU/KVM Sanallaştırma Sunucularında CPU Optimizasyonları

24 Ekim 2016

Posted In: Sistem, Teknik

Etiketler:, , , , ,

2 Comments

Yenilendik!

Merhaba,

Uzun zamandır şu gri, iç karartıcı görüntüden kurtarmak istiyordum şu blogu. Hatta 2 ay önce başlamıştım bile, tamamlamak bugüneymiş.

Şunu söylemeliyim ki çok istediğim halde LYK2016 için iki satır goy-goy bile olsa yazacak zaman bulamadım. İçimde ukte kaldı. Her neyse ki önümüzde ÖWTG’16 var. Bu vesileyle iki etkinliği birleştirip bir şeyler yazarım belki diye düşünüyorum 🙂

Olmadı AB’17 ye artık.

ÖWTG’de olacaklarla 22-23 Ekim’de İstanbul’da görüşmek üzere!

Duymadım o ne diyen varsa hala vay haline : ÖWTG’16

19 Ekim 2016

Posted In: Genel, Kişisel

Leave a Comment

Aptly ile Debian Paket Deposu Yönetimi

Teknik yazıya başlamadan önce biraz gevezelik yapacağım kendi perspektifimden, teknik kısım için bir sonraki başlıktan başlayabilirsiniz okumaya.

Debian GNU/Linux herkesin bildiği gibi dünyada en çok kullanılan Linux tabanlı dağıtımlardan biri. Bir çok diğer dağıtımın da temel aldığı (ki bunlar Mint, Ubuntu vs. başka saymaya gerek yok çok fazlalar) köklü bir işletim sistemi. Arkasında çok ciddi, katı ve sağlam bir community’si de mevcut. Dünyada Özgür Yazılım Kültürünün en büyük dinamolarından biri.
Bir çok projenin de halen geliştiriciliğini yapan bir community’si ve Debian geliştirici topluluğu var. (Örneğin Docker projesinde bir çok eski Debian geliştiricisi çalışmakta)

Aslına bakarsak ben de öğrencilik dönemimde ilk tanıştığım kültür Debian kültürüydü, bunu da büyük bir rastlantısal şans olarak görüyorum ancak hiç bir zaman bundan şikayetçi olmadım. Bir çok konuyu, Debian ile tanışıklığımdan dolayı zorlanmadan anlayabildiğimi düşünüyorum bugüne kadar. Kültürüne yabancı olmadığım bir dağıtım.

Ancak şöyle bir baktığımda yönettiğim sunucuların hiç biri Debian tabanlı değil nerdeyse (iş harici), kendi şahsi makinemde de Arch Linux koşturuyorum yıllardır.

E peki neden Debian paketleme sistemleriyle falan uğraşıyorum? El-Cevap : Pardus

Biliyorsunuz ki ülkemizde açık kaynak kullanımının yaygınlaştırılması projesi kapsamında geliştirilen Pardus İşletim Sistemi Debian tabanlı bir dağıtım olduğundan beri, Pardus kullanan kullanıcıların bilgisayarlarına program paketlerini kurabilmesi için bir paket deposu yönetim sistemi hasıl olageldi. Ben de TÜBİTAK’ta olduğumdan beri bu konuyla ara ara ama sıkça uğraşmak durumunda kaldım. Bu yazıyı da bu konuda biriktirdiğim bilginin bana açıkcası fazla geldiğini düşünerek paylaşma isteğimden dolayı yazdım. Ne kadar Debian kültürünü tanısam da, saygı duysam da, dağıtım savaşlarına girmek istemesem de hiç, her sysadminin gönlünde yatan bir aslan olduğunu söylemek gerekli, e benimkini de bilen biliyor zaten ama bu hiç bir zaman Debian olmadı sunucu dağıtımları arasında 🙂

Continue reading Aptly ile Debian Paket Deposu Yönetimi

26 Temmuz 2016

Posted In: Sistem, Teknik

Etiketler:, , , , , ,

2 Comments

OpenLDAP’da Gruplamalar

Merhabalar.

Uzun zaman sonra tekrar bir blog yazısı yazma fırsatı buldum. Bu yazıda geyiği kısa kesip (kesemedi…) direkt konuya atlayacağım.

OpenLDAP bildiğiniz gibi özgür dünyaların lightweight directory access protocol yazılımı. Bir sürü özel-kamu vb. kurum
içersinde bu protokolü bir şekilde kullanmaktalar. Ne için peki?

Cevap en az problem kadar basit : kullanıcıların merkezi olarak yönetimi. Yönetmek? Bir kullanıcının nesini yöneteceksiniz ki
diye düşünürseniz özellikle kamuda IT ops özelinde en süslü fantezilerin bu servis etrafında yoğunlaştığını tecrübe ettim.

Özellikle TÜBİTAK’da işe başladığımdan beri neredeyse en çok uğraştığım problemler bu servis özelinde oldu anlam veremediğim
bir şekilde.

Şöyle istekler duydu, gördü bu bünye :

“biz on bin küsür tane kullanıcımızı bir şekilde gruplayıp, sonicbilmem-ne  (a.k.a özgür yazılım olmayan)
firewall’undan bu gruplara özel youtube yasağı koymak istiyoruz” ya da,
“Microsoft Active Directory’den (kamu ağzıyla “aktif dizin” (her ne demekse artık))  bir kaç bin kullanıcıyı linux client’lardan
doğrulatalım ama herkes de login olamasın bir gruplamaya göre bunu yönetelim” lere kadar uzanan bir sürü istek.

Tembel bünyem çok çalışmak zorunda kaldığından size OpenLDAP üzerinde nasıl gruplamalar yapabilirsiniz bunlardan bahsetmek istedim.

Hazırsanız başlıyorum, (hazırdan kasıt slapd servisi kurun işte herhangi bir işletim sistemi üzerine (centos kurun olm)), müzik gelsin.

Continue reading OpenLDAP’da Gruplamalar

12 Nisan 2016

Posted In: Sistem, Teknik

Etiketler:, , , , ,

Leave a Comment

Redmine’da WYSIWYG Editörü Kullanmak

Merhaba,
Bir süredir blog yazamıyordum. Bunun birden fazla sebebi var ancak bir kaç tanesinden bahsetmem gerekirse şöyle diyebilirim :

İlginç, yazmaya değer bir şeyler bulup, biriktirme eğilimim
İş, güç yoğunluğu ve ruh halim
ve son olarak Akademik Bilişim konferansına eğitmen olarak katılmam

bir süredir blog yazısı yazamamama neden oldu. Ancak sebeplerim makul bence.

Konumuza gelecek olursak, bu blog yazısında Redmine’da What You See Is What You Get (WYS|WYG) editörü nasıl kullanılır,
mevcut  Redmine kurulumunuzda textile formatlı wiki kullanılarak hazırlamış olduğunuz wikilerinizi, iş kayıtlarınızı
nasıl bu editöre uyumlu ve HTML ile görüntüleyebilip, düzeltebileceğinizi anlatacağım.

“Bununla neden uğraştın ki olum?” diyenlerinizi duyuyorum. Aslında ben kendimce wiki’yi, wiki yazmayı hatta syntax’ını bile seviyorum. Ancak
özellikle benim gibi daha önce wiki yazmaya alışmamış, syntaxla uğraşmak istemeyen, “bir tablo için bu kadar pipe’mı dizecem şimdi yav?” diye
mızıklanan personele sistem yönetimi desteğini ancak wiki yerine zengin editör kullandırtarak verebiliyorum 🙂 Tek sebebi budur. Yoksa wikiyi severiz, candır.

Redmine’da bu işi sizin için yapan güzel bir plugin var, adı da CKEditor , bu bir redmine plugini olduğundan öncelikle redmine pluginlerinin redmine’a nasıl
kurulması gerektiğinden bahsetmeliyiz. Blog yazısının goy-goy’unu burada bırakıp, teknik kısmına geçiyorum, ilginizi çekmediyse diye uyarayim.

Continue reading Redmine’da WYSIWYG Editörü Kullanmak

19 Şubat 2016

Posted In: Genel, Sistem, Teknik

Etiketler:, , , , , ,

Leave a Comment

Docker ile Ruby Uygulamaları Çalıştırmak

Docker bilindiği gibi, bir dosya sisteminde içerisinde sadece çalıştırılmak istenen uygulamanın ihtiyaç duyduğu kod, sistem araçları, sistem kütüphaneleri gibi yapıları barındıran bir sanallaştırma platformudur. Docker’ın bana göre en önemli özelliği çalıştırdığınız Docker kontaynerının her zaman aynı durumda, environment’dan bağımsız bir şekilde çalışacağını garanti etmesi.

Ben de bu blog yazısında Docker ile mini bir wiki uygulaması olan ruby ile yazılmış gollum’un nasıl çalıştırılacağı ve sisteminizde nasıl ve ne şekilde kullanabileceğinizi anlatacağım.

Ön Bilgiler ve Gereksinimler

Ben bu blog yazısında geliştirme ortamı olarak Debian Jessie 8.1 seçtim.
Docker versiyonu olarak : Docker version 1.6.2, build 7c8fca2 kullandım.

Bu blog yazısını takip edilebilmesi ve anlaşılabilmesi için Docker’ın çalışma mantığına hakim olmak, Dockerfile makrolarını bilmek vb. gerekecektir.
Kurulu ve düzgün çalışan docker’ı sisteminize kurmanız yeterli. Blogun devamında Docker’ı düzgün çalıştırdığınızı varsayarak ilerleyeceğim.

Continue reading Docker ile Ruby Uygulamaları Çalıştırmak

6 Kasım 2015

Posted In: Sistem, Teknik

Etiketler:, , , ,

2 Comments

Centos 7’de OpenLDAP Sunucu Kurulumu ve Ayarlanması

Bu yazıda OpenLDAP’ın Centos 7’de nasıl kurulacağı, standart bir LDAP ağacının nasıl oluşturulacağı, LDAP’ın SSL ile nasıl entegre çalışacağı ve LDAP’tan doğrulama yapan Linux client’ları hakkında bir şeyler anlatacağım. OpenLDAP sunucusuyla alakalı her şey Centos 7.1 üzerinde çalışacak şekilde bu dokümanı yazıyorum. Client ayarlamaları kısmına geldiğinizde ilgili spec bilgilerini o başlıklarda bulabileceksiniz.

OpenLDAP ?

Open – Lightweight Directory Access Protocol. Yani bir protokolün açık kaynak bir implementasyonu.

Yeniyo mu içiliyo mu diye ekstra bakmak isteyen buradan bakabilir.

Continue reading Centos 7’de OpenLDAP Sunucu Kurulumu ve Ayarlanması

13 Ağustos 2015

Posted In: Sistem, Teknik

Etiketler:, , ,

Leave a Comment