Im Anhang ein Patch für einen einfachen, leichtgewichtigen und ausbaufähigen Authentifizierungsserver, für die FritzBox (mit Freetz).
Die Passwörter werden als Argumente zum binary, angegeben.Code:2976 2849 root S 980 3% 0% fbcauth root admin freetz
EDIT:
Kleine Ergänzungen: Der Port auf dem der Server lauscht ist nicht mehr hardcodiert. Er wird mit dem 1. Argument (argv[1]) übergeben:
Code:serverinfo.sin_port = htons(atoi(argv[1]));Im syslog wird jetzt auch der Port der Servers und die IP Adresse des Clienten eingetragen:Code:2960 root 980 S fbcauth 33333 freetz root admin
EDIT 2:Code:Sep 12 08:38:06 fritz user.info syslog: fbcauth : the authentication was successful! Server port: 33333; Client IP address: 192.168.122.33 Sep 12 08:38:11 fritz user.info syslog: fbcauth : the authentication was n o t successful! Server port: 33333; Client IP address: 192.168.122.33
Die Passwörter müssen mindestens 6 Zeichen lang sein und sollen maximal 8 Zeichen lang sein, denn mehr als 8 Zeichen werden nicht berücksichtigt:
In die Datei "/tmp/fbcauth.aut" wird jetzt auch die IP Adresse des Clienten geschrieben. Das eingegebene Passwort wird auch eingetragen, so wie es eingegeben wird, richtig oder falsch:Code:if((strlen(argv[j])>=6) && (i = strncmp(argv[j],position,8))==0)
EDIT 3:Code:/var/mod/root # cat /tmp/fbcauth.aut 192.168.122.33 admin12
Der neue Patch beinhaltet ein einfaches iptables-Skript (setzt die default policy der FORWARD chain auf DROP), iptables-Regeln und andere Kommandos im Quelltext:
Code:for(m=0,j=5;j<=6;j++) { if((strlen(argv[j])>=6) && (i = strncmp(argv[j],position,8))==0) { strcat(transmit,"authentication was successful!"); syslog(LOG_INFO, "%s : the authentication was successful! Server port: %s; Client IP address: %s",\ argv[0], argv[1], client_ip); system(" /usr/sbin/iptables -D FORWARD -p tcp -s \"$(cat /tmp/fbcauth.aut 2>/dev/null)\" \ -d 0/0 -m multiport --dports 80,443 -j ACCEPT "); system(" /usr/sbin/iptables -A FORWARD -p tcp -s \"$(cat /tmp/fbcauth.aut 2>/dev/null)\" \ -d 0/0 -m multiport --dports 80,443 -j ACCEPT "); m=1; break; } }Code:if(m==0 && (i = strncmp(argv[2],position,6))!=0 && (i = strncmp(argv[3],position,6))!=0 && \ (i = strncmp(argv[4],position,6))!=0) { strcat(transmit,"authentication was not successful!"); syslog(LOG_INFO, "%s : the authentication was n o t successful! Server port: %s; Client IP address: %s",\ argv[0], argv[1], client_ip); /* ab hier eintragen */ fp=fopen("/tmp/fbcauth.aut","w+"); fputs(client_ip,fp); fputs("\t",fp); fputs(position,fp); fclose(fp); fp=NULL; /* ende eintragen */ }Code:if((i = strncmp(argv[2],position,6))==0) { strcat(transmit,"logout was successful!"); syslog(LOG_INFO, "%s : the logout was successful! Server port: %s; Client IP address: %s",\ argv[0], argv[1], client_ip); /* hier eintragen */ system(" /usr/sbin/iptables -D FORWARD -p tcp -s \"$(cat /tmp/fbcauth.aut 2>/dev/null)\" \ -d 0/0 -m multiport --dports 80,443 -j ACCEPT "); /* ende eintragen */ }Code:if((i = strncmp(argv[3],position,6))==0) { strcat(transmit,"flush was successful!"); syslog(LOG_INFO, "%s : the flush was successful! Server port: %s; Client IP address: %s",\ argv[0], argv[1], client_ip); /* hier eintragen */ system(" /usr/sbin/iptables -F FORWARD "); /* ende eintragen */ }Code:if((i = strncmp(argv[4],position,6))==0) { strcat(transmit,"rules setup was successful!"); syslog(LOG_INFO, "%s : the rules setup was successful! Server port: %s; Client IP address: %s",\ argv[0], argv[1], client_ip); /* hier pfad fuer script eintragen */ system(" sh /tmp/ipt.rul "); /* ende eintragen */ }


Zitieren






