Iptables tai tinklo paketų filtravimo mechanizmas. Jį galite naudoti tiek įeinamųjų, tiek išeinamųjų sujungimų taisyklių formavimui. Iptables gali būti naudojamas blokuoti prievadus, IP adresus ir pan.
Šioje pamokoje apžvelgsime pagrindines Iptables panaudojimo galimybes.
1. Visų taisyklių išvalymas:
Prieš pradedant analizuoti taisyklių nustatymo galimybes norime informuoti, kad klientų sistemoje suteikiame galimybę vieno mygtuko paspaudimu išvalyti visas galiojančias taisykles. Tai galite atlikti prisijungė prie klientų sistemos adresu:
https://klientams.iv.lt/
ir pasirinkus konkrečią serverio nuomos paslaugą, ties skiltimi valdymas matysite mygtuką "Išvalyti Iptables" (šis funkcionalumas galimas tik OpenVZ virtualizacijos serveriams). Jį pasirinkus bus išvalomos visos naudojamos ugniasienės taisyklės.
2. Pagrindiniai iptables parametrai:
INPUT - komanda skirta blokuoti visus paketus, kurie yra nukreipti į Jūsų serverį.
OUTPUT - blokuojami visi paketai keliaujantys iš Jūsų serverio.
FORWARD - Visi paketai, tiek įeinantys, tiek išeinantys. Šis parametras naudojamas tokiu atveju kai naudojate serverį, kaip maršrutizatorių.
3. Taisyklių naudojimas:
1. Prieš pradedant nustatyti konkrečiai iptables taisykles siūlytume išvalyti egzistuojančias. Tai galite atlikti klientų sistemoje arba serverio terminale paleidus komandą:
iptables -F
Jeigu norite pašalinti tik konkretaus parametro taisykles, galite naudoti:
sudo iptables -F INPUT
Šiuo atveju bus pašalinamos visos INPUT parametro taisyklės. Tam, kad patikrintumėte konkrečias taisykles, galite naudoti šias komandas:
iptables -L
iptables -S
Taip pat galite ir nurodyti konkretų parametrą, kad būtų išfiltruojamos konkretaus parametro taisyklės, kaip pavyzdžiui:
iptables -L INPUT
2. Toliau apžvelgsime blokavimo nustatymą. Komandų eiliškumas čia yra labai svarbus, iš pradžių leidžiame prisijungti sau, o tik tada draudžiame prisijungimą visiems kitiems. Priešingu atveju neprisijungsite prie serverio.SSH prieigos leidimas tik naudojant konkretų IP adresą:
iptables -A INPUT -i venet0 -p tcp -s IP_adresas --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o venet0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Pirmasis parametras "-I INPUT" nurodo, kad bus sukurta nauja taisyklė įeinamiesiems sujungimams, "-s" nurodo IP adresą, kurį norėsite blokuoti, "-j" nusako atliekamą veiksmą, kuomet įvykis atitiks sąlygą.
Įvykdžius šias komandas bus leidžiamas prisijungimas tik naudojant konkretų IP naudojant SSH prievadą.
3. Tam, kad galėtumėte užblokuoti konkretaus IP adreso prisijungimą, galite naudoti šias komandas:
iptables -A INPUT -s IP_adresas -j DROP
iptables -A OUTPUT -s IP_adresas -j DROP
Taip pat galite naudoti komandą "REJECT", kurios pagalba bus pateikiamas atsakymas "connection refused", tačiau nebus nurodoma, kad IP adresas blokuojamas. Naudojama komanda:
iptables -A INPUT -s IP_adresas -j REJECT
4. Prievadų blokavimui galite naudoti šias komandas:
iptables -A INPUT -p tcp --dport 25 -j DROP
iptables -I OUTPUT -p tcp --dport 25 -j DROP
Naudojami parametrai "-p tcp" ir "--dport 80" nurodo, kad tinklo paketai bus blokuojami TCP protokolo pagrindu prie 80 prievado, kas dažniausiai yra Web serverio tarnyba. Tokiu pačiu principu galite blokuoti prieigą prie pašto serverio ar FTP, nurodydami atitinkamą prievado numerį.
5. Sekančiame pavyzdyje pateikiame komandas, kaip blokuojamas HTTP(prievadas 80) ir HTTPS(prievadas 443) susijungimas:
iptables -A INPUT -i venet0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o venet0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i venet0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o venet0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
6. Toliau pateikiame pavyzdį, kaip reikėtų užblokuoti išorinių naudotojų bandymą paleisti
ping komandą į serverį:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
Bei kaip tokią veiklą leisti:
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
7. Leidimas prisijungti prie MySQL naudojant konkretų IP adresą:
iptables -A INPUT -i venet0 -p tcp -s IP_adresas --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o vent0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT
8. POP3 ir IMAP srauto blokavimas:
iptables -A INPUT -i venet0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o venet0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i venet0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o venet0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
Beto, tai galima būtų naudoti nurodant tik galimybę jungti saugiu susijungimu (SSL):
iptables -A INPUT -i venet0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o venet0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i venet0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o venet0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
9. Taip pat galite apriboti DDoS atakas ribojant praleidžiamų paketų srautą:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/minute --limit-burst 100 -j ACCEPT
Šioje komandoje naudojami nustatymai:
-m limit: Naudojamas iptables limitas.
–limit 25/minute: Apribojimas leidžiantis iki 10 susijungimų per minutę.
–limit-burst 100: Ši reikšmė nurodo, kiek limitavimų per minutė gali būti naudojami poto kai bus pasiekiamas bendras susijungimų limitas.
10. Reikėtų prisiminti, kad po kiekvieno serverio perkrovimo į IPTABLES įrašyta informacija dingsta, todėl ją būtina išsaugoti taip, kad ji išliktų perkrovus serverį. Tai galite atlikti šios komandos pagalba:
CentOS/Fedora
service iptables save
Ubuntu/Debian
iptables-save > /etc/network/iptables.rules