Bu Makalemizde, Open Source bir loglama çözümü olan Graylog v3.0’ın kurulumunu ele alacağız (v3.0.1) ve bunu sistemlerimizin sysloglarını merkezi bir konumda toplayacak şekilde yapılandıracağız. Graylog3, SSH girişlerini ve sıra dışı etkinliklerini izlemekten hata ayıklama uygulamalarına kadar birçok kullanım senaryosuna sahip güçlü bir günlük yönetimi ve analiz aracıdır. Elasticsearch, Java, MongoDB ve Scala’ya dayanmaktadır.
Graylog3 Dört ana bileşene sahiptir:
Graylog3 Server nodes: Mesajları alan ve işleyen ve diğer tüm sunucu dışı bileşenlerle iletişim kuran bir çalışan olarak hizmet eder. Performansı CPU gücünüz ile doğru orantılıdır.
Elasticsearch node: Tüm günlükleri / mesajları saklar. Performansı RAM ve disk I/O’ye bağlıdır
MongoDB: Meta verileri depolar ve fazla yüklenmez
Web Arayüzü (GUI): Kullanıcı arayüzü
Graylog3 bileşenlerinin en basti haliyle şeması aşağıdadır (mesajların diğer sunucularınızdan gönderildiğini unutmayın):
Çok temel bir kurulum için, tüm bileşenler yukarıdaki gibi aynı sunucuya kurulabilir.
Fakat EPS oranı yüksek çok sayıda sunucu ,Firewall ve network cihazı barındıran bir IT alt yapınız varsa , Graylog sunucusu, Elasticsearch veya MongoDB bileşenleri bir kesinti yaşanmamsı ve performans artışı için , Graylog3 Kurulumunu birden fazla makine ve DB üzerine aktarmak hem kesinti sırasında log kaybının önüne geçecek ve yüksek kullanılabilirlikle beraber performans artışı sağlayacaktır.
Çoklu sunucu kurulumu ile ilgil aşağıdaki örnek diagramları inceleyerek daha detaylı fikir edinebilirsiniz.
Sistem Gereksinimleri
- Centos 7 X64 işletim sistemi (Bu kurulumu centos 7 v18.10 üzerinde yapıyor olacağız.)
- 4 Gb ram
- 4 Core CPU
- Min 100 GB Disk
- Elasticsearch 5 veya 6
- MongoDB 3.6 or later (latest stable version is recommended)
- Oracle Java SE 8 (OpenJDK 8 also works; latest stable update is recommended)
Burada belirtmek istediğim özel bir nokta var bu tür sistemlerin kurulumlarını yapmadan önce ihtiyaçları ve kaynakları kurulum öncesi belirlemek önem taşıyor Log toplama işlemlerinde kritik konu disk kapasitesini belirlemek SIEM yada logManagement yazılımları çok kısa sürede büyük disk alanlarını doldurabiliyor. Kurulum sonrası iyice şişmiş diskler üzerinde disk genişletme gibi işlemlerle uğraşmak çok isteyeceğimiz bir durum değil.
Disk hesabı yapabilmeniz için aşağıdaki linkten sistem kaynaklarınızı belirterek ne kadar alana ihtiyacınız olduğunu yaklaşık olarak hesaplayabilirsiniz.
http://www.aspiretss.com/tools
https://www.trionlogics.com/EPS.html
https://siemsizingcalculator.logpoint.com/
İlk olarak Serverımızın EPEL(Extra Packages for Enterprise Linux) Yum deposunu güncelliyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#Eğer Repo bağlantısı yoksa aşağıdaki komutu çalışıtırıyoruz. rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum repolist # Çıktımız aşağıdaki gibi olacaktır. Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.radoreservers.com * epel: ftp.wrz.de * extras: mirror.muvhost.com * updates: mirror.muvhost.com repo id repo name status base/7/x86_64 CentOS-7 - Base 10,019 epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,016 extras/7/x86_64 CentOS-7 - Extras 382 updates/7/x86_64 CentOS-7 - Updates 1,477 repolist: 24,894 [root@cacti ~]#sudo yum install epel-release -y #Sistem güncellemesini gerçekleştirin ve sistemi yeniden başlatarak sistem değişikliklerini uygulayın [root@root~]#sudo yum update -y && sudo shutdown -r now |
Ön Hazırlıklarımızı tamamladığımıza göre kuruluma başlayabiliriz.
Gerekli paket kurulumları
Güvenli parola oluşturmak için Pwgen(PWDGenerate random passwords ) Paketini kuruyoruz.
1 |
root@graylog01]# yum -y install wget pwgen |
Elasticsearch çalışabilmesi için java ya ihtiyaç duyar makinemize Java kurulumunu yapıyoruz. Yani, OpenJDK veya Oracle JDK’yi yükleyin.
1 |
root@graylog01]# yum install -y java-1.8.0-openjdk-headless |
Java Versiyonumuzu kontrol ediyoruz
1 2 3 4 |
[root@graylog01 ~]# java -version openjdk version "1.8.0_212" OpenJDK Runtime Environment (build 1.8.0_212-b04) OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode) |
Elastik Search kurulumu
Elasticsearch, Graylog kurulumundaki önemli bileşenlerden biridir. Graylog girişinden gelen verileri depolar ve bir kullanıcı Graylog dahili web arayüzü üzerinden istediğinde mesajları görüntüler. Elasticseach, esas olarak burada verileri / günlükleri indekslemek ve Graylog web arayüzü herhangi bir bilgi istediğinde arama işlevselliğini sağlamak için kullanılır.
Yüklemeden önce GPG ( GnuPG — GNU Privacy Guard) imzalama anahtarını alıyoruz.
1 |
root@graylog01]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch |
Elasticsearch paketinin en son sürümünü resmi depodan almak için bir depo dosyası oluşturun.
1 |
[root@graylog01]# nano /etc/yum.repos.d/elasticsearch.repo |
aşağıdaki içeriği oluşturduğumuz dosyaya ekliyoruz.
1 2 3 4 5 6 7 8 |
[elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md |
Elasticsearch paket kurulumunu başlatıyoruz.
1 |
[root@graylog01]# yum install -y elasticsearch |
Systemctl arka plan programını yeniden yüklüyoruz ve Elasticsearch’ün sistem başlangıcında otomatik olarak başlatılmasını sağlıyoruz.
1 2 |
systemctl daemon-reload systemctl enable elasticsearch |
Elasticsearch’ün Graylog kurulumuyla çalışmasını sağlamak için cluster adını graylog olarak ayarlamamız gerekir. Elasticsearch.yml dosyasını düzenleyin.
1 |
[root@graylog01]# nano /etc/elasticsearch/elasticsearch.yml |
Cluster name bölümünü graylog olarak değiştiriyoruz.
cluster.name: graylog
Elastiksearch servisimizi restart ediyoruz.
1 |
systemctl restart elasticsearch |
Elasticsearch’ün tamamen yeniden başlatılmasına izin vermek için 2 dakika verin. Elasticsearch, şimdi HTTP isteklerini işlemek için 9200 dinliyor olmalı. Cevabı kontrol etmek için CURL komutunu kullanın.
1 |
curl -X GET http://localhost:9200 |
Yukarıdaki komutun çıktısı aşağıdaki gibi olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@graylog01 ~]# curl -X GET http://localhost:9200 { "name" : "N9zh8CH", "cluster_name" : "graylog", "cluster_uuid" : "0vWrOvqBSU20imDBjDv3iA", "version" : { "number" : "6.7.2", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "56c6e48", "build_date" : "2019-04-29T09:05:50.290371Z", "build_snapshot" : false, "lucene_version" : "7.7.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" } |
Elasticsearch Cluster’ın sağlık kontrolü yapın.
1 |
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true' |
Çıktı aşağıdaki gibi olmalıdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@graylog02 ~]# curl -XGET 'http://localhost:9200/_cluster/health?pretty=true' { "cluster_name" : "graylog", "status" : "green", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 1, "active_shards" : 1, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 } |
Elastiksearch Kurulumumuzu tamamladık.
MongoDB kurulumu
MongoDB yapılandırmaları ve meta bilgileri depolamak için bir veritabanı görevi görür. MongoDB’nin en son sürümünü almak için MongoDB’nin resmi deposunu kullanacağız.
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
MongoDB nin Repo bağlantı dosyasını oluşturuyoruz.
1 |
nano /etc/yum.repos.d/mongodb-org-4.0.repo |
Repostory bilgilerini dosyamıza ekliyoruz.
1 2 3 4 5 6 |
[mongodb-org-4.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc |
Mongo DB kurulumunu aşağıdaki komut ile yapıyoruz.
1 2 3 4 5 6 |
yum install -y mongodb-org #kurulum sonrası MongoDB servisimizi başlatıp açılışta otomatik açılmasını sağlıyoruz. systemctl start mongod systemctl enable mongod |
Graylog kurulumu
Gray log paketimizin kurulumu için tüm ön gereksinimleri yükledik artık graylog3 paketinin kurulumunu yapabiliriz. Graylog sunucusu temel olarak çeşitli girdilerden gelen günlük mesajlarını kabul eder ve işler, graylog gelen loğları web arayüzünden görüntüleyeceğimiz bir ekran sunar.
Graylog 3.x reposunu indirip yüklüyoruz.
1 |
rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-3.0-repository_latest.rpm |
Graylog 3.0 server kurulumunu aşağıdaki komut ile başlatıyoruz.
1 |
yum -y install graylog-server |
Graylog server’ımızın default config dosyası “/etc/graylog/server/server.conf” yolunda yer almaktadır.
Günvenilir parola oluşturma işlemi
Gray log serverımız için pwgen aracı ile secret key ve parola oluşturacağız.
Secret Key oluşturuyoruz.
1 |
pwgen -N 1 -s 96 |
komut sonrası aşağıdaki gibi bir key çıktısı alacaksınız.
1 |
vq3K34N2PoJODtjiDuLMACwF5tI578RDKKrJ12tUzuq5m7Ft2Oiv3EhI690m273ebJMOdbcSJ63zTQA102r1LT1JCN1c7HcN |
Yukarıdaki key’i config dosyasında “password_secret =” bölümüne gireceğiz. Graylog admin giriş parolasını belirliyoruz ben şifreyi “admin” olarak belirliyorum.
1 2 3 |
[root@graylog01 -]# echo -n yourpassword 1 sha256sum [root@graylog01 -]# echo -n admin 1 sha256sum 8c6976e5b5410415bde908bd4deel5dfb167a9c873fc4bb8a81f6f2ab448a918 - |
Aşağıdaki key’i config dosyasında “root_password_sha2 =” bölümüne gireceğiz.
1 |
8c6976e5b5410415bde908bd4deel5dfb167a9c873fc4bb8a81f6f2ab448a918 |
Graylog Config Dosyası Düzenleme
Parolamızı oluşturduğumuza göre config dosyamızı düzenlemeye başlayabiliriz.
1 |
nano /etc/graylog/server/server.conf |
yukarıda oluşturduğumzu “password_secret” ve “root_password_sha2” keylerimizi config dosyamızda ilgili satırlara ekliyoruz. Timezone bölümü default olarak UTC geliyor bunu Türkiye için değiştirmeniz gerekli aksi takdirde toplanan logların saati farklı UTC zamanına göre loglanır bu değişikliği buradan yapmamız gerekiyor.
config dosyasında “root_timezone” u değiştiriyoruz.
1 |
root_timezone = Asia/Kuwait |
eğer farklı bir timezone seçmek isterseniz buradaki listeden seçebilirsiniz https://www.joda.org/joda-time/timezones.html
Admin hesabı için bir mail adresi belirliyoruz (isteğe bağlıdır.)
1 |
root_email = admin@yourdomain.com |
Eğer graylog’u 1 host olarak kuruyorsanız aşağıdaki ayarı 1 yapınız eğer çoklu kurulum yapacaksanız ortamdaki nod sayınızı buraya girmelisiniz. Bizim yapımızda 1 adet Elastiksearch bulunuyor bu yüzden 1 yapıyoruz.
1 |
elasticsearch_shards = 1 |
Bu, indeksleriniz için kopya sayısını tanımlar. Elasticsearch cluster’ında yalnızca bir nod’a sahipseniz, 0 olarak ayarlayın.
1 |
elasticsearch_replicas = 0 |
Graylog Web interface configurasyon
config dosyamızı açıyoruz.
1 |
nano /etc/graylog/server/server.conf |
Graylog Web Arabiriminin Graylog sunucusuna bağlanmasına izin vermek için girişleri değiştiriyoruz. Graylog serverımın ip adresi 192.168.1.96 aşağıdaki bölüme kendi serverınızın ip adresini giriniz.
config dosyamızı açıyoruz.
1 |
http_bind_address = 192.168.1.96:9000 |
Graylog servisimizi restart ediyoruz ve başlangıçta otomatik olarak başlamasını sağlıyoruz.
1 2 3 |
systemctl daemon-reload systemctl restart graylog-server systemctl enable graylog-server |
Sunucu başlangıç günlüklerini kontrol edebilirsiniz; Graylog ile ilgili sorunları gidermeniz sizin için yararlı olacaktır.
1 |
tailf /var/log/graylog-server/server.log |
Eğer buraya kadar tüm adımları sorunsuz uyguladıysanız log dosyasında aşağıdaki mesajı görmelisiniz.
1 |
2019-02-25T21:00:23.157+05:30 INFO [ServerBootstrap] Graylog server up and running. |
Firewall Configurasyonu
Graylog 9000 portunu kullanır eğer iptable yada firewalld aktif ise aşağıdaki komut ile gerekli FW kuralını ekleyiniz.
1 2 3 4 5 |
Sudo firewall-cmd --permanent --add-port=9000/tcp sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp sudo firewall-cmd --permanent --zone=public --add-port=12900/tcp sudo firewall-cmd --permanent --zone=public --add-port=1514/tcp firewall-cmd --reload |
Selinux(Security Enhanced Linux) Configurasyonu
Cacti uygulamasını çalıştırmak için selinux u kapamamız gerekiyor aşağıdaki komut ile Selnux durumunu görüntüleyebilirsiniz.
1 |
root@cacti]# sestatsu |
Selinux(Security Enhanced Linux) ‘ı devre dışı bırakmak için aşağıdaki adımları takip ediniz.
1 2 3 |
[root@cacti]# nano /etc/selinux/config SELINUX=enforcing satırını aşağıdaki şekilde değitiriyoruz SELINUX=disabled |
Bu işlemden sonra makinemizi reboot etmemiz gerekiyor.
Graylog Web erişimi
Graylog web erişimi için 9000 portunu dinlemektedir bu sebepten aşağıdaki linten erişim sağlaycağız.
1 |
http://yourserveripaddress:9000 |
Kullanıcı adı yöneticisi ve server.conf’ta root_password_sha2‘de yapılandırdığınız şifre ile giriş yapın.
Ben user bilgilerini aşağıdaki şekilde yapılandırdım
Username : admin
Parola : admin
Giriş yaptıktan sonra aşağıdaki ekran bizi karşılıyor olacak.
Graylog input
Graylog’a gelen loglar harici kaynaklardan, yani syslog veya herhangi bir log sisteminden alacak şekilde yapılandırılması gerekir. Bu örnekte, UDP 514 numaralı bağlantı noktasında syslog’dan günlükleri almak için bir input ayarlayacağız. fakat bir problem var graylog’a tanımlanan inputlardan birine, 1024’ün altındaki TCP / UDP bağlantı noktalarına giriş yapmaya başlarsanız, Graylog gelen log kayıtlarını red eder ve günlüklerinde izin redd hatalarını görürsünüz. Bu sorunu çözmek için, 1514 numaralı bağlantı noktasında başlatılacak bir input oluşturacağız ve 514 portuna gelen talepleri güvenlik duvarı kuralları ile 514’ten 1514’e yönlendireceğiz.
Böylelikle Graylog sunucumuza 514 portundan yada 1514 portundan gelen tüm loglar ulaşıyor olacak.
Aşağıdaki Yolu izliyoruz.
System >> Inputs >> select Syslog UDP
Node: Select your Graylog Node
Title: Bir isim veriniz
Bind address: 0.0.0.0 (default bırakabilr yada Graylogserverınızın ip adresini girebilrisiniz)
Port: 1514
Bu işlemden sonra oluşturduğumuz input(connector) aşağıdaki gibi 1514 numaralı porttan gelen bütün paketleri dinlemeye başlayacaktır.
Rsyslog Yapılandırması
Rsyslog server 514 portunu dinler dolayısıyla loğlarını almak istediğiniz fakat defaultta değiştiremediğiniz network cihazlarından gelen loğları Graylog server’a aktaramazsınız bunun için rsyslog server Un 514 numaralı portuna gelen istekleri Graylog server’ın 1514 numaralı portuna yönlendireceğiz.
Rsyslog config dosyamızı açıyoruz.
1 |
nano /etc/rsyslog.conf |
# Provides UDP syslog reception satırındaki açıklamaları “#” kaldırıyoruz ve udp dinlemeyi aktif ediyoruz.
1 2 |
$ModLoad imudp $UDPServerRun 514 |
sayfanın en altına inerek aşağıdaki satırı ekliyoruz burada yukarıda oluşturduğumuz 1514 numaralı portu kullanacağız. Aşağıdaki komut ile Rsyslog server 514.porta UDP den gelen bütün girdileri Graylog serverımızdaki 1514 numaralı porta yönlendiriyor olacak.
1 2 3 4 5 |
*.* @10.0.11.95:1514 Yada Local host girebilirsiniz. *.* @127.0.0.1:1514 |
Rsyslog servisimizi restart ediyoruz.
1 |
systemctl restart rsyslog |
Rsyslog Firewall ayarları
Graylog sunucusunda UDP 514 numaralı bağlantı noktasına(porta) gelen trafiği yönlendirmek için aşağıdaki yönlendirme komutlarını uyguluyoruz.
1 2 3 |
firewall-cmd --add-masquerade --permanent firewall-cmd --add-forward-port=port=514:proto=udp:toport=1514 --permanent firewall-cmd --reload |
Güvenlik duvarında UDP 1514 bağlantı noktası numarasının Rsyslog’dan günlükleri almasına izin vermek için Graylog sunucusunda aşağıdaki komutları uygulayın.
1 2 |
firewall-cmd --permanent --add-port=1514/udp firewall-cmd --reload |
Graylog kurulacak paketler
http://docs.graylog.org/en/3.0/pages/integrations/setup.html
Graylog serverımızın input böümüne tanımlayacağımız cihaz yelpazesini arttırmak için aşağıcaki komutu kullanrak ek pluginleri ekleyebilirsiniz.
1 |
sudo yum install graylog-integrations-plugins graylog-enterprise-integrations-plugins |
Graylog server kurulumumuz bu kadar.