GNU/Linux >> Znalost Linux >  >> Linux

Vyčerpání síťového portu Linuxu

Zde máte dvě hlavní otázky:

1.

Přesně řečeno, je vyčerpání portů skutečně možné?

Ano. Vezměme si například směrovač pro vyrovnávání zátěže, který posílá všechna připojení na IP adresu NAT. To se pravděpodobně stane, když máte mnoho SRC IP s připojením k úzkému hrdlu jednoho DST IP .

To znamená, že váš webový server může mít spoustu připojení jako:

[email protected]:~# netstat -pnt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 173.200.1.18:80      10.100.1.100:49923        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.200.1.200:10155        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.10.1.10:14400        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.10.1.10:50652        ESTABLISHED 13939/nginx: worker
tcp        0      0 173.200.1.18:80      10.20.1.20:57554        ESTABLISHED 13939/nginx: worker 

a to je naprosto v pořádku. Pokud by však byly všechny „cizí adresy“ stejné, může to způsobit problém (např. „velký směrovač, který provádí NAT <---> server s jednou IP adresou“).

Pokud bych měl postulovat, proč není pomíjivé vyčerpání portů běžným problémem, navrhoval bych, že je to proto, že každý port vyžaduje naslouchací službu a dostatek zdrojů k reakci - jiný zdroj (paměť, procesor) je obvykle úzkým hrdlem jako první.

Osobně jsem však při práci ve společnosti pro vyrovnávání zátěže narazil na několik problémů s vyčerpáním portů.

2. Proč může použitý port představovat problém pro službu naslouchání?

"Což umožňuje použití pomíjivých portů z 1024-65535, že pokud mám služby, které se vážou na port 3306 (například mySQL), někdy se nespustí, protože se port používá."

Server mySQL se nemůže vázat na tento port, pokud je používán - řekněme pomocí localhost:3306 nebo na všech rozhraních. Podívejte se například na řádek 0.0.0.0:80 v následujícím textu netstat výstup?

[email protected]:~# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      PID/Program name
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      964/php-fpm.conf)
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1660/mysqld     
tcp        0      0 0.0.0.0:842             0.0.0.0:*               LISTEN      1317/inetd      
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      13938/nginx     

To znamená, že port 80 naslouchá napříč všem lokální rozhraní na serveru. Pokud jiný proces drží port 80 před mým nginx server se spustí, nginx nebude schopen převzít kontrolu nad tímto portem a pravděpodobně selže při jeho spuštění.

Normálně je port 3306 v pořádku, protože naslouchací služby mají předem definované porty (nebo rozsahy), které jsou požadovány od hostitelského počítače - např. porty 80 a 443 pro webové servery.


Linux
  1. Příkaz Linuxu získat nepoužívaný port

  2. Linux SCP definující cílový port

  3. Přesměrování portů na Linuxu bez iptables?

  1. Jak změnit port SSH v Linuxu

  2. Linux – sériový port Raspberrypi?

  3. Nejlepší skenery portů na Ubuntu Linux

  1. Zkontrolujte použití portu v Linuxu

  2. Efektivně otestovat, zda je port otevřený v Linuxu?

  3. Jak otevřít port v Linuxu