Her er hvordan jeg har opbygget et par Debian baseret Exim4 antispam Gateways.

Først og fremmest skal exim4 heavy pakken installerets

# apt-get install exim4-daemon-heavy

Tilpas det navn du ønsker at serveren skal hedde i forbindelse med mail udveksling i /etc/mailname filen, dvs. hvis serveren logisk på netværket hedder server48.corp.local eller lenny.it-geek.dk, kan dette ændres til smtp.net-help.dk f.eks.

# vi /etc/mailname

smtp.net-help.dk

Herefter skal selve exim4 konfigureres, hvilket sker i /etc/exim4/update-exim4.conf.conf filen

# vi /etc/exim4/update-exim4.conf.conf

Default vil der stå noget al'a:

dc_eximconfig_configtype='local'
dc_other_hostnames='lenny.it-geek'
dc_local_interfaces='127.0.0.1'
dc_readhost=''
dc_relay_domains=''
dc_minimaldns='false'
dc_relay_nets=''
dc_smarthost=''
CFILEMODE='644'
dc_use_split_config='false'
dc_hide_mailname=''
dc_mailname_in_oh='true'
dc_localdelivery='mail_spool'

Det ændre jeg normalt til:

dc_eximconfig_configtype='internet'
dc_other_hostnames='lenny.it-geek.dk'
dc_local_interfaces='127.0.0.1.25;192.168.1.3.25;9x.8x.7x.6x.25'
dc_readhost=''
dc_relay_domains='net-help.dk;it-geek.dk;it-nerd.dk'
dc_minimaldns='false'
dc_relay_nets='192.168.1.0/24'
dc_smarthost=''
CFILEMODE='644'
dc_use_split_config='true'
dc_hide_mailname='true'
dc_mailname_in_oh='true'
dc_localdelivery='mail_home'

Et par enkelte kommentare til denne config files opbygning.

dc_local_interfaces: port angives efter ipadressen via et punktum . (y=port), xxx.xxx.xxx.xxx.yyy, flere ipaddresser deles via semikolon ; ofte vil der her stå den eksterne ip, den interne ip samt localhost og eventuelle ekstra porte som mails routes igennem i forbindelse med anti vira / spam.

dc_relay_domains: er de domains som exim4 skal håndtere emails for, igen semikolon; er seperator mellem domain navne.

dc_use_split_config: jeg køre altid split config, da jeg syndes at det er mere overskueligt.

dc_relay_nets: brugres til at definere hosts eller netværk der har åben relay via denne smtp server.

dc_smarthost: kan bruges til at route ALT email via en bestemt mailgateway, f.eks en ISP mailgateways så som pasmtp.tele.dk, dette kan dog også gøres via andre metoder f.eks hubbed_hosts

For at udfra disse informationer at danne den exim4 configurations file som servicen benytter skal man nu køre update-exim4.conf og herefter bør man egnetlige have en kørrende smtp server, der vil kunne håndtere mailflow mellem sit interne netværk og den store onde SMTP verden.

# update-exim4.conf

# /etc/init.d/exim4 restart

# telnet 127.0.0.1 25
ehlo d
quit

hvis ovenstående går godt, er mta'en kørende



Da alt mail normalt køre i cleartekst og derfor nemt kan sniffes er man begyndt at køre trafikken over TLS som tilbydes på server der svare på EHLO med starttls ,  dette skal denne gateway også understøtte.

# apt-get install ca-certificates openssl

# /usr/share/doc/exim4-base/examples/exim-gencert

[*] Creating a self signed SSL certificate for Exim!
This may be sufficient to establish encrypted connections but for
secure identification you need to buy a real certificate!

Please enter the hostname of your MTA at the Common Name (CN) prompt!


Generating a 1024 bit RSA private key

.................++++++
..........++++++
writing new private key to '/etc/exim4/exim.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Code (2 letters) [US]:dk
State or Province Name (full name) []:Jylland
Locality Name (eg, city) []:Silkeborg
Organization Name (eg, company; recommended) []:net-help.dk
Organizational Unit Name (eg, section) []:smtp.net-help.dk
Server name (eg. ssl.domain.tld; required!!!) []:smtp.net-help.dk
Email Address []:This email address is being protected from spambots. You need JavaScript enabled to view it.
[*] Done generating self signed certificates for exim!
Refer to the documentation and example configuration files
over at /usr/share/doc/exim4-base/ for an idea on how to enable TLS
support in your mail transfer agent.

herefter vil man under /etc/exim4/ kunne finde en exim.key og exim.crt

Enable tls ved at editere i /etc/exim4/conf.d/main/03_exim4-config_tlsoptions filen

# vi /etc/exim4/conf.d/main/03_exim4-config_tlsoptions

Sæt nedenstående linje lige over denne linje .ifdef MAIN_TLS_ENABLE

MAIN_TLS_ENABLE=1 

opdatere exim configurationen igen.

# update-exim4.conf

# /etc/init.d/exim4 restart

Test at exim4 nu understøtter TLS.

# telnet 127.0.0.1 25

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 lenny.it-geek ESMTP Exim 4.69 Tue, 28 Dec 2010 17:21:06 +0100
ehlo d
250-lenny.it-geek Hello localhost.localdomain [127.0.0.1]
250-SIZE 52428800
250-PIPELINING
250-STARTTLS
250 HELP
quit
221 lenny.it-geek closing connection
Connection closed by foreign host.



Opsætning af RBL's i exim4 er meget nem og en effiktiv måde at sotere spam hosts fra alderede når kommunikationen til serveren startes, åben /etc/exim4/conf.d/acl/00_exim4-config_header filen og tilføj følgende.

# vi /etc/exim4/conf.d/acl/00_exim4-config_header

CHECK_RCPT_IP_DNSBLS = bl.spamcop.net:xbl.spamhaus.org:dnsbl.sorbs.net

CHECK_RCPT_DOMAIN_DNSBLS = dnsbl.njabl.org:blackholes.five-ten-sg.com:cbl.abuseat.org:smtp.dnsbl.sorbs.net:spam.dnsbl.sorbs.net:zombie.dnsbl.sorbs.net

Med fordel kan man også tilføje følgende checks til den samme file samtidig

CHECK_RCPT_REVERSE_DNS = yes
CHECK_RCPT_VERIFY_SENDER = yes
CHECK_DATA_VERIFY_HEADER_SENDER = yes

# update-exim4.conf

# /etc/init.d/exim4 restart


SpamAssassin kan også bygges ind i Exim4, sådan ledes at mails der ikke bliver rejectet af RBL's bliver rated og markeret som spam i en senere process.

Installer de vigtigste komponenter + dependencies

# apt-get install sa-exim spamassassin

Enable spamassassin vi /etc/default/spamassassin

# vi /etc/default/spamassassin

Ændre linjen ENABLED=0 til ENABLED=1

samt i bunden

CRON=0 til CRON=1

Start Spamassassin

/etc/init.d/spamassassin start

nu til opsætning af sa-exim som sker i /etc/exim4/sa-exim.conf filen

# vi /etc/exim4/sa-exim.conf

find linjen SAEximRunCond: 0 ændre denne til #SAEximRunCond: 0, dvs. denne skal udkommenteres for at sa-exim køre.

Der er også andre linjer jeg bestemt mener man skal tweeke på, men da det er nødvendig at forstå hvordan disse virker, syndes jeg at i selv bør læse filen igennem og afslut med at dan en ny config fil til exim.

# update-exim4.conf

# /etc/init.d/exim4 restart

test af SA-Exim køre ved at sende en email til dig selv på serveren, f.eks via telnet og se output i /var/log/exim4/mainlog

# cat /var/log/exim4/mainlog

hvis du ser linjer som disse køre sa-exim:

2010-12-28 21:57:00 1PXgbC-0001X0-0g SA: Debug: SAEximRunCond expand returned: ''
2010-12-28 21:57:00 1PXgbC-0001X0-0g SA: Action: Not running SA because SAEximRunCond expanded to false (Message-Id: 1PXgbC-0001X0-0g).

Generalt kan spamassassin tweekes meget mere end jeg gør her, men der findes mange gode guides for spamassassin, blot husk at holde dine SA regler regler opdateret for at disse skal være effiktive.


Selv om der i dag, kommer meget få vira rundt via mail systemer, sal vil have amavis og clamav installeret på denne gateway.

# apt-get install amavisd-new clamav


Debian køre med 3 versioner.

Stable også kaldt Lenny http://www.debian.org/releases/stable/
Testing også kaldt Squeeze  http://www.debian.org/releases/testing/
Unstable også kaldt Sid http://www.debian.org/releases/unstable/

Min private fortolkning af disse 3 versioner er følgende.

Stable er virkeligt stable, mine private server køre alle debian stable, hvilket betyder at hardware fejl er en større sandsynlighed end software fejl, dette betyder også at stable naturlivis ikke er særlig opdateret i software versioner, dog bliver alle sikkerhedhuller naturligvis lukket.

Testing er de pakker som er på vej til at blive næste store debian release, dvs. ligenu er det pakke som bliver del når debian 6.0 bliver released og stable, her er pakkerne ofte forholdsvis opdaterings messingt med, men det er muligt at møde en bug eller to, jeg har i perioder brugt denne release som desktop os, vær dog opmærksom på at Debains sikerhed team ikke releaser security fixes for andet en stable, dvs. systemer som køre testing er ikke altid sikret!

Unstable, er debians udviklings sandkasse, skægt at lege lidt med, men jeg vil kun i meget presset version benytte denne version til andet end leg.

Ønsker man at leget med en frisk installeret testing maskine, kan netinst cder hentes her: http://cdimage.debian.org/cdimage/daily-builds/

Man kan naturligvis også installer en stable maskine først og ændre denne til at benytte testing pakkerne.

Åben sources.list med VI

vi /etc/apt/sources.list

søg og erstat lenny med squeeze

:%s/lenny/squeeze/g

apt-get update

apt-get dist-upgrade

Svar på spørgsmålene

reboot

cat /etc/debian_version
squeeze/sid

Velkommen til squeeze

En hurtig snort installation uden brug af MySql

apt-get install snort

Sikre at snort køre på den korrekte interface og ret dette i snort.debian.conf filen.

vi /etc/snort/snort.debian.conf

Start snort

/etc/init.d/snort start

Tilføj bleedingsnort reglerne til snort skal vi have disse tilføjet til oinkmaster.conf

 vi /etc/oinkmaster.conf

tilføj:

url = http://www.bleedingsnort.com/downloads/bleeding.rules.tar.gz

Default snort reglerne i denne file er opsolite, så disse kan fjernes.

Tilføj bleeding reglerne til snort.conf
de regler som er udkommenteret kunne jeg ikke få til at køre på debian's stabile version af snort

vi /etc/snort/snort.conf

tilføj:

 include $RULE_PATH/bleeding.rules
include $RULE_PATH/bleeding-attack_response.rules
#include $RULE_PATH/bleeding-dos.rules
include $RULE_PATH/bleeding-drop.rules
include $RULE_PATH/bleeding-dshield.rules
include $RULE_PATH/bleeding-exploit.rules
include $RULE_PATH/bleeding-game.rules
include $RULE_PATH/bleeding-inappropriate.rules
#include $RULE_PATH/bleeding-malware.rules
include $RULE_PATH/bleeding-p2p.rules
include $RULE_PATH/bleeding-scan.rules
include $RULE_PATH/bleeding-virus.rules
#include $RULE_PATH/bleeding-web.rules

Lav en backup dir til gamle snort regler.

mkdir /etc/snort/backup

Opdater snort reglerne via oinkmaster manuelt engang for at se at snort kan starte med disse regler.

oinkmaster -o /etc/snort/rules -b /etc/snort/backup

Tilføj opdateringerne af reglerne til crontab.

crontab -e

0 10 * * * /usr/sbin/oinkmaster -o /etc/snort/rules -b /etc/snort/backup 2>&1 |  mail -s "snort-update server" This email address is being protected from spambots. You need JavaScript enabled to view it.

For nyelig kom jeg i en situation med en ældre sbs installation, der simpelhen er ved at løbe tør for disk storage, serveren har kun 2 x 143 GB i raid, desværre kunne jeg ikke finde en esata controller som jeg kunne få til at virke korrekt under windows SBS 2003R2 :-( hvilket var mit første forsøg på at få tilknyttet ekstra storage til serveren.

I stedet for blev løsningen en gang disk via ATA over Ethernet.
Target: Debian Firewall - Intel Atom baseret hardware.
Initiator: Windows SBS 2003R2 - HP DL360

Installatione og konfiguration af Target på debina, er meget nemt, blot følg side 1 her: http://www.howtoforge.com/using-ata-over-ethernet-aoe-on-debian-lenny-initiator-and-target
Initiator er www.starwindsoftware.com AOE initiator software, som man kan downloade efter at registere det hos starwindsoftware.
Herefter tager det meget få minutter at installer initiator softwaren og derefter at få mounted den disk som stilles til rådighed på Target.

 

Et godt site til at test certificater på er:
http://www.digicert.com/help/index.htm?host=mailin01.jndata.dk:25

det fede ved denne cert checker, er at man kan difinere alternative porte, dvs. denne også kan bruges til at se på SSL certificater som bruges i forbindelse med SMTP TLS forbindelser.

En anden god site er Openssl commandline
http://www.madboa.com/geek/openssl/#cs-smtp

openssl s_client -connect remote.host:25 -starttls smtp
eller
openssl s_client -connect remote.host:25 -crlf -starttls smtp
alt efter MTA, Output bliver noget alla når det går godt:

openssl s_client -connect  mailin01.jndata.dk:25 -crlf -starttls smtp
CONNECTED(00000003)
depth=1 /O=VeriSign Trust Network/OU=VeriSign, Inc./OU=VeriSign International Server CA - Class 3/OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=DK/ST=8600 Silkeborg/L=Frichsvej 18/O=JN Data A/S/OU=JN Data A/S/CN=mailin01.jndata.dk
   i:/O=VeriSign Trust Network/OU=VeriSign, Inc./OU=VeriSign International Server CA - Class 3/OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign
 1 s:/O=VeriSign Trust Network/OU=VeriSign, Inc./OU=VeriSign International Server CA - Class 3/OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign
   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEdzCCA+CgAwIBAgIQKQLNqZKomLm8KdgF843S6zANBgkqhkiG9w0BAQUFADCB
ujEfMB0GA1UEChMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEXMBUGA1UECxMOVmVy
aVNpZ24sIEluYy4xMzAxBgNVBAsTKlZlcmlTaWduIEludGVybmF0aW9uYWwgU2Vy
dmVyIENBIC0gQ2xhc3MgMzFJMEcGA1UECxNAd3d3LnZlcmlzaWduLmNvbS9DUFMg
SW5jb3JwLmJ5IFJlZi4gTElBQklMSVRZIExURC4oYyk5NyBWZXJpU2lnbjAeFw0w
OTAyMTcwMDAwMDBaFw0xMTAyMTcyMzU5NTlaMIGGMQswCQYDVQQGEwJESzEXMBUG
A1UECBMOODYwMCBTaWxrZWJvcmcxFTATBgNVBAcUDEZyaWNoc3ZlaiAxODEUMBIG
A1UEChQLSk4gRGF0YSBBL1MxFDASBgNVBAsUC0pOIERhdGEgQS9TMRswGQYDVQQD
FBJtYWlsaW4wMS5qbmRhdGEuZGswgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
ALk+LtfavrxQIWMCjPWfjiHliMnxnTeMYFzMwA7A20Tney94J3xKjFBYUjh4u6zI
aD5zWi6zXznDmIya5BhFyFO4+kjDD0LhoeVHFV08H2RwYVURdSUJO9bw4LuJdp2g
lxQwl52VHxHIygphTP5RsXpGb/m6QlXjBIqF5Cyo1eAHAgMBAAGjggGuMIIBqjAy
BgNVHREEKzApghJtYWlsaW4wMS5qbmRhdGEuZGuCE21haWxvdXQxMi5qbmRhdGEu
ZGswCQYDVR0TBAIwADALBgNVHQ8EBAMCBaAwRgYDVR0fBD8wPTA7oDmgN4Y1aHR0
cDovL2NybC52ZXJpc2lnbi5jb20vQ2xhc3MzSW50ZXJuYXRpb25hbFNlcnZlci5j
cmwwRAYDVR0gBD0wOzA5BgtghkgBhvhFAQcXAzAqMCgGCCsGAQUFBwIBFhxodHRw
czovL3d3dy52ZXJpc2lnbi5jb20vcnBhMCgGA1UdJQQhMB8GCWCGSAGG+EIEAQYI
KwYBBQUHAwEGCCsGAQUFBwMCMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYY
aHR0cDovL29jc3AudmVyaXNpZ24uY29tMG4GCCsGAQUFBwEMBGIwYKFeoFwwWjBY
MFYWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFEtruSiWBgy70FI4mymsSweLIQUY
MCYWJGh0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28xLmdpZjANBgkqhkiG
9w0BAQUFAAOBgQBQgdmcE6+4cIU8K2Oc6oleYJivNwV/ayBEHkUXkxeqampcZ0xr
yMUKqlbmGOCMvF+OqIWwLghnWENSK2x4KY4NRiARbtrV5hjShoJ6gE7zTG2hA/mK
G5mLDpkgFTdfCUzUrC3Yhne3cP9yFWUDRGLJy6HPOv1BqGVzKCSmKuyeWQ==
-----END CERTIFICATE-----
subject=/C=DK/ST=8600 Silkeborg/L=Frichsvej 18/O=JN Data A/S/OU=JN Data A/S/CN=mailin01.jndata.dk
issuer=/O=VeriSign Trust Network/OU=VeriSign, Inc./OU=VeriSign International Server CA - Class 3/OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD.(c)97 VeriSign
---
No client certificate CA names sent
---
SSL handshake has read 2741 bytes and written 351 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 19FE276A7B999E00B9AACE36E0764D1C3DA92BCD13E385BA94EB7A8C4E389A8A
    Session-ID-ctx:
    Master-Key: 76A2D2DF4969D0D2E998D289756B329836DD3AD39B1B1055C11E70ECAFAA7AED2BD5E563828A542136305B75AF86EE01
    Key-Arg   : None
    Start Time: 1283243766
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
250 STARTTLS

eller vil man få en sådan output.

No client certificate CA names sent
---
SSL handshake has read 3022 bytes and written 351 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 60DEF783F755C96F7F8F8B51A46FA9FEE59EC31985DF3541FD9C1A79AFB4FE60
    Session-ID-ctx:
    Master-Key: 590CE493718260A532112F3BE959B7FEE7FA95E275BD9025B4251D66ECD46E89B78BA4BBA2DDD751D5F057BF54840100
    Key-Arg   : None
    Start Time: 1283240998
    Timeout   : 300 (sec)
    Verify return code: 21 (unable to verify the first certificate)