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ğer | Açıklama |
0 | Kapalı |
1 | TCP Zaman damgasını aç ve mevcut zaman yerine her bağlantı için rastgele bir baz değer ekle |
2 | TCP 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