Har lige været rundt på et par af mine debian linux kasser :-)

En virtuel Debian box, på en hyper-v server

Debian servre

Jeg er dog sikker på at der er et par "live" migrations ind over denne oppe tid.


En anden, denne dog fysisk debian box, baseret på Intel atom

Intel atom - gateway

Denne kasse står uden ups, dvs. er afhængig af alm forsynings strøm. - blev kun genstartet da elektrikkeren skulle arbejde i huset.

Jeg har fået lidt tid til at lege med Letsencrypt og haproxy.
Letsencrypt er en projekt som gør det mulight at få "gratis" ssl certificater, dog kun med 90 dages løbetid pt, senere i projektet vil dette blive ændret til kortere tid efter hvad jeg kan læse på https://letsencrypt.org/

Foran mine web services har jeg en Haproxy kørrende, da denne kan splittet http / tcp trafik og derved er ligeglad med om en M$ service overholder http standard.

Dette betyder også at det er her mine offentlige ssl certificater termineres og det vil være her jeg skal have letsencrypt til at fungere.

Jeg vil gøre nytte af at ./letsencrypt-auto faktisk kan starte sin "egen" webserver til at gennemføre den authentikering som er nødvendig for at certificatet kan udstedes.

Denne authentikering køre over port 80 som udgangspunkt, hvor jeg har andre webserver kørrende, derfor kan jeg benytte " path_beg" funktionen i Haproxy til at fange url forspørgselser imode "/.well-known/acme-challenge/" og sikre at dette sendes videre til letencrypts egen webserver, som kun køre i forbindelse med oprettelse/fornyelse af certificater på den port der defines via "--http-01-port" parameteren af ./letsencrypt-auto scriptet.

De færdige certifivater vil være at finde under  /etc/letsencrypt/live og det PEM certificat som Haproxy skal bruge dannes via cat fullchain.pem privkey.pem > gw.mxbox.dk.pem og kopier gw.mxbox.dk.pem til /etc/ssl/private/

vi /etc/haproxy/haproxy.cfg

frontend ft_http-in bind *:80
mode http
option httplog

acl letsencrypt_check path_beg /.well-known/acme-challenge/
use_backend letsencrypt_backend if letsencrypt_check

backend letsencrypt_backend
mode http
log global
server letsencript-standalone 127.0.0.1:1080


vi /etc/letsencrypt/cli.ini

standalone-supported-challenges = http-01
authenticator = standalone
email = This email address is being protected from spambots. You need JavaScript enabled to view it.
rsa-key-size = 4096


./letsencrypt-auto certonly --renew-by-default --agree-tos  --http-01-port 1080 --domains gw.mxbox.dk

cd /etc/letsencrypt/live/gw.mxbox.dk

cat fullchain.pem privkey.pem > gw.mxbox.dk.pem

cp gw.mxbox.dk.pem /etc/ssl/private/

/etc/init.d/haproxy reload


Haproxy har jeg leget lidt med de sidste 2 år, faktisk har det undret mig at der ikke har været "gratis" versioner af "købe" loadbalancer tilrådighed på nettet, i dag har jeg læst at KEMP har gjort det muliget at hente en version af deres loadbalancer, dog med begrænsning på 20MBit fra http://freeloadbalancer.com/download/  såå måske denne løsning skulle undersøges lidt ??
alternativ er HAproxy, og de guides som kan findes på http://blog.loadbalancer.org og er man helt privat version, kan SOPHOS UTM faktisk også nogle ting og sager.

Lige et par linjer på hvordan jeg har sat phpsysinfo op på et par debian wheezy maskiner.

apt-get install nginx php5-fpm

cd /usr/src/

tar -zxvf v3.2.1.tar.gz

cd phpsysinfo-3.2.1/

mkdir /usr/share/nginx/www/phpsysinfo

cp -r ./* /usr/share/nginx/www/phpsysinfo

vi /etc/nginx/sites-available/phpsysinfo

og tilføj inden for den default "server"

server {

listen 8000;
index index.html index.htm index.php;

root /usr/share/nginx/www/phpsysinfo;

location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

}

enable sitet med en softlink fra advailble til enabled

ln -s /etc/nginx/sites-available/phpsysinfo /etc/nginx/sites-enabled/phpsysinfo

start / restart nginx servicen

/etc/init.d/nginx start

herefter vil man kunne tilgå http://ipaddresse:8000/ og se phpsysinfo dog med en fejl at phpsysinfo.ini mangler.

cd /usr/share/nginx/www/phpsysinfo

cp phpsysinfo.ini.new phpsysinfo.ini

vi phpsysinfo.ini

jeg har lavet følgende rettelser til min ini file.

PLUGINS="false" er ændret til

PLUGINS="PS,PSStatus"

og i [psstatus] sektionen har jeg lagt navnen ind på de servicen jeg vil se "overvåget"

PROCESSES=" nginx, lxc-start, dnsmasq"

herefter vil phpsysinfo vise forskellige nyttige information om din host.

Sikkerheden på nettet ændre sig hele tiden, dvs. måden man beskytter sig på skal følge med, de senere år er DNS blocklister / BlackHole også blevet en populær måde at beskytte klient pc'er på, tidligere har det primært været brugt til at beskytte sig imod Email spam.

Skulle man vælge et alternative til DNS-BH ville det ofte være en Proxy, hvor alt internet trafik så skulle køre igennem og man så her blokkerede de usikre URL'er, der kræver dog en setup hvor man både tager alm. port 80 samt ssl krypteret port 443 trafik, hvilket vil medføre et "større" setup, hertil vil det ikke stoppe trafik på alternative porte, hvis der er åben for dette ud til internettet.

Mit lille DNS-BH er lavet på en debian lxc instans, på en atom mikro computer, alternativ hardware kunne være en raspberry pi.
software jeg benytter mg er af er dnsmasq pakken samt Url blocklist fra https://isc.sans.edu/suspicious_domains.html og http://www.malwaredomains.com/ samt dnslookup hos www.opendns.com, hvilket også filetere malware og andet snavns fra default.

Installer dnsmasq og konfigurere.

apt-get install dnsmasq

herefter skal der ændres lidt i config filen.
vi /etc/dnsmasq.conf

Følgende har jeg ligenu slået til.

# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv

# Change this line if you want dns to get its upstream servers from
# somewhere other that /etc/resolv.conf
# her defineres at dnsmasq skal benytte opendns som upstream navne server.
resolv-file=/etc/dnsmasq.conf.resolv

# Set the cachesize here.
# sikre at dnsmasq har en fornufting dns cache, hvilket vil give hurtigere dns resolve tid.
cache-size=1500

# For debugging purposes, log each DNS query as it passes through
# dnsmasq.
# jeg vil gerne kunne følge med i om nogle af mine klienter laver dns opslag mod et blokkeret URL, da dette kunne indikere at maskinen har et problem
log-queries
# da LXC ikke har en syslog, og for at gøre det nemmere at parse loggen, har jeg defineret at dnsmasq benytter sin egen logfile. ( husk logrotate eller ligende )
log-facility=/var/log/dnsmasq.log

# Include a another lot of configuration options.
#conf-file=/etc/dnsmasq.more.conf
#åben op for at blacklists kan smides i dnsmasq.d mappen.
conf-dir=/etc/dnsmasq.d

Kort så indeholder min /etc/dnsmasq.conf.resolv blot dns serverne hos opendns, men det kunne også godt være Google's 8.8.8.8 samt 8.8.4.4 eller alle 4 dns hoste som står i den.

vi /etc/dnsmasq.conf.resolv

nameserver 208.67.222.222
nameserver 208.67.220.220

på debian skal dnsmasq lige genstartes før configurationen køre.

/etc/init.d/dnsmasq restart

Sikre at servicen køre og svare.
 netstat -nat

samt

host isc.sans.edu 127.0.0.1

Name: 127.0.0.1
Address: 127.0.0.1#53
Aliases:

isc.sans.edu has address 66.35.59.249
isc.sans.edu has IPv6 address 2607:f1c0:846:9100::15c
isc.sans.edu mail is handled by 15 smtp21a.sans.org.
isc.sans.edu mail is handled by 20 smtp31a.sans.org.
isc.sans.edu mail is handled by 25 smtp21b.sans.org.
isc.sans.edu mail is handled by 30 smtp31b.sans.org.

Next step er blocklisten fra http://www.malwaredomains.com/
hvis wget og md5sum ikke allerede er installeret skal de installeres

Her tager jeg den lette vej og har fundet denne site som har en fint script som håndere dette: http://www.mbse.eu/linux/malwarehosts/
Det man skal være opmærksom på i scriptet er følgende linje som give mening, for det Linux os man køre på.
   [ -x /etc/rc.d/rc.dnsmasq ] && /etc/rc.d/rc.dnsmasq restart >/dev/null

på debian vil det i stedet for være være
  [ -x /etc/init.d/dnsmasq ] && /etc/init.d/dnsmasq restart >/dev/null

 samt at ipaddressen  denne linje, bliver ændret til en intern webserver, f.eks på DNS-BH selv

echo "address=/$2/10.126.151.231" >> $DNSMASQFILE

sidst men ikke mindst skal scriptet lægges i crontab, sådan blocklisten bliver opdateret en gang i døgnet.
malwaredomains opdateret ikke deres liste hverdag, dvs. det kan ikke betale sig at forsøge har hente flere gange i døget.

Crontab -e
45 05 * * * /bin/sh /usr/local/sbin/malwaredomains

Herefter er det blot at få https://isc.sans.edu/suspicious_domains.html listen med ind, her benytter jeg "high", og har så lavet en tilpasset version af scriptet fra http://www.mbse.eu/linux/malwarehosts/

vi /usr/local/sbin/sansdomains

--------------------  script start ---------------

#!/bin/sh
# master download from http://www.mbse.eu/linux/malwarehosts/
# change for the sans suspicios domain by lwh - www.net-help.dk
# Update list of malware domains from sans

DNSMASQPATH="/etc/dnsmasq.d/"
DNSMASQFILE="70-sans-domains"

install_malwarezones() {

  rm -f $DNSMASQFILE

  echo "#" > $DNSMASQFILE
  echo "# $DNSMASQFILE generated $(date)" >> $DNSMASQFILE
  echo "# do not edit this file, your changes will get lost" >> $DNSMASQFILE
  echo "#" >> $DNSMASQFILE

tail -n +18 suspiciousdomains_High.txt | head -n -10 > suspiciousdomains_workfile

filename='suspiciousdomains_workfile'
filelines=`cat $filename`
for line in $filelines ; do
    echo "address=/"$line"/192.168.1.53" >> $DNSMASQFILE
done

  mkdir -p $DNSMASQPATH
  cp -p $DNSMASQFILE $DNSMASQPATH/$DNSMASQFILE.new
  mv $DNSMASQPATH/$DNSMASQFILE.new $DNSMASQPATH/$DNSMASQFILE
  [ -x /etc/init.d/dnsmasq ] && /etc/init.d/dnsmasq restart >/dev/null
}

cd /var/malwaredomains/sans
 wget -N  --no-check-certificate  https://isc.sans.edu/feeds/suspiciousdomains_High.txt

rc=$?

if [ $rc -eq 0 ]; then

  if [ -f sansdomains.md5 ]; then

    OLD=$(cat sansdomains.md5)
    NEW=$(md5sum suspiciousdomains_High.txt)

    if [ "$OLD" != "$NEW" ]; then
      md5sum suspiciousdomains_High.txt > sansdomains.md5
      install_malwarezones
    fi

  else
    md5sum sansdomains.zones > sansdomains.md5
    install_malwarezones
  fi
fi

--------------------  script slut --------------- 

crontab -e

45 14 * * * /bin/sh /usr/local/sbin/sansdomains

herefter bør man lige manuelt køre de 2 scripts samt teste  et par ad de dns entris som finde i at dns forspørgelser nu bliver sendt til den interne ipaddresse ( 192.168.1.53 )

Der findes flere blocklists som man kan benytte, taktikken er den samme.

f.eks.


http://www.malwaredomainlist.com/hostslist/hosts.txt
http://malc0de.com/bl/ZONES  ( denne kan være farligt, da de ikke filtere kommercielle url væk, f.eks amazonaws og Skype.com )
http://cybercrime-tracker.net/all.php

Øvrigt er http://www.scumware.org/stats.scumware sjov at kigge med på, her kan man også se danske sider, som hoster malware