|
Paieška |
Įspėjimas Šis gidas skirtas žmonėms, kurie turi patirties Linux serverių administravimo srityje. Ugniasienės diegimas gali būti pavojingas. Galite užblokuoti savo serverį ir turėsite jį perkrauti nutraukdami maitinimo tiekimą. Jeigu padarysite klaidą galutiniame scenarijuje, visai negalėsite prisijungti prie savo serverio! Būkite atsargūs ir, jeigu šiame gide ko nors nesuprasite, nediekite ugniasienės į savo serverį! Kas yra ugniasienė?Tai yra programinė įranga, kuri blokuoja tam tikrus jūsų serverio prievadus. Kad geriau suprastumėte, įsivaizduokime namą: jame yra priekinės ir galinės durys. Jeigu niekada nenaudojate galinių durų, galite jas užblokuoti ir taip sumažinti potencialią riziką, kad per jas gali įsibrauti vagis. Panašiai vyksta ir su serveriu: uždaromi visi nereikalingi prievadai. Kurie prievadai dažniausiai naudojami?Dėmesio!
Pagal nutylėjimą OVH atidaromi serverių prievadai yra: 21 - ftp (FTP serveris).
22 - ssh (šifruota vartotojo prieiga). 23 - telnet (nešifruota vartotojo prieiga). 25 - smtp (SMTP serveris). 53 - dns (DNS serveris). 80 - http (žiniatinklio serveris). 110 - pop3 (pašto prieigos serveris). 143 - imap (pašto prieiga, jeigu nenaudojamas POP3). 443 - https (šifruota žiniatinklio prieiga). 1000 - webmin (serverio konfigūravimo sąsaja). Šie prievadai atidaromi pagal nutylėjimą, tačiau tai priklauso nuo įdiegtos programinės įrangos: gali būti atidaryti ne visi išvardinti prievadai, gali būti atidaryti ir kiti. Jūs patys sprendžiate, kuriuos prievadus palikti atvirus. Kai pasirinksite, galime pradėti. Iptables yra galinga ugniasienė, diegiama į visus OVH serverius. Iptables konfigūravimo pavyzdys: atidarysime kai kuriuos prievadus, o likusius uždarysime. Šiame pavyzdyje paliksime atvirus tik 22 (SSH) ir 80 (HTTP) prievadus. Tai tik pavyzdys, savo serverio ugniasienę konfigūruokite pagal savo poreikius. Prisijunkite per SSH kaip root.
Pirmiausiai patikriname Iptables versiją: $ /sbin/iptables -V iptables v1.2.4 Versija per sena. Įdiegsime 1.2.9: $ cd /root $ wget $ tar xvfj iptables-1.2.9.tar.bz2 $ cd iptables-1.2.9 $ make KERNEL_DIR=/usr/src/linux $ make install KERNEL_DIR=/usr/src/linux $ cd /sbin $ mv iptables iptables.old $ mv iptables-restore iptables-restore.old $ mv iptables-save iptables-save.old $ ln -s /usr/local/sbin/iptables iptables $ ln -s /usr/local/sbin/iptables-restore iptables-restore $ ln -s /usr/local/sbin/iptables-save iptables-save $ /sbin/iptables -V iptables v1.2.9 Baigta, iptables atnaujintos, galime tęsti. Peržiūrime taisykles: $ /sbin/iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Matome 3 grandines: Input, Forward ir Output. Pirmiausiai dirbsime su Input grandine (įeinančio srauto). Autorizuosime 22 ir 80 prievadus: $ /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$ /sbin/iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT -A INPUT: nustatome Input taisyklę. Peržiūrime taisykles: $ /sbin/iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp — anywhere anywhere tcp dpt:ssh ACCEPT tcp — anywhere anywhere tcp dpt:www Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Skyrius Input šiek tiek užpildytas, tai geras ženklas ;). Matome, kad numatytoji taisyklė yra viską priimti Chain INPUT(policy ACCEPT). Mes norime užblokuoti visą nepageidaujamą srautą. Todėl įtrauksime taisyklę, kuri užblokuos visus prievadus. Tačiau susiduriame su problema: Pavyzdžiui, jūsų serveris susijings su kernel.org serveriu, kad parsiųstų naują branduolį, todėl sukurs naują jungtį su svetaine, kuri lauks jūsų serverio atsako. Kitaip sakant, užklausa pasieks kernel.org, tačiau kaip ji grįš, jeigu mes viską blokuojame? Laimei, iptables yra pakankamai galinga programa ir gali atrinkti paketus pagal jų būseną. Taigi įtraukiame taisyklę: $ /sbin/iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
Dabar galime užblokuoti visa kita (DĖMESIO: toliau ugniasienė pradės pilnai veikti, įsitikinkite, kad įtraukiate teisingas taisykles, antraip užblokuosite savo serverį!): $ /sbin/iptables -A INPUT -i eth0 -j DROP
Šiai taisyklei yra 2 pasirinkimai. Pirmasis sprendimas yra trinti visus nepageidaujamus paketus, t.y. kai būtų gautas toks paketas, jis būtų nepriimtas ir iškart ištrintas. Klientas lauks serverio atsako, kol baigsis užklausai skirtas laikas. Antrasis pasirinkimas - tai visų nepageidaujamų paketų atmetimas (vietoje DROP naudojama REJECT taisyklė). Jeigu gaunamas nelauktas paketas, klientui atgal siunčiamas klaidos pranešimas ir jam nereikia laukti, kol baigsis užklausai skirtas laikas. Paketų atmetimas yra švaresnis metodas, o trynimas - saugesnis. Įsivaizduokite, kad kas nors cikliškai siunčia nelauktus paketus į jūsų serverį. Kai paketai ištrinami, serveris tiesiog neapdoros jų, o jeigu paketai atmetami, neigiamo atsakymo siuntimui bus naudojami serverio resursai ir laikas. Jūs patys sprendžiate, kurį metodą naudoti ;) Norėdami panaikinti visas ugniasienės taisykles, rašykite: $ /sbin/iptables -F INPUT
Šį komanda pašalins visas Input dalies taisykles. Jeigu norite įtraukti taisyklę tarp pirmos ir antros, rašykite: $ /sbin/iptables -I INPUT 2 ... jūsų taisyklė
Norėdami ištrinti 3 taisyklę: $ /sbin/iptables -D INPUT 3
Norėdami visiškai užblokuoti IP adresą: $ /sbin/iptables -I INPUT 1 -s -j DROP
Dabar ugniasienė pilnai veikis. Bandykite skanuoti savo serverį ir matysite, kad atviri tik 22 ir 80 prievadai. Jeigu skanavimas labai lėtas, vadinasi, naudojama DROP taisyklė. Jeigu norite užblokuoti ICMP protokolą (Ping užklausas), turite praleisti bent ping.ovh.net, proxy.p19.ovh.net, proxy.rbx.ovh.net ir proxy.ovh.net užklausas į savo serverį. Tai leis OVH komandoms stebėti jūsų serverio buseną. Tam tikrų IP ir serverių ICMP užklausų praleidimo pavyzdys: Jūsų serverio IP adresas yra aaa.bbb.ccc.ddd Turite praleisti: aaa.bbb.ccc.250 Pavyzdžiui, 213.186.57.153 turi praleisti 213.186.57.250 Jeigu naudojatės HG serveriu, praleiskite IP aaa.bbb.ccc.249 (laikina taisyklė). Jeigu užblokuosite visas PING užklausas, įskaitant ir OVH, mes negalėsime tikrinti jūsų serverio būsenos ir, kai atsiras problema, nebūsime apie ją informuoti. Norėdami praleisti PING užklausas iš mūsų serverių, rašykite: /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source IP.250 -j ACCEPT # IP = aaa.bbb.ccc, pagal ankstesnę taisyklę /sbin/iptables -A INPUT -i eth0 -p icmp --source IP.249 -j ACCEPT # laikinai, tik HG serveriams Kalbant apie SSH, jeigu norite apriboti prieigą tik iki savo IP, rekomenduojame leisti prisijungti ir iš cache.ovh.net. Tokiu atveju, kilus problemoms, mes galėsime prisijungti prie serverio ir pašalinti problemą. Jeigu uždarysite 22 prievadą OVH technikams, negalėsime padėti, kadangi serveris blokuos mūsų prieigą. SSH prieigą iš mūsų serverio autorizuosite įvedę taisyklę: /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT
Jeigu turite RAID pildytoją, nepamirškite autorizuoti NFS jungčių. Mes galime autorizuoti viską, kas ateina iš vidinio mūsų tinklo 192.168.0.0/16: /sbin/iptables -A INPUT -i eth0 -p tcp --source 192.168.0.0/16 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p udp --source 192.168.0.0/16 -j ACCEPT Jeigu naudojate serverių grupės konfigūraciją, turite atidaryti 79 prievadą, kad OCO susijungtų su apkrovos skirstytuvu. /sbin/iptables -A INPUT -i eth0 -p tcp --dport 79 -j ACCEPT
Toliau pateikiamas pilnas scenarijus, skirtas apsaugoti serverį su Iptables. Tai nėra būtina, kadangi visos jūsų serverio paslaugos ir taip pasiekiamos, tačiau vis tiek galite naudoti savąją konfigūraciją: /sbin/iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 21 --source xx.xx.xx.xx -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 --source xx.xx.xx.xx -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --source 192.168.0.0/16 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p udp --source 192.168.0.0/16 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 79 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -j REJECT Šiose taisyklėse pakeiskite xx.xx.xx.xx atitinkamais IP adresais. Kai gerai sukonfigūruosite savo ugniasienę, galėsite sukurti scenarijų, kuris bus vykdomas kiekvieno serverio įkrovimo metu. Toliau pateikiamas pavyzdys, kaip išsaugoti failą, pavadinimu "firewall", kataloge /etc/init.d/: #!/bin/sh
1. chkconfig: 3 21 91 2. description: Firewall IPT=/sbin/iptables case "$1" in start) $IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT $IPT -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 10000 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 21 --source xx.xx.xx.xx -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 22 --source xx.xx.xx.xx -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --source 192.168.0.0/16 -j ACCEPT $IPT -A INPUT -i eth0 -p udp --source 192.168.0.0/16 -j ACCEPT $IPT -A INPUT -i eth0 -p tcp --dport 79 -j ACCEPT $IPT -A INPUT -i eth0 -j REJECT exit 0 ;; stop) $IPT -F INPUT exit 0 ;; echo "Usage: /etc/init.d/firewall {start|stop}" exit 1 ;; esac Suteikite 700 teises ir įvykdykite komandą "/etc/init.d/firewall start", kad paleistumėte ugniasienę ir "/etc/init.d/firewall stop", kad ją išjungtumėte. Jeigu norite, kad ugniasienė automatiškai pasileistų kiekvieno įkrovimo metu: $ /sbin/chkconfig --level 3 firewall on
$ /sbin/chkconfig --level 06 firewall off Prieš nustatydami scenarijaus paleidimą kiekvieno krovimo metu įsitikinkite, kad jis sukurs teisingą konfigūraciją, antraip galite visiškai užblokuoti prieigą prie savo serverio! |