Aşağıda uygulayacağınız kod SSH girişlerini root kullanıcıları için devre dışı bırakır. Ne yaptığınızı bilmiyorsanız lütfen değişiklik yapmayınız.
sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config && /etc/init.d/sshd restart
linux sistemler hakkında sistem yönetimi, sorunlar, görüşler, kurulum örnekleri, konfigürasyonlar, performans ayarları, güvenlik ipuçları ve yapılandırma örnekleri
Aşağıda uygulayacağınız kod SSH girişlerini root kullanıcıları için devre dışı bırakır. Ne yaptığınızı bilmiyorsanız lütfen değişiklik yapmayınız.
sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config && /etc/init.d/sshd restart
Güncel PHP kullanmak ve yeniliklere hızlı adapte olmak isteyen arkadaşlar PHP sürümlerini 8.0 yapmak isterlerse Debian 11 için aşağıdaki işlemleri yapmaları yeterli olacaktır.
apt -y install lsb-release apt-transport-https ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
Güncel repo dahil edildikten sonra güncelleme komutu verilir.
apt update
Gerekli olan modüllerle birlikte sisteme kurulum gerçekleştirilir.
apt install php8.0
apt install php8.0-{bcmath,bz2,intl,gd,mbstring,mysql,zip,xml,fpm,redis}
Genelde cPanel, Directpanel gibi sunucu yönetim araçları içerisinde yer alan firewall yönetimi için kullanılan bir eklentidir, iptables yönetimini basitleştirip işlevselleştirmesi ve yönetim arayüzü olmasıyla bilinir, ayrıca pek çok kendine has özelliği de bulunur. (Blacklist kontrolü ve özel listeler vs)
Unutmayın, yapacağınız yanlış bir yapılandırma sunucunuza erişimi kalıcı olarak kesecektir. Atacağınız adımları dikkatlice atınız.
Bağımlılıkların kurulması
apt-get install e2fsprogs dnsutils libwww-perl libio-socket-ssl-perl libcrypt-ssleay-perl libnet-libidn-perl libio-socket-inet6-perl libsocket6-perl
ConfigServer dosyalarının indirilmesi ve kurulması
cd /opt/
wget http://download.configserver.com/csf.tgz
tar xzf csf.tgz
cd /opt/csf
sh install.sh
Her şey doğru bir şekilde çalıştığına emin olabilmemizi sağlayan perl /usr/local/csf/bin/csftest.pl
test betiğini çalıştırıyoruz. Çıktısı aşağıdaki gibi olmalı
Testing ip_tables/iptable_filter...OK
Testing ipt_LOG...OK
Testing ipt_multiport/xt_multiport...OK
Testing ipt_REJECT...OK
Testing ipt_state/xt_state...OK
Testing ipt_limit/xt_limit...OK
Testing ipt_recent...OK
Testing xt_connlimit...OK
Testing ipt_owner/xt_owner...OK
Testing iptable_nat/ipt_REDIRECT...OK
Testing iptable_nat/ipt_DNAT...OK
RESULT: csf should function on this server
Yapılandırma dosyası içerisindeki bütün alarmların kapatılmasını şiddetle öneriyorum, yoksa durup dururken yaptığı her engelleme işleminde mail atacaktır.
sed -i 's/LF_EMAIL_ALERT = "1"/LF_EMAIL_ALERT = "0"/g' /etc/csf/csf.conf
sed -i 's/LF_PERMBLOCK_ALERT = "1"/LF_PERMBLOCK_ALERT = "0"/g' /etc/csf/csf.conf
sed -i 's/LF_NETBLOCK_ALERT = "1"/LF_NETBLOCK_ALERT = "0"/g' /etc/csf/csf.conf
sed -i 's/LF_DISTFTP_ALERT = "1"/LF_DISTFTP_ALERT = "0"/g' /etc/csf/csf.conf
sed -i 's/LF_DISTSMTP_ALERT = "1"/LF_DISTSMTP_ALERT = "0"/g' /etc/csf/csf.conf
sed -i 's/LT_EMAIL_ALERT = "1"/LT_EMAIL_ALERT = "0"/g' /etc/csf/csf.conf
sed -i 's/CT_EMAIL_ALERT = "1"/CT_EMAIL_ALERT = "0"/g' /etc/csf/csf.conf
Değişikliklerin geçerli olması amacıyla yeniden başlatma işlemini yapalım
systemctl restart csf
systemctl restart lfd
Yönetim arayüzü ön tanımlı olarak kapalı gelmektedir, aktif etmek amacıyla aşağıdaki işlemleri gerçekleştirin.
nano /etc/csf/csf.conf
dosyasının içerisinde 1995.
satırın hemen altında yer alan aşağıdaki ayarları kendinize göre değiştiriniz.
###############################################################################
# SECTION:Integrated User Interface
###############################################################################
# Integrated User Interface. This feature provides a HTML UI to csf and lfd,
# without requiring a control panel or web server. The UI runs as a sub process
# to the lfd daemon
#
# As it runs under the root account and successful login provides root access
# to the server, great care should be taken when configuring and using this
# feature. There are additional restrictions to enhance secure access to the UI
#
# See readme.txt for more information about using this feature BEFORE enabling
# it for security and access reasons
#
# 1 to enable, 0 to disable
UI = "1"
# Set this to the port that want to bind this service to. You should configure
# this port to be >1023 and different from any other port already being used
#
# Do NOT enable access to this port in TCP_IN, instead only allow trusted IP's
# to the port using Advanced Allow Filters (see readme.txt)
UI_PORT = "7156"
# Optionally set the IP address to bind to. Normally this should be left blank
# to bind to all IP addresses on the server.
#
# If the server is configured for IPv6 but the IP to bind to is IPv4, then the
# IP address MUST use the IPv6 representation. For example 1.2.3.4 must use
# ::ffff:1.2.3.4
#
# Leave blank to bind to all IP addresses on the server
UI_IP = "::ffff:94.130.96.165"
# This should be a secure, hard to guess username
#
# This must be changed from the default
UI_USER = "mertcan"
# This should be a secure, hard to guess password. That is, at least 8
# characters long with a mixture of upper and lowercase characters plus
# numbers and non-alphanumeric characters
#
# This must be changed from the default
UI_PASS = "Str0n9_PasSw0rD"
Ardından giriş yapabilmek için IP adresinizi sisteme kayıt edin.
sudo echo "" >> /etc/csf/ui/ui.allow
sudo systemctl restart lfd
komutu ile yeniden başlatıp web arayüzüne giriş yapabilirsiniz.
Türkiye\’de IPv6 kullanım imkanı olmadığı için Tunnel oluşturmamız gerekmektedir. Mevcut verilen yapılandırma ile bu iş çalışmadığı için aşağıdaki adımları yapmamız gerekiyor.
Ön tanımlı olarak tunnel tanımı
auto he-ipv6
iface he-ipv6 inet6 v4tunnel
address 2001:470:1f0a:355::2
netmask 64
endpoint 216.66.80.30
local 94.55.144.200
ttl 255
gateway 2001:470:1f0a:355::1
Ipv6 Tunnel\’in çalıştırılacağı IPv6 to IPv4 için sit0 ağ ara yüzünü açıyoruz.
ifconfig sit0 up
ifconfig sit0 inet6 tunnel ::216.66.80.30
ifconfig sit1 up
ifconfig sit1 inet6 add 2001:470:1f0a:355::2/64
route -A inet6 add ::/0 dev sit1
Ardından network üzerinde diğer makinelerin IPv6\’dan çıkış yapabilmesi için aşağıdaki adımlar takip edilir. İlk önce radvd kurulumu yapılır.
apt install radvd
IP dağıtımı ve RA işlemleri için aşağıdaki yapılandırma yapılır.
root@debian:~# nano /etc/radvd.conf
interface eth0
{
AdvSendAdvert on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
AdvLinkMTU 1480;
prefix 2001:470:1f0b:358::/64 {
AdvOnLink on;
AdvAutonomous on;
};
route ::/0 {
};
RDNSS 2001:470:20::2 {};
DNSSL horus.local {
FlushDNSSL on;
AdvDNSSLLifetime 10;
};
};
Mevcut ağ kartımızın üzerine sabit bir IPv6 tanımlaması yapmayı unutmuyoruz.
#IPv6
iface eth0 inet6 static
address 2001:470:1f0b:358::1
netmask 64
IPv6 için Türkiye\’de mevcut sağlayıcı bulunmadığı için tunelleme hizmeti Hurricane Electric LLC tarafından sağlanmaktadır.
OpenVPN ile VPN işlemi yaptığınızda karşınıza pek çok hata ve uyarı mesajı gelebilir, bunlardan en önemlisi aşağıdaki hatadır, bu hata neticesinde VPN güvenliğiniz olumsuz etkilenebilir. Bu hata özellikle VPN bağlantılarınıza yapılan bir saldırı girişimini de gösterebilir.
AEAD Decrypt error: bad packet ID (may be a replay)
Bu hata yalnızca tünelinizi UDP protokolünde çalıştırırken ortaya çıkar. Elbette, mesajları sessize almak için hem istemci hem de sunucu tarafında aşağıdaki parametreyi kullanabilirsiniz.
--mute-replay-warning
Üşenen biriyseniz bunu yapıp geçersiniz ama VPN\’i kullanan kullanıcılar başınızı ağrıtır. Çünkü bu hata neticesinde VPN\’de aşırı şekilde yavaşlamalar meydana gelir. Ayrıca yapılandırdığınız VPN sunucusu MITM ataklarına karşıda savunmasız olur.
Çözüm olarak VPN bağlantısında MTU(Maximum İletim Birimi)ni değiştirmeniz gerekir. paketin internetten geçebileceği değeri belirleyeceğiz, boyutları biraz düşüreceğiz ve sorun ortadan kalkacak ama bu değeri tespit etmemizde gerekiyor. O yüzden önce tespit işlemini yapalım networkümüzde bakalım minimum ve/veya maximum ne kadar yapabiliyoruz. Testini şu şekilde yapabiliriz.
Windows için
ping -n 1 -l 1500 -f 1.1.1.1
Linux için
ping -M do -s 1500 -c 1 1.1.1.1
Ayarlayacağımız MTU için hesaplama yapalım, OpenVPN\’de güvenlik için 41 bayt, tünelleme için 28 bayt yani toplam 69 bayt gerekecek bize. Yukarıdaki komutu çalıştırdığınızda karşınıza çıkacak olan sonuç bu noktada önem arz ediyor ve aşağıdaki gibi bir uyarı ile karşılaşabilirsiniz.
Your packets needs to be fragmented but DF set
Bunu görüyorsanız direk olarak MTU değerini düşürmeye başlayın, ne zaman karşı sunucudan cevap gelirse işte o zaman durun çünkü o MTU değerini kullanacaksınız tabii burada MSS(Maks Segment Boyutu) işin içine girecek ve tespit ettiğimiz MTU değerinden mecburi olarak 40 çıkaracağız.
Örnek vermem gerekirse ben yaptığım testler sonucunda yanıt aldığım ve sıkıntısız olduğunu gözlemlediğim MTU değeri olarak 1431 kullanacağım. Yukarıda bahsettiğim gibi bu değerden 40 çıkartacağım ve gerçek MTU değeri elime geçmiş olacak.
1431-49=1382 Benim gerçek MTU değerimi oluşturuyor.
En başta ne demiştik, OpenVPN için toplamda 69 bayt gerekiyor bulduğumuz 1382 değerinden 69 çıkartıyoruz. OpenVPN tarafında kullanacağımız değer 1313 oldu.
Şimdi hem istemci hem de sunucuda aşağıdaki değişikliği yapacağız;
mssfix 1313
Kullanıcılara yeni yapılandırma göndermeniz gerekebilir bunu göz önüne alarak değişiklikleri tamamladıktan sonra OpenVPN sunucusunu yeniden başlatın. Ardından en başta bahsettiğimiz hatayı alabilmek amacıyla internet üzerinden büyük dosyaları indirmeye başlayın ve konsoldan OpenVPN olay günlüklerini izleyin, eğer yük altında hala yukarıdaki AEAD Decrypt error: bad packet ID (may be a replay)
hatasını gözlemliyorsanız mssfix
değerini daha da düşürmeniz gerekecektir.
Son olarak bütün bu işlemleri yaptınız ancak hatalar hala devam ediyorsa, VPN bağlantınızı UDP olarak kullanmayı bırakıp TCP protokolüne geçirin.
Froxlor çoklu-kullanıcı hizmetlerini yönetmek için kullanılan bir sunucu yönetim paneli. Alan adı hizmetleri, e-posta hesapları ve web sunucusu vb işler için cpanel veya webmine iyi bir alternatiftir.
Froxlor debian sistemler üzerinde sorunsuz çalıştığı bilinmektedir ayrıca test edilmiştir. Sisteminizde Mysql, Apache ve python paketlerinin kurulu olması gerekmektedir.
apt-get -y install apt-transport-https lsb-release ca-certificates gnupg
wget -O - https://deb.froxlor.org/froxlor.gpg | apt-key add -
echo deb https://deb.froxlor.org/debian $(lsb_release -sc) main > /etc/apt/sources.list.d/froxlor.list
apt-get update && apt-get upgrade
Sisteme froxlorun kurulumunu gerçekleştirmemizi sağlayacak paketleri dahil ettik aşağıdaki komut aracılığı ile de yönetim panelini kolay bir şekilde kurabilirsiniz. Gerekli olan paketleri kendisi kuracağını hatırlatırım.
apt-get install froxlor
Sonrasında postfix ayarına geliyor burada Internet Site seçin böylelikle ayarları otomatik olarak yapacak SMTP kurulumları
Sizden hostname isteyebilir ayarlamasını yapınız türkçe karakter kullanmamaya özen gösterin ardından FTP ayarlamalarını yapmanız için bir ekran gelir. Bu ekrandan standalone yi seçip onaylayın.
Ardından kurulu olan apache üzerinde 000-default.conf
dosyasının içini düzenleyelim. Çünkü ön tanımlı olarak /var/www rotasını takip etmiyor olacak.
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with a2disconf.
#Include conf-available/serve-cgi-bin.conf
Srdından yeniden başlatmanız yeterli olacak ve panele erişiminiz gelecek. Hata ile karşılaşmayacaksınız.
sudo /etc/init.d/apache2 restart
Artık ip adresinden erişebilirsiniz. Panelinizi kullanmak için /froxlor girmeniz yeterli
Start install butonuna basıyoruz kurulum ekranı geliyor ve kurulumu otomatik olarak gerçekleştiriyor.
Kurulumun 2.aşamasına geçiş yapıyoruz burada froxlor için mysql ayarlarını vermemiz gerekiyor. Bu aşamada mysql_secure_installation
komutu ile SSH üzerinden mysql kurulumu isteyebilir.
Bu aşamadan sonra kurulum tamamen bitmiş olacak artık panelinize giriş yapabilirsiniz.
Ayarlamış olduğunu kullanıcı adı ile giriş yapıyorsunuz ve artık istediğiniz her şeyi yapabilirsiniz. Kullanıcı tanımlayıp sunucunuzda müşterilerinizi barındırabilirsiniz.
Giriş yaptınız karşınızda aşağıdaki gibi bir panel karşılayacak sizi oldukça güzel ve grafiksel olarak iyi tasarlanmış kullanımı da oldukça kolay sitenizi bu panelden yönetebilirsiniz.
Froxlor yönetim paneli konusunda bilmeniz gereken bir noktada dosyaların /var/www/froxlor yada /var/www/html/froxlor bulunabilecek olması iki dizini de kontrol etmeniz önerilir tanımlanan ayarları kullanırsanız /var/www/html/froxlor dizininde olduğunu göreceksiniz.
Sistemin bize verdiği uyarı aşağıdaki gibi yani 1 Ocak 1970’de 00:00:00 UTC’den bu yana geçen saniye sayısı 2038’de dolacak ve 19 Ocak 2038 UTC 03:14:07’den sonraki saatlerde sistem bize boş boş bakacak.(Sistem o zamana kadar aynı kalıp kullanılır mı? orasını kimse garanti edemez.)
ext4 filesystem being mounted at /boot supports timestamps until 2038 (0x7fffffff)
Bu sorun aslında 32bit kullanımından kaynaklı geçerlilik süresi 2038’de doluyor hal böyle olunca da bir takım alanlarda hata görebiliyoruz. İlk olarak dosya sistemi bizi uyarıyor bu uyarıdan sonra uygulamalar uyarmaya başlayacak. 2038 yıl sorunu hakkında daha fazla bilgi almak isteyenler tıklayın
Bu durumu kontrol etmek için sistemde aşağıdaki komutu çalıştırmanız yeterlidir.
tune2fs -l /dev/sda1 | grep "Inode size:"
Bu direk olarak size Inode boyutunu dönecek boyut olarak 128
yazıyorsa sıkıntı çünkü 2038 yıl sorunu dosya sisteminizde var demektir.
2038 yıl sorunu olmayan Inode size’ı 256 olan tune2fs
çıktımız.
root@ankara:~# tune2fs -l /dev/sda1
tune2fs 1.44.5 (15-Dec-2018)
Filesystem volume name: <none>
Last mounted on: /
Filesystem UUID: b015ad21-ff3e-48a3-95e6-6d5890429dd9
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 9760000
Block count: 39968763
Reserved block count: 1604208
Free blocks: 37358012
Free inodes: 9628366
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 277
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8000
Inode blocks per group: 500
Flex block group size: 16
Filesystem created: Tue Aug 18 14:43:20 2020
Last mount time: Thu Jun 24 15:13:17 2021
Last write time: Thu Jun 24 15:13:16 2021
Mount count: 57
Maximum mount count: -1
Last checked: Tue Aug 18 14:43:20 2020
Check interval: 0 (<none>)
Lifetime writes: 1198 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
First orphan inode: 1034301
Default directory hash: half_md4
Directory Hash Seed: 1c09ee01-778c-40d7-bf12-aa05891586a9
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0x8e360349
root@ankara:~#
Çözüm için öncelikli olarak /boot
alanını yedekleyelim.
cp -a /boot /mnt/backup-boot/
ve ardından doğru Inode boyutuyla yeniden biçimlendirelim.
umount /boot
mkfs.ext4 -I 256 /dev/sda1
en basit yolu seçmek istiyorum derseniz `e2fsck -f /dev/sda1 tune2fs -I 256 /dev/sda1`
sonrasında ise yedeklediğimiz her şeyi geri eski yerine atalım.
mount /boot
cp -a /mnt/backup-boot/boot/* /boot/
Bunlarla uğraşmak istemiyorsanız, sistemlerinizi hem donanımsal hem de yazılımsal olarak güncel tutmayı ihmal etmeyiniz.
Red Hat tabanlı bir işletim sistemi olan Almalinux direk olarak CloudLinux tarafından geliştirilen ve desteklenen bir işletim sistemidir. Amazon AWS, Cpanel ve Plesk dahil pek çok köklü kuruluş direk olarak desteklemekte ve bünyesinde kullanmaktadır.
Resmi web sitesi dışında hiç bir yerden hiç bir zaman ISO indirmemeniz gerekli eğer farklı yerlerden indirirseniz içerisinden botnet çıkabilir, kötü bir yazılım olabilir.
Bütün indirme bağlantılarını buradan bulabilirsiniz.
Anlatımı sanal makine üzerinden yapacağım, kuracağınız yerler için hiç bir sorun teşkil etmeyeceğini bilin.
“Install AlmaLinux 8” diyoruz ve işletim sisteminin kurulum yapabilmemiz amacıyla gerekli olan dosyaları sistemimize geçirmesini izliyoruz.
Dil seçimimizi yaparak kurulum aşamamıza devam ediyoruz.
Kurulum yapılacak diskimizi tanımlıyoruz.
Disk seçiminden hemen sonra sisteme kurulacak paketleri seçmemiz gerekiyor burada “Standart” ve “Security Tools” dışında seçmenize gerek yok.
Sistem genelinde kullanılacak zaman dilimini “Europe/Istanbul” olarak belirliyoruz.
İnternet ayarlarını yapmaya geldi sıra, hemen “on” konumuna getiriyoruz DHCP üzerinden ip adresi otomatik olarak alıyor.
Klavyemizin dilini seçiyoruz, ben haliyle türkçe seçtim.
Kurulumunu yapmış olduğumuz “Security Tools” için politika ayarı yapmamız gerekiyor, bu noktada referans olabilmesi adına aşağıdaki gibi seçip bırakıyorum ben.
Hemen ardından root için parolamızı oluşturuyoruz, güvenliğiniz için lütfen bilinen parolalardan ve kısa parolalardan uzak durunuz.
Bütün işlemleri başarıyla tamamladıysanız ana ekranda şu şekilde görünmeli, ek kullanıcı oluşturma aşaması tamamen size ait o konuda bir işlem ben genelde yapmıyorum.
“Begin Installation” diyoruz ve artık kurulum başlıyor. Sistem özelliklerinize göre kurulum süresi değişmekle birlikte genellikle 8-10 dk arasında sürmektedir.
Başarılar Almalinux işletim sistemini başarılı bir şekilde kurdunuz, artık üzerinde istediğiniz işlemleri yapabilirsiniz.
Ücretsiz sesli ve görüntülü konuşma imkanı sağlayan, ekran ve dosya paylaşımı yapabileceğiniz, açık kaynak kodlu bir uygulamadır. Üstelik bütün bunları yaparken uçtan uca her şeyi şifreler. Bizde bu güzelim uygulamayı Raspberry Pi üzerine kuracağız.
Kurduğumuz sistemi güncelleyerek işe başlıyoruz.
apt update && apt dist-upgrade -y
Ardından sistemimize gerekli olan bağımlılıkları kuralım bunlar içerisinde mongodb ve nodejs bulunuyor.
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get -y update && sudo apt-get install -y curl && curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
sudo apt-get update
sudo apt-get install -y build-essential mongodb-org nodejs graphicsmagick
Bağımlılıklarımızı böylelikle kurmuş oluyoruz, sistemimiz artık hazır. Rocket.Chat uygulamasını kurmaya geldi sıra
curl -L https://releases.rocket.chat/latest/download -o /tmp/rocket.chat.tgz
tar -xzf /tmp/rocket.chat.tgz -C /tmp
rm -r /tmp/bundle/programs/server/npm/node_modules/sharp/vendor
cd /tmp/bundle/programs/server && npm install
sudo mv /tmp/bundle /opt/Rocket.Chat
sudo useradd -M rocketchat && sudo usermod -L rocketchat
sudo chown -R rocketchat:rocketchat /opt/Rocket.Chat
Rocket.Chat için servis dosyasını oluşturuyoruz.
cat << EOF |sudo tee -a /lib/systemd/system/rocketchat.service
[Unit]
Description=The Rocket.Chat server
After=network.target remote-fs.target nss-lookup.target nginx.target mongod.target
[Service]
ExecStart=/usr/local/bin/node /opt/Rocket.Chat/main.js
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=rocketchat
User=rocketchat
Environment=MONGO_URL=mongodb://localhost:27017/rocketchat?replicaSet=rs01 MONGO_OPLOG_URL=mongodb://localhost:27017/local?replicaSet=rs01 ROOT_URL=http://localhost:3000
PORT=3000
[Install]
WantedBy=multi-user.target
EOF
İşlemler tamamlandı Rocket.Chat artık çalıştırılmak için hazır, ama işlemlerimiz tamamlanmadan mongodb’mizi yapılandıralım.
sed -i "s/^#replication:/replication:\n replSetName: rs01/" /etc/mongod.conf
sed -i "s/bindIp/#bindIp/" /etc/mongod.conf
systemctl enable mongod && systemctl start mongod
mongo --eval "printjson(rs.initiate())"
systemctl enable rocketchat && systemctl start rocketchat
Artık hazırız, Rocket.Chat kullanıma hazır 3000 portu üzerinden hizmet vermeye başlayacak. İsterseniz bunu Nginx arkasına alarak servis edebilirsiniz.
Bu işlemleri yapmam ben hazırı seviyorum diyenler aşağıdaki betiği kullanabilirler.
bash -c "$(curl https://install.rocket.chat)"
Kurulum tamamlandığında rocketchatctl install
komutunu verip işlemi sonlandırabilirsiniz.
Burada yapılacak olan işlem Wifi kartı bulunmayan bir masaüstü bilgisayarı bir Raspberry Pi aracılığıyla bir wifi ağına bağlamaktır. Wifi olmayan bilgisayar ile Wifiağı arasında bir köprü olarak bir Raspberry Pi 4 Model B kullanacağız.
Raspberry Pi 4, Wifi’ye bağlanacak ve bağlantısını Ethernet kullanarak diğer bilgisayara aktaracak. Raspberry Pi 4 Model B ac Wifi’ye sahip olduğu için hız açısından da sıkıntı çekmeyeceksiniz 100mbitleri görmek mümkün.
Ben kurulum için raspbian kullanacağım ama isteyen olursa dietpi kullanabilir. Her ikisi de Debian zaten sorun yaşamazsınız.
Öncesinde Wifi’ye bağlayalım cihazı, boot aşamasında bir işlem yapmamışsanız aşağıdaki şekilde ayarlayabilirsiniz.(bu işlemi dietpi üzerinde boot yapılandırması ile çözebilirsiniz.)
cat > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf <<EOF
country=TR
ctrl_interface=DIR=/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="changeme"
psk="changeme"
}
EOF
chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
systemctl disable wpa_supplicant.service
systemctl enable wpa_supplicant@wlan0.service
rfkill unblock 0
Servisi düzenlememiz gerekiyor ip dağıtma işlemi için sudo systemctl edit wpa_supplicant@wlan0.service
varsa içindeki her şeyi silip aşağıdakini ekleyin.
[Service]
ExecStartPre=/sbin/ip link set %i promisc on
ExecStopPost=/sbin/ip link set %i promisc off
Gelelim ip dağıtma işlemine kablolu için ayrı wifi için ayrı yapılandırma aşağıdaki gibi olmalı
cat > /etc/systemd/network/04-wired.network <<EOF
[Match]
Name=e*
[Network]
Address=192.168.88.253/30
DHCPServer=yes
[DHCPServer]
DNS=1.1.1.1 1.0.0.1
EOF
cat > /etc/systemd/network/08-wifi.network <<EOF
[Match]
Name=wl*
[Network]
DHCP=yes
IPForward=ipv4
IPv4ProxyARP=yes
EOF
Kuracağımız paketlerimiz
apt update && apt install -y parprouted dhcp-helper
Kullanacağınız bridge.sh
dosyamız.
#!/usr/bin/env bash
set -e
[ $EUID -ne 0 ] && echo "run as root" >&2 && exit 1
systemctl stop dhcp-helper
systemctl enable dhcp-helper
# Enable ipv4 forwarding.
sed -i'' s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/ /etc/sysctl.conf
# Service configuration for standard WiFi connection. Connectivity will
# be lost if the username and password are incorrect.
systemctl restart wpa_supplicant.service
# Enable IP forwarding for wlan0 if it's not already enabled.
grep '^option ip-forwarding 1$' /etc/dhcpcd.conf || printf "option ip-forwarding 1\n" >> /etc/dhcpcd.conf
# Disable dhcpcd control of eth0.
grep '^denyinterfaces eth0$' /etc/dhcpcd.conf || printf "denyinterfaces eth0\n" >> /etc/dhcpcd.conf
# Configure dhcp-helper.
cat > /etc/default/dhcp-helper <<EOF
DHCPHELPER_OPTS="-b wlan0"
EOF
# Enable avahi reflector if it's not already enabled.
sed -i'' 's/#enable-reflector=no/enable-reflector=yes/' /etc/avahi/avahi-daemon.conf
grep '^enable-reflector=yes$' /etc/avahi/avahi-daemon.conf || {
printf "something went wrong...\n\n"
printf "Manually set 'enable-reflector=yes in /etc/avahi/avahi-daemon.conf'\n"
}
# I have to admit, I do not understand ARP and IP forwarding enough to explain
# exactly what is happening here. I am building off the work of others. In short
# this is a service to forward traffic from WiFi to Ethernet.
cat <<'EOF' >/usr/lib/systemd/system/parprouted.service
[Unit]
Description=proxy arp routing service
Documentation=https://raspberrypi.stackexchange.com/q/88954/79866
Requires=sys-subsystem-net-devices-wlan0.device dhcpcd.service
After=sys-subsystem-net-devices-wlan0.device dhcpcd.service
[Service]
Type=forking
# Restart until wlan0 gained carrier
Restart=on-failure
RestartSec=5
TimeoutStartSec=30
# clone the dhcp-allocated IP to eth0 so dhcp-helper will relay for the correct subnet
ExecStartPre=/bin/bash -c '/sbin/ip addr add $(/sbin/ip -4 -br addr show wlan0 | /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
ExecStartPre=/sbin/ip link set dev eth0 up
ExecStartPre=/sbin/ip link set wlan0 promisc on
ExecStart=-/usr/sbin/parprouted eth0 wlan0
ExecStopPost=/sbin/ip link set wlan0 promisc off
ExecStopPost=/sbin/ip link set dev eth0 down
ExecStopPost=/bin/bash -c '/sbin/ip addr del $(/sbin/ip -4 -br addr show wlan0 | /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
[Install]
WantedBy=wpa_supplicant.service
EOF
systemctl daemon-reload
systemctl enable parprouted
systemctl start parprouted dhcp-helper
Ardından dosyası çalıştırın.
sudo chmod +x bridge.sh
sudo ./bridge.sh
Ardından isteğe bağlı olarak raspberrypi cihazınızı yeniden başlatın. Artık Raspberry Pi’de yer alan ethernet portuna cihazınızı bağlayın direk olarak ip adresi alıp internete çıkması lazım. Olmuyorsa yanlış veya bir yerlerde eksiklik vardır.
Bir IPsec VPN, ağ trafiğinizi şifreler ve VPN sunucusu ile sizin bağlantınız arasındaki trafiği kimse göremez. Bu özellikle güvenli olmayan ağlarda, ağ trafiğinizi dinleyerek işlem yapan hükumetlere karşı çıkmada, hedef odaklı reklamları engellemede etkilidir.
IPsec/L2TP, Cisco IPsec ve IKEv2 protokollerini aşağıdaki betik ile birkaç dakika içinde kuracağız. Yeni açtığınız sanal sunucu üzerinde önce apt update && apt upgrade
komutunu çalıştırıyoruz ve sistemi güncelleyelim.
Hemen ardından ise otomatik kurulum betiğimizi çalıştırıyoruz;
wget https://git.io/vpnsetup -O vpn.sh && sudo sh vpn.sh
Bu betik libreswan ve xl2tpd gibi uygulamaları indirip kuracak ve size kullanmanız için gerekli bilgileri verecek. Libreswan, RSA imzalarını kullanarak X.509 sertifikalarını kullanarak IKEv2 istemcilerinin kimliğini doğrulayabilir. Bu sebeple kullanıcı adı ve parola gerektirmez.
İsterseniz herhangi bir IPSec desteği veren uygulamadan isterseniz de Windows’un kendi clienti ile giriş yapabilirsiniz.
Geliştirilmeye devam eden IPSec uygulamasının güncel sürümlerini kurmak için ise aşağıdaki betiği çalıştırmanız yeterlidir. Gerekli olan indirme, kurma ve yapılandırma işlemlerini kendisi otomatik olarak yapacaktır.
wget https://git.io/vpnupgrade -O vpnup.sh && sudo sh vpnup.sh
Debian bir işletim sisteminde öncelikli olarak kurulacak güncel postgresql sürümü belirlenir, ben bu makaleyi kaleme alırken en güncel sürüm 13.2 olduğu için Postgresql repolarını direk sisteme dahil edeceğim.
Eğer Debian repolarını kullanırsam maksimum 12 sürümünü kullanabileceğim ki bu istediğim bir şey değil çünkü 13 sürümündeki bir takım özellikler gerekiyor ve bu özellikler hayat kurtaracak.
sudo sh -c 'echo "deb <http://apt.postgresql.org/pub/repos/apt> $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - <https://www.postgresql.org/media/keys/ACCC4CF8.asc> | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install postgresql-13
Bağımlılık kontrolü yapalım eksik bir şey kalmasını istemeyiz.
apt list --installed | grep postgresql
Hemen sonrasında eski sürüm yapılandırmalar’da yer alan değişikliklere göz atıyoruz.
diff /etc/postgresql/11/main/postgresql.conf /etc/postgresql/13/main/postgresql.conf
diff /etc/postgresql/11/main/pg_hba.conf /etc/postgresql/13/main/pg_hba.conf
Postgresql’in tüm servislerini durduruyoruz, sistem üzerinde kurulu olan her iki sürümüde kapatmalıyız.
sudo systemctl stop postgresql.service
Postgresql kullanıcısı ile giriş yapmalıyız
sudo su postgres
Postgresql migration işlemini gerçekleştirebilmemiz için pg_upgrade uygulamasını çalıştırmalıyız. Bunuda aşağıdaki gibi yapabilirsiniz.
/usr/lib/postgresql/13/bin/pg_upgrade \\
--old-datadir=/var/lib/postgresql/11/main \\
--new-datadir=/var/lib/postgresql/13/main \\
--old-bindir=/usr/lib/postgresql/11/bin \\
--new-bindir=/usr/lib/postgresql/13/bin \\
--old-options '-c config_file=/etc/postgresql/11/main/postgresql.conf' \\
--new-options '-c config_file=/etc/postgresql/13/main/postgresql.conf' \\
--check
Kontrolleri sağlanacak biraz sürebilir, kontroller tamamlandıysa ve hiç bir hata yoksa aşağıdaki gibi bir çıktı sizi karşılar
Performing Consistency Checks
-----------------------------
Checking cluster versions ok
Checking database user is the install user ok
Checking database connection settings ok
Checking for prepared transactions ok
Checking for reg* data types in user tables ok
Checking for contrib/isn with bigint-passing mismatch ok
Checking for tables WITH OIDS ok
Checking for invalid "sql_identifier" user columns ok
Checking for presence of required libraries ok
Checking database user is the install user ok
Checking for prepared transactions ok
Checking for new cluster tablespace directories ok
*Clusters are compatible*
Ardından --check
parametresini kaldırıp işlemi başlatıyoruz.
/usr/lib/postgresql/13/bin/pg_upgrade \\
--old-datadir=/var/lib/postgresql/11/main \\
--new-datadir=/var/lib/postgresql/13/main \\
--old-bindir=/usr/lib/postgresql/11/bin \\
--new-bindir=/usr/lib/postgresql/13/bin \\
--old-options '-c config_file=/etc/postgresql/11/main/postgresql.conf' \\
--new-options '-c config_file=/etc/postgresql/13/main/postgresql.conf'
Bu işlem veritabanı boyutunuza göre değişebilir. Indexlerin alınmayacağını unutmayın. Tamamlandığında aşağıdaki gibi bir çıktı gene sizi bekliyor.
Performing Consistency Checks
-----------------------------
Checking cluster versions ok
Checking database user is the install user ok
Checking database connection settings ok
Checking for prepared transactions ok
Checking for reg* data types in user tables ok
Checking for contrib/isn with bigint-passing mismatch ok
Checking for tables WITH OIDS ok
Checking for invalid "sql_identifier" user columns ok
Creating dump of global objects ok
Creating dump of database schemas
ok
Checking for presence of required libraries ok
Checking database user is the install user ok
Checking for prepared transactions ok
Checking for new cluster tablespace directories ok
If pg_upgrade fails after this point, you must re-initdb the
new cluster before continuing.
Performing Upgrade
------------------
Analyzing all rows in the new cluster ok
Freezing all rows in the new cluster ok
Deleting files from new pg_xact ok
Copying old pg_xact to new server ok
Setting next transaction ID and epoch for new cluster ok
Deleting files from new pg_multixact/offsets ok
Copying old pg_multixact/offsets to new server ok
Deleting files from new pg_multixact/members ok
Copying old pg_multixact/members to new server ok
Setting next multixact ID and offset for new cluster ok
Resetting WAL archives ok
Setting frozenxid and minmxid counters in new cluster ok
Restoring global objects in the new cluster ok
Restoring database schemas in the new cluster
ok
Copying user relation files
ok
Setting next OID for new cluster ok
Sync data directory to disk ok
Creating script to analyze new cluster ok
Creating script to delete old cluster ok
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
./analyze_new_cluster.sh
Running this script will delete the old cluster's data files:
./delete_old_cluster.sh
Ardından servisleri root kullanıcısı ile başlatıyoruz.
systemctl start postgresql@13-main.service
Her şey olması gerektiği gibi mi diye postgresql üzerinde analiz için vacuum işlemini tetikliyoruz. Bu işlemi postgres kullanıcısı ile yapmayı unutmayın.
./analyze_new_cluster.sh
Çıktısı şu şekilde olmalı
This script will generate minimal optimizer statistics rapidly
so your system is usable, and then gather statistics twice more
with increasing accuracy. When it is done, your system will
have the default level of optimizer statistics.
If you have used ALTER TABLE to modify the statistics target for
any tables, you might want to remove them and restore them after
running this script because they will delay fast statistics generation.
If you would like default statistics as quickly as possible, cancel
this script and run:
"/usr/lib/postgresql/13/bin/vacuumdb" --all --analyze-only
vacuumdb: processing database "project_x": Generating minimal optimizer statistics (1 target)
vacuumdb: processing database "postgres": Generating minimal optimizer statistics (1 target)
vacuumdb: processing database "template1": Generating minimal optimizer statistics (1 target)
vacuumdb: processing database "project_x": Generating medium optimizer statistics (10 targets)
vacuumdb: processing database "postgres": Generating medium optimizer statistics (10 targets)
vacuumdb: processing database "template1": Generating medium optimizer statistics (10 targets)
vacuumdb: processing database "project_x": Generating default (full) optimizer statistics
vacuumdb: processing database "postgres": Generating default (full) optimizer statistics
vacuumdb: processing database "template1": Generating default (full) optimizer statistics
Done
Ardından eski data klasörünü kaldıralım.
./delete_old_cluster.sh
Bu işlemler sorunucunda sistemde çift veritabanı sürümü olacağını unutmayın kullanmadığınız sürümü kalıcı olarak kaldırmanızı şiddetle öneririm.
sudo apt-get remove postgresql-11
sudo rm -rf /etc/postgresql/11/