25 hyödyllistä IPtable-palomuurisääntöä jokaisen Linux-järjestelmänvalvojan tulisi tietää


Verkkoliikenteen hallinta on yksi järjestelmänvalvojien vaikeimmista tehtävistä. Hänen on määritettävä palomuuri siten, että se täyttää järjestelmän ja käyttäjien vaatimukset sekä saapuville että lähteville yhteyksille jättämättä järjestelmää alttiin hyökkäyksille.

Tässä iptables on hyödyllinen. Iptables on Linuxin komentorivin palomuuri, jonka avulla järjestelmänvalvojat voivat hallita saapuvaa ja lähtevää liikennettä määritettävien taulukkosääntöjen avulla.

Iptables käyttää joukkoa taulukkoja, joissa on ketjuja, jotka sisältävät joukon sisäänrakennettuja tai käyttäjän määrittämiä sääntöjä. Niiden ansiosta järjestelmänvalvoja voi suodattaa järjestelmänsä verkkoliikennettä oikein.

Iptables-oppaan mukaan on tällä hetkellä kolme tyyppistä taulukkoa:

    1. SUODATIN – tämä on oletustaulukko, joka sisältää sisäänrakennetut ketjut:

      1. INPUT  – paikallisiin pistorasioihin tarkoitetut paketit
      2. FORWARD – järjestelmän läpi reititetyt paketit
      3. OUTPUT – paikallisesti luodut paketit
    2. NAT – taulukko, jota tarkastellaan, kun paketti yrittää luoda uuden yhteyden. Siinä on seuraavat sisäänrakennetut:

      1. PREROUTING – käytetään paketin muuttamiseen heti sen vastaanottamisen jälkeen
      2. OUTPUT – käytetään muuttamaan paikallisesti luotuja paketteja
      3. POSTROUTING – käytetään pakettien muuttamiseen, kun ne ovat loppumassa
    3. MANGLE – tätä taulukkoa käytetään pakettien muuttamiseen. Ytimen versioon 2.4 asti tässä taulukossa oli vain kaksi ketjua, mutta nyt ne ovat 5:

      1. PREROUTING – saapuvien yhteyksien muuttamiseen
      2. OUTPUT – paikallisesti luotujen pakettien muuttamiseen
      3. INPUT – saapuville paketeille
      4. POSTROUTING – pakettien muuttamiseen, kun ne ovat loppumassa
      5. FORWARD – laatikon läpi reititetyille paketeille

Tässä artikkelissa näet hyödyllisiä komentoja, jotka auttavat sinua hallitsemaan Linux-box-palomuuriasi iptablesin kautta. Tätä artikkelia varten aloitan yksinkertaisemmilla komennoilla ja siirryn monimutkaisempiin loppuun.

1. Käynnistä/pysäytä/käynnistä uudelleen Iptables-palomuuri

Ensinnäkin sinun pitäisi tietää, kuinka hallita iptables-palvelua eri Linux-jakeluissa. Tämä on melko helppoa:

SystemD-pohjaisissa Linux-jakeluissa

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

SysVinit-pohjaisissa Linux-jakeluissa

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Tarkista kaikki IPtablesin palomuurisäännöt

Jos haluat tarkistaa olemassa olevat säännöt, käytä seuraavaa komentoa:

iptables -L -n -v

Tämän pitäisi palauttaa seuraavanlainen tulos:

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

Jos haluat tarkistaa tietyn taulukon säännöt, voit käyttää vaihtoehtoa -t ja sen jälkeen taulukkoa, jonka haluat tarkistaa. Voit esimerkiksi tarkistaa NAT-taulukon säännöt käyttämällä:

iptables -t nat -L -v -n

3. Estä tietty IP-osoite IPtables-palomuurissa

Jos huomaat epätavallisen tai loukkaavan toiminnan IP-osoitteesta, voit estää kyseisen IP-osoitteen seuraavalla säännöllä:

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Jos sinun on vaihdettava "xxx.xxx.xxx.xxx" todellisella IP-osoitteella. Ole erittäin varovainen suorittaessasi tätä komentoa, koska voit vahingossa estää oman IP-osoitteesi. -A-vaihtoehto lisää säännön valitun ketjun loppuun.

Jos haluat estää vain TCP-liikenteen kyseisestä IP-osoitteesta, voit käyttää -p-vaihtoehtoa, joka määrittää protokollan. Näin komento näyttää tältä:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. Poista IP-osoitteen esto IPtables-palomuurissa

Jos olet päättänyt, että et enää halua estää pyyntöjä tietystä IP-osoitteesta, voit poistaa estosäännön seuraavalla komennolla:

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

-D-vaihtoehto poistaa yhden tai useamman säännön valitusta ketjusta. Jos haluat käyttää pidempää vaihtoehtoa, voit käyttää --delete-komentoa.

5. Estä tietty portti IPtables-palomuurissa

Joskus saatat haluta estää saapuvat tai lähtevät yhteydet tietyssä portissa. Se on hyvä turvatoimenpide, ja sinun tulee todella miettiä sitä palomuuriasi määrittäessäsi.

Lähtevien yhteyksien estäminen tietyssä portissa:

iptables -A OUTPUT -p tcp --dport xxx -j DROP

Voit sallia saapuvat yhteydet seuraavasti:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

Vaihda molemmissa esimerkeissä "xxx" todellisella portilla, jonka haluat sallia. Jos haluat estää UDP-liikenteen TCP:n sijaan, vaihda "tcp" arvoksi "udp" iptables-säännön yläpuolella.

6. Salli useita portteja IP-taulukoissa käyttämällä Multiport-toimintoa

Voit sallia useita portteja kerralla käyttämällä multiport-toimintoa. Alta löydät tällaisen säännön sekä saapuville että lähteville yhteyksille:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. Salli tietty verkkoalue tietylle portille IP-tableteissa

Haluat ehkä rajoittaa tietyt yhteydet tietyssä portissa tiettyyn verkkoon. Oletetaan, että haluat sallia lähtevät yhteydet portista 22 verkkoon 192.168.100.0/24.

Voit tehdä sen tällä komennolla:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. Estä Facebook IPtablesin palomuurissa

Jotkut työnantajat haluavat estää työntekijöidensä pääsyn Facebookiin. Alla on esimerkki kuinka estää liikenne Facebookiin.

Huomaa: jos olet järjestelmänvalvoja ja sinun on noudatettava näitä sääntöjä, muista, että kollegasi saattavat lakata puhumasta kanssasi :)

Etsi ensin Facebookin käyttämät IP-osoitteet:

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

Voit sitten estää kyseisen Facebook-verkon seuraavilla tavoilla:

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Muista, että Facebookin käyttämä IP-osoitealue voi vaihdella maassasi.

9. Aseta portin edelleenlähetys IPtablesissa

Joskus saatat haluta siirtää yhden palvelun liikenteen toiseen porttiin. Voit saavuttaa tämän seuraavalla komennolla:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

Yllä oleva komento välittää kaiken verkkoliitännän eth0 tulevan liikenteen portista 25 porttiin 2525. Voit vaihtaa portit tarvitsemillasi.

10. Estä verkon tulva Apache-portissa IP-tableteilla

Joskus IP-osoitteet voivat pyytää liikaa yhteyksiä verkkosivustosi verkkoportteihin. Tämä voi aiheuttaa useita ongelmia, ja voit estää tällaiset ongelmat käyttämällä seuraavaa sääntöä:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

Yllä oleva komento rajoittaa saapuvat yhteydet minuutissa arvoon 100 ja asettaa rajapurskeeksi 200. Voit muokata rajaa ja limit-pursketta omien erityisvaatimustesi mukaan.

11. Estä saapuvat ping-pyynnöt IPtablesissa

Jotkut järjestelmänvalvojat haluavat estää saapuvat ping-pyynnöt turvallisuussyistä. Vaikka uhka ei ole niin suuri, on hyvä tietää, kuinka tällainen pyyntö voidaan estää:

iptables -A INPUT -p icmp -i eth0 -j DROP

12. Salli silmukan käyttö

Loopback-käyttö (pääsy osoitteesta 127.0.0.1) on tärkeä, ja sinun tulee jättää se aina aktiiviseksi:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

13. Pidä lokia IP-tablettien pudonneista verkkopaketeista

Jos haluat kirjata pudonneet paketit verkkoliittymään eth0, voit käyttää seuraavaa komentoa:

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

Voit muuttaa "--log-prefix" jälkeen olevaa arvoa jollakin haluamallasi tavalla. Viestit kirjataan hakemistoon /var/log/messages ja voit etsiä niitä seuraavilla tavoilla:

grep "IPtables dropped packets:" /var/log/messages

14. Estä pääsy tiettyyn MAC-osoitteeseen IP-tableteissa

Voit estää pääsyn järjestelmääsi tietystä MAC-osoitteesta käyttämällä:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Tietenkin sinun on vaihdettava "00:00:00:00:00:00" todellisella MAC-osoitteella, jonka haluat estää.

15. Rajoita samanaikaisten yhteyksien määrää IP-osoitetta kohden

Jos et halua, että yhdestä IP-osoitteesta muodostetaan liian monta samanaikaista yhteyttä tietyssä portissa, voit käyttää alla olevaa komentoa:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Yllä oleva komento sallii enintään 3 yhteyttä asiakasta kohti. Voit tietysti muuttaa portin numeron vastaamaan eri palvelua. Myös --connlimit-above tulee muuttaa vastaamaan vaatimustasi.

16. Hae IPtables-säännöstä

Kun olet määrittänyt iptables-sääntösi, sinun kannattaa tehdä hakuja aika ajoin ja sinun on ehkä muutettava niitä. Helppo tapa etsiä säännöistäsi on käyttää:

iptables -L $table -v -n | grep $string

Yllä olevassa esimerkissä sinun on muutettava $table todellisella taulukolla, josta haluat etsiä, ja $string varsinaisella merkkijonolla, jota etsit.

Tässä on esimerkki:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Määrittele uusi IPTables-ketju

Iptablesin avulla voit määrittää oman ketjusi ja tallentaa siihen mukautettuja sääntöjä. Määritä ketju käyttämällä:

iptables -N custom-filter

Nyt voit tarkistaa, onko uusi suodattimesi siellä:

iptables -L
Näytelähtö
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
Chain custom-filter (0 references)
target prot opt source destination

18. Tyhjennä IPtables-palomuuriketjut tai -säännöt

Jos haluat huuhdella palomuuriketjusi, voit käyttää:

iptables -F

Voit huuhdella ketjut tietystä taulukosta seuraavilla tavoilla:

iptables -t nat -F

Voit muuttaa "nat" todellisen taulukon kanssa, mitkä ketjut haluat tyhjentää.

19. Tallenna IPtables-säännöt tiedostoon

Jos haluat tallentaa palomuurisäännöt, voit käyttää iptables-save-komentoa. Voit tallentaa ja tallentaa sääntöjä tiedostoon seuraavilla tavoilla:

iptables-save > ~/iptables.rules

On sinun päätettävissäsi, minne tallennat tiedoston ja miten annat sille nimen.

20. Palauta IPtables-säännöt tiedostosta

Jos haluat palauttaa iptables-sääntöjen luettelon, voit käyttää komentoa iptables-restore. Komento näyttää tältä:

iptables-restore < ~/iptables.rules

Tietysti polku sääntötiedostoon voi olla erilainen.

21. Määritä IPtables-säännöt PCI-yhteensopivuutta varten

Joidenkin järjestelmänvalvojien on ehkä määritettävä palvelimensa PCI-yhteensopiviksi. Eri PCI-yhteensopivuuden toimittajat asettavat monia vaatimuksia, mutta yleisiä on vähän.

Monissa tapauksissa sinulla on oltava useampi kuin yksi IP-osoite. Sinun on sovellettava alla olevia sääntöjä sivuston IP-osoitteeseen. Ole erityisen varovainen käyttäessäsi alla olevia sääntöjä ja käytä niitä vain, jos olet varma mitä olet tekemässä:

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Jos käytät cPanelia tai vastaavaa ohjauspaneelia, saatat joutua estämään myös sen portit. Tässä on esimerkki:

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

Huomaa: varmistaaksesi, että täytät PCI-toimittajasi vaatimukset, tarkista heidän raporttinsa huolellisesti ja noudata vaadittuja sääntöjä. Joissakin tapauksissa saatat joutua estämään UDP-liikenteen myös tietyissä porteissa.

22. Salli vakiintuneet ja liittyvät yhteydet

Koska verkkoliikenne on erillinen saapuvan ja lähtevän liikenteen osalta, haluat sallia vakiintuneen ja siihen liittyvän saapuvan liikenteen. Tee se saapuville yhteyksille seuraavasti:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Lähtevään käyttöön:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. Pudota virheelliset paketit IP-taulukoissa

On mahdollista, että jotkin verkkopaketit merkitään kelpaamattomiksi. Jotkut ihmiset saattavat mieluummin kirjata nämä paketit lokiin, mutta toiset haluavat pudottaa ne. Voit pudottaa virheelliset paketit käyttämällä:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24. Estä verkkoliitäntä

Joissakin järjestelmissä voi olla useampi kuin yksi verkkoliitäntä. Voit rajoittaa pääsyä kyseiseen verkkoliitäntään tai estää yhteydet tietystä IP-osoitteesta.

Esimerkiksi:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

Muuta "xxx.xxx.xxx.xxx" todellisella IP-osoitteella (tai verkolla), jonka haluat estää.

25. Poista lähtevät sähköpostit IPTablesin kautta käytöstä

Jos järjestelmäsi ei lähetä sähköposteja, voit estää SMTP-porttien lähtevät portit. Voit esimerkiksi käyttää tätä:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

Johtopäätös

Iptables on tehokas palomuuri, josta voit helposti hyötyä. Jokaisen järjestelmänvalvojan on tärkeää oppia ainakin iptablesin perusteet. Jos haluat löytää yksityiskohtaisempaa tietoa iptablesista ja sen vaihtoehdoista, on erittäin suositeltavaa lukea sen käyttöopas:

man iptables

Jos uskot, että meidän pitäisi lisätä lisää komentoja tähän luetteloon, jaa ne kanssamme lähettämällä ne alla olevaan kommenttiosaan.