SlideShare ist ein Scribd-Unternehmen logo
xxxxxxx
Cfengine im
Praxiseinsatz
Freiraum schaffen für Innovation, Kreativität, Produktivität
Florian Freund
Teamleiter Managed Services
E-Mail: florian.freund@noris.net


 
 
Dienstag, 5. April 2011
Unternehmensportrait - noris network
noris network übernimmt für Kunden
einzelne IT-Services (Outtasking)
oder den Betrieb der kompletten IT (Outsourcing).
Das Unternehmen positioniert sich bundesweit als
IT-Outsourcing- und Outtasking-Spezialist
mit langjähriger Erfahrung im Managed-Hosting- und
WAN-Umfeld
im Portfolio befinden sich ergänzend ISP-Services,
VoIP, VPN-, Housing- und Security-Produkte sowie
ein komplettes Full-Service-Management.
Dienstag, 5. April 2011
noris network wurde 1993 gegründet, ist eigenfinanziert, Inhabergeführt
und hat deutschlandweit mehrere redundant ausgelegte Standorte.
Technologische Basis ist eine
leistungsfähige IT-Infrastruktur
mit noris-network-eigenen
Hochleistungs- und Hoch-
sicherheits Rechenzentren.
Unternehmensportrait - noris network
Dienstag, 5. April 2011
noris network – MPLS-Backbone
Zwei Backbone-Ringe:
 Nürnberg – München – Stuttgart –
Straßburg – FFM
 Nürnberg – Leipzig – Magdeburg –
Berlin – Hamburg – Bremen –
Hannover – Düsseldorf – Köln
– FFM
Anschlüsse an die wichtigen
Internet-Austauschknoten in:
 Frankfurt/Main (DE-CIX)
 München (INXS) und
 Nürnberg (N-IX)
 Wien (VIX)
> mehrfache 10 Gbit/s Ethernet
Netzwerk
> N (RZ) – F (DE-CIX): bis zu 400 Gbit/s
Dienstag, 5. April 2011




Z E R T I F I K A T
Die
DQS GmbH
Deutsche Gesellschaft zur Zertifizierung von Managementsystemen
bescheinigt hiermit, dass das Unternehmen
noris network AG
Deutschherrnstraße 15-19
90429 Nürnberg
Deutschland
für den Geltungsbereich
IT-Outsourcing, IT-Outtasking, Vertrieb, Konzeption,
Betrieb von Rechenzentren und Infrastrukturen
ein
Informationssicherheits-Managementsystem
eingeführt hat und anwendet.
Durch ein Audit, dokumentiert in einem Bericht, wurde der
Nachweis erbracht, dass dieses Managementsystem
die Forderungen der folgenden Norm erfüllt:
ISO / IEC 27001
Information technology – Security techniques
Information Security Management Systems
Requirements
Ausgabe Oktober 2005
Dieses Zertifikat ist gültig bis 2010-06-13
Zertifikat-Registrier-Nr. 358515 ISMS
Frankfurt am Main 2007-06-14
Ass. iur. M. Drechsel Dipl.-Ing. S. Heinloth
GESCHÄFTSFÜHRER
D-60433 Frankfurt am Main, August-Schanz-Straße 21
 noris network ist der 70.
Zertifikatsinhaber in Deutschland, der
sämtliche Prüfungskriterien nach
ISO/IEC 27001 vollständig erfüllt.
 Im Gegensatz zu vielen ISO-27001-
Zertifizierungen anderer Firmen umfasst
der Geltungsbereich bei noris network
das gesamte Unternehmen.
noris network – Sicherheit nach ISO 27001:
Dienstag, 5. April 2011
Warum Cfengine?
Zeitpunkt der Entscheidung für Cfengine: 2008
– Durchsetzen von Systemdefaults
– Wartung gleichartiger Systeme vereinfachen
– Versionsverwaltung
– Unterstützt alle Unix Varianten und Windows (mit cygwin)
– Ist bei den relevanten Linux-Distributionen dabei bzw. kann leicht nach
installiert werden (Debian, Ubuntu, SuSE, RedHat, ...)
– stabil mit langer Historie
– gut für große Installationen geeignet
6
Dienstag, 5. April 2011
about:Cfengine
Historie:
– Entwickelt 1993 von Mark Burges an der Uni Oslo
– Hauptgrund: schlechte Wartbarkeit und Skalierung von Shellskripten
– Ziele: deklarative Sprache, selbst-dokumentierend
– 2002: Cfengine 2: Erkennung von Anomalien, sichere Kommunikation
– 2003: Entwicklung Cfengine 3 startet. Entwicklung der „promise theory“
(http://research.iu.hio.no/promises.php)
– 2009: Erstes Release Cfengine 3
7
Dienstag, 5. April 2011
Versionen
Bei noris im Einsatz:
– 2008 stabile Version 2
– Version 3 erst in neueren Distributionen enthalten
– Cfengine 3 seit Anfang 2010 im Probebetrieb
– Migration der config files von v2 auf v3 zeitaufwändig
8
Version 2.x Version 3.x
Seit Debian 4.0 etch Seit Debian squeeze 6.0
Ubuntu 4.10 Warty Warthog Ubuntu 10.04 Lucid Lynx
Dienstag, 5. April 2011
default: pull
– cfexecd / cronjob
– Kommunikation nur nach extern
– Gut über verschiedene
Firewallzonen nutzbar
– Keine adhoc Änderungen
triggered:
– Kein echtes push
– Anfrage für einen Update Lauf
– geeignet um Änderungen an vielen
Systemen zeitnah umzusetzen
Betriebsmodi
9
Dienstag, 5. April 2011
Binaries
10
Version 2 Version 3
Worker zur Abarbeitung der
config files („inputs“)
cfagent cf-agent
Taskplaner und Wrapper für
cfagent
cfexecd cf-execd
Serverdaemon cfservd cf-serverd
Schlüsselgenerierung cfkey cf-key
Remoteaktivierung cfrun cf-runagent
Debugtool für Cfengine
Datenbanken
cfshow cf-report
Monitoring Tool cfenvd cf-monitord
Dienstag, 5. April 2011
config files
11
Version 2 Version 3
Netzwerkdaemon /var/cfengine/inputs/cfservd.conf „server“ bundle in
/var/cfengine/inputs/promises.cf
Update der Configfiles /var/cfengine/inputs/update.conf „agent“ bundle in
/var/cfengine/inputs/promises.cf
Configmanagement Jobs /var/cfengine/inputs/cfagent.conf „agent“ bundle(s) in
/var/cfengine/inputs/promises.cf
Dienstag, 5. April 2011
Cfengine Grunsätze
Grundsatz:
– lokal / unabhängig / sicher
– lokale Entscheidungsfreiheit
• Teil des Sicherheitsmodells
• „Cfengine will never support push communications“
12
Dienstag, 5. April 2011
Elemente v2
Abschnitte:
– vordefinierte Abschnitte
– definieren unterschiedliche
Operationen, z.B.:
• Dateien kopieren (copy)
• Prozesse starten (processes)
– Werden bis auf den control, import,
alerts und classes Abschnitt über
actionsequence aufgerufen
– actionsequence definiert
Reihenfolge der Ausführung
13
control:
actionsequence =
( Abschnitt1 Abschnitt2 Abschnitt3 )
...
Abschnitt1:
Klassen::
Anweisung1
Anweisung2
Abschnitt2:
...
Abschnitt3:
...
Dienstag, 5. April 2011
Elemente v2
Klassen:
– Logisches Element
– Können verknüpft werden
( . für UND, | für ODER, ! für NOT )
– Steuern ob Anweisungen
ausgeführt werden
– Softclasses werden im Abschnitt
classes: definiert
– Hardclasses sind vordefiniert, z.B.:
62_128_18 62_128_18_66 64_bit Day29 GMT_Hr13 Hr15
Hr15_Q4 March Min55_00 Min59 Q4 Tuesday Yr2011 any
cfengine_2 cfengine_2_2 cfengine_2_2_10
compiled_on_linux_gnu confman1_noris_net debian
ipv4_62 ipv4_62_128 ipv4_62_128_18 ipv4_62_128_18_66
linux linux_2_6_32_30_server linux_x86_64
lsb_compliant main net net_iface_eth0 net_iface_lo
noris_net syslog_low_normal ubuntu ubuntu_10
ubuntu_10_4 ubuntu_lucid x86_64
14
control:
actionsequence = ( editfiles )
...
classes:
file_foobar_exists =
( FileExists(/tmp/foobar) )
editfiles:
file_foobar_exists::
{ /tmp/foobar
AppendIfNoSuchLine "Hello World"
}
Dienstag, 5. April 2011
Elemente v2
15
control:
actionsequence = ( editfiles )
foobar = ( "/tmp/foobar" )
classes:
file_foobar_exists =
( FileExists($(foobar)) )
editfiles:
file_foobar_exists::
{ $(foobar)
AppendIfNoSuchLine "Hello World"
}
Variablen:
– Speichern Strings
– Aufruf via $(variable) bzw.
${variable}
– Werden im Abschnitt control:
definiert
Dienstag, 5. April 2011
Elemente v2
16
import:
# load definitions
cf.definitions
# start main process
cfagent.conf.run
Imports:
– Strukturierungsmittel
– Auslagern von Informationen in
einzelne Files
– Importierte Files werden
gemerged
– Achtung! Variablen und Klassen
stehen nur ab der jeweiligen
Hierarchieebene zur Verfügung
Dienstag, 5. April 2011
Elemente v3
Promises:
– Deklaration eines Zustandes den man erhalten möchte
– Strukturiert durch bundles und bodies
– promise bundle: Sammlung von promises
– promise body: Teil eines promise mit
Detailinformationen
– TYPE: Typ eines bundle/body
– promise type entspricht Abschnitt in v2
– class ist analog zu v2
– neu bei Variablen: Listen, Datentypen
17
bundle/body TYPE name
{
promise type:
classes::
"promiser" ->
{ "promisee1","promisee2", ... }
attribute_1 => value_1,
attribute_2 => value_2,
...
attribute_n => value_n;
}
Dienstag, 5. April 2011
Beispiel sshd_config
Ziele:
– Login mit Passwort nicht mehr möglich
– Nur noch mit Key Authentisierung
18
# Authentication:
PermitRootLogin without-password
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
Dienstag, 5. April 2011
Beispiel sshd_config v2
19
control:
actionsequence = ( editfiles.sshd processes.sshd )
addinstallable = ( file_sshd_config_changed )
sshd_config = ( "/etc/ssh/sshd_config" )
classes:
file_authorized_keys_exists = ( FileExists(/root/.ssh/authorized_keys) )
file_sshd_config_exists = ( FileExists($(sshd_config)) )
editfiles:
sshd.file_authorized_keys_exists.file_sshd_config_exists::
{ $(sshd_config)
SetCommentStart "#"
CommentLinesMatching ".*PasswordAuthentication.*yes"
CommentLinesMatching ".*ChallengeResponseAuthentication.*yes"
CommentLinesMatching ".*PermitRootLogin.*yes"
CommentLinesMatching ".*PermitRootLogin.*forced-commands-only"
AppendIfNoSuchLine "PasswordAuthentication no"
AppendIfNoSuchLine "ChallengeResponseAuthentication no"
AppendIfNoSuchLine "PermitRootLogin without-password"
DefineClasses "file_sshd_config_changed"
}
processes:
sshd.file_sshd_config_changed::
".*sshd.*"
action=signal
signal=hup
Dienstag, 5. April 2011
Beispiel sshd_config v3 - agent
20
bundle agent sshd {
classes:
any::
"file_authorized_keys_exists"
expression => fileexists("/root/.ssh/authorized_keys");
"file_sshd_config_exists"
expression => fileexists("/etc/ssh/sshd_config");
files:
file_sshd_config_exists.file_authorized_keys_exists::
"/etc/ssh/sshd_config"
comment => "Rufe das edit_files bundle sshd_config auf",
edit_line => sshd_config,
classes => if_repaired("sshd_config_repaired");
processes:
sshd_config_repaired::
"sshd"
comment => "sshd_config wurde geändert. Sende SIGHUP",
signals => { "hup" };
}
Dienstag, 5. April 2011
Beispiel sshd_config v3 - edit_line
21
bundle edit_line sshd_config {
replace_patterns:
"^(PasswordAuthentication.*yes)$"
replace_with => comment("#");
"^(ChallengeResponseAuthentication.*yes)$"
replace_with => comment("#");
"^(PermitRootLogin.*yes)$"
replace_with => comment("#");
"^(PermitRootLogin.*forced-commands-only)$"
replace_with => comment("#");
insert_lines:
"PasswordAuthentication no"
"ChallengeResponseAuthentication no"
"PermitRootLogin without-password"
}
Dienstag, 5. April 2011
Troubleshooting
– verbose / debug output aktivieren
• cfagent -v / cf-agent -v
• cfagent -d -v / cf-agent -d -v
– v2: Klassen bei der actionsequence setzen
• actionsequence = ( editfiles.debugklasse )
– v3: Kommentare verwenden
• comment => "Jetzt passiert dies und das"
– 1 Minute warten
22
Dienstag, 5. April 2011
noris config - Mandantenfähigkeit
– Viele verschiedene Kunden
– Kleinster gemeinsamer Nenner (generic)
• sshd Konfiguration
• Monitoring Defaults
• Selbstheilung
– Kundenspezifische Jobs
23
cfagent.conf
!"" cf.def.customers
!"" cf.def.os
!"" cfagent.conf.run.dynamic
#"" cfagent.conf.run.generic
#"" cf._startgeneric
#"" cf.sshd
Dienstag, 5. April 2011
noris config - Selbstheilung
– Fehler in der Config kann dazu führen, dass cfagent nicht
mehr sauber durchläuft
– Manuelle Reparatur: Auf allen betroffenen Hosts default
config verteilen
– Lösung:
• Stündlicher cronjob
• bash Script
• führt cfagent aus und prüft exitcode
• Im Fehlerfall:
– Backup der Configurationsdateien
– Deploy default config per HTTP Download
– In Cfengine 3 bereits eingebaut (failsafe.cf)
24
Dienstag, 5. April 2011
Weitere Informationen
– Cfengine Website
http://www.cfengine.org
• Cfengine 3 Referenz
http://www.cfengine.org/manuals/cf3-reference.html
• Cfengine 2 Referenz
http://www.cfengine.org/manuals/cf2-Reference.html
– Promise Theory
http://research.iu.hio.no/promises.php
– Wikipedia
http://en.wikipedia.org/wiki/Cfengine
25
Dienstag, 5. April 2011
Noch Fragen?
Florian Freund
Teamleiter Managed Services
Email: florian.freund@noris.net
noris network AG
Thomas-Mann-Straße 16-20
90471 Nürnberg
www.noris.de


 
 
Freiraum schaffen für Innovation, Kreativität, Produktivität
Dienstag, 5. April 2011

Weitere ähnliche Inhalte

Ähnlich wie OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund

Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und Foreman
B1 Systems GmbH
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
Thorsten Kamann
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Management
inovex GmbH
 
Plone broschure-als-pdf-datei
Plone broschure-als-pdf-dateiPlone broschure-als-pdf-datei
Plone broschure-als-pdf-datei
caf travac
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
Ulrich Krause
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
inovex GmbH
 
Storage Cluster mit CEPH
Storage Cluster mit CEPHStorage Cluster mit CEPH
Storage Cluster mit CEPH
B1 Systems GmbH
 
Software Entwicklung im Team
Software Entwicklung im TeamSoftware Entwicklung im Team
Software Entwicklung im Team
brandts
 
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceSoftwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
B1 Systems GmbH
 
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantDeployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Christoph Möller
 
Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI
Florian Bosselmann
 
Config as Code: Der Weg zu Configuration as Code
Config as Code: Der Weg zu Configuration as CodeConfig as Code: Der Weg zu Configuration as Code
Config as Code: Der Weg zu Configuration as Code
DevOps Meetup Bern
 
System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet
B1 Systems GmbH
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und Foreman
B1 Systems GmbH
 
cynapspro data endpoint protection 2010 - Installationsleitfaden
cynapspro data endpoint protection 2010 - Installationsleitfadencynapspro data endpoint protection 2010 - Installationsleitfaden
cynapspro data endpoint protection 2010 - Installationsleitfaden
cynapspro GmbH
 
Sichere und unabhängige Datenverwaltung mit ownCloud
Sichere und unabhängige Datenverwaltung mit ownCloud Sichere und unabhängige Datenverwaltung mit ownCloud
Sichere und unabhängige Datenverwaltung mit ownCloud
B1 Systems GmbH
 
OpenStack – Automatisiertes Bereitstellen von Instanzen
OpenStack – Automatisiertes Bereitstellen von InstanzenOpenStack – Automatisiertes Bereitstellen von Instanzen
OpenStack – Automatisiertes Bereitstellen von Instanzen
B1 Systems GmbH
 
LinuxTag 2007 - Linux im Bundesministerium des Inneren bei der Fußball WM 2006
LinuxTag 2007 - Linux im Bundesministerium des Inneren bei der Fußball WM 2006LinuxTag 2007 - Linux im Bundesministerium des Inneren bei der Fußball WM 2006
LinuxTag 2007 - Linux im Bundesministerium des Inneren bei der Fußball WM 2006
Schlomo Schapiro
 
LinuxTag 2007: Linux im Bundesministerium des Inneren bei der Fußball WM 2006
LinuxTag 2007: Linux im Bundesministerium des Inneren bei der Fußball WM 2006LinuxTag 2007: Linux im Bundesministerium des Inneren bei der Fußball WM 2006
LinuxTag 2007: Linux im Bundesministerium des Inneren bei der Fußball WM 2006
Schlomo Schapiro
 
Oracle Database Backup Service
Oracle Database Backup ServiceOracle Database Backup Service
Oracle Database Backup Service
Trivadis
 

Ähnlich wie OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund (20)

Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und Foreman
 
Vortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development EnvironmentsVortragsreihe Dortmund: Unified Development Environments
Vortragsreihe Dortmund: Unified Development Environments
 
Opensource Tools für das Data Center Management
Opensource Tools für das Data Center ManagementOpensource Tools für das Data Center Management
Opensource Tools für das Data Center Management
 
Plone broschure-als-pdf-datei
Plone broschure-als-pdf-dateiPlone broschure-als-pdf-datei
Plone broschure-als-pdf-datei
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
Grundlagen puppet
Grundlagen puppetGrundlagen puppet
Grundlagen puppet
 
Storage Cluster mit CEPH
Storage Cluster mit CEPHStorage Cluster mit CEPH
Storage Cluster mit CEPH
 
Software Entwicklung im Team
Software Entwicklung im TeamSoftware Entwicklung im Team
Software Entwicklung im Team
 
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and SpaceSoftwarepaketierung und Continuous Integration bei Airbus Defence and Space
Softwarepaketierung und Continuous Integration bei Airbus Defence and Space
 
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit VagrantDeployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant
 
Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI
 
Config as Code: Der Weg zu Configuration as Code
Config as Code: Der Weg zu Configuration as CodeConfig as Code: Der Weg zu Configuration as Code
Config as Code: Der Weg zu Configuration as Code
 
System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet System- & Konfigurationsmanagement mit Foreman & Puppet
System- & Konfigurationsmanagement mit Foreman & Puppet
 
Systemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und ForemanSystemmanagement mit Puppet und Foreman
Systemmanagement mit Puppet und Foreman
 
cynapspro data endpoint protection 2010 - Installationsleitfaden
cynapspro data endpoint protection 2010 - Installationsleitfadencynapspro data endpoint protection 2010 - Installationsleitfaden
cynapspro data endpoint protection 2010 - Installationsleitfaden
 
Sichere und unabhängige Datenverwaltung mit ownCloud
Sichere und unabhängige Datenverwaltung mit ownCloud Sichere und unabhängige Datenverwaltung mit ownCloud
Sichere und unabhängige Datenverwaltung mit ownCloud
 
OpenStack – Automatisiertes Bereitstellen von Instanzen
OpenStack – Automatisiertes Bereitstellen von InstanzenOpenStack – Automatisiertes Bereitstellen von Instanzen
OpenStack – Automatisiertes Bereitstellen von Instanzen
 
LinuxTag 2007 - Linux im Bundesministerium des Inneren bei der Fußball WM 2006
LinuxTag 2007 - Linux im Bundesministerium des Inneren bei der Fußball WM 2006LinuxTag 2007 - Linux im Bundesministerium des Inneren bei der Fußball WM 2006
LinuxTag 2007 - Linux im Bundesministerium des Inneren bei der Fußball WM 2006
 
LinuxTag 2007: Linux im Bundesministerium des Inneren bei der Fußball WM 2006
LinuxTag 2007: Linux im Bundesministerium des Inneren bei der Fußball WM 2006LinuxTag 2007: Linux im Bundesministerium des Inneren bei der Fußball WM 2006
LinuxTag 2007: Linux im Bundesministerium des Inneren bei der Fußball WM 2006
 
Oracle Database Backup Service
Oracle Database Backup ServiceOracle Database Backup Service
Oracle Database Backup Service
 

OSDC 2011 | CFEngine im Praxiseinsatz by Florian Freund

  • 1. xxxxxxx Cfengine im Praxiseinsatz Freiraum schaffen für Innovation, Kreativität, Produktivität Florian Freund Teamleiter Managed Services E-Mail: florian.freund@noris.net Dienstag, 5. April 2011
  • 2. Unternehmensportrait - noris network noris network übernimmt für Kunden einzelne IT-Services (Outtasking) oder den Betrieb der kompletten IT (Outsourcing). Das Unternehmen positioniert sich bundesweit als IT-Outsourcing- und Outtasking-Spezialist mit langjähriger Erfahrung im Managed-Hosting- und WAN-Umfeld im Portfolio befinden sich ergänzend ISP-Services, VoIP, VPN-, Housing- und Security-Produkte sowie ein komplettes Full-Service-Management. Dienstag, 5. April 2011
  • 3. noris network wurde 1993 gegründet, ist eigenfinanziert, Inhabergeführt und hat deutschlandweit mehrere redundant ausgelegte Standorte. Technologische Basis ist eine leistungsfähige IT-Infrastruktur mit noris-network-eigenen Hochleistungs- und Hoch- sicherheits Rechenzentren. Unternehmensportrait - noris network Dienstag, 5. April 2011
  • 4. noris network – MPLS-Backbone Zwei Backbone-Ringe:  Nürnberg – München – Stuttgart – Straßburg – FFM  Nürnberg – Leipzig – Magdeburg – Berlin – Hamburg – Bremen – Hannover – Düsseldorf – Köln – FFM Anschlüsse an die wichtigen Internet-Austauschknoten in:  Frankfurt/Main (DE-CIX)  München (INXS) und  Nürnberg (N-IX)  Wien (VIX) > mehrfache 10 Gbit/s Ethernet Netzwerk > N (RZ) – F (DE-CIX): bis zu 400 Gbit/s Dienstag, 5. April 2011
  • 5.     Z E R T I F I K A T Die DQS GmbH Deutsche Gesellschaft zur Zertifizierung von Managementsystemen bescheinigt hiermit, dass das Unternehmen noris network AG Deutschherrnstraße 15-19 90429 Nürnberg Deutschland für den Geltungsbereich IT-Outsourcing, IT-Outtasking, Vertrieb, Konzeption, Betrieb von Rechenzentren und Infrastrukturen ein Informationssicherheits-Managementsystem eingeführt hat und anwendet. Durch ein Audit, dokumentiert in einem Bericht, wurde der Nachweis erbracht, dass dieses Managementsystem die Forderungen der folgenden Norm erfüllt: ISO / IEC 27001 Information technology – Security techniques Information Security Management Systems Requirements Ausgabe Oktober 2005 Dieses Zertifikat ist gültig bis 2010-06-13 Zertifikat-Registrier-Nr. 358515 ISMS Frankfurt am Main 2007-06-14 Ass. iur. M. Drechsel Dipl.-Ing. S. Heinloth GESCHÄFTSFÜHRER D-60433 Frankfurt am Main, August-Schanz-Straße 21  noris network ist der 70. Zertifikatsinhaber in Deutschland, der sämtliche Prüfungskriterien nach ISO/IEC 27001 vollständig erfüllt.  Im Gegensatz zu vielen ISO-27001- Zertifizierungen anderer Firmen umfasst der Geltungsbereich bei noris network das gesamte Unternehmen. noris network – Sicherheit nach ISO 27001: Dienstag, 5. April 2011
  • 6. Warum Cfengine? Zeitpunkt der Entscheidung für Cfengine: 2008 – Durchsetzen von Systemdefaults – Wartung gleichartiger Systeme vereinfachen – Versionsverwaltung – Unterstützt alle Unix Varianten und Windows (mit cygwin) – Ist bei den relevanten Linux-Distributionen dabei bzw. kann leicht nach installiert werden (Debian, Ubuntu, SuSE, RedHat, ...) – stabil mit langer Historie – gut für große Installationen geeignet 6 Dienstag, 5. April 2011
  • 7. about:Cfengine Historie: – Entwickelt 1993 von Mark Burges an der Uni Oslo – Hauptgrund: schlechte Wartbarkeit und Skalierung von Shellskripten – Ziele: deklarative Sprache, selbst-dokumentierend – 2002: Cfengine 2: Erkennung von Anomalien, sichere Kommunikation – 2003: Entwicklung Cfengine 3 startet. Entwicklung der „promise theory“ (http://research.iu.hio.no/promises.php) – 2009: Erstes Release Cfengine 3 7 Dienstag, 5. April 2011
  • 8. Versionen Bei noris im Einsatz: – 2008 stabile Version 2 – Version 3 erst in neueren Distributionen enthalten – Cfengine 3 seit Anfang 2010 im Probebetrieb – Migration der config files von v2 auf v3 zeitaufwändig 8 Version 2.x Version 3.x Seit Debian 4.0 etch Seit Debian squeeze 6.0 Ubuntu 4.10 Warty Warthog Ubuntu 10.04 Lucid Lynx Dienstag, 5. April 2011
  • 9. default: pull – cfexecd / cronjob – Kommunikation nur nach extern – Gut über verschiedene Firewallzonen nutzbar – Keine adhoc Änderungen triggered: – Kein echtes push – Anfrage für einen Update Lauf – geeignet um Änderungen an vielen Systemen zeitnah umzusetzen Betriebsmodi 9 Dienstag, 5. April 2011
  • 10. Binaries 10 Version 2 Version 3 Worker zur Abarbeitung der config files („inputs“) cfagent cf-agent Taskplaner und Wrapper für cfagent cfexecd cf-execd Serverdaemon cfservd cf-serverd Schlüsselgenerierung cfkey cf-key Remoteaktivierung cfrun cf-runagent Debugtool für Cfengine Datenbanken cfshow cf-report Monitoring Tool cfenvd cf-monitord Dienstag, 5. April 2011
  • 11. config files 11 Version 2 Version 3 Netzwerkdaemon /var/cfengine/inputs/cfservd.conf „server“ bundle in /var/cfengine/inputs/promises.cf Update der Configfiles /var/cfengine/inputs/update.conf „agent“ bundle in /var/cfengine/inputs/promises.cf Configmanagement Jobs /var/cfengine/inputs/cfagent.conf „agent“ bundle(s) in /var/cfengine/inputs/promises.cf Dienstag, 5. April 2011
  • 12. Cfengine Grunsätze Grundsatz: – lokal / unabhängig / sicher – lokale Entscheidungsfreiheit • Teil des Sicherheitsmodells • „Cfengine will never support push communications“ 12 Dienstag, 5. April 2011
  • 13. Elemente v2 Abschnitte: – vordefinierte Abschnitte – definieren unterschiedliche Operationen, z.B.: • Dateien kopieren (copy) • Prozesse starten (processes) – Werden bis auf den control, import, alerts und classes Abschnitt über actionsequence aufgerufen – actionsequence definiert Reihenfolge der Ausführung 13 control: actionsequence = ( Abschnitt1 Abschnitt2 Abschnitt3 ) ... Abschnitt1: Klassen:: Anweisung1 Anweisung2 Abschnitt2: ... Abschnitt3: ... Dienstag, 5. April 2011
  • 14. Elemente v2 Klassen: – Logisches Element – Können verknüpft werden ( . für UND, | für ODER, ! für NOT ) – Steuern ob Anweisungen ausgeführt werden – Softclasses werden im Abschnitt classes: definiert – Hardclasses sind vordefiniert, z.B.: 62_128_18 62_128_18_66 64_bit Day29 GMT_Hr13 Hr15 Hr15_Q4 March Min55_00 Min59 Q4 Tuesday Yr2011 any cfengine_2 cfengine_2_2 cfengine_2_2_10 compiled_on_linux_gnu confman1_noris_net debian ipv4_62 ipv4_62_128 ipv4_62_128_18 ipv4_62_128_18_66 linux linux_2_6_32_30_server linux_x86_64 lsb_compliant main net net_iface_eth0 net_iface_lo noris_net syslog_low_normal ubuntu ubuntu_10 ubuntu_10_4 ubuntu_lucid x86_64 14 control: actionsequence = ( editfiles ) ... classes: file_foobar_exists = ( FileExists(/tmp/foobar) ) editfiles: file_foobar_exists:: { /tmp/foobar AppendIfNoSuchLine "Hello World" } Dienstag, 5. April 2011
  • 15. Elemente v2 15 control: actionsequence = ( editfiles ) foobar = ( "/tmp/foobar" ) classes: file_foobar_exists = ( FileExists($(foobar)) ) editfiles: file_foobar_exists:: { $(foobar) AppendIfNoSuchLine "Hello World" } Variablen: – Speichern Strings – Aufruf via $(variable) bzw. ${variable} – Werden im Abschnitt control: definiert Dienstag, 5. April 2011
  • 16. Elemente v2 16 import: # load definitions cf.definitions # start main process cfagent.conf.run Imports: – Strukturierungsmittel – Auslagern von Informationen in einzelne Files – Importierte Files werden gemerged – Achtung! Variablen und Klassen stehen nur ab der jeweiligen Hierarchieebene zur Verfügung Dienstag, 5. April 2011
  • 17. Elemente v3 Promises: – Deklaration eines Zustandes den man erhalten möchte – Strukturiert durch bundles und bodies – promise bundle: Sammlung von promises – promise body: Teil eines promise mit Detailinformationen – TYPE: Typ eines bundle/body – promise type entspricht Abschnitt in v2 – class ist analog zu v2 – neu bei Variablen: Listen, Datentypen 17 bundle/body TYPE name { promise type: classes:: "promiser" -> { "promisee1","promisee2", ... } attribute_1 => value_1, attribute_2 => value_2, ... attribute_n => value_n; } Dienstag, 5. April 2011
  • 18. Beispiel sshd_config Ziele: – Login mit Passwort nicht mehr möglich – Nur noch mit Key Authentisierung 18 # Authentication: PermitRootLogin without-password # Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication no # Change to no to disable tunnelled clear text passwords PasswordAuthentication no Dienstag, 5. April 2011
  • 19. Beispiel sshd_config v2 19 control: actionsequence = ( editfiles.sshd processes.sshd ) addinstallable = ( file_sshd_config_changed ) sshd_config = ( "/etc/ssh/sshd_config" ) classes: file_authorized_keys_exists = ( FileExists(/root/.ssh/authorized_keys) ) file_sshd_config_exists = ( FileExists($(sshd_config)) ) editfiles: sshd.file_authorized_keys_exists.file_sshd_config_exists:: { $(sshd_config) SetCommentStart "#" CommentLinesMatching ".*PasswordAuthentication.*yes" CommentLinesMatching ".*ChallengeResponseAuthentication.*yes" CommentLinesMatching ".*PermitRootLogin.*yes" CommentLinesMatching ".*PermitRootLogin.*forced-commands-only" AppendIfNoSuchLine "PasswordAuthentication no" AppendIfNoSuchLine "ChallengeResponseAuthentication no" AppendIfNoSuchLine "PermitRootLogin without-password" DefineClasses "file_sshd_config_changed" } processes: sshd.file_sshd_config_changed:: ".*sshd.*" action=signal signal=hup Dienstag, 5. April 2011
  • 20. Beispiel sshd_config v3 - agent 20 bundle agent sshd { classes: any:: "file_authorized_keys_exists" expression => fileexists("/root/.ssh/authorized_keys"); "file_sshd_config_exists" expression => fileexists("/etc/ssh/sshd_config"); files: file_sshd_config_exists.file_authorized_keys_exists:: "/etc/ssh/sshd_config" comment => "Rufe das edit_files bundle sshd_config auf", edit_line => sshd_config, classes => if_repaired("sshd_config_repaired"); processes: sshd_config_repaired:: "sshd" comment => "sshd_config wurde geändert. Sende SIGHUP", signals => { "hup" }; } Dienstag, 5. April 2011
  • 21. Beispiel sshd_config v3 - edit_line 21 bundle edit_line sshd_config { replace_patterns: "^(PasswordAuthentication.*yes)$" replace_with => comment("#"); "^(ChallengeResponseAuthentication.*yes)$" replace_with => comment("#"); "^(PermitRootLogin.*yes)$" replace_with => comment("#"); "^(PermitRootLogin.*forced-commands-only)$" replace_with => comment("#"); insert_lines: "PasswordAuthentication no" "ChallengeResponseAuthentication no" "PermitRootLogin without-password" } Dienstag, 5. April 2011
  • 22. Troubleshooting – verbose / debug output aktivieren • cfagent -v / cf-agent -v • cfagent -d -v / cf-agent -d -v – v2: Klassen bei der actionsequence setzen • actionsequence = ( editfiles.debugklasse ) – v3: Kommentare verwenden • comment => "Jetzt passiert dies und das" – 1 Minute warten 22 Dienstag, 5. April 2011
  • 23. noris config - Mandantenfähigkeit – Viele verschiedene Kunden – Kleinster gemeinsamer Nenner (generic) • sshd Konfiguration • Monitoring Defaults • Selbstheilung – Kundenspezifische Jobs 23 cfagent.conf !"" cf.def.customers !"" cf.def.os !"" cfagent.conf.run.dynamic #"" cfagent.conf.run.generic #"" cf._startgeneric #"" cf.sshd Dienstag, 5. April 2011
  • 24. noris config - Selbstheilung – Fehler in der Config kann dazu führen, dass cfagent nicht mehr sauber durchläuft – Manuelle Reparatur: Auf allen betroffenen Hosts default config verteilen – Lösung: • Stündlicher cronjob • bash Script • führt cfagent aus und prüft exitcode • Im Fehlerfall: – Backup der Configurationsdateien – Deploy default config per HTTP Download – In Cfengine 3 bereits eingebaut (failsafe.cf) 24 Dienstag, 5. April 2011
  • 25. Weitere Informationen – Cfengine Website http://www.cfengine.org • Cfengine 3 Referenz http://www.cfengine.org/manuals/cf3-reference.html • Cfengine 2 Referenz http://www.cfengine.org/manuals/cf2-Reference.html – Promise Theory http://research.iu.hio.no/promises.php – Wikipedia http://en.wikipedia.org/wiki/Cfengine 25 Dienstag, 5. April 2011
  • 26. Noch Fragen? Florian Freund Teamleiter Managed Services Email: florian.freund@noris.net noris network AG Thomas-Mann-Straße 16-20 90471 Nürnberg www.noris.de Freiraum schaffen für Innovation, Kreativität, Produktivität Dienstag, 5. April 2011