1. Osnove
2. Napravite početna pravila
3. Neka pravila budu postojana
4. Dopustite odlazne veze
5. Dopustite ili blokirajte cijele zemlje
Uvod
iptablesje moćan alat koji se koristi za konfiguriranje integriranog vatrozida Linux kernela. Dolazi unaprijed instaliran na većini Ubuntu distribucija, no ako koristite prilagođenu verziju Ubuntua ili radite unutar spremnika, najvjerojatnije ćete ga morati ručno instalirati.
sudo apt-get install iptables iptables-persistent
Nakon instalacije, ako budete upitani želite li spremiti vaša trenutna pravila, to trenutno nije važno jer ćete kasnije ukloniti ili kreirati nova pravila.
Savjeti
Možete koristiti netcatnaredbu (na drugom računalu od vašeg poslužitelja) za testiranje koji su vaši portovi otvoreni ili zatvoreni.
nc -z -w5 -v SERVER_IP PORT
nc je naredba netcat.
-z samo pošaljite paket bez tereta.
-w5 pričekajte do 5 sekundi za odgovor.
-v opširni način.
- Zamijenite
SERVER_IPadresom vašeg poslužitelja.
- Zamijenite
PORTportom koji želite testirati je li otvoren (npr 22. ).
Na vašem poslužitelju možete koristiti netstatnaredbu da vidite koji portovi trenutno osluškuju veze.
sudo netstat -tulpn
Napomena: Iako netstatje zgodno pronaći portove s kojima želite raditi, trebali biste biti svjesni aplikacija koje ste trenutno instalirali na vašem poslužitelju i koji portovi slušaju, ne morate dopustiti svaki port koji pronađete u netstatizlazu .
Sintaksa
sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
-A INPUTdodajte pravilo u INPUTlanac, lanac je skupina pravila, ona koja najčešće koristimo u ovom vodiču bit će INPUT, OUTPUTi PREROUTING.
-p tcpako postavite tcpkao protokol na koji će se ovo pravilo primjenjivati, možete koristiti i druge protokole kao što su udp, icmpili all.
-m tcpkoristiti tcpmodul. iptablespodržava dodatne značajke putem modula, od kojih su neki već unaprijed instalirani, iptablesa drugi, kao što je geoipmodul.
--dport 22naredbe koje počinju s --označavaju dodatne opcije za prethodno korišteni modul, u ovom slučaju ćemo reći tcpmodulu da se primjenjuje samo na port 22.
-m geoipkoristiti geoipmodul. To će ograničiti pakete na temelju zemlje (više informacija u koraku 5).
--src-cc PErecite geoipmodulu da ograniči dolazne pakete na one koji dolaze iz Perua. Za više kodova zemalja potražite ISO 3166 country codesna internetu.
-j ACCEPT-jargument govori iptablesšto učiniti ako paket odgovara ograničenjima navedenim u prethodnim argumentima. U ovom slučaju to će biti ACCEPTti paketi, druge opcije su REJECT, DROPi više. Više opcija možete pronaći pretraživanjem iptables jump targetsna internetu.
1. Osnove
Navedite sva pravila.
sudo iptables -L
Navedite sve naredbe koje su korištene za stvaranje trenutno korištenih pravila, korisnih za uređivanje ili brisanje pravila.
sudo iptables -S
Za brisanje određenog pravila odaberite pravilo iz sudo iptables -Si zamijenite ga -As -D.
# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT
Navedite sva numerirana pravila u INPUTlancu.
sudo iptables -L INPUT --line-numbers
Izbrišite pravilo s brojevima.
sudo iptables -D INPUT 2
Za brisanje svih pravila.
sudo iptables -F
Upozorenje: možete izgubiti vezu ako ste povezani putem SSH-a .
Očistite samo pravila u OUTPUTlancu.
sudo iptables -F OUTPUT
2. Napravite početna pravila
Dopusti SSHna eth0sučelju
sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-i eth0 primijeniti pravilo na određeno sučelje, kako bi se omogućilo uklanjanje ove naredbe s bilo kojeg sučelja.
Za ograničavanje dolaznih paketa na određeni IP (tj 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 specificira IP/podmrežu iz koje se dopuštaju veze.
Postavite zadana pravila lanca.
Upozorenje: prije nego što nastavite, provjerite jeste li primijenili ispravna SSH pravila ako radite na udaljenom poslužitelju .
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
-P INPUT DROP odbija sve dolazne pakete (tj. nitko se neće moći spojiti na vaše pokrenute poslužitelje kao što su Apache, SQL, itd.).
-P FORWARD DROP odbija sve proslijeđene pakete (tj. kada koristite svoj sustav kao usmjerivač).
-P OUTPUT ACCEPTdopušta sve odlazne pakete (tj. kada izvršite HTTPzahtjev).
Dopusti sav promet na sučelju povratne petlje ( preporučeno ).
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
3. Neka pravila budu postojana
Spremite trenutna iptablespravila.
sudo netfilter-persistent save
sudo netfilter-persistent reload
Ako radite unutar spremnika, netfilter-persistentnaredba najvjerojatnije neće raditi, pa morate ponovno konfigurirati iptables-persistentpaket.
sudo dpkg-reconfigure iptables-persistent
4. Dopustite odlazne veze
Dopusti DNS upite.
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
Koristite statemodul za dopuštanje RELATEDi ESTABLISHEDodlazne pakete.
sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Dopustite željene portove; u ovom slučaju HTTPportovi.
sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
Više portova koje biste mogli upotrijebiti.
FTP: tcp na portu 21
HTTPS: tcp na portu 443
DHCP: udp na portu 67
NTP: udp na portu 123
Napomena: Ako želite dopustiti apt-get, možda će biti potrebno dopustiti FTPiHTTPS .
Dopusti vraćeni promet samo za RELATEDi već ESTABLISHEDveze ( preporučeno jer je ponekad potrebna dvosmjerna komunikacija).
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Ostala korisna pravila
Dopusti ping zahtjeve izvana.
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Prosljeđivanje prometa na eth0portu 2200na 10.0.3.21:22(korisno ako želite izložiti SSH poslužitelj koji radi unutar spremnika).
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22
Ako se uspješno prijavite na svoj poslužitelj korištenjem SSH-a, stvorit će se trajna veza (tj. nema novih veza čak i ako ste povezani dulje od 1 sata). Ako ne uspijete i pokušate se ponovno prijaviti, stvorit će se nova veza. To će blokirati kontinuirane pokušaje SSH prijave ograničavanjem novih veza po satu.
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
Preusmjerite sve zahtjeve s porta 443na port 4430(korisno ako se želite vezati na port 443bez 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 mrežno sučelje.
-m geoip modul državnog bloka (pogledajte korak 5).
Upozorenje: Nemojte koristiti lo, OS će odbaciti sve pakete preusmjerene na sučelje povratne petlje .
5. Dopustite ili blokirajte cijele zemlje
5.1 Instalirajte xtables-addons
xtables-addonsModul možete instalirati raznim metodama, slobodno koristite metodu instalacije koja vam najbolje odgovara.
Instalirajte pomoću apt-get.
sudo apt-get install xtables-addons-common
Instalirajte pomoću module-assistant.
sudo apt-get install module-assistant xtables-addons-source
sudo module-assistant --verbose --text-mode auto-install xtables-addons
Instalirajte iz izvora.
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
Izgradite bazu podataka o "zemljama".
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
Ponovno pokrenite sustav.
sudo reboot
Nakon što xtables-addonsje uspješno instaliran, nakon prvog ponovnog pokretanja, pokrenite, depmodinače blokiranje zemlje neće raditi ispravno (ovo je potrebno samo prvi put).
sudo depmod
Napravite skriptu na adresi /etc/cron.monthly/geoip-updaterza ažuriranje geoipbaze podataka mjesečno.
#!/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
Napravite /etc/cron.monthly/geoip-updaterizvršnu.
sudo chmod +x /etc/cron.monthly/geoip-updater
5.2 Primjeri pravila
_Napomena: Ako primate iptables: No chain/target/match by that namepogrešku kada pokušavate primijeniti geoippravilo, moguće je da xtables-addonsnije ispravno instalirano. Pokušajte s drugom metodom instalacije.
Blokirajte sve dolazne pakete iz Kine, Hong Konga, Rusije i Koreje.
sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP
Dopustite dolazne pakete na portu 80sa svih strana osim iz gore navedenih zemalja.
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Dopustite dolazne pakete na ens3sučelju na portu 22samo iz Perua (slobodno odaberite pozivni broj zemlje iz koje želite prihvatiti pakete, na primjer, USza Sjedinjene Države).
sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT
Dopusti dolazne pakete na portu 443samo iz Perua.
sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT