Systems - Infra01 (aka SUN1)
Setup
CAcert infra01 setup notes
Author: | Jan Dittberner <jandd@cacert.org> |
---|---|
Version: | 0.3 |
Date: | 2011-04-27 |
Contents
initial setup
- update packages using aptitude
- setup apticron to get informed about available updates
- install etckeeper, bash-completion, vim, lxc, bridge-utils, debootstrap, ntp, screen, pwgen, ferm, python-apt, python-ipcalc
virtual machine setup
- create script lxc-setup for lxc container creation (know how from http://wiki.debian.org/LXC and /usr/share/doc/lxc)
- initialization file
[network] subnet=24 gateway=10.0.0.1 device=br0 domain=cacert.org smtprelay=emailout.cacert.org [host] volumegroup=vg0 [debian] mirror=http://ftp.nl.debian.org/debian/ release=squeeze packages=ifupdown, libui-dialog-perl, dialog, netbase, net-tools, exim4-daemon-light, iproute, openssh-server, etckeeper, python, locales, vim, iputils-ping, screen, sudo [lxc] cachedir=/var/cache/lxc/debian
- example for svn VM
sudo ./lxc-setup -n svn -l 8G -i 10.0.0.20 -r `pwgen -s 32 -n 1` \ -a svn-admin@cacert.org sudo lxc-start -n svn -f /etc/lxc/svn.conf -d
- enable forwarding
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/local.conf sysctl net.ipv4.ip_forward=1
- setup of firewall rules in /etc/ferm/ferm.conf
- use aliases for internal and external addresses in header
- use subchains for hosts
- host specific rules are put in separate files in /etc/ferm/ferm.d/
# -*- shell-script -*- # # Configuration file for ferm(1). # @def $INFRA01 = 172.16.2.9; @def $HOST_DEBMIRROR = @resolve((ftp.nluug.nl ftp.nl.debian.org security.debian.org)); @def $HOST_DNS = 172.16.2.1; @def $HOST_SMTP = @resolve(emailout.intra.cacert.org); @def &CONTAINER($name, $host, $host_ext) = { table filter { chain FORWARD { daddr $host @subchain "$name-fwd-in" { jump global-in; } saddr $host @subchain "$name-fwd-out" { jump global-out; } } } } @def &CONTAINER_NAT($name, $host_ext, $host_int) = { &CONTAINER($name, $host_int, $host_ext); table nat { chain PREROUTING { daddr $host_ext DNAT to $host_int; } chain POSTROUTING { saddr $host_int SNAT to $host_ext; } } } @def &CONTAINER_IN($name, $proto, $port) = { table filter { chain "$name-fwd-in" { proto $proto dport $port ACCEPT; } } } @def &CONTAINER_OUT($name, $host, $proto, $port) = { table filter { chain "$name-fwd-out" { proto $proto daddr $host dport $port ACCEPT; } } } table filter { chain INPUT { policy DROP; # connection tracking mod state state INVALID DROP; # allow local packet interface lo ACCEPT; # respond to ping proto icmp ACCEPT; jump global-in; mod state state (ESTABLISHED RELATED) ACCEPT; } chain OUTPUT { policy DROP; mod state state INVALID DROP; jump global-out; # connection tracking mod state state (ESTABLISHED RELATED) ACCEPT; } chain FORWARD { policy DROP; # connection tracking mod state state INVALID DROP; } chain global-out { proto udp daddr $HOST_DNS dport domain ACCEPT; proto tcp daddr $HOST_SMTP dport smtp ACCEPT; proto tcp daddr $HOST_DEBMIRROR dport http ACCEPT; } chain global-in { proto tcp dport ssh ACCEPT; } } @include 'ferm.d/'; table filter chain FORWARD mod state state (ESTABLISHED RELATED) ACCEPT; # IPv6: domain ip6 { table filter { chain INPUT { policy DROP; } chain FORWARD { policy DROP; } chain OUTPUT { policy DROP; } } }
- add ip address of svn vhost to /etc/network/interfaces in eth0 section:
iface eth0 inet static address 172.16.2.9 netmask 255.255.255.0 network 172.16.2.0 broadcast 172.16.2.255 gateway 172.16.2.1 # dns-* options are implemented by the resolvconf package, if installed dns-nameservers 172.16.2.1 dns-search infra.cacert.org post-up ip -4 addr add 172.16.2.15 dev eth0 pre-down ip -4 addr del 172.16.2.15 dev eth0