Uživatelské nástroje

Nástroje pro tento web


linux-gen2-mailserver

Postfix, Dovecot, dnscache (Gentoo 2007.0)

1. Úvod

Co je vůbec cílem článku? Potřebuji vyměnit stávající mailserver (15 klientů) za nový ve velice krátkém čase. Proto si píšu postup, jak zvládnout migraci v co nejkratším čase. Určitě víte, že když něco děláte načisto bez podkladů, ladění jednotlivých aplikací trvá neskutečně dlouho, protože se člověk častokrát zastaví na banálních věcech. Na mailserveru nyní běží

  • sendmail MTA
  • cyrus POP3 a IMAP server
  • bind DNS server
  • filtrování spamu (spamassassin)
  • clamav

Pro novou instalaci jsem vybral

  • dnscache (djbware od DJB)
  • dhcp
  • dovecot-{pop,imap}-ssl
  • postfix MTA (TLS/SASL)
  • bogofiter

To je zatím vše a jdeme na to.

Na server jsem vzal Gentoo 2007.0. Podle handbooku jsem si vzal stage3, rozbalil na disk, přikopíroval jsem resolv.conf do gentoo, mountnul proc, stahnul portage-snapshot-2007.0 a taky rozbalil na disk do správného adresáře. Pak jsem si nastavil /etc/make.conf:

CFLAGS="-O2 -march=i686 -pipe"
CHOST="i686-pc-linux-gnu"
CXXFLAGS="${CFLAGS}"

FEATURES="buildpkg"

MAKEOPTS="-j3"

# Use flags
USE="-X -xorg hardened -kde -gnome -authdaemond -berkdb \
pam -gtk apache2 jpeg cgi cli ctype pcre session unicode slang bzip2 pop3d \
maildir -authdaemond dovecot-sasl sasl ssl imap mysql mysqli sqlite \
nls vhosts pam pcre gd session xml unicode -ipv6 -oss alsa logrotate \
extensions nagios-dns nagios-ntp nagios-ping nagios-ssh snmp -cups iproute2"

# PORTDIR and others
PORTDIR=/usr/portage
DISTDIR=${PORTDIR}/distfiles
PKGDIR=${PORTDIR}/packages
PORTAGE_TMPDIR=/var/tmp

V chrootu jsem po synchronizaci balíčků přihrál následující aplikace:

emerge vixie-cron screen uptimed syslog-ng postfix procmail mutt dovecot dhcp \
openssh openvpn apache iproute2 portage-utils gentoolkit xfsprogs logrotate mc \
gentoo-sources proftpd samba squid grub

Budu se snažit nepracovat s žádným neoficiálním portage (layman a spol) ať je systém co možná nejčístší. Zkompiloval jsem si jádro, nastavil password pro root-a, nastavil správně svazky v /etc/fstab. Vyzkoušel jsem, zda gentoo na novém disku nabootuje a mohl jsem se vrátit k nastavování dalších aplikací. Pár nastavení podle Handbooku:

rc-update add vixie-cron default
rc-update add syslog-ng default
rc-update add sshd default
rc-update add apache2 default
rc-update add uptimed default

2. Denyhosts - zabezpečujeme ssh

Na server se nám bude velice brzo někdo dobývat. Dobyvatele pořešíme už v zárodku a server zabezpečíme nejdříve. Nejbolavější je určitě ssh-čko. Danny mi doporučil šikovnou věcičku http://denyhosts.sf.net/ (díky za to). Závislosti pořešíme pomocí emerge. Denyhosts se kouká do logů, kde je napsáno, že se někdo na server dobývá a po několika neúspěšných pokusech šupne jeho ip adresu do /etc/hosts.deny a je od něj pokoj :-)

Denyhosts přihrajeme a nastavíme jeho spouštění po startu serveru:

emerge -up --deep denyhosts
rc-update add denyhosts default

V souboru /etc/denyhosts.conf si nastavíme základní info, jako jsou admin_email, smtp_host, smtp_from, atd. zrestartujeme službu

/etc/init.d/denyhosts restart

a je pokoj.

3. Networking (LAN/WAN)

Do /etc/init.d přidáme symbolické odkazy net.eth0 a net.eth1 na net.lo, aby o nich systém věděl a přidáme je do spuštění po startu:

cd /etc/init.d
ln -s eth.lo net.eth0
ln -s eth.lo net.eth1

rc-update add net.eth0 default
rc-update add net.eth1 default

V souboru /etc/conf.d/net nastavíme ip adresy pro síťové karty:

cat /etc/conf.d/net

modules=( "iproute2" )

# WAN
config_eth1=( "172.19.3.2  netmask 255.255.0.0" )   # WAN static
routes_eth1=("default via 172.19.3.1")              # IPv4 default route

# LAN
config_eth0=( "192.168.1.1 netmask 255.255.255.0" ) # LAN static

4. Dhcp-server pro LAN

Nastavíme konfiguraci dhcp serveru:

emerge dhcpd
cat >> /etc/dhcp/dhcpd.conf << EOF

option domain-name "mydomain.cz";
option domain-name-servers 192.168.1.1;
ddns-update-style ad-hoc;

default-lease-time 3600;
max-lease-time 8400;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.7 192.168.1.100;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;
}

# zde si nadefinujeme hosty podle MAC adres
#host xyz {
#  hardware ethernet 00:40:f4:65:58:b6;
#  fixed-address 192.168.1.20;
#}
EOF

/etc/init.d/dhcp restart

V souboru /etc/conf.d/dhcpd jen nastavíme, na kterém interfacu bude dhcp server spuštěn. U nás je LAN-ka na portu eth0:

cat /etc/conf.d/dhcpd | grep DHCPD_IFACE
DHCPD_IFACE="eth0"

5. Djbdns (dnscache)

Jako dnscache jsem zvolil djbdns od D.J.Bernsteina:

mkdir /var/djbdns       # zde nainstalujeme dnscache
emerge djbdns           # přitáhneme dnscache 
dnscache-setup          # a nastavíme. Změní se tím resolv.conf

cat /etc/resolv.conf

mail / # cat /etc/resolv.conf
search kingstyle.cz

nameserver 127.0.0.1

touch /var/djbdns/dnscache/root/ip/192.168   # cache-ujeme dotazy i z rozsahu LAN
/etc/init.d/svscan start                     # stustíme djb deamona pro djbware
rc-update add svscan default                 # přidame do startu a je to :-)

Dnscache nám nyní cachuje dns dotazy. Jak jednoduché a jak účinné. Co víc si můžeme přát :-)

6. Dovecot (IMAP,POP3 i s SSL)

Za IMAP a POP3 jsem vybral Dovecot.

7. Uživatelé

Vzhledem k malému počtu uživatelů je do systému zadáme tak, aby mohli číst poštu a nemohli se na server vzdáleně přihlásit (ssh). Pošta se pro jednotlivé uživatele se bude standardně sypat do jejich schránek v jejich adresářích. Čtení pošty samozřejmě bránit nebudeme, jenže tu vybíráme pomocí protokolu IMAP a a POP3 :-) Uživatelé budou mít uloženou poštu v maildir, proto přidáme do skeletonu pár adresářů pro ukládání pošty. Nově zřízeným uživatelům se budou tyto adresáře automaticky zřizovat. Nyní můžeme vytvářet nové uživatele s i bez možnosti přihlášení. Uživatelům, kterým chceme dát přístup přirozeně dáme správný shell.

mkdir -p /etc/skel/maildir/new
mkdir -p /etc/skel/maildir/cur
mkdir -p /etc/skel/maildir/tmp
adduser -s /sbin/nologin -m user1;passwd user1
adduser -s /sbin/nologin -m user2;passwd user2
adduser -s /bin/bash -m adminuser;passwd adminuser  # pro vzdálenou správu přes ssh

Nyní máme v systému všechny potřebné uživatele.

8. Postfix - MTA

Nainstalujeme si MTA postfix:

apt-get install postfix

Budeme mít Internet site. Vyplníme mail hostname Nyní chodí pošta uživatelům do mbox-u /var/mail/<user>. Postfix říká, kam dávat poštu, proto mu sdělíme, že chceme, aby doručoval zprávy do Maildiru a přidáme náš subnet k mým sítím

echo "" >> /etc/postfix/main.cf
echo "home_mailbox = Maildir/">> /etc/postfix/main.cf
cat /etc/postfix/main.cf | grep mynetworks 
mynetworks = 192.168.1.0/24, 127.0.0.0/8
echo "root: petr@localhost" >> /etc/postfix/aliases
newaliases
/etc/init.d/postfix restart

Nyní máme základ hotov. MTA nyní umí zprávy přehazovat do Maildir-u. Zprávy měly nyní chodit ven i na náš mailserver. S Maildir-em umi pracovat Courier, který z něj umí číst zprávy přes POP3 a IMAP. Vyzkoušíme si čtení zpráv přes POP3 a IMAP

9. Testy POP3,IMAP

Pošleme se jednu testovací zprávu a můžeme testovat, zda nám chodí POP3 a IMAP.

echo To:petr | /usr/sbin/sendmail

petr@mail-king:~$ telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Hello there.
user petr
+OK Password required.
pass heslouzivatelepetr
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 562
.
quit
+OK Bye-bye.
Connection closed by foreign host.
petr@mail-king:~$ 

Skvělé. A Ještě můžeme vyzkoušet i IMAP:

petr@mail-king:~$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA 
IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2004 Double Precision, Inc.  See 
COPYING for distribution information.
AA LOGIN petr heslouzivatelepetr
AA OK LOGIN Ok.
AB SELECT Inbox
* FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
* OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited
* 1 EXISTS
* 1 RECENT
* OK [UIDVALIDITY 1169939434] Ok
* OK [MYRIGHTS "acdilrsw"] ACL
AB OK [READ-WRITE] Ok
ZZ LOGOUT
* BYE Courier-IMAP server shutting down
ZZ OK LOGOUT completed
Connection closed by foreign host.

Nyní vyzkoušíme POP3S a IMAPS. Pošleme z Internetu nějakou poštu k uživateli a zpět.

openssl s_client -crlf -connect my-server.cz:995 # POP3S
openssl s_client -crlf -connect my-server.cz:993 # IMAPS

Vše jede, jak z praku.

10. Postfix TLS/SASL

Nejdříve doinstalujeme potřebné programy:

apt-get install libsasl2-modules sasl2-bin postfix-tls

Nyní zařídíme v /etc/postfix/main.cf TLS pro šifrování spojení a SASL pro ověřování jména a hesla v postfixu a vygenerujeme si pro postfix pem certifikát:

cat >> /etc/postfix/main.cf << EOF

# TLS
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes

smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/ssl/postfix.pem
smtpd_tls_cert_file = /etc/postfix/ssl/postfix.pem
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_timeout = 3600s

# SASL
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd

EOF

mkdir /etc/postfix/ssl
openssl req -new -x509 -nodes -days 3650 -out /etc/postfix/ssl/postfix.pem \
     -keyout /etc/postfix/ssl/postfix.pem

Nyní jsme u rozhodnutí, jak bude SASL v postfixu ověřovat jméno/heslo pro odesílání pošty. SASL je možné nastavit tak, že se bude ověřovat jméno/heslo vůči stávajícím uživatelským účtům nebo se bude ověřovat vůči sasl databázi, kde jsou jména a hesla nadefinovana sólo. Nejdříve zkusíme nastavit SASL vůči stávajícím účtům.

cat > /etc/postfix/sasl/smtpd.conf << EOF
# overovani SASL vuci uzivatelskym uctum
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
EOF

Postfix pracuje v prostředí chroot, proto vytvoříme pro saslauth deamona adresář v chrootu postfixu. V /etc/init.d/saslauthd upravíme začátek scriptu a zajistime spouštění SASL po restartu s nastavením mechanismu autentizace. Hned můžeme otestovat, zda nám sasl funguje.

mkdir -p /var/spool/postfix/var/run/saslauthd

cat /etc/init.d/saslauthd | more
...
PARAMS="-m /var/spool/postfix/var/run/saslauthd"
# original PID file 
#PIDFILE="/var/run/${NAME}/saslauthd.pid"
# new PID file
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"
...

cat > /etc/default/saslauthd << EOF
# spousteni saslauthd po restartu
START=yes

MECHANISMS="pam"
EOF

testsaslauthd -u user -p heslo -f /var/spool/postfix/var/run/saslauthd/mux
0: OK "Success."

Řekneme našemu postfixu, že může odesílat maily i mimo naši doménu, nadefinujeme pár pravidel ohledně blokovaných domén. Nyní můžeme pomocí TLS/SASL s ověřením přes uživatelské jméno a heslo posílat poštu odkudkoliv a kamkoliv přes naš SMTP server. Relay přes náš SMTP server není možné, jelikož spamer nezná jméno a heslo uživatele na serveru.

cat >> /etc/postfix/main.cf << EOF
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_unauth_destination,
    reject_rbl_client relays.ordb.org,
    reject_rbl_client opm.blitzed.org,
    reject_rbl_client list.dsbl.org,
    reject_rbl_client multihop.dsbl.org,
    reject_rbl_client sbl.spamhaus.org,
    reject_rbl_client cbl.abuseat.org,
    reject_rhsbl_sender rhsbl.sorbs.net, 
    permit
EOF

Pokud chceme ověřovat oproti sasl2 databázi, tak změníme /etc/postfix/sasl/smtpd.conf takto:

cat > ./smtpd.conf << EOF
# overovani SASL vuci sasl databazi
pwcheck_method: auxprop
mech_list: PLAIN LOGIN

EOF
saslpasswd2 -c -a smtpauth test1
zadame si heslo

Nyní budeme schopni naše MTA odesílat maily kdekoliv z Internetu.

Vyzkoušíme a uvidíme. Třeba pomocí:

openssl s_client -starttls smtp -crlf -connect mail-king.dyndns.org:25

11. MUTT - nastavení

Mutt si instaluji, páč je textový a „lehký“ a dá se pohodlně nastavit nejen pro testovací účely. Pro mail spool budeme používat Maildir (djb produkt) u každého uživatele. Aby se nám při zřizování uživatele již tento adresář vytvořil, dáme Maildir do /etc/skel. Pak můžeme vytvořit uživatele.

cd /etc/skel
maildirmake Maildir
useradd petr # 1.user
ls /home/petr
Maildir

Mutt naučíme, aby uměl pracovat s Maidir-em (viz. http://www.elho.net/mutt/maildir/):

su - petr
mkdir .mutt
cat >> /home/petr/.mutt/muttrc << EOF
set mbox_type=Maildir

set folder="~/Maildir"
set mask="!^\\.[^.]"
set mbox="~/Maildir"
set record="+.Sent"
set postponed="+.Drafts"
set spoolfile="~/Maildir"

my_hdr From: petr@my-mailserver.cz
set realname = "Petr Podrabsky"

mailboxes `echo -n "+ "; find ~/Maildir -type d -name ".*" -printf "+'%f'"`
EOF

12. Bogofilter + procmail

Bogofilter je zajímavá věcička na odfilterování spamů. Nejdříve si bogofilter naučíme, co je/není spam a pak už může sám rozeznávat spamy. Pro bogofilter si ještě doinstalujeme procmail, jestli jej už v systému nemáme.

emerge bogofilter procmail

K uživateli přidáme adresáře ve formátu maildir a do něj adresář pro spam

maildirmake maildir
maildirmake maildir/.spam

Nespam bude končit v maildir-u a spam bude končit v adresáři maildir/.spam/ Bogofilter nejdříve naučíme, co je spam a HAM:

# neni spam
for f in maildir_directory/cur/*
  do
  bogofilter -n < $f
done
# je spam
for f in maildir_directory/.spam/cur/*
  do
  bogofilter -s < $f
done

Pokud skončí podivná zpráva v doručené poště a naopak ve spam adresáři skočí dobrá zpráva, jednoduše je přesuneme tam, kam podle vás patří. Pak už je jen třeba pomocí cron-u tuto zautomatizovat scriptem pro každého uživatele učení se spamů a nespamů.

bog

K uživateli nejlépe před jeho zřízením přidáme do /etc/skel soubor .procmailrc:

# $Id: .procmailrc,v 1.1 2003/07/14 17:22:49 ssm Exp $
#
# filter mail through bogofilter, tagging it as spam and
# updating the word lists.  Return the mail to the queue
# on error

MAILDIR=$HOME/maildir/
DEFAULT=$MAILDIR
VERBOSE=yes
PMDIR=$HOME
LOGFILE=$HOME/procmail.log
LINEBUF=32768

# run bogofilter on incoming mail
:0fw
| /usr/bin/bogofilter -u -e -p

:0e
{ EXITCODE=75 HOST }

# move to .spam if bogofilter thinks it is spam
:0:
* ^X-Bogosity: (Spam|Yes), tests=bogofilter
${MAILDIR}.spam/

# move to maildir if bogofilter thinks it is not spam
:0
$DEFAULT

20. Admin pro uživatele

Pokud chceme některým uživatelům povolit administrátorská práva, můžeme to udělat několika způsoby. Asi nejznámější způsoby jsou pomocí:

  • sudo
  • wheel group

Zde si popíšeme, jak to udělat pomocí wheel group. Přidáme do systému skupinu wheel

addgroup wheel

V /etc/pam.d/su odkomentujeme řádky:

auth       required   pam_wheel.so
auth       sufficient pam_wheel.so trust

Do skupiny adm a wheel doplníme potřebného uživatele

usermod -G adm,wheel petr

Pak se může uživatel petr dostat k administrátorovi pomocí su bez hesla administrátora

petr@mail-king:~$ su
mail-king:/home/petr#

21. NTP

Na serveru budeme synchronizovat čas přes servery tik,tak.cesnet.cz. Doinstalujeme potřebné aplikace a uděláme pár úprav pro správnou funkci ntp serveru:

emerge ntp
cp /usr/share/zoneinfo/Europe/Prague /etc/localtime

V souboru /etc/conf.d/clock nastavíme CLOCK=„local“ a v souboru /etc/ntp.conf nastavíme server tik.cesnet.cz. Pak zrestartujeme službu clock a ntp a ověříme programem date, zda máme správný čas a datum.

/etc/init.d/clock restart
/etc/init.d/ntp restart
date

ZATIM TO FUNGUJE AZ SEMKA !!!!!!

22. Uživatelé a kvóty

23. Doplňky

Pro postfix a server si doladíme několik doplňků, které nám něco řeknou o systému, mailserveru a dalších aplikacích.

23.1 Logwatch

Logwatch je jednoduchá aplikace, která nám sbírá z logů informace a každý den nám zašle souhrnné informace.

apt-get install logwatch

23.2 APACHE2 + mailgraph

Mailgraph ve spolupráci s apachem nám grafdicky znázorní, kolik zpráv se proflákalo systémem tam a zpět (http://nas-mailserver/cgi-bin/mailgraph.cgi/).

emerge -pu apache mailgraph

23.3 Clamav - antivir

Pro uživatele později vyzkoušíme antivir clamav.

emerge -pu clamav

23.4 Tady ještě něco dáme

24 Firewall - iptables

Nastavíme si iptables podle představ resp., jak jste PARANOIDNÍ :-) Nejsem žádný guru na iptables, proto pořeším jen základní věci. Pro výmaz všech pravidel jsem použil script z http://www.petricek.cz/. Viz. výpis.

#!/bin/bash
# verze 02

#howto get ip WAN address
INET_IFACE="eth1"
# get WAN ip via ip route
#INET_IP=`ip add show dev $INET_IFACE | grep "inet "| awk -F " " '{print $2}' | awk -F "/" '{print $1}'`
# get WAN ip via ifconfig
INET_IP=`ifconfig $INET_IFACE | grep cast | awk -F " " '{print $2}' | awk  -F ":" '{print $2}'`
echo "WAN address=$INET_IP"
LAN1_IP="192.168.1.1/32"
LAN1_BCAST="192.168.1.255/32"
LAN1_IFACE="eth0"
LO_IFACE="lo"
LO_IP="127.0.0.1/32"

IPTABLES=`which iptables`

# cistime iptables
function delete_chain() {
        echo -n "$1/$2: ";
        while [ -z "`$IPTABLES -t $1 -D $2 1 2>&1 `" ]; do
                echo -n "#"
        done
        echo " OK";
}

$IPTABLES -t filter -P INPUT ACCEPT
$IPTABLES -t filter -P OUTPUT ACCEPT
$IPTABLES -t filter -P FORWARD ACCEPT

delete_chain filter INPUT;
delete_chain filter OUTPUT;
delete_chain filter FORWARD;
delete_chain filter IN_FW;
delete_chain filter logdrop;
delete_chain filter syn-flood;

$IPTABLES -X IN_FW 2> /dev/null;
$IPTABLES -X logdrop 2> /dev/null;
$IPTABLES -X syn-flood 2> /dev/null;
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT

delete_chain nat PREROUTING;
delete_chain nat OUTPUT;
delete_chain nat POSTROUTING;

$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT

delete_chain mangle PREROUTING;
delete_chain mangle OUTPUT;

# nyni zacneme neco teprve nastavovat
/sbin/depmod -a
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_conntrack_ftp
echo "1" > /proc/sys/net/ipv4/ip_forward

for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo "1" > ${interface}
done

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to $INET_IP
#$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -i ! $INET_IFACE \
#         -d ! $INET_IP -j REDIRECT --to-port 3128
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport telnet -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ftp-data -j TOS --set-tos Maximize-Throughput

$IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A FORWARD -i $LAN1_IFACE -j ACCEPT
#$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -j ACCEPT
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
#$IPTABLES -A FORWARD -m limit --limit 12/h -j LOG --log-prefix "FORWARD drop:"

$IPTABLES -A INPUT -i $INET_IFACE -p tcp ! --syn -m state --state NEW -j DROP

$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 21 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 22 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 25 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 80 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 143 -j ACCEPT # imap
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 993 -j ACCEPT # imaps
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 995 -j ACCEPT # pop3s
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 110 -j ACCEPT # pop3 -plain text  zakazeme :-)
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 1194 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 1194 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 5000 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 5000 -j ACCEPT

$IPTABLES -A INPUT -i $INET_IFACE -p ICMP --icmp-type echo-request -j ACCEPT
$IPTABLES -A INPUT -i $LO_IFACE -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_IP -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -d $INET_IP -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_BCAST -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -p udp --dport 67 -j ACCEPT
$IPTABLES -A INPUT -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m limit --limit 12/h -j LOG --log-prefix "INPUT drop:"

$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport telnet -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ftp-data -j TOS --set-tos Maximize-Throughput

$IPTABLES -A OUTPUT -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $LAN1_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $INET_IP -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN1_IFACE -p UDP --dport 68 --sport 67 -j ACCEPT
#$IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT drop: 

Firewall pravidla jsem si dal do /etc/init.d/firewall.sh a zajistil, aby pravidla byly spouštěny ve všech run-levels. Samozřejmě provedeme restart firewallu, aby nám to k něčemu bylo, že? Pak se můžeme podívat, co jsme s naším firewall scriptem udělali :-)

update-rc firewall.sh defaults
/etc/init.d/firewall.sh restart
iptables -L -v
linux-gen2-mailserver.txt · Poslední úprava: 2013/08/06 21:41 (upraveno mimo DokuWiki)