Archiv

Archiv für die Kategorie ‘Linux’

SSH Server Upload Speed Limit

26. März 2020 Keine Kommentare

Some daemon processes which handle user connections don’t have an internal mechanism to limit the bandwidth. One popular example is OpenSSH.

In theory SFTP could eat up all the bandwidth available, which is especially bad for home connections, since a fully utilized uplink is sometimes worse than a fully utilized downlink.

In order to apply a speed limit to daemon processes which use fork, tools like trinkle are not an option, but tc can do the job.

The following example configures a 10MBit/s upload speed limit (10,5Mbit/s burst limit) to the SSH server (sport 22) running on eth0.

tc qdisc add dev eth0 root handle 1:0 htb

tc class add dev eth0 parent 1:0 classid 1:1 htb \
 rate 10000kbps ceil 10500kbps prio 0

tc filter add dev eth0 protocol ip parent 1:0 prio 0 \
 u32 match ip sport 22 0xffff flowid 1:1

To watch the applied rules and the status:

tc -s -d class show dev eth0

To remove the applied configuration:

tc qdisc del dev eth0 root

This is completely done using the Kernel API. So it can be done with every service by specifying the source port and doesn’t bring any noticeable performance degradation beside having a speed limit applied.

If you want to limit all the upload traffic on a certain interface there doesn’t need to be an filter rule. This is done using a default.
The following example sets the limit from above to all upload traffic on eth0

tc qdisc add dev eth0 root handle 1:0 htb default 1

tc class add dev eth0 parent 1:0 classid 1:1 htb \
 rate 3500kbps ceil 4000kbps prio 0
KategorienEnglish, Linux

Bash ~/.bashrc, /etc/profile

31. Mai 2016 Keine Kommentare

Die folgende Grafik verdeutlicht welche Bash Konfigurationsdateien verwendet und geladen werden.
Grundsätzlich ist das davon abhängig ob es sich von um eine interactive shell handelt, welche Paramter verwendet werden und ob es eine login shell ist.

bash_config_files

Source

KategorienLinux

NTP Stratum 2 installieren und konfigurieren (ntp.conf)

15. Mai 2016 Keine Kommentare

Da immer mehr Geräte an das Internet angeschlossen sind, steigt die Anzahl der NTP Queries kontinuierlich an. Manche Hersteller wie Microsoft oder Apple stellen den Usern eigene Zeitserver zu Verfügung, aber viele andere Entwickler, Hersteller oder Provider nutzen frei zugängliche NTP Pools um die Uhrzeit synchronisieren zu lassen. Dazu zählen Linux Distributionen, DSL Router, Kabel Router und viele andere Betriebssysteme oder Appliances.

Der am häufigsten verwendete Pool ist pool.ntp.org an welchem auch mein Server angeschlossen ist. Die Last wird unter tausenden von angeschlossen NTP Servern verteilt, aber dennoch steigt der Bedarf an weiteren NTP Servern da immer mehr Anfragen zu bedienen sind.

Während die Zeitsynchronisierung und das NTP Protokoll eine Wissenschaft für sich sind, ist es denkbar einfach einen NTP Stratum 2 Server für die Nutzung im Pool zu installieren. Während Stratum 1 Server direkt an einen sehr genauen Zeitgeber angeschlossen sein müssen, reicht es für Stratum 2 aus die Uhrzeit über das Internet zu synchronisieren und den Usern zur Verfügung zu stellen.

Unter Debian / CentOS / RedHat installiert mein dazu einfach das ntp Paket und konfiguriert den NTP Daemon. Ich verwende sieben Stratum 1 Server als Zeitgeber. Das ist zum einen länderübergreifend redundant und zum anderen auch ziemlich genau. NTP sucht sich dann selbst die zu verwendenden Stratum 1 Zeitgeber heraus. Den Status kann man jederzeit mit „ntpq -p“ prüfen und sehen wie sich der eigene Server verhält.

Diese Konfiguration ist nur sinnvoll wenn man selbst die Uhrzeit weitergeben möchte. Also Mitglied eines Pools wird oder anderweitig (sehr) viele Clients bedient. Als Endnutzer oder für einen NTP Server im eigenen Netzwerk, reicht es völlig aus selbst einen NTP Pool als Client zu verwenden. So wie das in der default Konfiguration des NTP Pakets der Fall ist. Die Stratum 1 Server müssen hierfür nicht belastet werden. Möchte man aber selbst dem Pool beitreten, sollte der Server ein Stratum 2 oder Stratum 1 Server sein, allerdings ist das (zumindest bei pool.ntp.org) keine explizit definierte Voraussetzung.

Weitere Informationen zu pool.ntp.org und Statistiken meines NTP Servers gibt es hier.

Stratum 2 ntp.conf Settings Example:

/etc/ntp.conf

driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
restrict default kod limited notrap nomodify nopeer noquery
restrict -6 default kod limited notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
 
# Stratum 1 DE
server ptbtime1.ptb.de iburst
server ntps1-0.cs.tu-berlin.de iburst
server ntp0.fau.de iburst
 
# Stratum 1 AT
server time.metrologie.at iburst
 
# Stratum 1 CH
server ntp.metas.ch iburst
 
# Stratum 1 NL
server ntp0.nl.net iburst
 
# Stratum 1 FR
server ntp-p1.obspm.fr iburst
KategorienLinux