1. Bazat
2. Krijoni rregulla fillestare
3. Bëjini rregullat të qëndrueshme
4. Lejo lidhjet dalëse
5. Lejo ose blloko shtete të tëra
Prezantimi
iptablesështë një mjet i fuqishëm që përdoret për të konfiguruar murin e zjarrit të integruar të kernelit Linux. Ai vjen i parainstaluar në shumicën e shpërndarjeve të Ubuntu, megjithatë nëse jeni duke përdorur një version të personalizuar të Ubuntu ose po punoni brenda një kontejneri, me shumë mundësi do t'ju duhet ta instaloni manualisht.
sudo apt-get install iptables iptables-persistent
Pas instalimit, nëse pyeteni nëse duhet të ruani rregullat tuaja aktuale, për momentin nuk ka rëndësi sepse do të hiqni ose krijoni rregulla të reja më vonë.
Këshilla
Ju mund të përdorni netcatkomandën (në një kompjuter të ndryshëm nga serveri juaj) për të provuar se cilat nga portet tuaja janë të hapura ose të mbyllura.
nc -z -w5 -v SERVER_IP PORT
nc është komanda netcat.
-z thjesht dërgoni një pako pa ngarkesë.
-w5 prisni deri në 5 sekonda për një përgjigje.
-v mënyra e folur.
- Zëvendësojeni
SERVER_IPme adresën e serverit tuaj.
- Zëvendësojeni
PORTme portën që dëshironi të provoni nëse është e hapur (p.sh. 22).
Në serverin tuaj mund të përdorni netstatkomandën për të parë se cilat porte po dëgjojnë aktualisht për lidhje.
sudo netstat -tulpn
Shënim: Megjithëse netstatështë i dobishëm për të gjetur portat me të cilat dëshironi të punoni, duhet të jeni të vetëdijshëm për aplikacionet që keni instaluar aktualisht në serverin tuaj dhe cilat porte po dëgjojnë, nuk keni pse të lejoni çdo port që gjeni në netstatdalje .
Sintaksë
sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
-A INPUTshtoni një rregull në INPUTzinxhir, një zinxhir është një grup rregullash, ato që përdorim më shumë në këtë udhëzues do të jenë INPUT, OUTPUTdhe PREROUTING.
-p tcpcaktuar tcpsi protokoll ku do të zbatohet ky rregull, mund të përdorni gjithashtu protokolle të tjera si udp, icmpose all.
-m tcppërdorni tcpmodulin. iptablesmbështet veçori shtesë nëpërmjet moduleve, disa prej të cilave vijnë tashmë të parainstaluara iptablesdhe të tjera, si p.sh. geoipmoduli.
--dport 22komandat që fillojnë me --tregojnë opsione shtesë për modulin e përdorur më parë, në këtë rast do t'i themi tcpmodulit që të zbatohet vetëm në port 22.
-m geoippërdorni geoipmodulin. Ai do të kufizojë paketat në bazë të vendit (më shumë informacion në hapin 5).
--src-cc PEthuaj geoipmodulit të kufizojë paketat hyrëse në ato që vijnë nga Peruja. Për më shumë kode shtetesh kërkoni ISO 3166 country codesnë internet.
-j ACCEPT-jargumenti tregon se iptablesçfarë duhet të bëni nëse një pako përputhet me kufizimet e përcaktuara në argumentet e mëparshme. Në këtë rast do të jenë ACCEPTato paketa, opsionet e tjera janë REJECT, DROPdhe më shumë. Mund të gjeni më shumë opsione duke kërkuar iptables jump targetsnë internet.
1. Bazat
Rendisni të gjitha rregullat.
sudo iptables -L
Listoni të gjitha komandat që janë përdorur për të krijuar rregullat e përdorura aktualisht, të dobishme për të modifikuar ose fshirë rregullat.
sudo iptables -S
Për të fshirë një rregull specifik, zgjidhni një rregull nga sudo iptables -Sdhe zëvendësojeni -Ame -D.
# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT
Listoni të gjitha rregullat e numëruara në INPUTzinxhir.
sudo iptables -L INPUT --line-numbers
Fshi një rregull të numëruar.
sudo iptables -D INPUT 2
Për të pastruar të gjitha rregullat.
sudo iptables -F
Paralajmërim: mund të humbni lidhjen nëse lidheni me SSH .
Qartë vetëm rregullat në OUTPUTzinxhir.
sudo iptables -F OUTPUT
2. Krijoni rregulla fillestare
Lejo SSHnë eth0ndërfaqen
sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-i eth0 zbatoni rregullin në një ndërfaqe specifike, për të lejuar që nga çdo ndërfaqe të hiqni këtë komandë.
Për të kufizuar paketat hyrëse në një IP specifike (dmth 10.0.3.1/32.).
sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
-s 10.0.3.1/32 specifikon një IP/nënrrjet për të lejuar lidhjet nga.
Vendos rregullat e zinxhirit të paracaktuar.
Paralajmërim: përpara se të vazhdoni, sigurohuni që të keni zbatuar rregullat e sakta SSH nëse punoni në një server të largët .
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
-P INPUT DROP mohon të gjitha paketat hyrëse (dmth. askush nuk do të jetë në gjendje të lidhet me serverët tuaj që funksionojnë si Apache, SQL, etj).
-P FORWARD DROP mohon të gjitha paketat e dërguara (dmth. kur jeni duke përdorur sistemin tuaj si ruter).
-P OUTPUT ACCEPTlejon të gjitha paketat dalëse (dmth. kur kryeni një HTTPkërkesë).
Lejo të gjithë trafikun në ndërfaqen loopback ( rekomandohet ).
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
3. Bëjini rregullat të qëndrueshme
Ruani iptablesrregullat aktuale .
sudo netfilter-persistent save
sudo netfilter-persistent reload
Nëse jeni duke ekzekutuar brenda një kontejneri, netfilter-persistentkomanda ka shumë të ngjarë të mos funksionojë, kështu që ju duhet të rikonfiguroni iptables-persistentpaketën.
sudo dpkg-reconfigure iptables-persistent
4. Lejo lidhjet dalëse
Lejo pyetjet DNS.
sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT
Përdorni statemodulin për të lejuar RELATEDdhe për të ESTABLISHEDdalë paketat.
sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Lejo portat e dëshiruara; në këtë rast, HTTPportet.
sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
Më shumë porte që mund të dëshironi të përdorni.
FTP: tcp në portin 21
HTTPS: tcp në portin 443
DHCP: udp në portin 67
NTP: udp në portin 123
Shënim: Nëse dëshironi të lejoni apt-get, mund të jetë e nevojshme të lejoni FTPdheHTTPS .
Lejo trafikun e kthyer vetëm për lidhjet RELATEDdhe tashmë ESTABLISHED( rekomandohet sepse ndonjëherë kërkohet komunikim dydrejtimësh).
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Rregulla të tjera të dobishme
Lejo kërkesat ping nga jashtë.
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Transferoni trafikun në eth0port 2200në 10.0.3.21:22(e dobishme nëse dëshironi të ekspozoni një server SSH që funksionon brenda një kontejneri).
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22
Nëse identifikoheni me sukses në serverin tuaj duke përdorur SSH, do të krijohet një lidhje e vazhdueshme (dmth. nuk ka lidhje të reja edhe nëse jeni lidhur për më shumë se 1 orë). Nëse dështoni dhe provoni të identifikoheni përsëri, do të krijohet një lidhje e re. Kjo do të bllokojë përpjekjet e vazhdueshme të hyrjes në SSH duke kufizuar lidhjet e reja në orë.
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP
Ridrejtoni të gjitha kërkesat nga porti 443në port 4430(e dobishme nëse doni të lidheni me portin 443pa root).
sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
ens3 ndërfaqja e rrjetit.
-m geoip moduli i bllokut të vendit (shih hapin 5).
Paralajmërim: Mos e përdorni lo, OS do t'i heqë të gjitha paketat e ridrejtuara në ndërfaqen loopback .
5. Lejo ose blloko shtete të tëra
5.1 Instaloni xtables-addons
Mund ta instaloni xtables-addonsmodulin duke përdorur metoda të ndryshme, mos ngurroni të përdorni metodën e instalimit që funksionon më mirë për ju.
Instaloni duke përdorur apt-get.
sudo apt-get install xtables-addons-common
Instaloni duke përdorur module-assistant.
sudo apt-get install module-assistant xtables-addons-source
sudo module-assistant --verbose --text-mode auto-install xtables-addons
Instaloni nga burimi.
sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
cd xtables-addons
./autogen.sh
./configure
make
sudo make install
Ndërtoni një bazë të dhënash "vendet".
sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv
Rinisni sistemin tuaj.
sudo reboot
Pasi të xtables-addonsjetë instaluar me sukses, pas rindezjes së parë, ekzekutoni depmodpërndryshe bllokimi i vendit nuk do të funksionojë siç duhet (kjo kërkohet vetëm për herë të parë).
sudo depmod
Krijo një skript në /etc/cron.monthly/geoip-updaterpër të përditësuar geoipbazën e të dhënave çdo muaj.
#!/usr/bin/env bash
# this script is intended to run with sudo privileges
echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip
echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl
echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater
Bëje të /etc/cron.monthly/geoip-updaterekzekutueshme.
sudo chmod +x /etc/cron.monthly/geoip-updater
5.2 Shembuj të rregullave
_Shënim: Nëse po merrni një iptables: No chain/target/match by that namegabim kur përpiqeni të aplikoni një geoiprregull, është e mundur që xtables-addonsai të mos jetë instaluar saktë. Provoni një metodë tjetër instalimi.
Blloko të gjitha paketat hyrëse nga Kina, Hong Kongu, Rusia dhe Koreja.
sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP
Lejoni paketat hyrëse në port 80nga kudo, përveç vendeve të mësipërme.
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Lejo paketat hyrëse në ens3ndërfaqen e portit 22vetëm nga Peruja (ngurroni të zgjidhni kodin e shtetit nga i cili dëshironi të pranoni paketat, për shembull, USpër Shtetet e Bashkuara).
sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT
Lejo paketat hyrëse në port 443vetëm nga Peruja.
sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT