Relay mit Sendmail und SMTP-Auth

Soll ein weiterer Mailserver, z.B. der des ISP, als Relay für Sendmail dienen und erfordert dieser Authentifizierung, so ist das kein Problem.

Kenn’ ich irgendwie auch schon … *g*

Verwendet wurde OpenBSD 3.3
Benötigte Pakete:

cyrus-sasl2

Für das gesamte Projekt benötigen wir die Quelltexte vom Sendmail:

# echo WANT_SMTPAUTH= yes >> /etc/mk.conf

# cd /usr/local/lib; ln -s libsasl2.so.2.11 libsasl2.so

# vi /usr/src/gnu/usr.sbin/sendmail/cf/cf/openbsd-proto.mc

nach FEATURE(`no_default_msa’) folgendes einfügen:

define(`confAUTH_MECHANISMS’,`LOGIN PLAIN CRAM-MD5 DIGEST-MD5′)dnl
TRUST_AUTH_MECH(`LOGIN PLAIN CRAM-MD5 DIGEST-MD5′)dnl
FEATURE(`authinfo’,`hash /etc/mail/authinfo’)

# cd /usr/src/gnu/usr.sbin/sendmail

# make && make install && make clean

# cd /usr/share/sendmail/cf/

# make openbsd-proto.cf

# cp openbsd-proto.cf /etc/mail/sendmail.cf

# vi /etc/mail/authinfo

AuthInfo:mein.relay.server “U:blabla” “P=blabla” “M:LOGIN”

# makemap hash /etc/mail/authinfo < /etc/mail/authinfo # vi /etc/mail/sendmail.cf Man suche nach: # "Smart" relay host (may be null) und füge ein: DSmein.relay.server Um die Kerberosfehlermeldungen beim Start ein wenig zu unterdrücken: # touch /etc/kerberosIV/srvtab Jetzt noch ein einfacher Neustart: # kill -HUP `head -1 /var/run/sendmail.pid` Auch ist es mit wenigen Schritten noch möglich, dass der Sendmail als Relay-Schutz eine korrekte Authentifizierung verlangt: # mkdir /var/sasl2 # echo pwcheck_method: saslauthd > /usr/local/lib/sasl2/Sendmail.conf

# /usr/local/sbin/saslauthd -a getpwent

# vi /etc/rc.local

if [ -x /usr/local/sbin/saslauthd ]; then
echo -n ‘ saslauthd’; /usr/local/sbin/saslauthd -a getpwent
fi

# kill -HUP `head -1 /var/run/sendmail.pid`

Nun Langt’s aber.

Anonymous FTP

Ein Ftp-Server schlägt natürlich ein gewaltiges Loch in eine Firewall, da dieser auf Ports oberhalb 1024 kommuniziert und man demzufolge gezwungen ist diese zu öffnen. Nicht wirklich! Der OpenBSD FTP-Server bietet die Möglichkeit nur über Ports zwischen 49152 und 65535 zu sprechen.
Zur konfiguration:
/etc/shells

/usr/bin/false

# adduser
User Name: ftp
Full Name: Anonymous FTP
Shell: false
Login Group: ftp
Invite to other Groups: No

/etc/rc.conf

ftpd_flags=”-hDllUSAP” # for non-inetd use: ftpd_flags=”-D”

und die ftp verzeichnisse noch mit chmod auf 555 setzen und als Eigentümer root, dann kann nur gesaugt werden

/etc/ftpusers – Nicht wilkommene Benutzer
/etc/ftpchroot – Normale Benutzer die zugelassen werden
/etc/ftpwelcome – Dieser Text wird bei jedem FTP-Login gezeigt

OpenBSD Ports, make und FLAVORS

Möchte man nicht das gesamte Paket haben oder ähnlich einem ‘configure’ bestimmte Parameter übergeben funktioniert das in diesem Falle über die FLAVORS:

# cd /usr/ports/WasAuchImmer
# make show VARNAME=FLAVORS
# env FLAVOR=”WieAuchImmer” make install

Apache und SSL-Zertifikate

Für die Erstellung eines selbstsignierten SSL-Zertifikates für z. B. verschlüsselte Kommunikation via Webserver gehe man folgendermassen vor:

1. Schritt: Schlüssel erstellen

openssl req -new > new.cert.csr

2. Schritt: das Passwort entfernen

openssl rsa -in privkey.pem -out new.cert.key

3. Schritt: das Zertifikat signieren:

openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 365

nun nur noch in der /var/www/conf/httpd.conf für den server eintragen:

SSLCertificateFile /path/to/certs/new.cert.cert
SSLCertificateKeyFile /path/to/certs/new.cert.key

Paket Filter wechsel dich

Mit folgendem kleinen Perl-Skript ist es möglich unterschiedliche Filterregeln auszuwählen und zu aktivieren:

#!/usr/bin/perl -w

use diagnostics;

# VARIABLEN
my $ruleNr = “”;
my $fwr1 = “/etc/pf.open”;
my $fwr2 = “/etc/pf.ftp”;
my $fwr3 = “/etc/pf.conf”;
my $fwr4 = “/etc/pf.closed”;

# USER-EINGABE
system(”/usr/bin/clear”);
print “\n”;
print “\n Bitte waehle Deine gewuenschte Firewall Regel: “;
print “\n”;
print “\n”;
print “\n”;
print “\n”;
print “\n 1. – SSH, FTP, SMTP, POP, WWW, HTTPS, E-Donkey und Webmin von aussen\n”;
print “\n”;
print “\n 2. – SSH, FTP,WWW, HTTPS und E-Donkey von aussen\n”;
print “\n”;
print “\n 3. – SSH, WWW, HTTPS und E-Donkey von aussen\n”;
print “\n”;
print “\n 4. – Alles zu von aussen – Squid von innen\n”;
print “\n”;
print “\n 5. – Neueinwahl zu T-Offline mit Regel 3\n”;
print “\n”;
print “\n”;

chomp($ruleNr = );

if (-e $fwr1 and $ruleNr eq 1){
system(”/sbin/pfctl -R /etc/pf.open”);
print “\nDu hast Nr.$ruleNr gewaehlt \n”;
print “\n”;
print “\n”;
}

elsif (-e $fwr2 and $ruleNr eq 2){
system(”/sbin/pfctl -R /etc/pf.ftp”);
print “\nDu hast Nr.$ruleNr gewaehlt \n”;
print “\n”;
print “\n”;
}

elsif (-e $fwr3 and $ruleNr eq 3){
system(”/sbin/pfctl -R /etc/pf.conf”);
print “\nDu hast Nr.$ruleNr gewaehlt \n”;
print “\n”;
print “\n”;
}

elsif (-e $fwr4 and $ruleNr eq 4){
system(”/sbin/pfctl -R /etc/pf.closed”);
print “\nDu hast Nr.$ruleNr gewaehlt \n”;
print “\n”;
print “\n”;
}

elsif ($ruleNr eq 5){
system(”/bin/kill `cat /var/run/tun0.pid`”);
system(”/sbin/route delete default”);
system(”/bin/sleep 2″);
system(”/usr/sbin/ppp -ddial pppoe”);
print “\nDu hast Nr.$ruleNr gewaehlt \n”;
}

else {
print “\n”;
print “\n”;
print “\nirgendetwas ist schief gelaufen\n”;
print “\nentweder falsche Nr. 1 – 5 sind erlaubt\n”;
print “\noder Deine Firewall Regel Files sind defekt\n\n”;
print “\n”;
print “\n”;
}
__END__