Örnek sFlow verisi oluşturma
Tags: sflow, hostsflow, hsflowd
Published: 2023-06-21 18:27:36

sFlow, bilgisayar ağlarındaki trafik akışının temel bilgilerini belirli bir adrese yönlendirmeyi sağlayan ve Netflow alternatifi bir protokoldür. Bu konuda daha detaylı bilgi için eski bir yazımızı inceleyebilirsiniz.

[NetFlow, sFlow, IPFIX ve ötesi](https://dev.to/aciklab/netflow-sflow-ipfix-ve-otesi-11ej)

# sFlow kaynağı oluşturma servisi

sFlow, genellikle açık kaynak kodlu sistemlerde kullanılmasına rağmen, bir çok Switch ve Router üreticisi tarafından da Netflow ve IPFIX alternatifi olarak kullanılmaktadır. Bu kapsamda kurumsal üreticilerin dışında temel bir uygulama olan "[host-sflow](https://github.com/sflow/host-sflow)" uygulaması ile de ağ trafiğini yönlendirebilmektesiniz.

Öncelikle bu uygulama istediğiniz bir işletim sistemi için [indirilir](https://sflow.net/downloads.php). Windows ve çeşitli Linux sistemlerinde çalışan sistem için Ubuntu 22.04 üzerindeki bir örnekten bahsedeceğim.

```bash
wget https://github.com/sflow/host-sflow/releases/download/v2.0.38-1/hsflowd-ubuntu22_2.0.38-1_amd64.deb
sudo apt install ./hsflowd-ubuntu22_2.0.38-1_amd64.deb
```

Bu şekilde servisimiz kurulumu yapılmıştır.

# Servisin yapılandırılması ve trafiği akıtmak

Servisin Linux sistemlerde yapılandırması için bir çok alternatif mümkündür. Linux üzerindeki bir interface bacağının trafiğinin yönlendirilmesi, Open vSwitch yapılandırılması, KVM üzerinde sanallaştırma ortamının trafiğinin yönlendirilmesi gibi farklı yapılar bulunmaktadır.

Ben en temel olarak cihazdaki bir ağ arabirimi için çözümü oluşturacağım. Bunun için öncelikle aşağıdaki komut ile hangi ağ arabirimini izleyecekseniz bunu görmelisiniz.

```bash
ip a
```

Bu çıktıda örneğin eno1, enp0s1, eth0 gibi isimlerden doğru olan trafik belirlenir. Ve bu değer aşağıdaki gibi /etc/hsflowd.conf dosyasının içerisinde başka bir veri olmayacak şekilde tanımlanır.

```
sflow {
  collector { ip=192.168.1.43 udpport=6343 }
  pcap { dev = eno1 }
}
```

Bu yapılandırma satırlarında collector yazan yer için hangi sflow toplayıcısına gönderecekseniz ilgili IP ve udpport bilgisi girilmesi gerekecektir.

Üst kısımda bahsettiğim gibi pcap ile başlayan satırda da cihaz ismi olarak eno1 veya sizin "ip a" komutunuzun çıktısınız yazmalısınız.

Bu işlemleri tammaladığınızda aşağıdaki komut ile servisi yeniden başlatmanız gerekmektedir.

```bash
systemctl restart hsflowd
```

İstediğiniz durumda enable komutu ile servisi makine yeniden başlatıldığında açılacak hale getirebilirsiniz.

# Sonuç

Bu adımdan sonra eno1 ağ arabirimindeki tüm trafik, 192.168.1.43 IP adresindeki 6343 portuna doğru akmaya başlayacaktır.

# Diğer ayarlar hakkında

Resmi sflow sayfasındaki yapılandırma ayarlarına göre klasik Linux bridge ağ yapısı kullananlar için;

```
sflow {
  collector { ip = 10.100.12.13 }
  pcap { dev = virbr0 }
  kvm {}
}
```

Open vSwitch yapılandırması için:

```
sflow {
  sampling = 500
  collector { ip = 10.100.12.13 }
  kvm {}
  ovs {}
}
```

Veya Docker üzerindeki yapılandırma için:

```
sflow {
  agent.CIDR = 10.0.0.0/8
  polling = 10
  sampling = 1000
  collector { ip = 10.100.12.13 }
  collector { ip = 10.122.1.2 }
  collector { ip = 10.144.1.2 UDPPort=6344 }
  pcap { dev = docker0 }
  pcap { dev = docker_gwbridge }
  docker {}
}
```

gibi yapılandırma dosyaları kullanılabilmektedir.