Ett enkelt skalskript ensam kan inte lyssna på en port över internet. Skalskript är för att kontrollera genomförandet av kommandon; De har inte de inbyggda nätverksfunktionerna för att hantera inkommande anslutningar. Du behöver ett nätverksserverprogram (som `Netcat`,` Socat` eller en dedikerad webbserver som Apache eller Nginx) för det. Skalskriptet kommer bara att lanseras * och kanske * hantera * serverprocessen.
Här är några exempel, var och en med viktiga säkerhetshänsyn:
Exempel 1:Använda netcat (mycket osäker för produktionsanvändning)
Detta exempel använder `netcat 'för att lyssna på en port. Använd inte detta i en produktionsmiljö utan betydande säkerhetsförbättringar. Netcat erbjuder minimal säkerhet och är lätt sårbar för attacker.
`` `bash
#!/bin/bash
port =8080
Echo "Lyssnar på port $ port ..."
NC -LVP $ port
`` `
* `nc -lvp $ port` :Detta är kärnkommandot.
* `-l`:Lyssna på inkommande anslutningar.
* `-v`:Verbose-läge (visar anslutningsinformation).
* `-p $ port`:Anger portnumret.
för att göra detta lite säkrare (men ändå inte produktionsklar): Du kan lägga till en brandväggsregel för att bara tillåta anslutningar från specifika IP -adresser. Men även detta är otillräckligt för en robust lösning.
Exempel 2:Att använda Socat (något bättre, men behöver fortfarande mer säkerhet)
`Socat 'är ett mer mångsidigt kommandoradsverktyg än` netcat', vilket möjliggör fler konfigurationsalternativ. Återigen är det inte lämpligt för produktion utan betydande säkerhetsförbättringar.
`` `bash
#!/bin/bash
port =8080
Echo "Lyssnar på port $ port ..."
Socat TCP-LISTEN:$ port, gaffel exec:'echo' anslutning mottagen! ''
`` `
* `SOCAT TCP-LISTEN:$ port, gaffel exec:'echo' anslutning mottagen!" '':Detta lyssnar på den angivna porten och gafflar en ny process för varje anslutning. Anslutningen "Exec:" echo "mottagen!" "" Delen är ett enkelt kommando som körs för varje anslutning. Byt ut detta med önskad kommandohantering.
Viktiga säkerhetsöverväganden:
* brandvägg: Du måste konfigurera din brandvägg (t.ex. "iptables" på Linux) för att endast tillåta anslutningar till den angivna porten från pålitliga IP -adresser eller nätverk. Annars kommer din server att vara öppen för attacker från vem som helst på internet.
* autentisering och auktorisation: Dessa exempel saknar autentisering eller auktorisation. Vem som helst kan ansluta. För allt utöver enkla tester behöver du lämpliga autentiseringsmekanismer (t.ex. lösenordsskydd, SSL/TLS -kryptering).
* Ingångsvalidering: Om din server bearbetar någon input från klienter måste du validera den noggrant för att förhindra injektionsattacker (som kommandoinjektion eller SQL -injektion).
* Felhantering: Skripten saknar robust felhantering. Produktionsklar skript måste hantera fel graciöst.
* Processhantering: Överväg att använda en processledare (som Systemd eller Supervisord) för att hantera serverprocessen och se till att den startar om automatiskt om den kraschar.
för produktionsmiljöer: Använd en robust webbserver som Apache eller NGINX med lämpliga säkerhetskonfigurationer (SSL/TLS, autentisering, brandväggar, inmatningsvalidering, etc.). Dessa servrar är utformade för säker och pålitlig drift. Dessa exempel är endast för utbildningsändamål och bör inte användas i produktionen utan betydande förbättringar av deras säkerhet.