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ť.
/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
Ale toto vyzera na nejaky iny problem, mozes ten skript niekde uploadnut alebo presne vlozit na pastebin.com?
To co mas ako firewall si uloz do /etc/init.d/iptables.v4 a ten skript nizsie do firewall
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
Link-1 : http://blackhole.sk/topicpristupove-prava-chmod-1
Link-2 : http://blackhole.sk/topicpristupove-prava-chmod-2
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.
Tu je vypis:
michal@MFLINUX:~$ sudo /etc/init.d/firewall start
Starting firewall: iptables-restore: line 2 failed
done.
Dakujem
Uz to funguje.
:-)
Dakujem za pekny clanok pre nas "menej zdatnych"
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.