Bezpečnostné tipy (1)

Bezpečnostné tipy (1)
21.12.2007 23:00 | Články | Adam Sloboda

V tomto miniseriáli sa pokúsim zhrnúť zopár bezpečnostných tipov vhodných na domáce počítače alebo servery. Jedná sa o často prítomné "chyby" v distribúciách alebo základné nastavenia pre zvýšenie bezpečnosti. Spolu s každým tipom sa pokúsim uviesť do problému, vysvetliť príčinu a spôsob riešenia.

Stateful firewall (stavový firewall)

Vďaka neprítomnosti škodlivého softvéru (malware) na systémoch typu UNIX nie je firewall nepostrádateľná súčasť softvérového vybavenia, no napriek tomu je vhodné mať nejaké základné nastavenie. Základným kameňom je stavový firewall.

Čo je stavový firewall?

Stavový firewall sleduje všetky prichádzajúce a odchádzajúce spojenia a dáva pozor na to aby boli prepustené len tie, ktoré boli korektne nadviazané (a spojenia súvisejúce – napr. dátové spojenie FTP pre vyžiadaný prenos dát) alebo spojenia nové (tie sa prepúšťajú na základe ďalších pravidiel firewallu).

Základné pravidlá

Pre náš bežný desktop bez akýchkoľvek služieb nastavíme pomocou iptables tieto pravidlá (vyžaduje práva roota):

# prichádzajúce spojenia budeme odmietať
iptables -P INPUT DROP
# toto nastavenie sa uplatňuje iba pri routovaní
iptables -P FORWARD DROP
# sebe povolíme všetky odchádzajúce spojenia
iptables -P OUTPUT ACCEPT
# povolíme spojenia prichádzajúce z loopbacku (nášho PC)
iptables -A INPUT -i lo -j ACCEPT
# prepustíme všetky nadviazané spojenia
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# povolíme prichádzajúce pingy
iptables -A INPUT -p icmp -m state --state NEW -j ACCEPT
# prípadne spojenia so SSH serverom
#iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# alebo FTP serverom (tu je potrebné mať príkazom 'modprobe' zavedený modul
# 'ip_conntrack_ftp' či v novšej verzii 'nf_conntrack_ftp')
#iptables -A INPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT

# tieto pravidlá nie sú nutné, ale spôsobujú okamžité odmietnutie
iptables -A INPUT -p tcp -i !lo -j REJECT --reject-with tcp-reset
iptables -A INPUT -p udp -i !lo -j REJECT --reject-with icmp-port-unreachable

Programom iptables-save si môžeme nechať vypísať naše pravidlá:

*filter
:INPUT DROP [326:50088]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [684:57193]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m state --state NEW -j ACCEPT
-A INPUT -i ! lo -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -i ! lo -p udp -j REJECT --reject-with icmp-port-unreachable
COMMIT

Ako to automatizovať?

Teraz si ukážeme ako nastaviť automatické načítanie týchto pravidiel po štarte. (Nasledujúci postup je pre SysV init a usporiadanie skriptov, ktoré používa napr. distribúcia Debian a môže sa líšiť od iných distribúcií.)

Najskôr vytvoríme skript pre službu a uložíme ho do /etc/init.d/firewall:

#!/bin/sh

# cesta k uloženým pravidlám
RULES_V4=/etc/init.d/iptables.v4

# pri novších jadrách sa používa nf_conntrack_ftp
MODULES='ip_conntrack_ftp'

iptables=/sbin/iptables
iptrestore==/sbin/iptables-restore

start_ipt()
{
        echo -n "Starting firewall: "

        for m in $MODULES; do
                modprobe $m
        done

        $iptrestore $RULES_V4
}

case "$1" in
        restart|reload)
                echo -n "Re-"
                start_ipt
        ;;

        start)
                start_ipt
        ;;

        stop)
                echo -n "Stopping firewall: "
                $iptables --flush
                $iptables --delete-chain
                $iptables -P INPUT ACCEPT
                $iptables -P OUTPUT ACCEPT
        ;;

        *)
                echo "Usage: $0 {start|restart|reload|stop}"
                exit 1
esac

echo "done."
exit 0

Tento skript spravíme spustiteľný príkazom chmod +x /etc/init.d/firewall a pravidlá uložíme do /etc/init.d/iptables.v4. Teraz môžeme skriptom zapnúť a vypnúť firewall (parameter start/stop). Aby sa automaticky spúšťal po štarte systému, musíme ho pridať do runlevelov príkazom:

update-rc.d firewall start 12 2 3 4 5 .

Na tomto základnom firewalle sa dajú jednoducho pridať aj verejné služby ako napr. vyššie spomenuté povolenie SSH a FTP.

sudo – pomocník alebo bezpečnostný problém?

sudo je program (značne spopularizovaný distribúciou Ubuntu), ktorý umožňuje spúšťať programy s právami iného užívateľa (nielen roota). Po vzore Ubuntu si mnohí ľudia nastavujú užívateľovi práva spúšťať čokoľvek s právami užívateľa root a často nevenujú dostatočnú pozornosť tomu čo spúšťajú a niekedy aj povoľujú spúšťanie bez hesla či časový limit na opakované pýtanie hesla. Takéto správanie je ale presný opak toho na čo má sudo slúžiť – zvýšenie bezpečnosti. Je vhodné povoliť len jednotlivé príkazy (aj s úplnou cestou k nim) a zamyslieť sa nad tým či program nemôže dať užívateľovi prístup ku spusteniu akéhokoľvek programu alebo čítaniu akéhokoľvek súboru (napr. program make). Našťastie dostatočným riešením ale býva obyčajné použitie administrátorského účtu (login v konzoli, su, gksu) a zákaz sudo pre akýkoľvek príkaz, pretože správne nastavenie sudo v zložitejších podmienkach nie je triviálna záležitosť. Na úpravu nastavenia slúži program visudo, ktorý vykoná všetky prípadné operácie pre bezpečnú úpravu a spustí editor nastavený premennou prostredia VISUAL alebo EDITOR (alebo obyčajné vi).

EDITOR=nano visudo

Teraz stačí zmazať alebo zakomentovať znakom mriežky ('#') nebezpečné nastavenia. Užívatelia Ubuntu budú na túto operáciu potrebovať sudo, ale predtým musia aktivovať účet root (t.j. nastaviť mu heslo) aby neprišli o možnosť administrácie:

sudo passwd root

Ešte sa patrí zmieniť, že niektoré programy vyžadujúce isté práva sa povoľujú pridaním užívateľa do špeciálnych privilegovaných skupín (výpis skupín do akých užívateľ patrí sa dá získať príkazom groups). Tieto skupiny sú napríklad audio (na používanie zvukovej karty) či fuse (na používanie FUSE súborových systémov). Užívateľa môžeme do skupiny pridať nasledujúcim príkazom:

usermod -a -G skupina uzivatel

Pre uplatnenie zmeny je potrebne sa odhlásiť a znovu prihlásiť. Teraz by malo byť už jasné, že bežne naozaj nie je potrebné (či dokonca je nežiadúce) použitie sudo, miesto neho je treba využiť vhodnejšie spôsoby.

Uzamknutie počítača

Teraz si ukážeme program, ktorý dokáže uzamknúť počítač naozaj dokonale – vlock. Pôvodne slúžil ako obdoba zamykania X sedenia pre textové terminály, no teraz dokáže uzamknúť a zakázať prepnutie do inej konzoly, dokáže uzamknúť X sedenie a dokáže zakázať SysRq volania pokiaľ sú povolené (cez tie dokáže ktokoľvek s prístupom ku klávesnici reštartovať počítač). Na posledné dve vymenované je nutné mať minimálne verziu 2.0.

Na obyčajné uzamknutie terminálu, stačí spustiť vlock, na uzamknutie prepínania je potrebné zavolať ho s parametrom:

vlock -a

Na uzamknutie X a vypnutie SysRq je nutné najskôr pridať užívateľa do skupiny vlock alebo mať administrátorské práva:

usermod -a -G vlock uzivatel

Po pridaní skupiny je potrebné sa odhlásiť a znovu prihlásiť. Teraz je možné zamknúť aj X sedenie:

vlock -n

Alebo aj zakázať SysRq volania:

vlock -ns

Administrátor sa nemusí obávať, že ho nejaký užívateľ vymkne, pretože po zadaní nesprávneho hesla sa vlock spýta na heslo roota.

Nabudúce

To by bolo zatiaľ všetko, nabudúce sa pozrieme na systém PAM a ako nám pri zabezpečovaní môže pomôcť.

    • asdf 21.12.2007 | 23:27
      Avatar Frantisek Klabzuba Debian  Používateľ
      Halo redakcia, a moj clanok je kde?
      • Re: asdf 23.12.2007 | 02:53
        Avatar miso Gentoo   Používateľ
        Obsah clanku je dost strucny mohol si opisat troska viac nastavenia iptables a sudo tam si mohol pridat tiez nieco ale kazdy pozname man :D
    • zenwalk 23.12.2007 | 16:40
      Avatar Stanislav Hoferek Greenie 18.04  Používateľ
      keby radsej prisiel nejaky clanok o zenwalku... :)
      • Re: zenwalk 23.12.2007 | 16:50
        Avatar Frantisek Klabzuba Debian  Používateľ
        si rob srandu z nekoho ineho hej
        • Re: zenwalk 23.12.2007 | 17:25
          Avatar Tomáš Srnka Barz čo, už asi všetko  Administrátor
          ondro mal nejak vela prace, tak mu dlho trvalo spracovavat clanky, snad cez prazdniny to dozenie :)
          Dlho som robil linuxos.sk, neskôr založil vpsFree.cz, posledných pár rokov ako tech. riaditeľ vo Websupporte
          • Re: zenwalk 23.12.2007 | 18:44
            Avatar Ondrej Hučko Kubuntu  Používateľ
            Ano, mal som toho strasne vela, ospravedlnujem sa autorom, aj Dusanovi :). Zenwalk uz bol v systeme vcera, ale nechcel som dat tak vela clankov naraz, no ale ked uz Dusan aj Stano su taki netrpezlivi, tak som ho dal ;). Pekne Vianoce vsetkym.
        • Re: zenwalk 23.12.2007 | 21:24
          Avatar Stanislav Hoferek Greenie 18.04  Používateľ
          nerobim si z teba srandu. poznam tvoj pristup k praci a vazim si ho. a rad by som si to precital aj tu
    • error 25.12.2007 | 15:24
      prima   Návštevník
      /etc/init.d/firewall start
      /etc/init.d/firewall: line 2:
      : command not found
      /etc/init.d/firewall: line 5:
      : command not found
      /etc/init.d/firewall: line 8:
      : command not found
      /etc/init.d/firewall: line 11:
      : command not found
      /etc/init.d/firewall: line 22:
      : command not found
      /etc/init.d/firewall: line 28: syntax error near unexpected token `newline'
      /etc/init.d/firewall: line 28: `

      toto mi vypise
      • Re: error 25.12.2007 | 15:39
        autor   Návštevník
        Vsimol som si tam preklep, miesto == ma byt len 1 '=' (riadok 10).

        Ale toto vyzera na nejaky iny problem, mozes ten skript niekde uploadnut alebo presne vlozit na pastebin.com?
        • Re: error 25.12.2007 | 16:14
          autor   Návštevník
          Aha, zda sa, ze som to nenapisal dost jasne

          To co mas ako firewall si uloz do /etc/init.d/iptables.v4 a ten skript nizsie do firewall
        • Re: error 25.12.2007 | 19:18
          prima   Návštevník
          opravil som tu chybu.

          toto je subor firewall:
          http://pastebin.com/m10929d7e

          po opraveni tej chyby pise:


          > /etc/init.d/firewall start
          bash: /etc/init.d/firewall: /bin/sh^M: bad interpreter: nenĂsouborem ani adresářem
          • Re: error 25.12.2007 | 19:22
            Avatar borg Fedora  Administrátor
            ln -s /bin/bash /bin/sh
            • Re: error 25.12.2007 | 19:35
              prima   Návštevník
              uz existuje
              • Re: error 25.12.2007 | 19:47
                autor   Návštevník
                Prosim ta, v akom editore to pises, ze ti to dava windowsacke newline?
                • Re: error 25.12.2007 | 19:53
                  proxima   Návštevník
                  robim cez webmin ;-)
                  • Re: error 25.12.2007 | 19:55
                    autor   Návštevník
                    To je chyba. Bud nejak spravis krkolomny symlink s 0x0d znakom na konci alebo to spravis poriadne...
                    • Re: error 25.12.2007 | 20:10
                      prima   Návštevník
                      spravil som to teda cez telnet a uz to facha. dikes
    • chmod 28.12.2007 | 13:42
      Avatar Jaroslav Bernát BackTrack 3  Používateľ
      ked už píšeš o bezpečnosti myslím že mojde 2 články o CHMOD-e súvisia s bezpečnostou politikou

      Link-1 : http://blackhole.sk/topicpristupove-prava-chmod-1
      Link-2 : http://blackhole.sk/topicpristupove-prava-chmod-2
      ked nevieš, tak nefušuj
    • Firewall v Mandrive 29.12.2007 | 16:03
      Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
      Ak pouzivate Mandrivu (skusane na 2008.0, malo by ist aj na starsich), tak mozete postupovat nasledovne:
      1. Uistite sa, ci mate nainstalovany balik iptables (Prikaz "urpmi iptables" ako root)
      2. Stiahnite si subor http://www.ideaz.sk/~bwpow/47/firewall.sh.
      3. Upravte stiahnuty subor firewall.sh podla aktualnej situacie.
      4. Ako root spustite (vykonajte) stiahnuty subor firewall.sh.
      Pravidla sa okamzite aplikuju a nacitaju sa aj po restarte. Ak vykonate zmeny v subore, tak ho staci opat spustit a zacnu sa hned pouzivat nove pravidla.

      Pri skusani sa moze stat, ze sa odrezete od internetu (chybne napisane pravidla). Vtedy staci pouzit prikaz service iptables stop a firewall sa uplne vypne. Dalsim zaujimavym prikazom je service iptables panic, ktory nastavi firewall tak, aby neprepustal ziadne packety. To je vhodne, ak mate podozrenie, ze ste spustili nejaky spyware alebo proste chcete co najrychlejsie zastavit vsetku komunikaciu. Prikaz service iptables start to nasledne vrati do povodneho stavu.
      Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
    • Preco? 29.12.2007 | 19:59
      xcmu   Návštevník
      Preco mi nenacita iptables-restore pravidla SKOPIROVANE z tohoto clanku?
      Tu je vypis:
      michal@MFLINUX:~$ sudo /etc/init.d/firewall start
      Starting firewall: iptables-restore: line 2 failed
      done.

      Dakujem
      • Re: Preco? 29.12.2007 | 20:30
        autor   Návštevník
        Netusim. Skus pouzit prikazy a porovnat vystup iptables-save
        • Re: Preco? 29.12.2007 | 22:00
          xcmu   Návštevník
          "Porucha" bola na mojej strane.
          Uz to funguje.
          :-)
          Dakujem za pekny clanok pre nas "menej zdatnych"
    • bezpecnost 04.01.2008 | 21:22
      myso   Návštevník
      zdravim vsetkych, mam taku trosku general otazku.
      nejaku tu dobu som pouzival wokna,virusy boli len ked som bol priamo pripojeny na net (dialup/EDGE priamo do PC) nie je mi jasne ako sa tam dostali ale budiz. odkedy ale som za NAT routerom ziadny virus/malaware sa neobjavil, na Oknach. A to nepouzivam ani FW ani antivirus....

      Aka je teda potreba, podla vas, akejkolvek ochrany linuxoveho stroja za NATom? hlavne ak clovek nerobi ziadne kraviny ;)

      Vdaka.
      • Re: bezpecnost 04.01.2008 | 21:47
        Avatar borg Fedora  Administrátor
        si si isty ze nic nemas?
        • Re: bezpecnost 04.01.2008 | 21:56
          myso   Návštevník
          som
          • Re: bezpecnost 04.01.2008 | 21:58
            myso   Návštevník
            resp v oknach mi je to v podstate uz jedno, lebo uz som tam len vynimocne ;) nastastie