====== 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/. 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