Obsah
V tomto článku se budu sdílet příklady zkontrolovat stav portu a otevřít port v Linuxu. Tento článek byl napsán při použití CentOS 8, takže je to bezpečné říci, že to také plně pokrývá CentOS/RHEL 7/8, Fedora, Oracle Enterprise Linux a obecně celé rodiny Red Hat operačních systémů a případně Novell SLES a OpenSUSE.
než skočíme do příkladů a otevřeme port v Linuxu, musíme tento požadavek jasně pochopit. Velmi základní otázka, která mi přijde na mysl
- potřebujete otevřít port pro službu? Například vlastní port 5555 pro službu apache?
- myslíte, že port již poslouchá, ale je blokován firewallem, takže chcete otevřít port ve firewallu?
- otevřete port pro vlastní dočasnou úlohu, jako je přenos a příjem souborů pomocí tohoto portu, a poté port zavřete.
se bude vztahovat na všechny tyto scénáře v tomto článku
Zkontrolujte stav portu
podívejte se Na seznam stávajících porty, které jsou otevřené, budeme používat nmap
zkontrolovat stav portu:
# nmap localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-22 12:08 IST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000024s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
Nmap done: 1 IP address (1 host up) scanned in 1.71 seconds
v Současné době můžeme vidět pouze dva porty jsou otevřené na mém CentOS 8 uzlu.
zkontrolujte seznam poslechových portů
použijeme netstat k vypsání TCP portů, které jsou ve stavu poslechu. Celkový počet portů je vyšší ve srovnání s výstupem nmap.
# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1627/dnsmasq tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 26893/sshd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp6 0 0 :::22 :::* LISTEN 26893/sshd tcp6 0 0 :::111 :::* LISTEN 1/systemd
otevřete port pro nějakou službu
pokud je to váš požadavek, pak hledáte špatnou otázku. Služba otevře port. Například při spuštění služby SSHD se ve výchozím nastavení spustí port 22 a ne naopak, tj. pokud otevřete port 22, automaticky se nespustí služba SSHD.
Dejte nám sledovat toto v příkladu, víme, že na port 22 je otevřené na mém CentOS 8 uzlu. Pokud zastavím službu sshd
# systemctl stop sshd
, můžete vidět, že port 22 již není otevřen.
# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1627/dnsmasq tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp6 0 0 :::111 :::* LISTEN 1/systemd
ke změně výchozího portu musíte použít konfigurační soubor příslušné služby. Po dokončení můžete službu restartovat a to by mělo automaticky otevřít příslušný port v uzlu Linuxu.
/etc/services
to zahrnuje první scénář.
firewalld otevřený port
je také možné, že vaše porty jsou zakázány v bráně firewall. Pokud váš port není uveden v nmap
, je pravděpodobně blokován firewallem.
použijeme firewalld k otevření portu, protože toto je dnes nejpoužívanější rozhraní v RHEL / CentOS 7 a 8. Určete, ve které zóně jsou síťová rozhraní systému. V následujícím příkladu je rozhraní eth0 a eth1 ve „veřejné“ zóně:
# firewall-cmd --get-active-zones
libvirt
interfaces: virbr0
public
interfaces: eth0 eth1
Chcete-li trvale otevřít port firewalld v zóně, použijte volbu --add-port
. Níže uvedený příklad trvale otevře TCP port 1234 v zóně „public“. Mějte na paměti, že trvalé změny se projeví až po opětovném načtení služby firewalld.
# firewall-cmd --zone=public --add-port=1234/tcp --permanentsuccess# firewall-cmd --reloadsuccess
--permanent
. Jakákoli trvalá změna se okamžitě projeví a bude přetrvávat, dokud nebude znovu načten firewall.Jednou firewalld otevřít port, další použití příkazu netstat zkontrolovat stav portu:
# netstat -ntlpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1627/dnsmasqtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 28188/sshdtcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemdtcp6 0 0 :::22 :::* LISTEN 28188/sshdtcp6 0 0 :::111 :::* LISTEN 1/systemd
Jsme stále nechápu, port 1234. Je to proto, že v současné době port 1234 není vázán na žádnou službu. Takže náš přístav je otevřený, ale neposlouchá. Jakmile se žádost nebo služba pokusí použít port 1234, dostaneme to do stavu poslechu.
Použití nc nebo ncat otevřít port v Linuxu
Pojďme ověřit tuto teorii Použít nc
nebo ncat
otevřít port v Linuxu nc
nebo ncat
je dodáván jako součást nmap-ncat
ot / min v RHEL/CentOS, který si můžete nainstalovat pomocí yum nebo dnf. Pomocí --listen
s --port
otevřete port pomocí příkazu nc
. V následujícím příkladu otevřeme port 1234
# nc --listen --source-port 1234
otevřete další terminál tohoto serveru a zkontrolujte stav portu
# netstat -ntlp | grep 1234tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 28983/nctcp6 0 0 :::1234 :::* LISTEN 28983/nc
jak vidíte, port 1234 poslouchá jak pro IPv4, tak pro IPv6. Používat pouze IPv4 použití -4 s výše uvedený příkaz
# nc --listen --source-port 1234 -4
Další na jiném terminálu můžete zkontrolovat stav portu pro port 1234
# netstat -ntlp | grep 1234tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 29329/nc
Použití nc nebo ncat k otevření portu a přenos souborů
můžeme také použít nc
přenos souborů z jednoho hostitele na jiného hostitele. Zde převedu svůj „inputfile
“ z centos-8
na rhel-8
na klienta otevřeme náhodný port, zde použijeme 9899. Mám povoleno podrobné, takže můžete vidět více informací na obrazovce
# ncat --verbose --listen 9899 > outputfileNcat: Version 7.70 ( https://nmap.org/ncat )Ncat: Listening on :::9899Ncat: Listening on 0.0.0.0:9899Ncat: Connection from 192.168.43.250.Ncat: Connection from 192.168.43.250:40242.
Další pro spuštění převodu, použijte níže uvedený příkaz
# ncat --verbose 192.168.43.157 9899 < inputfileNcat: Version 7.70 ( https://nmap.org/ncat )Ncat: Connected to 192.168.43.157:9899.Ncat: 19 bytes sent, 0 bytes received in 0.01 seconds.
Pokud budete čelit nějaké problémy, můžete zkontrolovat firewall mezi serverem a klientem. Je možné, že příslušný port je zablokován a musíte použít otevřený port firewalld