Enkel IPTables-konfiguration och exempel på Ubuntu 16.04

Introduktion

iptablesär ett kraftfullt verktyg som används för att konfigurera Linux-kärnans integrerade brandvägg. Det kommer förinstallerat på de flesta Ubuntu-distributioner, men om du använder en anpassad Ubuntu-version eller kör inuti en behållare måste du troligen installera den manuellt.

sudo apt-get install iptables iptables-persistent

Om du efter installationen tillfrågas om du ska spara dina nuvarande regler spelar det ingen roll just nu eftersom du ska ta bort eller skapa nya regler senare.

Tips

Du kan använda netcatkommandot (på en annan dator än din server) för att testa vilka av dina portar som är öppna eller stängda.

nc -z -w5 -v SERVER_IP PORT
  • nc är kommandot netcat.
  • -z skicka bara ett paket utan nyttolast.
  • -w5 vänta upp till 5 sekunder på ett svar.
  • -v verbose läge.
  • Ersätt SERVER_IPmed din serveradress.
  • Ersätt PORTmed porten du vill testa om den är öppen (t.ex. 22).

På din server kan du använda netstatkommandot för att se vilka portar som för närvarande lyssnar efter anslutningar.

sudo netstat -tulpn

Obs: Även om det netstatär praktiskt att hitta de portar du vill arbeta med, bör du vara medveten om de applikationer du för närvarande har installerat på din server och vilka portar som lyssnar, du behöver inte tillåta varje port du hittar i netstatutgången .

Syntax

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUTlägg till en regel i INPUTkedjan, en kedja är en grupp regler, de vi använder mest i den här guiden är INPUT, OUTPUToch PREROUTING.
  • -p tcpange tcpsom det protokoll som denna regel kommer att gälla för, kan du också använda andra protokoll som udp, icmpeller all.
  • -m tcpanvända tcpmodulen. iptablesstöder ytterligare funktioner via moduler, av vilka några redan är förinstallerade med iptablesoch andra, såsom geoipmodulen.
  • --dport 22kommandona som börjar med --indikerar ytterligare alternativ för den tidigare använda modulen, i det här fallet kommer vi att berätta för tcpmodulen att endast gälla port 22.
  • -m geoipanvända geoipmodulen. Det kommer att begränsa paket på landsbasis (mer information i steg 5).
  • --src-cc PEsäg till geoipmodulen att begränsa de inkommande paketen till de som kommer från Peru. För fler landskoder sök efter ISO 3166 country codespå internet.
  • -j ACCEPTdet -jargumentet berättar iptablesvad de ska göra om ett paket matchar de begränsningar som anges i de tidigare argument. I detta fall kommer ACCEPTdessa paket, andra alternativ är REJECT, DROPoch mycket mer. Du kan hitta fler alternativ genom att söka iptables jump targetspå internet.

1. Grunderna

Lista alla regler.

sudo iptables -L

Lista alla kommandon som användes för att skapa de regler som används för närvarande, användbara för att redigera eller ta bort regler.

sudo iptables -S

För att ta bort en specifik regel välj en regel från sudo iptables -Soch ersätt -Amed -D.

# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Lista alla numrerade regler i INPUTkedjan.

sudo iptables -L INPUT --line-numbers

Ta bort en numrerad regel.

sudo iptables -D INPUT 2

För att rensa alla regler.

sudo iptables -F

Varning: du kan förlora anslutningen om du ansluter via SSH .

Rensa endast regler i OUTPUTkedjan.

sudo iptables -F OUTPUT

2. Skapa inledande regler

Tillåt SSHeth0gränssnitt

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 tillämpa regel på ett specifikt gränssnitt, för att tillåta från vilket gränssnitt som helst ta bort detta kommando.

För att begränsa inkommande paket till en specifik 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 anger ett IP/subnät att tillåta anslutningar från.

Ställ in standardkedjeregler.

Varning: innan du fortsätter se till att du har tillämpat rätt SSH-regler om du arbetar på en fjärrserver .

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP nekar alla inkommande paket (dvs ingen kommer att kunna ansluta till dina körande servrar som Apache, SQL, etc).
  • -P FORWARD DROP nekar alla vidarebefordrade paket (dvs. när du använder ditt system som router).
  • -P OUTPUT ACCEPTtillåter alla utgående paket (dvs när du utför en HTTPförfrågan).

Tillåt all trafik på loopback-gränssnittet ( rekommenderas ).

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

3. Gör reglerna beständiga

Spara de nuvarande iptablesreglerna.

sudo netfilter-persistent save
sudo netfilter-persistent reload

Om du kör inuti en container kommer netfilter-persistentkommandot troligen inte att fungera, så du måste konfigurera om iptables-persistentpaketet.

sudo dpkg-reconfigure iptables-persistent

4. Tillåt utgående anslutningar

Tillåt DNS-frågor.

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

Använd statemodulen för att tillåta RELATEDoch ESTABLISHEDutgående paket.

sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Tillåt önskade portar; i detta fall HTTPportar.

sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

Fler portar du kanske vill använda.

  • FTP: tcp vid port 21
  • HTTPS: tcp vid port 443
  • DHCP: udp vid port 67
  • NTP: udp vid port 123

Obs: Om du vill tillåta apt-getkan det vara nödvändigt att tillåta FTPochHTTPS .

Tillåt endast returnerad trafik för RELATEDoch redan ESTABLISHEDanslutningar ( rekommenderas eftersom dubbelriktad kommunikation ibland krävs).

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Andra användbara regler

Tillåt ping-förfrågningar utifrån.

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Vidarebefordra trafik på eth0port 2200till 10.0.3.21:22(användbart om du vill exponera en SSH-server som körs inuti en container).

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22

Om du lyckas logga in på din server med hjälp av SSH kommer en beständig anslutning att skapas (dvs inga nya anslutningar även om du är ansluten i mer än 1 timme). Om du misslyckas och försöker logga in igen kommer en ny anslutning att skapas. Detta kommer att blockera kontinuerliga SSH-inloggningsförsök genom att begränsa nya anslutningar per timme.

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

Omdirigera alla förfrågningar på port 443till port 4430(användbart om du vill binda till port 443utan 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 nätverksgränssnittet.
  • -m geoip landsblocksmodul (se steg 5).

Varning: Använd inte lo, OS kommer att kassera alla paket som omdirigeras till loopback-gränssnittet .

5. Tillåt eller blockera hela länder

5.1 Installera xtables-addons

Du kan installera xtables-addonsmodulen med olika metoder, använd gärna den installationsmetod som fungerar bäst för dig.

  • Installera med apt-get.

    sudo apt-get install xtables-addons-common
    
  • Installera med module-assistant.

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • Installera från källan.

    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 databas för "länder".

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

Starta om ditt system.

sudo reboot

Efter att den xtables-addonshar installerats framgångsrikt, efter den första omstarten, kör depmodannars landsblockering fungerar inte korrekt (detta krävs bara för första gången).

sudo depmod 

Skapa ett skript på för /etc/cron.monthly/geoip-updateratt uppdatera geoipdatabasen varje månad.

#!/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

Gör /etc/cron.monthly/geoip-updaterkörbart.

sudo chmod +x /etc/cron.monthly/geoip-updater

5.2 Exempel på regler

_Obs: Om du får ett iptables: No chain/target/match by that namefelmeddelande när du försöker tillämpa en geoipregel, är det möjligt att den xtables-addonsinte har installerats korrekt. Prova en annan installationsmetod.

Blockera alla inkommande paket från Kina, Hongkong, Ryssland och Korea.

sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP

Tillåt inkommande paket på port 80från överallt förutom länderna ovan.

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Tillåt inkommande paket på ens3gränssnittet på port 22endast från Peru (välj gärna den landskod du vill acceptera paket från till exempel USför USA).

sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT

Tillåt endast inkommande paket på port 443från Peru.

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT

Installera Plesk på CentOS 7

Installera Plesk på CentOS 7

Använder du ett annat system? Plesk är en egen kontrollpanel för webbhotell som tillåter användare att administrera sina personliga och/eller klienters webbplatser, databaser

Installera Cacti på Debian Jessie

Installera Cacti på Debian Jessie

Introduktion Cacti är ett övervaknings- och grafverktyg med öppen källkod som är helt baserat på RRD-data. Genom Cacti kan du övervaka nästan vilken typ av enhet som helst

Installera Lets Encrypt SSL på One-Click WordPress-appen

Installera Lets Encrypt SSL på One-Click WordPress-appen

Introduktion Lets Encrypt är en certifikatmyndighetstjänst som erbjuder gratis TLS/SSL-certifikat. Installationsprocessen förenklas av Certbot,

Hur man ställer in en Tekkit Classic-server på Ubuntu 16.10

Hur man ställer in en Tekkit Classic-server på Ubuntu 16.10

Använder du ett annat system? Vad är Tekkit Classic? Tekkit Classic är ett modpack för spelet som alla känner och älskar; Minecraft. Den innehåller några av ver

Konfigurera iRedMail på Debian Wheezy

Konfigurera iRedMail på Debian Wheezy

Använder du ett annat system? Den här handledningen visar dig hur du installerar groupware iRedMail på en ny installation av Debian Wheezy. Du bör använda en serve

Hur man installerar och konfigurerar PHP 7.0 eller PHP 7.1 på Ubuntu 16.04

Hur man installerar och konfigurerar PHP 7.0 eller PHP 7.1 på Ubuntu 16.04

PHP och relaterade paket är de mest använda komponenterna när du distribuerar en webbserver. I den här artikeln kommer vi att lära oss hur du ställer in PHP 7.0 eller PHP 7.1 o

Hur man installerar Squid Proxy på CentOS

Hur man installerar Squid Proxy på CentOS

Squid är ett populärt, gratis Linux-program som låter dig skapa en webbproxy för vidarebefordran. I den här guiden ser du hur du installerar Squid på CentOS för att förvandla dig

Hur man installerar Lighttpd (LLMP Stack) på CentOS 6

Hur man installerar Lighttpd (LLMP Stack) på CentOS 6

Inledning Lighttpd är en apachegaffel som syftar till att vara mycket mindre resurskrävande. Den är lätt, därav namnet, och är ganska enkel att använda. Installera

Tre gratis serverkontrollpaneler (snabbinstallation)

Tre gratis serverkontrollpaneler (snabbinstallation)

1. Virtualmin/Webmin Virtualmin är en kraftfull och flexibel kontrollpanel för webbhotell för Linux- och UNIX-system baserad på den välkända Open Source-webbasen

Konfigurera en Yii-applikation på Ubuntu 14.04

Konfigurera en Yii-applikation på Ubuntu 14.04

Yii är ett PHP-ramverk som låter dig utveckla applikationer snabbare och enklare. Att installera Yii på Ubuntu är enkelt, eftersom du kommer att lära dig exakt

Använder skärmen på Ubuntu 14.04

Använder skärmen på Ubuntu 14.04

Screen är ett program som tillåter flera terminalsessioner inom ett fönster. Detta låter dig simulera flera terminalfönster där det ma

Konfigurera din egen DNS-server på Debian/Ubuntu

Konfigurera din egen DNS-server på Debian/Ubuntu

Denna handledning förklarar hur man ställer in en DNS-server med Bind9 på Debian eller Ubuntu. Genomgående i artikeln, byt ut ditt-domännamn.com i enlighet med detta. Vid th

Använda Logrotate för att hantera loggfiler

Använda Logrotate för att hantera loggfiler

Inledning Logrotate är ett Linux-verktyg som förenklar administrationen av loggfiler. Den körs vanligtvis en gång om dagen via ett cron-jobb och hanterar loggbasen

Konfigurera statiskt nätverk och IPv6 på CentOS 7

Konfigurera statiskt nätverk och IPv6 på CentOS 7

VULTR har nyligen gjort ändringar på deras sida, och allt borde nu fungera bra direkt när NetworkManager är aktiverat. Om du vill inaktivera

Ändra Icinga2 för att använda Master/Client Model på CentOS 6 eller CentOS 7

Ändra Icinga2 för att använda Master/Client Model på CentOS 6 eller CentOS 7

Icinga2 är ett kraftfullt övervakningssystem, och när det används i en master-klient-modell kan det ersätta behovet av NRPE-baserade övervakningskontroller. Master-klienten

Konfigurera Red5 Media Server på Ubuntu 16.04

Konfigurera Red5 Media Server på Ubuntu 16.04

Använder du ett annat system? Red5 är en mediaserver med öppen källkod implementerad i Java som låter dig köra Flash fleranvändarapplikationer som livestreamin

Kompilera och installera Nginx med PageSpeed-modulen på Debian 8

Kompilera och installera Nginx med PageSpeed-modulen på Debian 8

I den här artikeln kommer vi att se hur man kompilerar och installerar Nginx mainline från de officiella källorna för Nginx med PageSpeed-modulen, som låter dig t

Hur man installerar Apache Cassandra 3.11.x på Ubuntu 16.04 LTS

Hur man installerar Apache Cassandra 3.11.x på Ubuntu 16.04 LTS

Använder du ett annat system? Apache Cassandra är ett gratis NoSQL-databashanteringssystem med öppen källkod som är designat för att ge skalbarhet, hög

Hur man installerar Apache Cassandra 3.11.x på CentOS 7

Hur man installerar Apache Cassandra 3.11.x på CentOS 7

Använder du ett annat system? Apache Cassandra är ett gratis NoSQL-databashanteringssystem med öppen källkod som är designat för att ge skalbarhet, hög

Hur man installerar Vanilla Forum på Ubuntu 16.04

Hur man installerar Vanilla Forum på Ubuntu 16.04

Använder du ett annat system? Vanilla forum är en open source forumapplikation skriven i PHP. Det är en helt anpassningsbar, enkel att använda och stöder externa

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Artificiell intelligens är inte i framtiden, det är här i nuet I den här bloggen Läs hur Artificiell intelligens-applikationer har påverkat olika sektorer.

DDOS-attacker: En kort översikt

DDOS-attacker: En kort översikt

Är du också ett offer för DDOS-attacker och förvirrad över de förebyggande metoderna? Läs den här artikeln för att lösa dina frågor.

Har du någonsin undrat hur hackare tjänar pengar?

Har du någonsin undrat hur hackare tjänar pengar?

Du kanske har hört att hackare tjänar mycket pengar, men har du någonsin undrat hur de tjänar den typen av pengar? låt oss diskutera.

Revolutionerande uppfinningar från Google som gör ditt liv lätt.

Revolutionerande uppfinningar från Google som gör ditt liv lätt.

Vill du se revolutionerande uppfinningar av Google och hur dessa uppfinningar förändrade livet för varje människa idag? Läs sedan till bloggen för att se uppfinningar av Google.

Fredag ​​Essential: Vad hände med AI-drivna bilar?

Fredag ​​Essential: Vad hände med AI-drivna bilar?

Konceptet med att självkörande bilar ska ut på vägarna med hjälp av artificiell intelligens är en dröm vi har ett tag nu. Men trots flera löften finns de ingenstans att se. Läs den här bloggen för att lära dig mer...

Technological Singularity: A Distant Future of Human Civilization?

Technological Singularity: A Distant Future of Human Civilization?

När vetenskapen utvecklas i snabb takt och tar över en hel del av våra ansträngningar, ökar också riskerna för att utsätta oss för en oförklarlig singularitet. Läs, vad singularitet kan betyda för oss.

Utveckling av datalagring – Infographic

Utveckling av datalagring – Infographic

Lagringsmetoderna för data har utvecklats kan vara sedan födelsen av data. Den här bloggen tar upp utvecklingen av datalagring på basis av en infografik.

Funktioner för Big Data Reference Architecture Layers

Funktioner för Big Data Reference Architecture Layers

Läs bloggen för att känna till olika lager i Big Data Architecture och deras funktionaliteter på enklaste sätt.

6 fantastiska fördelar med att ha smarta hemenheter i våra liv

6 fantastiska fördelar med att ha smarta hemenheter i våra liv

I denna digitala värld har smarta hemenheter blivit en avgörande del av livet. Här är några fantastiska fördelar med smarta hemenheter om hur de gör vårt liv värt att leva och enklare.

macOS Catalina 10.15.4 tilläggsuppdatering orsakar fler problem än att lösa

macOS Catalina 10.15.4 tilläggsuppdatering orsakar fler problem än att lösa

Nyligen släppte Apple macOS Catalina 10.15.4, en tilläggsuppdatering för att åtgärda problem, men det verkar som om uppdateringen orsakar fler problem som leder till att mac-datorer blir murade. Läs den här artikeln för att lära dig mer