TCP Zaman Damgası

Tüm Linux, Unix ve Windows sunucularda TCP Zaman Damgası (Timestamp) kurulumda açık gelmektedir. TCP paketleri ağ üzerinde iletirilirken zaman zaman kaybolabilir, bunun bir çok nedeni vardır, örneğin o sırada aktif ağ cihazları arızalanmış, bant kapasitesi aşılmış ya da hizmet veren servis durmuş olabilir. Bu gibi durumlarda TCP protokolü kaybolan paketin tekrar iletimini sağlar. Tekrar iletimin yapılacağı süreye RTO denir. RTO ise TCP Zaman Damgası ile hesaplanmakta ve TCP ağ performansını geliştirmektedir.

TCP Zaman Damgasının ilk sürümlerinde iletilen her bir paket için sayaç ilk değeri sunucunun açık olduğu sürenin değeri ile aynı olurdu. Bu değere konsol üzerinden uptime komutu ile bakabilirsiniz:

[root@localhost ~]# uptime 
15:17:40 up 1 day, 15:11, 2 users, load average: 0.00, 0.01, 0.05

Geçmişte bir saldırgan iletim halindeki TCP Zaman Damgası değerlerini hesaplayarak sunucu uptime değerine ulaşabilirdi. Ancak günümüzde TCP Zaman Damgası başlangıç değerleri rastgele verilmektedir.

Sunucunun uptime değerinin uzak bir sistem üzerinden görünürlüğünü test etmek için hping komutunu kullanabilirsiniz. Ping işlemi normal koşullarda ICMP prokolü üzerinden yapılmaktadır, bu işlem için ping komutu ile hedef sunucuya paket gönderilip sunucunun bu pakete cevap vermesi beklenir. hping ise ICMP dışında UDP ve TCP protokollerini de kullabarak belirlediğiniz bir porta paket iletimini sağlayabilir. Sisteminizde hping yüklü değilse aşağıdaki komut ile yükleyebilirsiniz:

CentOS 7

yum install epel-release
yum install hping3

CentOS 8

dnf install epel-release
dnf install hping3

Debian ve Ubuntu

apt-get install hping3

hping Kullanımı

root@nginxdeb:~# hping3 --count 2 --syn --destport 22 --tcp-timestamp nginxdoc.rackdc.com
HPING nginxdoc.rackdc.com (eth0 94.103.32.74): S set, 40 headers + 0 data bytes
len=56 ip=94.103.32.74 ttl=63 DF id=0 sport=22 flags=SA seq=0 win=28960 rtt=3.7 ms
TCP timestamp: tcpts=140792431
len=56 ip=94.103.32.74 ttl=63 DF id=0 sport=22 flags=SA seq=1 win=28960 rtt=3.6 ms
TCP timestamp: tcpts=140793431
HZ seems hz=1000
System uptime seems: 1 days, 15 hours, 6 minutes, 33 seconds
--- nginxdoc.rackdc.com hping statistic ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 3.6/3.6/3.7 ms

System uptime seems: 1 days, 15 hours, 6 minutes, 33 seconds bölümünde sunucunun 1 Gün, 15 saattir çalıştığını gözlemleyebiliyoruz, bu yazının ilk başlarında uptime komutu ile baktığımız süre ile benzerliği dikkatinizi çekti mi?

TCP Zaman Damgası nasıl kapatılır

Linux Sunucularda

TCP Zaman Damgası değerini aşağıdaki kernel parametresini okuyarak öğrenebilirsiniz:

[root@localhost ~]# cat /proc/sys/net/ipv4/tcp_timestamps
1

Zaman Damgası gönderimini kapatmak için

echo 0 > /proc/sys/net/ipv4/tcp_timestamps

tcp_timestamp kernel parametresi için üç opsiyon bulunmaktadır:

DeğerAçıklama
0Kapalı
1TCP Zaman damgasını aç ve mevcut zaman yerine her bağlantı için rastgele bir baz değer ekle
2TCP Zaman damgasını rastgele baz değer olmadan aç

Bu adımdan sonra aynı sunucuyu tekrar test ettiğimizde hping ile cevap alamadığımızı göreceksiniz:

root@nginxdeb:~# hping3 --count 2 --syn --destport 22 --tcp-timestamp nginxdoc.rackdc.com
HPING nginxdoc.rackdc.com (eth0 94.103.32.74): S set, 40 headers + 0 data bytes
len=44 ip=94.103.32.74 ttl=63 DF id=0 sport=22 flags=SA seq=0 win=29200 rtt=7.8 ms
TCP timestamp: tcpts=0
len=44 ip=94.103.32.74 ttl=63 DF id=0 sport=22 flags=SA seq=1 win=29200 rtt=7.7 ms
TCP timestamp: tcpts=0
--- nginxdoc.rackdc.com hping statistic ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 7.7/7.8/7.8 ms

TCP Zaman Damgasını kalıcı olarak kapatmak

tcp_timestamp değerini kalıcı olarak kapatmak için /etc/sysctl.d/ içerisine kalıcı olarak yazmamız gerekmektedir, bunun için şu işlemi yapabilirsiniz:

cat > /etc/sysctl.d/tcp_timestamp_pcichecklist.conf << EOF
net.ipv4.tcp_timestamps =0
EOF

Not: TCP Zaman Damgası değerini kapatmak ağ performans sorunlarına neden olabilir.

Windows Sunucularda

Yönetici olarak PowerShell açtıktan sonra aşağıdaki komutu giriniz:

netsh int tcp set global timestamps=disabled

Referanslar

  1. https://tools.ietf.org/html/rfc1323#page-4
  2. https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt