Putty ppk dosyasını OpenSSH formatına dönüştürmek
PuttyGen tarafından oluşturulan private key dosyasıdır. PPK = PuTTY Private Key diye adlandırılır. Linux ortamında çalişığım için ve putty kullanmak istemediğim için bazen bu ppk private key dosyalarını pem formatına çeviriyorum. Aşağidaki yönergeleri takip ederek ppk dosyasını pem uzantısına çevirebilirsiniz.
#Gerekli araç yüklenir.
apt-get install putty-tools
# private key oluşturulur
puttygen DigitalOcean.ppk -O private-openssh -o id_rsa_digital_ocean
# public key oluşturulur
puttygen DigitalOcean.ppk -O public-openssh -o id_rsa_digital_ocean.pub
# Son olarak izinler düzenlenir.
chmod 400 id_rsa_digital_ocean
Sevgiler.
9 adımda mysql root şifresi sıfırlama
1. systemctl stop mysql
2. mysqld_safe --skip-grant-tables &
3. mysql -uroot
4. use mysql;
5. UPDATE mysql.user SET Password=PASSWORD('yeni_sifre') WHERE User='root';
6. FLUSH PRIVILEGES;
7. exit;
8. mysqladmin -u root -p shutdown
9. systemctl start mysql
Bitti.
rsyslog ‘da bazı mesajları göz ardı etmek
Merhaba loglarda bazı istemediğimiz mesajları göz ardı etmek isteyebiliriz. Bunun için ~ sembölünü kullanabilirsiniz.
vim /etc/rsyslog.conf
#Her şeyi göz ardı etmek için
*.* ~
#Belirli bir mesajı göz ardı etmek için
# Log dosyası içinde !log_opts yer alıyorsa göz ardı et.
:msg, contains, "!log_opts" ~
# Örnek log
monitor check_nrpe: Error: (!log_opts) Could not complete SSL handshake
#Değişiklikler yapıldıktan sonra servis yeniden başlatılır.
systemctl restart rsyslog
Sevgiler.
Puppet6 Server/Agent Yapılandırılması
Bu dökümanda Puppet6 ‘da nasıl Server/Agent yapılandırılması yapılır onu öğreneceğiz. Umarım faydalı bir yazı olur.
Puppet Master ve Nodelar arasında iletişimi HTTPS üzerinden (SSL kullanarak) gerçekleştirir. Puppet nodeların doğrulama ve kimliklendirme işlemleri için bu yapıyı kullanır. Çalışma mantığı, nodelar ilk master sunucuya geldiğinde (ilk iletişimde) eğer istek güvenliyse master sunucu nodelar için sertifika oluşturur ve node sertifikayı alır ve master/node arasında iletişim başlamış olur.
#Kurulum Gereksinimleri
. Debian 10
. Puppet6 sunucu > puppetserver.domain.com > 192.168.1.230
. Puppet6 node1 > node1.domain.com > 192.168.1.231
. Puppet6 node2 > node2.domain.com > 192.168.1.232
#Bazı tanımlamaları aşağıdaki gibi çağıracağız.
Sunucu : Puppet Sunucu, Puppet Server, Puppet Master Sunucu, Master, Sunucu
İştemci : Puppet Node, Puppet Client, Node, Client, İstemci
#Tüm test ortamındaki linux makinalar için hosts dosyası düzenlemesi aşağıdaki gibi yapılır.
echo -e "192.168.1.230\tpuppetserver.domain.com\n192.168.1.231\tnode1.domain.com\n192.168.1.232\tnode2.domain.com" >> /etc/hosts
Not : 8140. portunu güvenlik duvarından izin vermeyi unutmayın.
#Sunucu Kurulumu (Master)
wget https://apt.puppetlabs.com/puppet6-release-buster.deb && dpkg -i puppet6-release-buster.deb && apt-get update
apt-get install puppetserver
puppet.conf dosyası aşağıdaki gibi düzenlenir.
vim /etc/puppetlabs/puppet/puppet.conf
[main]
certname = puppetserver.domain.com
server = puppetserver.domain.com
environment = production
runinterval = 1h
[master]
dns_alt_names = puppetserver.domain.com
environment_timeout = unlimited
# puppetserver servisi yeniden başlatılır.
systemctl restart puppetserver
Puppetserver JVM tabanlıdır. Ön tanımlı olarak java başlangıc ve maksimum hafıza ayarları 2Gb olarak ayarlanmıştır. Eğer ki sisteminiz 2Gb ‘dan küçük hafızaya sahipse aşağıdaki gibi hata alacaksınız.
Oct 16 10:35:54 puppetserver puppetserver[5399]: OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000780000000, 2147483648, 0) failed; error='Not enough space' (errno=12)
Oct 16 10:35:54 puppetserver puppetserver[5399]: #
Oct 16 10:35:54 puppetserver puppetserver[5399]: # There is insufficient memory for the Java Runtime Environment to continue.
Oct 16 10:35:54 puppetserver puppetserver[5399]: # Native memory allocation (mmap) failed to map 2147483648 bytes for committing reserved memory
apt-mirror ile local repository oluşturmak
Merhaba, birden fazla debian tabanlı sunucunuz varsa hepsinin paket güncellemesini veya paket yüklemelerini ayrı ayrı yapmak hem bant genişliğini yorar hem de hız açısından yavaş olur. Bunların önüne geçmek için çok basit olan ufak bir aracı yani apt-mirror ‘i kullanacağız. apt-mirror aracını Debian, Ubuntu ve diğer deb paketli sistemlerde kullanabilirsiniz.
Aşağıdaki örnekte Debian10, Debian9, Debian8 ve oldstable repository’si mevcuttur.
Repository’nin dizini /srv/ olarak yapılandırılmıştır. Kendinize göre değiştirmeyi unutmayın.
#Yükleme
apt-get install apt-mirror
#Ayarlar
vim /etc/apt/mirror.conf
############# config ##################
#
set base_path /srv/
#
set mirror_path $base_path/mirror
set skel_path $base_path/skel
set var_path $base_path/var
set cleanscript $var_path/clean.sh
set limit_rate 2000k #16Mbps ile sınırlama
set nthreads 1
# set defaultarch <running host architecture>
set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set _tilde 0
#
############# end config ##############
deb-amd64 http://ftp.tr.debian.org/debian oldstable main contrib non-free
deb-amd64 http://ftp.tr.debian.org/debian oldstable-updates main contrib non-free
deb-amd64 http://ftp.tr.debian.org/debian stretch main contrib non-free
deb-amd64 http://ftp.tr.debian.org/debian stretch-updates main contrib non-free
deb-amd64 http://ftp.tr.debian.org/debian jessie main contrib non-free
deb-amd64 http://ftp.tr.debian.org/debian jessie-updates main contrib non-free
deb-amd64 http://ftp.tr.debian.org/debian buster main contrib non-free
deb-amd64 http://ftp.tr.debian.org/debian buster-updates main contrib non-free
clean http://ftp.us.debian.org/debian
#Web sunucusu kurulumu
apt-get install nginx
sed -i "s/\/usr\/share\/nginx\/html/\/srv\/mirror\/ftp.tr.debian.org\/;\nautoindex on/" /etc/nginx/conf.d/default.conf && systemctl restart nginx
#El ile düzenlemek isterseniz
vim /etc/nginx/conf.d/default.conf
Aşağıdaki satır
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
Aşağıdaki satırla değiştirilir.
location / {
root /srv/mirror/ftp.tr.debian.org/;
autoindex on;
index index.html index.htm;
}
ve systemctl restart nginx komutu ile servis yeniden başlatılır.Crontab ile
6 saatte bir repositoryi güncelleyeceğiz.
echo "* */6 * * * /usr/bin/apt-mirror" >> /var/spool/cron/crontabs/root
Son olarak diğer sunucuların sources.list kaydı aşağıdaki gibi olacaktır.
deb http://192.168.1.200/debian/ buster main
Sevgiler.
Clonezilla’yı Özelleştirme ve Otomatik Restore İşlemi
Merhaba,
Bu yazıda clonezilla’yi özelleştirmeyi ve clonezilla kurulu usb bellek üzerindeki clonu otomatik olarak nasıl restore edeceğimizi anlatmaya çalışacağım. Umarım faydalı bir yazı olur.
#Gereksinimler
1. Imajınızın boyutuna göre usb bellek. (32Gb flash bellek kullanacağım.)
2. Clonezilla, zip olarak indirilecek. (https://clonezilla.org/downloads/download.php?branch=stable)
3. Imaj dosyası. (Önceden almış olduğunuz clone)
#Kurulum adımları
1. Usb belleğin disk yapısı ayarlanır.
32Gb usb belleğin 1Gb’lık kısmını clonezilla için, geri kalan kısmını da imaj dosyası için ayırıyorum.
fdisk -l komutu ile mevcut partitionlara ve disklere bakılır. Aşağıdaki şekilde görüldüğü üzere /dev/sdb aygıtı bizim usb belleğimiz.
fdisk /dev/sdb komutu ile disk yapılandırılmasına geçebiliriz. Şekildeki gibi usb belleğin partition yapısını ayarlıyoruz.
1Gb ‘lık yani /dev/sdb1 partitionunun Boot flag’i ekliyoruz. (clonezilla yüklenecek partition)
Son olarak fdisk -l çıktısı şekildeki gibi olacaktır.
Bölümleri biçimlendiriyoruz.
alsamixer ayarlarını kaydetmek
Merhaba, her reboot işleminden sonra alsamixer ayalarının değişmemesi için aşağıdaki komut çalıştırılıp ayar dosyası kaydedilir.
sudo alsactl store /var/lib/alsa/asound.state #ayar dosyası
Sevgiler.
[Bash] Özel Değişkenler
Bash kabuğunun içinde gömülü olarak gelen özel değişkenler aşağıdaki gibidir.
$$
Geçerli kabuğun pid numarasını verir.
root@debian:~# echo $$ 532
$!
Arka plana atılmış olan son komutun pid numarasını verir.
root@debian:~/test# mkdir test{1..9} & [1] 799 root@debian:~/test# echo $! 799
$?
son çalıştırılan komutun exit status çıktısı.
ps -aux | grep sshd | grep -v grep | echo $?
sshd olduğu için çıktı 0 (sıfır) olacaktır. Eğer komutun çıktısı bir değer döndürmeseydi çıktı 1 olacaktı.
exit code 0 = success
exit code 1-255 = others
$#
Girilen argümanların toplam sayısını verir. root@debian:~/test# ./test.sh a b c d e f g h Girilen Toplam Arguman Sayisi: 8 #Script içeriği #!/bin/bash echo "Girilen Toplam Arguman Sayisi: $#"
$@
Girilen tüm argümanları listeler.
root@debian:~/test# ./test.sh a b c d e f g h Girilen Argumanlar: a b c d e f g h #Script içeriği #!/bin/bash echo "Girilen Argumanlar: $@"
$0
Geçerli scriptin dosya adı.
root@debian:~/test# vim test.sh root@debian:~/test# chmod +x test.sh root@debian:~/test# ./test.sh Script adi: ./test.sh #Script #!/bin/bash echo "Script adi: $0"
$1..9 veya $n
$1 > 1. argümanı verir. $2 > 2. argümanı verir. root@debian:~/test# ./test.sh a b c 1. arguman a 2. arguman b 3. arguman c #Script #!/bin/bash echo "1. arguman $1" echo "2. arguman $2" echo "3. arguman $3"
Sevgiler.
touch komutu
touch komutu var olan dosyanın zaman damgasını değiştirir, dosya yoksa yeni bir boş dosya oluşturur.
Kullanımı :
touch deneme.txt
Sadece modify time değistirmek istiyorsak -m parametresiyle kullanırız.
touch -m deneme.txt
stat deneme.txt komutu ile baktığımız da modify satırının değiştiğini görebilirsiniz.
Örnek Çıktı:
root@node2:~# touch deneme.txt root@node2:~# stat deneme.txt File: deneme.txt Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 131093 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-07-11 11:09:12.745217629 +0300 Modify: 2019-07-11 11:09:12.745217629 +0300 Change: 2019-07-11 11:09:12.745217629 +0300 Birth: - root@node2:~# touch -m deneme.txt root@node2:~# stat deneme.txt File: deneme.txt Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 131093 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2019-07-11 11:09:12.745217629 +0300 Modify: 2019-07-11 11:11:31.767782892 +0300 Change: 2019-07-11 11:11:31.767782892 +0300 Birth: - root@node2:~#
### -d parametresiyle belirli bir zaman damgasına sahip dosya oluşturabilirsiniz.
touch -d "1 June 2018" deneme1.txt
root@node2:~# touch -d "1 June 2018" deneme1.txt root@node2:~# stat deneme1.txt File: deneme1.txt Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 131285 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2018-06-01 00:00:00.000000000 +0300 Modify: 2018-06-01 00:00:00.000000000 +0300 Change: 2019-07-11 11:21:54.451264560 +0300 Birth: - root@node2:~#
Örnekleri çoğaltabiliriz.
touch -d "1 July 2017 10:44" deneme2.txt
touch -d "30 October" deneme3.txt
touch -d "2001-01-01" deneme4.txt
touch -d "01/01" deneme5.txt
Sevgiler.
Postfix ile farklı iplerden eposta göndermek
Postfix 3.0 versiyonuyla gelen randmap özelliği sayesinde her table lookup sorgusundan rasgele bir dönüş gelir. Örneğin 3 adet değeriniz var diyelim ve her sorgulamada bir değer rasgele seçilir. Biz de bu yapıyı kullanarak tek bir sunucu üzerinden ama farklı ip adreslerinden eposta göndereceğiz ve bu sayede bedava eposta hizmeti sunan sistemlerin günlük eposta alma limitlerine takılmayacağız.
Ayrıca bu randmap özelliğiyle yük dengeleme de yapabilirsiniz.
randmap: Her tablo sorgusundan rasgele sonuçlar döndürür.
#Kurulum Öncesi
Gerçek sunucu ip adresi : 192.168.1.230
Sanal Ip 1 : 192.168.1.231
Sanal Ip 2 : 192.168.1.232
Sanal Ip 3 : 192.168.1.233
#Kurulum
1. master.cf dosyasına ekleyeciğimiz ip adresleri /etc/network/interface dosyasında vip olarak tanımlanır.
iface enp6s1:0 inet static
address 192.168.1.231/24
iface enp6s1:1 inet static
address 192.168.1.232/24
iface enp6s1:2 inet static
address 192.168.1.233/24
Interfaceler ayağa kaldırılır.
ifup enp6s1:0;ifup enp6s1:1;ifup enp6s1:2
2. vim /etc/postfix/master.cf dosyasını açıp aşağıdaki satırları kendinize göre düzenleyin ve kaydedin.
relay1 unix - - n - - smtp
-o smtp_bind_address=192.168.1.231
-o smtp_helo_name=mail1.deneme.org
-o syslog_name=relay1
relay2 unix - - n - - smtp
-o smtp_bind_address=192.168.1.232
-o smtp_helo_name=mail2.deneme.org
-o syslog_name=relay2
relay0 unix - - n - - smtp
-o smtp_bind_address=192.168.1.230
-o smtp_helo_name=mail0.deneme.org
-o syslog_name=relay0
relay3 unix - - n - - smtp
-o smtp_bind_address=192.168.1.233
-o smtp_helo_name=deneme.org
-o syslog_name=relay3
3. vim /etc/postfix/main.cf dosyasına asağıdaki 2 satırı ekliyoruz.
sender_dependent_default_transport_maps = randmap:{relay0,relay1,relay2,relay3}
smtp_connection_cache_on_demand=no
4. Postfix servisi yeniden başlatılır.
systemctl restart postfix
Bundan sonraki kısım tamamen local ip adreslerinin dışarıya hangi ip ile natlanacağı kısımdır.
Örnek : 192.168.1.230 > 88.xx.x.55
Örnek : 192.168.1.231 > 88.xx.x.56
Örnek : 192.168.1.232 > 88.xx.x.57
Örnek : 192.168.1.233 > 88.xx.x.58
Gönderilmiş olan epostalar belirtmiş olduğumuz ip adreslerinden rasgele çıkacaktır. Loglarda relay{0,1,2,3} olarak takip edebilirsiniz.
Örnek Log:
Sep 27 16:46:28 duyuru **relay0/smtp**[15703]: E1358BC7C37: to=<deneme@deneme.org>, relay=gw.deneme.org[1.1.1.1]:25, delay=2, delays=0.01/0/1.6/0.44, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as A5BE7C12C89
Sevgiler.