1. Grunnleggende
2. Lag innledende regler
3. Gjør regler vedvarende
4. Tillat utgående tilkoblinger
5. Tillat eller blokker hele land
Introduksjon
iptableser et kraftig verktøy som brukes til å konfigurere Linux-kjernens integrerte brannmur. Den kommer forhåndsinstallert på de fleste Ubuntu-distribusjoner, men hvis du bruker en tilpasset Ubuntu-versjon eller kjører i en beholder, må du sannsynligvis installere den manuelt.
sudo apt-get install iptables iptables-persistent
Etter installasjonen, hvis du blir spurt om du vil lagre gjeldende regler, spiller det ingen rolle for øyeblikket fordi du kommer til å fjerne eller opprette nye regler senere.
Tips
Du kan bruke netcatkommandoen (på en annen datamaskin enn serveren din) for å teste hvilke av portene dine som er åpne eller lukkede.
nc -z -w5 -v SERVER_IP PORT
nc er netcat-kommandoen.
-z bare send en pakke uten nyttelast.
-w5 vent opptil 5 sekunder på svar.
-v utførlig modus.
- Erstatt
SERVER_IPmed serveradressen din.
- Erstatt
PORTmed porten du vil teste hvis den er åpen (f.eks. 22).
På serveren din kan du bruke netstatkommandoen til å se hvilke porter som lytter etter tilkoblinger.
sudo netstat -tulpn
Merk: Selv om det netstater praktisk å finne portene du vil jobbe med, bør du være klar over applikasjonene du for øyeblikket har installert på serveren din og hvilke porter som lytter, du trenger ikke tillate hver port du finner i netstatutdataene .
Syntaks
sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
-A INPUTlegg til en regel i INPUTkjeden, en kjede er en gruppe regler, de vi bruker mest på denne veiledningen vil være INPUT, OUTPUTog PREROUTING.
-p tcpsatt tcpsom protokollen denne regelen skal gjelde for, kan du også bruke andre protokoller som udp, icmpeller all.
-m tcpbruke tcpmodulen. iptablesstøtter tilleggsfunksjoner via moduler, hvorav noen allerede er forhåndsinstallert iptablesog andre, for eksempel geoipmodulen.
--dport 22kommandoene som starter med --indikerer tilleggsalternativer for den tidligere brukte modulen, i dette tilfellet vil vi fortelle tcpmodulen å bare gjelde for port 22.
-m geoipbruke geoipmodulen. Det vil begrense pakker på landsbasis (mer informasjon på trinn 5).
--src-cc PEbe geoipmodulen om å begrense de innkommende pakkene til de som kommer fra Peru. For flere landskoder søk etter ISO 3166 country codespå internett.
-j ACCEPTdet -jargumentet forteller iptableshva du skal gjøre hvis en pakke passer de begrensninger som er angitt i de foregående argumenter. I dette tilfellet vil det være ACCEPTdisse pakkene, andre alternativer er REJECT, DROPog mer. Du kan finne flere alternativer ved å søke iptables jump targetspå internett.
1. Grunnleggende
List opp alle regler.
sudo iptables -L
Liste alle kommandoer som ble brukt til å lage reglene som brukes for øyeblikket, nyttige for å redigere eller slette regler.
sudo iptables -S
For å slette en spesifikk regel, velg en regel fra sudo iptables -Sog erstatt den -Amed -D.
# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT
List opp alle nummererte regler i INPUTkjeden.
sudo iptables -L INPUT --line-numbers
Slett en nummerert regel.
sudo iptables -D INPUT 2
For å fjerne alle regler.
sudo iptables -F
Advarsel: du kan miste forbindelsen hvis du er koblet til med SSH .
Tøm kun regler i OUTPUTkjeden.
sudo iptables -F OUTPUT
2. Lag innledende regler
Tillat SSHpå eth0grensesnittet
sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-i eth0 bruk regel til et spesifikt grensesnitt, for å tillate fra et hvilket som helst grensesnitt å fjerne denne kommandoen.
For å begrense innkommende pakker til en spesifikk IP (dvs. 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 spesifiserer en IP/subnett for å tillate tilkoblinger fra.
Angi standard kjederegler.
Advarsel: før du fortsetter, sørg for at du har brukt de riktige SSH-reglene hvis du arbeider på en ekstern server .
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
-P INPUT DROP nekter alle innkommende pakker (dvs. ingen vil kunne koble seg til dine kjørende servere som Apache, SQL osv.).
-P FORWARD DROP nekter alle videresendte pakker (dvs. når du bruker systemet som ruter).
-P OUTPUT ACCEPTtillater alle utgående pakker (dvs. når du utfører en HTTPforespørsel).
Tillat all trafikk på loopback-grensesnitt ( anbefales ).
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
3. Gjør regler vedvarende
Lagre gjeldende iptablesregler.
sudo netfilter-persistent save
sudo netfilter-persistent reload
Hvis du kjører inne i en container, vil netfilter-persistentkommandoen mest sannsynlig ikke fungere, så du må konfigurere iptables-persistentpakken på nytt.
sudo dpkg-reconfigure iptables-persistent
4. Tillat utgående tilkoblinger
Tillat DNS-spørringer.
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
Bruk statemodulen til å tillate RELATEDog ESTABLISHEDutgående pakker.
sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Tillat de ønskede portene; i dette tilfellet, HTTPporter.
sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
Flere porter du kanskje vil bruke.
FTP: tcp ved port 21
HTTPS: tcp ved port 443
DHCP: utp ved port 67
NTP: udp ved port 123
Merk: Hvis du vil tillate apt-get, kan det være nødvendig å tillate FTPogHTTPS .
Tillat returnert trafikk kun for RELATEDog allerede ESTABLISHEDtilkoblinger ( anbefales fordi noen ganger toveiskommunikasjon er nødvendig).
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Andre nyttige regler
Tillat ping-forespørsler utenfra.
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Videresend trafikk på eth0port 2200til 10.0.3.21:22(nyttig hvis du ønsker å eksponere en SSH-server som kjører inne i en container).
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22
Hvis du lykkes med å logge på serveren din ved å bruke SSH, vil en vedvarende tilkobling opprettes (dvs. ingen nye tilkoblinger selv om du er tilkoblet i mer enn 1 time). Hvis du mislykkes og prøver å logge på igjen, opprettes en ny tilkobling. Dette vil blokkere kontinuerlige SSH-påloggingsforsøk ved å begrense nye tilkoblinger per time.
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
Omdiriger alle forespørsler på port 443til port 4430(nyttig hvis du vil binde til port 443uten 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 nettverksgrensesnittet.
-m geoip landsblokkmodul (se trinn 5).
Advarsel: Ikke bruk lo, OS vil forkaste alle pakker som er omdirigert til loopback-grensesnittet .
5. Tillat eller blokker hele land
5.1 Installer xtables-addons
Du kan installere xtables-addonsmodulen ved hjelp av ulike metoder, bruk gjerne den installasjonsmetoden som passer best for deg.
Installer ved hjelp av apt-get.
sudo apt-get install xtables-addons-common
Installer ved hjelp av module-assistant.
sudo apt-get install module-assistant xtables-addons-source
sudo module-assistant --verbose --text-mode auto-install xtables-addons
Installer fra kilden.
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
Bygg en "land"-database.
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
Start systemet på nytt.
sudo reboot
Etter at den xtables-addonshar blitt installert, etter den første omstarten, kjør depmodellers vil landsblokkering ikke fungere ordentlig (dette er bare nødvendig for første gang).
sudo depmod
Lag et skript på for /etc/cron.monthly/geoip-updaterå oppdatere geoipdatabasen månedlig.
#!/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
Gjør /etc/cron.monthly/geoip-updaterkjørbar.
sudo chmod +x /etc/cron.monthly/geoip-updater
5.2 Eksempelregler
_Merk: Hvis du får en iptables: No chain/target/match by that namefeilmelding når du prøver å bruke en geoipregel, er det mulig at den xtables-addonsikke er riktig installert. Prøv en annen installasjonsmetode.
Blokker alle innkommende pakker fra Kina, Hong Kong, Russland og Korea.
sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP
Tillat innkommende pakker på port 80fra alle steder bortsett fra landene ovenfor.
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
Tillat innkommende pakker på ens3grensesnittet på port 22kun fra Peru (velg gjerne landskoden du vil godta pakker fra, for eksempel USfor USA).
sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT
Tillat innkommende pakker på port 443kun fra Peru.
sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT