Port generieren, wenn nicht dann

B

Blubb..Blubb

Grünschnabel
Hey Leute, ich hänge ein wenig an einem Problem.

Der User kann einen port frei wählen.
Also SSH_USERPORT=""

Nun habe ich aber eine.hand voll ports, die nicht genutzt werden dürfen wie
22,443,53,80 etc.

Das heißt ich muss jetzt fragen ob der $SSH_USERPORT = $PORTS_IN_USE ist.

Dazu wollte ich gern ein Array nutzen. Logisch.

Danach soll entschieden werden, ob der port frei ist bzw. Verwendet werden darf oder nicht.

Falls nicht, soll er generiert werden.

Ich werd einfach mal hin, was ich habe und hoffe, dass mir da einer auf die Sprünge helfen kann:
Code:
#!/bin/bash                                      
                                                 
#------------------------------------------------
----------------------                           
#################################################
######################                           
#------------------------------------------------
----------------------                                      
SSH_PORT_TO_USE=$(( RANDOM % (1 - 1024 + 1 ) + 5 
))                                               
echo $SSH_PORT_TO_USE                            
echo "-------------------------------------------
"                                                
# Read the elements into bash array, with IFS bei
ng the de-limiter for input                      
#21, 25, 53, 80, 143, 443, 587, 990, 993, 2008, 8
000, 10011, 30033, 41144                         
IFS="," read -ra randomNos <<< "436,345,437,568,9
85,68,89,74,15,2,4,5,6,7,8,9,156,1001,1002,999"  
                                                 
# Print the random numbers using the '$RANDOM' va
riable built-in modulo with                      
# array length.                                  
printf "%s\n" "${randomNos[ $RANDOM % ${#randomNo
s[@]}]}"                                         
echo "-------------------------------------------
"                                                
PORT_NUMBER=$({$randomNos[ $RANDOM % ${#randomNos
[@]}]})                                          
                                                 
echo $PORT_NUMBER                                
echo "-------------------------------------------

#eh so is kacke
if [ ${SSH_PORT} == '21' ] || [ ${SSH_PORT} == '25' ] || [ ${SSH_PORT} == '53' ] || [ ${SSH_PORT} == '80' ] || [ ${SSH_PORT} == '143' ] || [ ${SSH_PORT} == '443' ] || [ ${SSH_PORT} == '587' ] || [ ${SSH_PORT} == '990' ] || [ ${SSH_PORT} == '993' ] || [ ${SSH_PORT} -gt 1024 ] || [ ${SSH_PORT} -le 0 ]; then

	#naja klappt.nicht richtig
if [ ${SSH_PORT} == ''suchdumireinen'' ]; then


#Generate SSH Port

declare -A ignoreList='(

		[21]="1" 

		[22]="1"

		[25]="1" 

		[53]="1" 

		[80]="1" 

		[143]="1" 

		[587]="1" 

		[990]="1" 

		[993]="1" 

		[443]="1" 

		[2008]="1" 

		[10011]="1" 

		[30033]="1" 

		[41144]="1")'


randomNumber="$(($RANDOM % 1023))"

#return a string

SSH_PORT=$([[ ! -n "${ignoreList["$randomNumber"]}" ]] && printf "%s\n" "$randomNumber")

  	 sed -i "s/SSH_PORT=\"generateport\"/SSH_PORT=\"$SSH_PORT\"/g" /root/userconfig.cfg

	 sed -i "s/^Port 22/Port ${SSH_PORT}/g" /etc/ssh/sshd_config

fi

Das ist meine test.sh da experimentiere ich schon seit Tagen an dem Problem rum...Hat jemand einen Tipp?

Zusammengefasst will ich das:
Wenn user nix angibt > generiere
Wenn user angibt > prüfe
> wenn port frei > nutze
>wenn port nicht frei > generiere

Aber irgendwie Sitz ich da auf dem Schlauch habe mit while und for experimentiert aber sehe den Wald vor Bäumen nicht.

Puh
 
Hallo,

1. wie ist denn die Nutzereingabe und Übergabe realisiert (ManinMiddle bei Übertragung)
2. SSH-Ports sollten im hohen Portbereich liegen.

Prüfen würde ich mit netstat, welche Ports gerade aktiv sind, einfach mit grep. Nach Änderung der sshconfig muss dann noch ssh neugestartet werden, falls der Dienst schon in Betrieb ist.

Das generieren hast du ja schon gelöst. Ich würde es "einfach" machen: seq 10000 60000 | sort -R | head -1

Ich hatte auch einmal manuelle Eingaben gefordert, alles zur Pseudo-Sicherheit aber irgendwann nerven die Eingaben, deswegen würde ich sofort einen Random-Port vorgeben, der vorher geprüft ist. Prüfen ob SSH auch mit diesen Port gestartet werden konnte. Problem ist dann noch die Ausgabe, wo der Port denn jetzt horcht. Die muss dann ja auch sicher sein. Nachdem man verbunden ist, kann man den ssh-Dienst auch wieder beenden.

Aber vielleicht gehts ja garnicht um Sicherheit.. sondern um etwas anderes :)
 
Was macht das für einen Sinn?

Ein Server sollte einen festen Port haben,
ein Client lässt sich schlicht vom OS einen freien Port wählen.
 

Ähnliche Themen

ip6tables Problem

Unix Webserver mit HTML Seite erstellen

iptables - default policy - Server macht dicht

NAT: Keine Kommunikation zwischen LAN und öffentlicher Router IP

OpenVPN Ports für Anwendungen weiterleiten?

Zurück
Oben