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