- Mitglied seit
- 2 Dez 2007
- Beiträge
- 8,014
- Punkte für Reaktionen
- 28
- Punkte
- 48
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.
EDIT:
Kleine Ergänzungen: Der Port auf dem der Server lauscht ist nicht mehr hardcodiert. Er wird mit dem 1. Argument (argv[1]) übergeben:
Im syslog wird jetzt auch der Port der Servers und die IP Adresse des Clienten eingetragen:
EDIT 2:
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:
EDIT 3:
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:
2976 2849 root S 980 [B]3% 0%[/B] [B]fbcauth[/B] [I]root admin freetz[/I]
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([B]argv[1][/B]));
Code:
2960 root 980 S fbcauth [B]33333[/B] freetz root admin
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
EDIT 2:
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:
Code:
if((strlen(argv[j])>=6) && (i = strncmp(argv[j],position,8))==0)
Code:
/var/mod/root # cat /tmp/fbcauth.aut
192.168.122.33 admin12
EDIT 3:
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 */
}
Anhänge
Zuletzt bearbeitet: