Centos 7 de Loganalyzer Syslog Kurulumu (2019)
Herkese Merhabalar
Geçen zaman ile daha önce
yazdığım makalemin geçerliliği bittiğinden hem de yeni bir syslog ihtiyacım
olduğundan güncel sistemler ile kurup yeni bir makale hazırlamak istedim.
Tüm sistemcilerin temel görevlerinden olan SW
veya Linux serverlerin loğlarının merkezi bir yerde toplamak. Free , stabil ve
çok fonksiyonel olduğundan vazgeçilmez bir yapı kurulmuş oluyor. Eminim sizde
türevlerini kullanıyorsunuzdur.
Eski makalede olduğu gibi aynı mantık sadece
güncel versiyonlar olacak. Tabi tüm kurulum değişmiş. Neyse uzatmadan
başlayalım.
Yapı: Centos 7 üzerine
rsysylog ile loğları db ye yazıyoruz. Loganalyzer uygulaması ile web browser
üzerinden db deki loğları istediğimiz gibi inceleyebiliriz.
Centos 7 minimal indirip kurdum. Yum update ile güncelledim.
Buradan kuruluma başladım.
[root@localhost ~]#
cat /etc/centos-release
CentOS Linux release
7.3.1611 (Core)
[root@localhost ~]#
yum update
Loaded plugins:
fastestmirror
Loading mirror
speeds from cached hostfile
* base: mirror.rackdc.com
* extras: mirror.rackdc.com
* updates: mirror.rackdc.com
No packages marked
for update
Kurulumu gerçekleştirirken yararlandığım
kaynakların listesi paylaşmak istiyorum. Biraz ondan biraz burdan ihtiyacıma
göre kurulum yaptım. Bazı yerleri kendime göre değiştirdim.
1.
Rsyslog kurulumu:
Logları toplayacak ve DB mize yazacak
uygulama kurulumu ile başlayalım.
Mevcut yum deposunda V8 olmadığı için
özel depo kullanmamız gerekiyor.
[root@localhost ~]#
yum install rsyslog
Loaded plugins:
fastestmirror
Loading mirror
speeds from cached hostfile
* base: mirror.rackdc.com
* extras: mirror.rackdc.com
* updates: mirror.rackdc.com
Package
rsyslog-7.4.7-16.el7.x86_64 already installed and latest version
Nothing to do
Sayfasına bakarak son versiyon stable olanı
tespit edebilirsiniz. Ben bu yazıyı yazarken V8 olanı vardı.
Depomuzu ekleyelim ve rsyslogu kuralım.
wget
http://rpms.adiscon.com/v8-stable/rsyslog.repo
mv rsyslog.repo
/etc/yum.repos.d/rsyslog.repo
yum install rsyslog* --skip-broken
Server yeni açıldığında otomatik
çalışması için:
systemctl enable rsyslog.service
Kurulum tamamlandı. Config ayarları için
DB gerekiyor. Önce DB mizi kuralım sonra ayarlarını tamamlayalım.
2.
MYSQL kurulumu ve ayarları:
Centos 7 ile birlikte artık yum depomuzda
mysql gelmiyor. Mysql özel deposunu ekliyerek kolayca kurulumu tamamlayacağız.
Yukarıdaki web sayfasını ziyaret ederek son versiyonu tespit edip onun deposunu
indirip kullanacağız.
İndirdiğimiz dosyaların artıkları için kendime temp dosyası oluşturuyorum.
mkdir /root/temp
cd /root/temp
Sonra en güncel depoyu indiriyorum.
wget
https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
İnen rpm dosyasını kuruyorum.
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
Artık depomuz ekli. Yum ile kuruluma
başlayabiliriz.
yum install mysql-server mysql
Kurulum sırasında sorulan sorulara ‘Y’
ile ilerleyip kurulumu tamamlıyoruz.
Kurulum sonrası mysql çalıştırıyoruz.
systemctl start mysqld
systemctl status mysqld
Mysql kurulum
sırasında otomatik root şifresi atıyor. Bunu öğrenmek için loğlarında arama
yapıyoruz.
[root@localhost ~]#
grep 'temporary password' /var/log/mysqld.log
2019-11-22T13:16:58.311684Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: rss5)TJH.Kdj
Yukarı gördüğünüz
şifreyi ile girişte değiştirmenizi istiyor. Basit güvenlik ayarları yapmak
için:
mysql_secure_installation
diyerek loğda
öğrendiğimiz şifreyi giriyoruz. Bizden yeni şifremizi oluşturmamızı istiyor.
Güvenlik biraz abartılmış. En az 12 karakter ve içinde küçük harf, büyük harf, rakam, özel karakter
olacak şekilde yeni şifremizi belirliyoruz.
İlk girişte bize
şifremizi değiştirtmişti. Bu sefer komutun devreye girmesi ile root şifremizi
değiştirmek istiyor musunuz diye soruyor. No diyebilirsiniz.
Diğer sorulara da
okuyarak istediğimiz gibi cevap verebilirsiniz. Bilmiyorsanız yes
diyebilirsiniz. Cevap vermesseniz sorun oluyor. Boş geçmeyin.
3.
Rsyslog DB
bağlantısı:
Şimdi Rsyslog için
mysql içinde uygun db ve tabloları oluşturalım:
mysql -u root -p < /usr/share/doc/rsyslog-8.1911.0/mysql-createDB.sql
Yukarıdaki komutu
yazarken “mysql -u root -p < /usr/share/doc/rsyslog” sonrasını tab
tamamlatırsanız farklı versiyon kurmuşsanız otomatik doğru olanı ekleyecektir.
Bu komut size Mysql içinde “Syslog” isminde bir database oluşturacak.
Şimdi bu databese’de
yetkili bir kullanıcı oluşturalım. Önce Mysql e girelim:
mysql -u root –p
Not: Yukarıdaki komutta p den sonra boşluk bırakmazsanız "Access denied for user 'root'@'localhost' (using password: NO)" hatası alırsınız.
Syslog databesinde tam yetkili local “rsyslogdbadmin” isimli ‘Rsyslogdbadmin1!’ şifreli bir kullanıcı oluşturalım.
CREATE USER 'rsyslogdbadmin'@'%' IDENTIFIED BY 'Rsyslogdbadmin1!';
GRANT ALL PRIVILEGES ON *.* TO 'rsyslogdbadmin'@'%';
ALTER USER 'rsyslogdbadmin'@'%' IDENTIFIED WITH mysql_native_password BY 'Rsyslogdbadmin1!';
FLUSH PRIVILEGES;
ALTER USER 'rsyslogdbadmin'@'%' IDENTIFIED WITH mysql_native_password BY 'Rsyslogdbadmin1!';
exit
Mysql hazır. Şimdi
rsyslog ayarlayalım.
vi /etc/rsyslog.conf
Kırmızı ile
işaretlediğim satırların başındaki # ifadeyi kaldıralım.
# for parameters see
http://www.rsyslog.com/doc/imudp.html
module(load="imudp")
# needs to be done just once
input(type="imudp"
port="514")
# Provides TCP syslog
reception
# for parameters see
http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp")
# needs to be done just once
input(type="imtcp"
port="514")
Aşağıdaki satırları istediğiniz uygun
bir yere ekleyelim.
module(load="ommysql")
#*.*
:ommysql:127.0.0.1,Syslog,rsyslogdbadmin,Rsyslogdbadmin1!
$template tpl,"insert into SystemEvents (Message, Facility, EventSource, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag, FromHost, EventUser) values ('%msg%', %syslogfacility%, '%FROMHOST-IP%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%', '%FROMHOST%', '%HOSTNAME%')",SQL
#########
*.*;cron.none :ommysql:127.0.0.1,Syslog,rsyslogdbadmin,Rsyslogdbadmin1!;tpl
$template tpl,"insert into SystemEvents (Message, Facility, EventSource, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag, FromHost, EventUser) values ('%msg%', %syslogfacility%, '%FROMHOST-IP%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%', '%FROMHOST%', '%HOSTNAME%')",SQL
#########
*.*;cron.none :ommysql:127.0.0.1,Syslog,rsyslogdbadmin,Rsyslogdbadmin1!;tpl
Yukarıdaki değişikler ile 514 portumuzu
aktif ettik. Ayrıca *.* ile her şeyi ommysql modulü ile localdeki (172.0.0.1)
Syslog Database’sine verilen kullanıcı adı ve şifre ile gönder dedik J Siz farklı kullanıcı ve şifre oluşturursanız burayı ona göre
düzenleyin.
Artık hazırız. Rsyslogu yeniden başlatalım.
systemctl restart rsyslog
systemctl status rsyslog
Sorunsuz bir şekilde çalışmaya başlamış
ise loğlarımız mysqle düşmeye başlamıştır. İsterseniz aşağıdaki gibi kontrol
edebilirsiniz.
mysql -u
rsyslogdbadmin -p Syslog
mysql> select
count(*) from SystemEvents;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
4.
Firewall ayarlarının yapılması:
Bir çok insan firewall ları kapatır ve geri
açmayı düşünmez. Güvenlik önemli bir olaydır. Basit bir şekilde bu işlemi
yapacağız. İhtiyaçlarımızı belirleyelim:
·
Uzaktan log gelmesi için 514
port
·
Web sayfası için 80 portu
·
İstiyorsak (şart değil) Mysql
remote için 3306 portu
Firewall kurallarımıza bakalım.
firewall-cmd
--list-all
firewall-cmd
--permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent
--add-port=514/udp
firewall-cmd
--permanent --add-port=80/tcp
firewall-cmd --reload
firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: dhcpv6-client ssh
ports: 514/tcp 3306/tcp 80/tcp 514/udp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
5.
Web Servis kurulumu:
Apache:
yum install httpd
systemctl enable httpd.service
systemctl start httpd
systemctl status httpd
Web Servisimizide kurduğumuza göre artık
http://server-ip-adresi gittiğimizde apache sayfası göreceğiz.
Php:
yum install php
php-mysql php-gd
Gerekli olan php de
kurulduğuna göre php modulumüzü test edelim. Bunun için:
vi /var/www/html/test.php
içine aşağıdaki
metini ekleyip kaydediyoruz.
<?php
phpinfo();
?>
systemctl restart httpd
Web servisimizide
restart ettiğimize göre http://server-ip-adresi/test.php
sayfasını açtığımızda php info sayfasını
göreceğiz.Bu şekilde php testini yapmış olduk.
6.
Loganalyzer
Kurulumu:
Son versiyonu öğrenmek için http://loganalyzer.adiscon.com/downloads/
sitesini ziyaret ediyoruz.
cd /root/temp
Not: Proxy ile örnek olsun diye yukarıdaki komutun başka hali
"wget -e use_proxy=yes -e https_proxy='http://10.81.101.65:3128/' https://download.adiscon.com/loganalyzer/loganalyzer-4.1.8.tar.gz "
Son versiyonu
indiriyoruz. Bu yazıyı yazarken en son 4.1.8 vardı.
tar zxvf
loganalyzer-4.1.8.tar.gz
Dosyamızı
açıyoruz.
cd loganalyzer-4.1.8
cp -fR contrib/*
/var/www/html/
cp -fR src/*
/var/www/html/
ilgili
dosyalarımızı web servisimizin dizinine taşıyoruz. Ben burda küçük bir
değişiklik yaparak direk html içine taşıyorum. Bu sayede http://server*ip-adresimiz/ yazdığımızda
log analyzer gelecek.
cd /var/www/html/
Web servisimizin
dizinine geçiyoruz.
chmod +x
configure.sh secure.sh
Kurulum için
gerekli olan izinleri veriyoruz.
./configure.sh
Bu komut ile config.php
dosyasının oluşmasını sağlıyoruz. Artık Web sayfımızdan kuruluma devam
edebileceğiz.
Not: Php web sayfasında kurulum ayabilmek için selinux kapalı
olması gerekiyor. Bunun için disable yapmamıza gerek yok. Permissive olması
yeterli. Sunucu reboot olduğunda tekrar normale dönecektir. İsterseniz direk “setenforce
1” tekrar açabilirsiniz.
[root@localhost ~]# setenforce
0
[root@localhost ~]#
getenforce
Permissive
Eğer Selinuz
kapatılmaz ise chmod 666 hatası alacaksınız.
http://server*ip-adresimiz/ Yazarak kuruluma Web Servisi üzerinden devam ediyoruz.
Kuruluma Başlıyoruz.
Chmod ayarları ve selinux tamam ise burası sorun olmayacaktır.
Bu sayfa loganalyzer kullanıcılarının tanımlanacağı db ayarlıyoruz. Database ismini, kullanıcı adı ve şifresini doğru giriniz. Tablo adına dokunmuyoruz.
Burası esas olan yer. Source type olarak mysql seçiyoruz. Database ismini , tablo ismini doğru yazmamız gerekiyor. Tablo isminde Büyük, küçük harflere dikkat edelim.
Not: Enable Row Counting kısmını No yapın. Yoksa ilerde sayfanız çok yavaşlar. Her sayfa açılışında log sayısını bulmaya çalışır :)
Ve Bitti Yeni syslog uygulamanız hayırlı olsun.
#!/bin/sh
#MYSQL queries
RECORDSTODELETE=`mysql -u {user} -p{password} –silent -e “SELECT COUNT(*) FROM Syslog.SystemEvents WHERE Syslog.SystemEvents.ReceivedAt < DATE_SUB(NOW(), INTERVAL 120 DAY);"`
RESULTS=`mysql -u {user} -p{password} –silent -e "DELETE from Syslog.SystemEvents WHERE Syslog.SystemEvents.ReceivedAt < DATE_SUB(NOW(), INTERVAL 120 day);"`
`logger -i Purged ${RECORDSTODELETE} records from logging database`
vi /etc/my.cnf
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address = 0.0.0.0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
bind-address = 0.0.0.0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid