[HowTo] Gentoo-Hardened 2005.1 installieren

FreeBSD, Gentoo, openSUSE, CentOS, Ubuntu, Debian
User avatar
Joe User
Project Manager
Project Manager
Posts: 11190
Joined: 2003-02-27 01:00
Location: Hamburg
 

[HowTo] Gentoo-Hardened 2005.1 installieren

Post by Joe User »

Moin,

wie bereits in http://www.rootforum.org/forum/viewtopi ... 5&start=15 angekündigt, findet Ihr nachfolgend eine "step-by-step"-Anleitung zur Installation von Gentoo-Hardened-2005.1 (~x86) über ein Rescuesystem auf einem "handelsüblichen RootServer". Ziel des Ganzen ist eine weitestgehend sichere Basisinstallation des Grundsystems, sowie folgender Dienste:

Datenbank
1) MySQL 5.0.18 (UTF-8, MyISAM, InnoDB)

Mailserver
1) Postfix 2.2.5 (TLS/SSL, SMTP-AUTH)
2) Courier-IMAP 4.0.4 (POP3s, IMAPs)
3) ClamSMTP + ClamAV

Webserver (in Vorbereitung)
1) Apache 2.0.55 (MPM-Prefork)
2) mod_php 5.1.1 (HardenedPHP)


HINWEIS: Dieses HowTo richtet sich ausschliesslich an erfahrenere Admins, die in der Lage sind, auftretende Probleme weitestgehend selbstständig zu lösen.


Anmerkung: Da sich die Vorgehensweise nur geringfügig von einer normalen Gentoo-Installation unterscheidet und um eine weitere Republikation des offiziellen Gentoo-Handbuches zu vermeiden, habe ich nur die sich vom offiziellen Gentoo-Handbuch unterscheidenden Punkte kommentiert. Selbstverständlich bin auch ich kein perfekter Mensch, weshalb ich ab diesem Punkt davon ausgehe, dass der geneigte Leser das offizielle Gentoo-Handbuch sowohl gelesen, als auch verstanden hat und es zudem als Referenz bereithält.



Vorbereiten der Installation:

Formatieren und mounten der Festplatte:
Anmerkung: Da Jeder Admin andere Präferenzen an sein Partitionslayout stellt, beschränke ich mich hier auf das äusserste Minimum.

Code: Select all

# /dev/hda1  /boot  ( 32MB)
# /dev/hda2  swap   (512MB)
# /dev/hda3  /      (xxxMB)

mke2fs /dev/hda1
tune2fs -c 0 -i 0 /dev/hda1

mke2fs -j /dev/hda3
tune2fs -c 0 -i 0 /dev/hda3
tune2fs -O dir_index /dev/hda3
tune2fs -o journal_data /dev/hda3
e2fsck -D /dev/hda3

mkswap /dev/hda2
swapon /dev/hda2

mkdir -p /mnt/gentoo
mount -t ext3 -o noatime /dev/hda3 /mnt/gentoo
mkdir -p /mnt/gentoo/boot
mount -t ext2 -o noatime /dev/hda1 /mnt/gentoo/boot

Installation des Hardened-Stage3-Tarballs:

Code: Select all

cd /mnt/gentoo
wget http://gentoo.osuosl.org/releases/x86/2005.1/stages/x86/hardened/stage3-x86-hardened-2.6-2005.1.tar.bz2
tar -xpvf /mnt/gentoo/stage3-x86-hardened-2.6-2005.1.tar.bz2 -C /mnt/gentoo/
cd ~

Kopieren der resolv.conf, /proc mounten und chroot ins Basissystem:

Code: Select all

cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
mount -t proc none /mnt/gentoo/proc
chroot /mnt/gentoo /bin/bash

ENV aktualisieren und portage konfigurieren:

Code: Select all

env-update
source /etc/profile
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime

mkdir -p /var/log/portage
mkdir -p /usr/local/portage
mkdir -p /etc/portage/profile
touch /etc/portage/package.use
touch /etc/portage/package.mask
touch /etc/portage/package.unmask
touch /etc/portage/package.keywords
touch /etc/portage/profile/virtuals
touch /etc/portage/profile/package.provided
touch /etc/portage/rsync_excludes

cat > /etc/portage/package.use << "EOF"
dev-db/mysql  -berkdb
dev-lang/php  -ncurses -readline -sasl -threads
dev-libs/cyrus-sasl  -gdbm -mysql
mail-mta/postfix  -mysql
net-libs/courier-authlib  -gdbm -mysql
net-mail/courier-imap  -gdbm
net-misc/openssh  -pam
net-www/apache  static-modules -threads
EOF

/etc/make.conf anlegen:

Code: Select all

cat > /etc/make.conf << "EOF"
ACCEPT_KEYWORDS="~x86"
CHOST="i686-pc-linux-gnu"
LDFLAGS="-Wl,-O1"
CFLAGS="-O2 -pipe -march=pentium4 -fomit-frame-pointer -fforce-addr"
CXXFLAGS="-O2 -pipe -march=pentium4 -fomit-frame-pointer -fforce-addr"
GENTOO_MIRRORS="ftp://ftp.mesh-solutions.com/gentoo ftp://ftp6.uni-muenster.de/pub/linux/distributions/gentoo http://distfiles.gentoo.org"
USE="acl aio apache2 authdaemond bcmath berkdb bzip2 bzlib cairo calendar caps chroot cli crypt curl dba dlloader dynagraph erandom fam ftp gd gdbm geoip gif glibc-omitfp gmp graphviz hardened hardenedphp iconv idn imagemagick imap innodb ithreads jpeg libedit libwww lzo lzw lzw-tiff maildir md5sum memlimit mhash mime mmap mpm-prefork mysql mysqli ncurses nls nocd no-suexec nptl pam pcntl pcre pear perl pic png posix postfix pwdb python readline sasl session sharedmem simplexml soap sockets spf spl srp srs ssl symlink sysfs sysvipc szip tcpd threads tiff tokenizer truetype ucs2 udev unicode urandom userlocales utf8 vda xml xml2 xmlrpc xsl zlib"
PORTAGE_NICENESS="3"
PORTDIR="/usr/portage"
PORTAGE_TMPFS="/dev/shm"
PORTAGE_TMPDIR="/var/tmp"
PKGDIR="/usr/portage/packages"
PORT_LOGDIR="/var/log/portage"
DISTDIR="/usr/portage/distfiles"
PORTDIR_OVERLAY="/usr/local/portage"
RSYNC_EXCLUDEFROM="/etc/portage/rsync_excludes"
FETCHCOMMAND="/usr/bin/wget -t 3 --passive-ftp -P ${DISTDIR} ${URI}"
RESUMECOMMAND="/usr/bin/wget -c -t 3 --passive-ftp -P ${DISTDIR} ${URI}"
FEATURES="autoconfig distlocks sandbox sfperms strict"
AUTOCLEAN="yes"
LINGUAS="en"
EOF

Portage-Tree initialisieren:

Code: Select all

emerge --sync
###FIXME### Es kann vorkommen, dass sich portage beim Initialisieren seines Caches mit folgender Fehlermeldung aufhängt:
###FIXME###
###FIXME### >>> Updating Portage cache:
###FIXME### Traceback (most recent call last):
###FIXME###   File "/usr/bin/emerge", line 2705, in ?
###FIXME###     oldcat = portage.catsplit(cp_list[0])[0]
###FIXME### IndexError: list index out of range
###FIXME###
###FIXME### Um die Initialisierung des Caches dennoch durchzuführen, bedarf es folgenden Befehls:
emerge --metadata

ENV aktualisieren und userlocales (glibc) festlegen:

Code: Select all

env-update
source /etc/profile

cat > /etc/locales.build << "EOF"
en_US/ISO-8859-1
en_US.UTF-8/UTF-8
EOF

Um unser Ziel ereichen zu können, müssen wir nun das komplette Basissystem rekompilieren/aktualisieren. Dieser Vorgang ist zwar sehr Zeitaufwendig, aber zwingend notwendig. Auch die Reihenfolge der Aktualisierungen ist wichtig, da das System ansonsten unbrauchbar wird und nur mit hohem Aufwand wieder repariert werden kann.
Kleine Empfehlung meinerseits: man nohup

Los geht's:

Code: Select all

emerge -pDNv sandbox portage
etc-update

emerge binutils-config gcc-config gnuconfig linux-headers glibc

emerge binutils
source /etc/profile

emerge libstdc++-v3 gcc
gcc-config 6
source /etc/profile
###FIXME### fix_libtool_files.sh 3.3.5

# System aufräumen:
rm -rf /usr/{,bin/,lib/ccache/bin/,share/{binutils,gcc}-data/}i386-pc-linux-gnu*

# /etc/make.conf aktualisieren:
sed 's/^(CFLAGS=".*)"$/1 -ftracer"/' -i /etc/make.conf
sed 's/^(CXXFLAGS=".*)"$/1 -ftracer -fvisibility-inlines-hidden"/' -i /etc/make.conf

env-update
source /etc/profile

emerge glibc binutils libstdc++-v3 gcc
source /etc/profile

emerge gdbm python
python-updater
emerge -P python

# System aufräumen:
rm -rf /usr/lib/python2.3

emerge perl
perl-cleaner all

# System aufräumen:
rm -rf /usr/lib/perl5/5.8.6

emerge -De system
emerge -P gcc

Aktualisieren der Konfugurationsdateien:
Anmerkung: Da wir bisher noch keine System-Konfiguration, abgesehen von portage, vorgenommen haben, übernehmen wir ersteinmal alle Konfigurationsänderungen, indem wir die Frage mit -3 beantworten.

Code: Select all

etc-update

Um sicherzustellen, dass wir keine möglicherweise veralteten, speicheresistenten Bins/Libs nutzen, verlassen wir kurz unsere Chroot-Umgebung und öffnen eine Neue:

Code: Select all

exit
chroot /mnt/gentoo /bin/bash

env-update
source /etc/profile
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime

Wir müssen unser System nun ein zweites Mal vollständig rekompilieren, damit auch wirklich jedes Paket nur noch gegen die aktuell vorhanden Libs gelinkt ist und somit keine veralteten und/oder nicht mehr vorhandenen Funktionen nutzt:
Anmerkung: Wer auf linuxthreads (glibc) verzichten kann, der kann jetzt seine USE-Flags um "nptlonly" erweitern und spart nebenbei etwas Zeit beim Rekompilieren der glibc.

Code: Select all

emerge -De world

Gentoolkit installieren:

Code: Select all

emerge gentoolkit

/etc/fstab erstellen:

Code: Select all

cat > /etc/fstab << "EOF"
/dev/hda1   /boot     ext2    defaults,noatime     1 2
/dev/hda2   none      swap    sw                   0 0
/dev/hda3   /         ext3    defaults,noatime     0 1
none        /proc     proc    defaults             0 0
none        /dev/shm  tmpfs   nodev,nosuid,noexec  0 0
EOF

Netzwerk konfigurieren:

Code: Select all

cat > /etc/hosts << "EOF"
127.0.0.1      localhost         localhost
172.31.84.225  linux.domain.tld  linux
EOF

nano -w /etc/conf.d/hostname
    HOSTNAME="linux"

nano -w /etc/conf.d/domainname
    DNSDOMAIN="domain.tld"
    NISDOMAIN=""

nano -w /etc/conf.d/net
    config_eth0=( "dhcp" )

rc-update add net.eth0 default

OpenSSH konfigurieren (Pub-Key only, non-root):

Code: Select all

cat > /etc/ssh/sshd_config << "EOF"
Port 22
Protocol 2
AddressFamily inet
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin forced-commands-only
Subsystem sftp /usr/lib/misc/sftp-server
AllowGroups wheel
EOF

rc-update add sshd default

ENV, less und man auf UTF-8 umstellen:

Code: Select all

cat > /etc/env.d/02locale << "EOF"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
EOF

cat >> /etc/env.d/70less << "EOF"
LESSCHARSET="utf-8"
EOF

nano -w /etc/man.conf
    NROFF   /usr/bin/nroff -mandoc -c

Wichtige Systemprogramme installieren:

Code: Select all

emerge syslog-ng
rc-update add syslog-ng default

emerge logrotate

emerge vixie-cron
rc-update add vixie-cron default

groupmod -n locate slocate
emerge slocate

emerge dhcpcd

Bootloader installieren (keine Remote-Console):

Code: Select all

emerge grub

cat > /boot/grub/grub.conf << "EOF"
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
timeout 5
default 0

title=Gentoo Linux (2005.1)
  root (hd0,0)
  kernel /boot/vmlinuz root=/dev/hda3

EOF

cp /proc/mounts /etc/mtab

grub --no-floppy
root (hd0,0)
setup (hd0)
quit

Bootloader installieren (mit Remote-Console):

Code: Select all

emerge grub

cat > /boot/grub/grub.conf << "EOF"
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
timeout 5
default 0
serial --unit=0 --speed=57600 --word=8 --parity=no --stop=1
terminal serial

title=Gentoo Linux (2005.1)
  root (hd0,0)
  kernel /boot/vmlinuz root=/dev/hda3 console=tty0 console=ttyS0,57600

EOF

cp /proc/mounts /etc/mtab

grub --no-floppy
root (hd0,0)
setup (hd0)
quit

# Remote-Console aktivieren:
cat >> /etc/inittab << "EOF"
s0:12345:respawn:/sbin/agetty -L 57600 ttyS0 vt102
EOF

Kernel installieren:

Code: Select all

emerge hardened-sources

cd /usr/src/linux
make menuconfig
make && make modules_install
cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.14-hardened-r4
cp System.map /boot/System.map-2.6.14-hardened-r4
cp .config /boot/config-2.6.14-hardened-r4
cd /boot
ln -sf vmlinuz-2.6.14-hardened-r4 vmlinuz
cd

Fehlende und/oder nützliche Pakete installieren/konfigurieren:

Code: Select all

emerge libaio sysfsutils coldplug udev fam ntp ed expect
emerge zip gnupg gmp mm utempter mime-types lynx lsof
emerge libgcrypt libmcrypt mcrypt bind-tools app-admin/sudo

nano -w /etc/conf.d/portmap
    PORTMAP_OPTS="-l"

nano -w /etc/conf.d/ntp-client
    NTPCLIENT_OPTS=" -b -s -p 4 -t 0.1 ptbtime1.ptb.de"

rc-update add famd default
rc-update add portmap default
rc-update add coldplug boot
rc-update add hotplug default
rc-update add ntp-client default

cat > /etc/cron.hourly/ntpdate << "EOF"
#!/bin/sh

/usr/sbin/ntpdate -b -s -p 4 -t 0.1 ptbtime1.ptb.de
EOF

chmod 0755 /etc/cron.hourly/ntpdate

/etc/sysctl konfigurieren:

Code: Select all

nano -w /etc/sysctl.conf
    net.ipv4.ip_forward = 0
    net.ipv4.ip_dynaddr = 0
    net.ipv4.tcp_ecn = 0
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.all.accept_source_route = 0
    net.ipv4.conf.default.accept_source_route = 0
    net.ipv4.conf.all.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv4.conf.all.secure_redirects = 0
    net.ipv4.conf.default.secure_redirects = 0
    net.ipv4.icmp_echo_ignore_broadcasts = 1

Grundlegende Limits setzen:

Code: Select all

cat >> /etc/security/limits.conf << "EOF"
*   soft core      0
*   hard core      0
*   hard nproc     15
*   hard rss       10000
*   -    maxlogins 2
EOF

cat >> /etc/limits << "EOF"
*   L2 C0 U15 R10000
EOF

cat >> /etc/login.access << "EOF"
-:ALL EXCEPT wheel sync:console
EOF

Arbeitsuser anlegen und root-Paswort setzen:

Code: Select all

passwd root

useradd admin -m -k /etc/skel -g users -G cron,tty,wheel -d /home/admin -s /bin/bash
passwd admin

su - admin
mkdir ~/.ssh
nano -w ~/.ssh/authorized_keys
    # @Home: ssh-keygen -t rsa
    # Public-SSH-Key hier einfügen
chmod 0600 ~/.ssh/authorized_keys
exit

Reboot ins neue System:

Code: Select all

exit

umount /mnt/gentoo/proc
umount /mnt/gentoo/boot
umount /mnt/gentoo

reboot

Fortsetzung: http://www.rootforum.org/forum/viewtopi ... 263#240263

Gruss,
Joe User

PS: Kritik und Verbesserungsvorschläge sind selbstverständlich erwünscht.
Last edited by Joe User on 2006-01-19 17:03, edited 4 times in total.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
meax
Posts: 8
Joined: 2005-03-05 03:25
 

Re: [HowTo] Gentoo-Hardened 2005.1 installieren

Post by meax »

Hey, knorke :)

Ein paar Fragen, Anmerkungen. Zuerstmal, warum ~arch? Schon im stable geht mir die "Updaterei" (auf dem Server) manchmal auf die Nerven und mit testing ist das ja noch einiges mehr und viel rumgefrickel mit package.{mask, keywords}.
Joe User wrote:USE="-* [...]
Keine gute Idee (mehr), denn öfters werden im profile USE-flags hinzugefügt/entfernt die nützlich oder wichtig sind und das kriegst Du dann vielleicht nicht mit. Da gibt's euch einen ml-thread dazu, aber ich komm gerade nich an mein ml Archiv(gmail).
Außerdem, benutzt Du nicht das hardened profile? Das hat sowieso so wenige USE-flags gesetzt, daß man USE="-*" eigentlich nicht braucht und du kannst dir auch

Code: Select all

foo-bar/frobnicate -gdbm
sparen weil gdbm nicht aktiviert ist.

Warum auch
FEATURES="-* [...]
irgendwas dabei was Du nicht willst?
# Da GCC-3.4.x nicht hardened-fähig ist, ...
Huh?
ENV erweitern (UTF-8 ):

Code: Select all

cat > /etc/env.d/02locale << "EOF"
LC_ALL="en_US.UTF-8"
LANG="en_US.UTF-8"
EOF

cat >> /etc/env.d/70less << "EOF"
LESSCHARSET="utf-8"
EOF

[...]
Vorsicht, /etc/env.d ist in CONFIG_PROTECT_MASK, d.h. alles wird beim nächsten update des Pakets dem die Datei gehört einfach überschrieben. Ist wohl besser in /etc/profile oder ~/.bash_profile aufgehoben.

Code: Select all

emerge ... fam ...
Warum nimmst du nicht app-admin/gamin? Ist kompatibel und du sparst dir portmap.

Ã?hm, ich glaub das war alles. Danke für's Howto.
Liebe Grüße,
meax
User avatar
Joe User
Project Manager
Project Manager
Posts: 11190
Joined: 2003-02-27 01:00
Location: Hamburg
 

Re: [HowTo] Gentoo-Hardened 2005.1 installieren

Post by Joe User »

Moin,
meax wrote:Zuerstmal, warum ~arch?
Ich bin mir sicher, die Frage hier bereits ausführlich beantwortet zu haben, kann den Thread aber momentan leider nicht wiederfinden, daher nochmal in der Kurzfassung: Bei einem Hardened-System ist die Aktualität (bleeding-edge) des Toolchain (glibc, gcc, binutils) und der unmittelbar davon abhängigen Pakete äusserst wichtig, denn was nützt einem ein veraltetes Sicherheitspaket? Desweiteren ist bei Gentoo der Stabilisierungsprozess (Was interessieren mich Architekturen != x86?) schlichtweg zu lang (mehrere Monate). Alles weitere solltest Du in http://www.rootforum.org/forum/viewtopic.php?t=36464 finden.
meax wrote:
Joe User wrote:USE="-* [...]
Keine gute Idee (mehr), denn öfters werden im profile USE-flags hinzugefügt/entfernt die nützlich oder wichtig sind und das kriegst Du dann vielleicht nicht mit.
Danke für den Hinweis, wird geändert.
meax wrote:und du kannst dir auch

Code: Select all

foo-bar/frobnicate -gdbm
sparen weil gdbm nicht aktiviert ist.
gdbm und andere USE-Flags werden später noch benötigt und sind aus Bequemlichkeit bereits gesetzt ;)
meax wrote:Warum auch
FEATURES="-* [...]
irgendwas dabei was Du nicht willst?
Da manche eBuilds nicht nur USE-Flags, sondern auch FEATURES setzen, gehe ich hier lieber auf Nummer sicher.
meax wrote:
# Da GCC-3.4.x nicht hardened-fähig ist, ...
Huh?
Siehe Bugzilla. (Ich nutze kein AMD64)
meax wrote:Vorsicht, /etc/env.d ist in CONFIG_PROTECT_MASK, d.h. alles wird beim nächsten update des Pakets dem die Datei gehört einfach überschrieben. Ist wohl besser in /etc/profile oder ~/.bash_profile aufgehoben.
/etc/env.d/02locale gehört keinem Paket und /etc/profile wird ebenfalls überschrieben. (IMHO ist LESSCHARSET in /etc/env.d/70less besser aufgehoben...)
meax wrote:

Code: Select all

emerge ... fam ...
Warum nimmst du nicht app-admin/gamin? Ist kompatibel und du sparst dir portmap.
Weil gamin von Courier-IMAP nicht als Ersatz für fam akzeptiert wird.

Gruss,
Joe User
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
User avatar
Joe User
Project Manager
Project Manager
Posts: 11190
Joined: 2003-02-27 01:00
Location: Hamburg
 

Re: [HowTo] Gentoo-Hardened 2005.1 installieren

Post by Joe User »

Moin,

es folgt der nächste Part (MySQL und Mailserver):


MySQL installieren, konfigurieren und absichern:
Anmerkung: MySQL5 unterstützt einige sogenannter Engines, unsere Installation beschränkt sich allerdings die Beiden am Häufigsten verwendeten: MyISAM und InnoDB. Wer andere Engines benötigt, muss hier also selbst Hand anlegen.
Referenz:
http://www.rootforum.org/forum/viewtopic.php?t=36343

Code: Select all

emerge mysql

emerge --config =mysql-5.0.15

cat > /etc/mysql/my.cnf << "EOF"
[client]
character_set         = utf8
default-character-set = utf8
port                  = 3306
socket                = /var/run/mysqld/mysqld.sock

[mysql]
character-sets-dir    = utf8
default-character-set = utf8

[mysqladmin]
character-sets-dir    = utf8
default-character-set = utf8

[mysqlcheck]
character-sets-dir    = utf8
default-character-set = utf8

[mysqldump]
character-sets-dir    = utf8
default-character-set = utf8

[mysqlimport]
character-sets-dir    = utf8
default-character-set = utf8

[mysqlshow]
character-sets-dir    = utf8
default-character-set = utf8

[myisamchk]
character-sets-dir    = utf8

[myisampack]
character-sets-dir    = utf8

[mysqld_safe]
err-log               = /var/log/mysql/mysql.err

[mysqld]
character-set-server  = utf8
default-character-set = utf8
user                  = mysql
port                  = 3306
bind-address          = 127.0.0.1
socket                = /var/run/mysqld/mysqld.sock
pid-file              = /var/run/mysqld/mysqld.pid
log-error             = /var/log/mysql/mysqld.err
basedir               = /usr
datadir               = /var/lib/mysql
tmpdir                = /tmp
language              = /usr/share/mysql/english
server-id             = 1
skip-locking
skip-networking
skip-name-resolve
skip-external-locking
local-infile = 0
key_buffer_size = 64M
sort_buffer_size = 4M
read_buffer_size = 1M
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_allowed_packet = 16M
net_buffer_length = 8K
thread_stack = 128K
thread_cache = 8
table_cache = 256
query_cache_type = 1
query_cache_size = 16M
query_cache_limit = 1M
thread_concurrency = 2
skip-innodb
innodb_buffer_pool_size = 32M
innodb_additional_mem_pool_size = 4M
innodb_data_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
innodb_log_group_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend:max:128M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
#no-auto-rehash
#safe-updates

[isamchk]
key_buffer_size    = 64M
sort_buffer_size   = 16M
read_buffer_size   = 4M
write_buffer_size  = 4M

[myisamchk]
key_buffer_size    = 64M
sort_buffer_size   = 16M
read_buffer_size   = 4M
write_buffer_size  = 4M

[mysqlhotcopy]
interactive-timeout
EOF

/etc/init.d/mysql start
/usr/bin/mysql_secure_installation
/etc/init.d/mysql stop

rc-update add mysql default




Courier-IMAP, Postfix und ClamSMTP installieren:
Referenzen:
http://www.gentoo.org/doc/en/virt-mail-howto.xml
http://jimsun.linxnet.com/misc/postfix-anti-UCE.txt
http://memberwebs.com/nielsen/software/ ... stfix.html

Code: Select all

emerge courier-imap postfix clamsmtp

ClamSMTP konfigurieren:

Code: Select all

nano -w /etc/clamsmtpd.conf
    OutAddress: 127.0.0.1:10026
    Listen: 127.0.0.1:10025

Courier-IMAP konfigurieren und SSL-Zertifikate generieren:

Code: Select all

nano -w /etc/courier/authlib/authdaemonrc
    authmodulelist="authpam"


cd /etc/courier-imap
cat > pop3d.cnf << "EOF"

RANDFILE = /usr/share/pop3d.rand

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
C=Country
ST=State
L=Location
O=Organization
OU=Organization Unit
CN=mail.domain.tld
emailAddress=postmaster@domain.tld


[ cert_type ]
nsCertType = server

EOF

cat > imapd.cnf << "EOF"

RANDFILE = /usr/share/imapd.rand

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
C=Country
ST=State
L=Location
O=Organization
OU=Organization Unit
CN=mail.domain.tld
emailAddress=postmaster@domain.tld


[ cert_type ]
nsCertType = server

EOF

mkpop3dcert
mkimapdcert

cd ~

Cyrus-SASL konfigurieren:

Code: Select all

chmod 0755 /var/lib/courier/authdaemon

cat > /etc/sasl2/smtpd.conf << "EOF"
pwcheck_method: authdaemond
log_level: 3
mech_list: PLAIN LOGIN
authdaemond_path:/var/lib/courier/authdaemon/socket
EOF

nano -w /etc/conf.d/saslauthd
    SASLAUTHD_OPTS="${SASLAUTH_MECH} -a rimap -r"
    SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -O localhost"

Postfix konfigurieren und SSL-Zertifikate generieren:

Code: Select all

nano -w /etc/mail/aliases
/usr/bin/newaliases

mkdir -p /etc/postfix/ssl
cd /etc/postfix/ssl
/etc/ssl/misc/CA.pl -newca
openssl req -new -nodes -keyout server-key.pem -out server-req.pem -days 365
openssl ca -out server-crt.pem -infiles server-req.pem
chmod 644 /etc/postfix/ssl/server-crt.pem /etc/postfix/ssl/demoCA/cacert.pem
chmod 400 /etc/postfix/ssl/server-key.pem

openssl gendh -out /etc/postfix/ssl/dh_1024.pem -2 -rand /dev/urandom 1024
openssl gendh -out /etc/postfix/ssl/dh_512.pem -2 -rand /dev/urandom 512

cat > /etc/postfix/main.cf << "EOF"
allow_percent_hack = no
biff = no
broken_sasl_auth_clients = yes
content_filter = scan:127.0.0.1:10025
default_destination_concurrency_limit = 10
disable_vrfy_command = yes
home_mailbox = .maildir/
masquerade_exceptions = root
mydestination = $myhostname, $mydomain, localhost
mydomain = domain.tld
myhostname = mail.domain.tld
mynetworks_style = host
myorigin = $mydomain
receive_override_options = no_address_mappings
smtpd_data_restrictions =
  reject_unauth_pipelining,
  permit
smtpd_helo_required = yes
smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination,
  reject_invalid_hostname,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unknown_sender_domain,
  reject_unknown_recipient_domain,
  check_recipient_access pcre:/etc/postfix/recipient_checks.pcre,
  check_helo_access hash:/etc/postfix/helo_checks,
  reject_rbl_client relays.ordb.org,
  reject_rbl_client opm.blitzed.org,
  reject_rbl_client list.dsbl.org,
  reject_rbl_client sbl-xbl.spamhaus.org,
  permit
smtpd_sasl2_auth_enable = yes
smtpd_sasl_auth_enable = yes
smtpd_tls_auth_only = yes
smtpd_tls_CAfile = /etc/postfix/ssl/demoCA/cacert.pem
smtpd_tls_cert_file = /etc/postfix/ssl/server-crt.pem
smtpd_tls_dh1024_param_file = /etc/postfix/ssl/dh_1024.pem
smtpd_tls_dh512_param_file = /etc/postfix/ssl/dh_512.pem
smtpd_tls_key_file = /etc/postfix/ssl/server-key.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:/var/run/smtpd_tls_session_cache
smtpd_use_tls = yes
EOF

cat >> /etc/postfix/master.cf << "EOF"
# AV scan filter (used by content_filter)
scan      unix  -       -       n       -       16      smtp
        -o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10026 inet  n -       n       -       16      smtpd
        -o content_filter=
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_helo_restrictions=
        -o smtpd_client_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks_style=host
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8
EOF

cat > /etc/postfix/recipient_checks.pcre << "EOF"
/^@/               550 Invalid address format.
/[!%@].*@/        550 This server disallows weird address syntax.
/^postmaster@/     OK
/^hostmaster@/     OK
/^abuse@/          OK
EOF

cat > /etc/postfix/helo_checks << "EOF"
172.31.84.225  REJECT You are not me
localhost      REJECT You are not me
domain.tld     REJECT You are not me
.domain.tld    REJECT You are not me
EOF

postmap /etc/postfix/helo_checks


rc-update add clamd default
rc-update add clamsmtpd default
rc-update add courier-authlib default
rc-update add courier-pop3d-ssl default
rc-update add courier-imapd-ssl default
rc-update add saslauthd default
rc-update add postfix default


Fortsetzung folgt...

Gruss,
Joe User
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
meax
Posts: 8
Joined: 2005-03-05 03:25
 

Re: [HowTo] Gentoo-Hardened 2005.1 installieren

Post by meax »

Hey Joe
Joe User wrote: Bei einem Hardened-System ist die Aktualität (bleeding-edge) des Toolchain (glibc, gcc, binutils) und der unmittelbar davon abhängigen Pakete äusserst wichtig, denn was nützt einem ein veraltetes Sicherheitspaket?
Bei einem Source-basiertem System ist die Stabilität der Toolchain und der unmittlebar davon abhängigen Pakete äußerst wichtig, den was nützt einem ein instabiles System?:D
Ernsthaft, testing auf nem Server ist mir einfach zu unsicher, weil sich immer mal wieder Fehler einschleichen, gerade auch nach der binutils b0rkage Anfang des Jahres. Gentoo hat nunmal ein paar QA Probleme und die möchte ich auf dem Server nicht ausbaden. Außerdem macht ein "veraltetes Sicherheitspaket"(was ist das btw?) den Rechner ja nicht unsicher(?).
Da manche eBuilds nicht nur USE-Flags, sondern auch FEATURES setzen, gehe ich hier lieber auf Nummer sicher.
Also wenn ich mich nicht total irre, können ebuilds keine FEATURES setzen(nur profile und make.conf "können" das), sondern nur einige deaktivieren: man 5 ebuild -> restrict.

[gcc-3.4]Siehe Bugzilla.
Hast Du da genaueres, weil das meiste im bugzie scheint von letztem Jahr zu sein und ein paar probleme gibt's immer (deswegen ja auch ~x86). Außerdem, wenn ich zum testen was bei mir auf dem Desktop mit dem hardened-compiler(gcc-3.4, ~x86) gemacht habe, gab's nie Probleme(bis auf meine eigene Blödheit).

/etc/env.d/02locale gehört keinem Paket und /etc/profile wird ebenfalls überschrieben. (IMHO ist LESSCHARSET in /etc/env.d/70less besser aufgehoben...)
Jep, mit 02locale hast du recht aber /etc/profile wird nur durch etc-update überschrieben, /etc/env.d/70less hingegen ohne Rückfrage und da wäre mir die Gefahr zu groß, das ich's vergesse und mich dann wundere warum es nicht funzt.
Weil gamin von Courier-IMAP nicht als Ersatz für fam akzeptiert wird.
courier-imap-4.0.4.ebuild wrote:fam? ( virtual/fam )
Also das ebuild akzeptiert beides, allerdings habe ich's nie selbst ausprobiert, da ich fam nicht brauchte und jetzt sowieso dovecot am laufen habe.

Grueßli,
meax
User avatar
Joe User
Project Manager
Project Manager
Posts: 11190
Joined: 2003-02-27 01:00
Location: Hamburg
 

Re: [HowTo] Gentoo-Hardened 2005.1 installieren

Post by Joe User »

Moin,
meax wrote:Bei einem Source-basiertem System ist die Stabilität der Toolchain und der unmittlebar davon abhängigen Pakete äußerst wichtig, den was nützt einem ein instabiles System?:D
nun, ich habe mit dem Release von 2005.0 damit begonnen, meine Server nach und nach auf Gentoo-Hardened zu migrieren und habe von Anfang an auf ~x86 gesetzt. Bisher hatte ich damit (glücklicherweise?) kein nennenswertes Problem (Kleinere durchaus, aber die schlugen bei x86 ebenfalls zu.). Meine Vorgehensweise bei Updates habe ich im oben verlinktem Threads bereits erläutert.
Zum "Sicherheitspaket" zähle ich in diesem Zusammenhang beispielsweise GRSec/PAX, SSP, PIE, Kerneloptionen, ACL, etc. und die entsprechenden Libs/Tools. Da dies fast ausschliesslich pro-aktive Hilfsmittel sind, müssen sie nunmal so aktuell wie möglich sein.
meax wrote:Ernsthaft, testing auf nem Server ist mir einfach zu unsicher, weil sich immer mal wieder Fehler einschleichen, gerade auch nach der binutils b0rkage Anfang des Jahres.
Beim Drüberfliegen fand ich nur Betroffene mit GCC-3.4.x und/oder verkorksten C(XX)FLAGS. Desweiteren führe ich Updates nicht blind durch (siehe oben).
meax wrote:
[gcc-3.4]Siehe Bugzilla.
Hast Du da genaueres,
Ich habe zum Suchen ATM keine Zeit, aber in den Gentoo-Foren wirst Du recht schnell fündig.

Gruss,
Joe User
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
basiaf
Posts: 18
Joined: 2005-05-01 23:13
 

Re: [HowTo] Gentoo-Hardened 2005.1 installieren

Post by basiaf »

Joe User wrote: Zum "Sicherheitspaket" zähle ich in diesem Zusammenhang beispielsweise GRSec/PAX, SSP, PIE, Kerneloptionen, ACL, etc. und die entsprechenden Libs/Tools. Da dies fast ausschliesslich pro-aktive Hilfsmittel sind, müssen sie nunmal so aktuell wie möglich sein.
weshalb Gentoo ja auch die Option bietet Pakete aus ~x86 zu verwenden über packages.keywords. Also ich verwende auch bis jetzt auf meinen Servern x86 als Basis und für gewisse Pakete dann halt ~x86 und hatte damit noch keine Probleme, im Gegensatz zu einigen ~x86 Versuchen zu Hause, die sich meist nur mit Mehraufwand lösen ließen.
Also habe ich bis jetzt noch keinen essentiellen Vorteil eines ~x86 Systems gesehen, aber vielleicht könntest du das noch weiter Konkretisieren ? In den alten RF-Threads habe ich da auch noch nichts gefunden...
User avatar
Joe User
Project Manager
Project Manager
Posts: 11190
Joined: 2003-02-27 01:00
Location: Hamburg
 

Re: [HowTo] Gentoo-Hardened 2005.1 installieren

Post by Joe User »

Moin,

ich habe den ersten Teil des HowTo mal auf den neuesten Stand gebracht, da GCC-3.4 mitlerweile als "stable" deklariert ist und somit auch auf einem Hardened-System eingesetzt werden kann.

Gruss,
Joe User
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.