Innehållsförteckning
i den här artikeln kommer jag att dela exempel för att kontrollera portstatus och öppna en port i Linux. Den här artikeln skrevs när du använde CentOS 8, så det är säkert att säga att det också helt täcker CentOS/RHEL 7/8, Fedora, Oracle Enterprise Linux och i allmänhet hela Red Hat-familjen av operativsystem och eventuellt Novells SLES och OpenSUSE.
innan vi hoppar in i exemplen för att öppna en port i Linux måste vi förstå kravet tydligt. Den mycket grundläggande frågan som kommer till mig
- behöver du öppna en port för en tjänst? Såsom en anpassad port 5555 för apache tjänst?
- menar du att porten redan lyssnar men blockeras av brandväggen så att du vill öppna en port i brandväggen?
- öppna en port för anpassad tillfällig uppgift som att överföra och ta emot filer med den här porten och stäng sedan porten.
vi kommer att täcka alla dessa scenarier i den här artikeln
kontrollera portstatus
för att kontrollera listan över befintliga portar som är öppna använder vi nmap
för att kontrollera portstatus:
# 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
för närvarande ser vi bara två portar är öppna på min CentOS 8 nod.
kontrollera lista över lyssningsportar
vi kommer att använda netstat för att lista de TCP-portar som är i lyssningsläge. Det totala antalet portar är högre jämfört med Nmap-utgången.
# 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
öppna en port för någon tjänst
om detta är ditt krav letar du efter fel fråga. I grund och botten är det tvärtom, dvs en tjänst öppnar en port. När du till exempel startar sshd-tjänsten startar den som standard port 22 och inte tvärtom, dvs om du öppnar port 22 startar den inte automatiskt sshd-tjänsten.
Låt oss observera detta i exempel, vi vet att port 22 är öppen på min CentOS 8 nod. Om jag stoppar sshd-tjänsten
# systemctl stop sshd
kan du se att port 22 inte är öppen längre.
# 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
du måste använda respektive tjänsts konfigurationsfil för att ändra standardporten. När du är klar kan du starta om tjänsten och det ska automatiskt öppna respektive port på din Linux-nod.
/etc/services
detta täcker det första scenariot.
firewalld open port
det är också möjligt att dina portar är inaktiverade i brandväggen. Om din port inte är listad i nmap
är den troligen blockerad av brandväggen.
vi kommer att använda firewalld för att öppna en port eftersom det här är det mest använda gränssnittet idag i RHEL/CentOS 7 och 8. Bestäm vilken zon systemets nätverksgränssnitt är i. I följande exempel finns gränssnittet eth0 och eth1 i zonen’ public’:
# firewall-cmd --get-active-zones
libvirt
interfaces: virbr0
public
interfaces: eth0 eth1
för att permanent öppna porten firewalld i en zon använd alternativet --add-port
. Exemplet nedan öppnar permanent TCP-port 1234 i zonen ’Offentlig’. Observera att permanenta ändringar inte träder i kraft förrän firewalld-tjänsten laddas om.
# firewall-cmd --zone=public --add-port=1234/tcp --permanentsuccess# firewall-cmd --reloadsuccess
--permanent
. Alla icke-permanenta ändringar träder i kraft omedelbart och kommer att bestå tills brandväggen laddas om.när firewalld öppen port, nästa användning netstat att kontrollera port status:
# 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
vi ser fortfarande inte port 1234 här. Detta beror på att port 1234 för närvarande inte är bindande för någon tjänst. Så vår hamn är öppen men lyssnar inte. Så snart en begäran eller tjänst försöker använda port 1234, vi kommer att få detta I lyssna tillstånd.
använd nc eller ncat för att öppna en port i Linux
låt oss verifiera denna teori använd nc
eller ncat
för att öppna en port i Linux nc
eller ncat
levereras som en del av nmap-ncat
rpm i RHEL/CentOS som du kan installera med yum eller dnf. Använd --listen
med --port
för att öppna en port med kommandot nc
. I exemplet nedan öppnar vi port 1234
# nc --listen --source-port 1234
öppna en annan terminal på den här servern och kontrollera portstatus
# netstat -ntlp | grep 1234tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 28983/nctcp6 0 0 :::1234 :::* LISTEN 28983/nc
som du ser port 1234 lyssnar på både IPv4 och IPv6. För att bara använda IPv4 använd -4 med ovanstående kommando
# nc --listen --source-port 1234 -4
nästa på en annan terminal kan du kontrollera portstatus för port 1234
# netstat -ntlp | grep 1234tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 29329/nc
använd nc eller ncat för att öppna en port och överföra filer
vi kan också använda nc
för att överföra filer från en värd till en annan värd. Här överför jag min ”inputfile
” från centos-8
till rhel-8
på klienten öppnar vi en slumpmässig port, här använder vi 9899. Jag har aktiverat verbose så att du kan se mer information på skärmen
# 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.
Nästa för att starta överföringen, använd kommandot nedan
# 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.
om du möter några problem kan du kontrollera brandväggen mellan din server och klient. Det är möjligt att respektive port är blockerad och du måste använda firewalld open port