iptables

Iptables för nybörjare

Iptables för nybörjare
Iptables är i princip den viktigaste brandväggen som används för Linux-system, det finns alternativ som nftables men Iptables är fortfarande den viktigaste, den är mycket flexibel genom att acceptera direktkommandon från användaren, du kan ladda och ladda ner regler efter behov för att öka din brandväggs policy noggrannhet.

Egentligen behöver du inte ens känna till Iptables syntax för att använda den, du har grafiska verktyg som Firewall Builder som kan göra inlärningsprocessen onödig men om önskan är att öka Linux-administrationskunskapen Iptables är det första steget för att lära sig hur man praktiskt administrera säkerhet under Linux och till och med underlätta hanteringen av CISCO eller Fortigate säkerhetsenheter och liknande.

Iptables låter dig i princip instruera ditt system att acceptera, vägra eller vidarebefordra en anslutning beroende på valda parametrar, till exempel för att omdirigera alla anslutningar till X-port till en annan IP-adress, för att blockera alla anslutningar som kommer från ett specifikt IP-, IP-intervall eller till acceptera alla anslutningar som kommer från vitlistade IP-adresser bland många andra funktioner.

I den här handledningen lär vi oss hur man skyddar en webbserver, hur man vidarebefordrar anslutningar till interna IP-adresser från vårt LAN och hur man endast erbjuder specifika tjänster till godkända IP-adresser.

Installera Iptables

För att installera iptables på Debian / Ubuntu-system kör du bara "apt update && apt install iptables" som root eller med "sudo" som prefix som i följande bild.

Öppnar HTTP- och HTTPS-portar

Först och främst kan vi lägga till alla ACCEPT-policyer från webbservern.

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

För att se våra regler tillagda kör “iptables -L”

Var:

Iptables = ringer programmet
-A = lägger till en regel
INMATNING = inkommande trafik
-sid = protokoll
-ddport = destinationsport
-j = ange “mål”, målet är typen av policy: ACCEPT, DROP, KÖ eller RETUR.

Sedan i exemplet på bilden ovan berättar vi för Iptables att lägga till en regel för inkommande trafik genom TCP-protokoll och portar 80 och 443 som ska accepteras.

Vi kan ändra kommandot för att acceptera anslutningen endast från en specifik IP genom att lägga till parametern “-s”:

iptables -A INPUT -s 127.0.0.1 -p tcp --dport 80 -j ACCEPT

Var:

s = källa
Iptables -L = listar alla iptables laddade regler
Iptables -L -v = samma sak med närhet.

Vi kan också testa vår brandvägg med nmap:

Som vi kan se är port 80 öppen både enligt “iptables -L” och Nmap.

Obs: För mer information om Nmap-användning kan du läsa vår handledning om den

Skydda din server

# Öppna HTTP- och HTTPS-tjänster.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Öppna SSH Port Service
iptables -A INPUT -p tcp --dport 22 -m anslutning --ctstate NEW, ESTABLISHED -j ACCEPT

Där de nya parametrarna är:

-m = betyder "matchning" och används för att anropa Iptables tillägg som conntrack som inte ingår i iptables kärnfunktioner.

anslutning = Tillåter att spåra information om anslutningar som specifika adresser eller i detta fall anslutningens tillstånd. Detta måste användas försiktigt, eftersom många regler för att försvara servrar från vissa attacker använder conntrack medan dess användning begränsas av hårdvaran och sådan begränsning kan användas för att överbelasta serverns resurser.

-ctstate = bestämmer tillståndet för den regel som ska matchas, de möjliga tillstånden är: NEW, ESTABLISHED, RELATED and INVALID.

# Skydda din SSH-tjänst mot brute force attacker genom att endast tillåta en specifik IP
för att komma åt iptables -A INPUT -p tcp -s X.X.X.X --dport 22 -m anslutning --ctstate NY,
ESTABLERAD -j ACCEPT
# Skydda din SSH-tjänst mot brutala kraftattacker genom att begränsa anslutningsförsök
Iptables -A INPUT -p tcp -m tcp --port 22 -m anslutning --ctstate NY -j 22-test
Iptables -A 22-test -m recent --name CONNECTIONS --set --mask 255.255.255.255 - källa
Iptables -A 22-test -m recent --name CONNECTIONS --rcheck --mask 255.255.255.255
--rkälla --sekunder 30 --hitcount 3 -j 22-skydd
Iptables -A 22-test -j ACCEPT
Iptables -A 22-skydd -j DROP

Var:
I den första linjen säger vår regel ”-m anslutning -ctstate NEW ” vilket innebär att om anslutningen är ny, gå sedan till regeln "22-test".

Den andra raden säger paket netmask 255.255.255.255 namnges som ANSLUTNINGAR .

Den tredje raden säger om a ANSLUTNINGAR är verkar mer än 3 gånger inom 30 sekunder fortsätter brandväggen att använda kedjan 22-skydd. Den fjärde raden säger om ANSLUTNINGAR verkade inte över 3 gånger inom 30 sekunder kan det accepteras.
Femte raden, som tillhör 22-skydd kedjan säger att släppa ANSLUTNINGAR om det verkar över 3 gånger inom 30 sekunder.

Nu till slut, kan vi vägra alla icke-accepterade anslutningar och låt oss tillåta all utgående trafik:

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Där -P betyder målets kedja, kom ihåg att målet är policyn, ACCEPT, DROP, KÖ eller RETUR. I det här fallet säger vi att standardpolicyn för utgående trafik är att acceptera och standardpolicyn för inkommande trafik är att vägra, såvida vi inte angav något annat i tidigare regler. Detta är en mycket grundläggande brandvägg som inte innehåller regler för många attacker, för inlärningsändamål och inte för produktion. I slutet av artikeln bifogar jag en brandvägg som jag använde för produktion på en server, den har kommentarer som förklarar varje regel.

VIDARE FÖR EN ANSLUTNING TILL EN SPECIFIK HAMN TILL EN SPECIFIK IP-ADRESS

Detta är mycket användbart också för stationära användare som vill upprätta en anslutning via en viss enhet, det kan vara användbart även för spelare, vanligtvis gör vi det från routerns inställningar men låt oss anta att routningsenheten kör Iptables.

iptables -A PREROUTING -t nat -p tcp -d X.X.X.X --dport 8080 -j DNAT - till destination
Y.Y.Y.Y: 80
iptables -A POSTROUTING -t nat -p tcp -j SNAT --to-source X.X.X.X

Reglerna ovan åberopar NAT (Network Address Translation) för att specificera anslutningar via protokoll TCP, till adressen X.X.X.X och port 8080 kommer att omdirigeras till adress Y.Y.Y.Y, port 80. Den andra regeln anger att svar måste skickas till källadressen (X.X.X.X). Vi kan använda dessa regler för att tillåta åtkomst till en IP-kamera, för att möjliggöra onlinespel med externa nätverk, etc.

Denna handledning var avsedd att introducera nybörjare till Iptables och förklarar bara ett begränsat antal grundläggande funktioner. Nedan kan du se ett exempel på en välplanerad brandvägg som användes för en produktionsserver, den innehåller från några av de regler vi redan såg till mer komplexa regler för att förhindra DDoS-attacker bland andra.
Nästa handledning kommer att sniffa i lokala nätverk, men i nästa handledning förklarar jag några av reglerna som tillämpas på brandväggen nedan.  Tack för att du följde LinuxHint.com, fortsätt följa oss för framtida uppdateringar om Iptables och Linux i allmänhet.

Bonus: Exempel på produktionsbrandvägg

iptables -F
# ---- Aktivera skydd mot felmeddelanden
aktivera / proc / sys / net / ipv4 / icmp_ignore_bogus_error_responses
# ---- Aktivera omvänd sökvägsfiltrering. Säkrare men bryter asymmetrisk routing och / eller IPSEC
aktivera / proc / sys / net / ipv4 / conf / * / rp_filter
# ---- Acceptera inte källruttade paket. Källrutt används sällan för legitimt
avaktivera / proc / sys / net / ipv4 / conf / * / accept_source_route
# ---- Inaktivera ICMP-omdirigeringsaccept som kan användas för att ändra dina routingtabeller
inaktivera / proc / sys / net / ipv4 / conf / * / accept_redirects
# ---- Eftersom vi inte accepterar omdirigeringar, skicka inte heller omdirigeringsmeddelanden
inaktivera / proc / sys / net / ipv4 / conf / * / send_redirects
# ---- Ignorera paket med omöjliga adresser
inaktivera / proc / sys / net / ipv4 / conf / * / log_martians
# ---- Skydda mot inslagning av sekvensnummer och hjälp mätning av tur och returtid
aktivera / proc / sys / net / ipv4 / tcp_timestamps
# ---- Hjälp mot syn-flood DoS- eller DDoS-attacker med särskilda initialval
TCP-sekvensnummer aktiverar / proc / sys / net / ipv4 / tcp_syncookies
# ---- Använd Selective ACK som kan användas för att ange att specifika paket saknas
inaktivera / proc / sys / net / ipv4 / tcp_sack
modprobe nf_conntrack_ipv4
modprobe nf_nat
# modprobe nf_conntrack_ipv6
# modprobe nf_conntrack_amanda
# modprobe nf_nat_amanda
modprobe nf_conntrack_h323
modprobe nf_nat_h323
modprobe nf_conntrack_ftp
modprobe nf_nat_ftp
# modprobe nf_conntrack_netbios_ns
# modprobe nf_conntrack_irc
# modprobe nf_nat_irc
# modprobe nf_conntrack_proto_dccp
# modprobe nf_nat_proto_dccp
modprobe nf_conntrack_netlink
# modprobe nf_conntrack_pptp
# modprobe nf_nat_pptp
# modprobe nf_conntrack_proto_udplite
# modprobe nf_nat_proto_udplite
# modprobe nf_conntrack_proto_gre
# modprobe nf_nat_proto_gre
# modprobe nf_conntrack_proto_sctp
# modprobe nf_nat_proto_sctp
# modprobe nf_conntrack_sane
modprobe nf_conntrack_sip
modprobe nf_nat_sip
# modprobe nf_conntrack_tftp
# modprobe nf_nat_tftp
# modprobe nf_nat_snmp_basic
#Nu kan vi börja lägga till utvalda tjänster i vårt brandväggsfilter. Det första sådant
är ett localhost-gränssnitt iptables -A INPUT -i lo -j ACCEPT
#Vi sa till brandväggen att ta alla inkommande paket med tcp-flaggor INGEN och bara droppa dem.
iptables -A INPUT -p tcp ! -m anslutning --ctstate NEW -j DROP
#Vi säger till iptables att lägga till (-A) en regel för den inkommande (INPUT) - SSH fungerar på port 50683
istället 22.
iptables -A INPUT -p tcp -m tcp --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -s specifik ip --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -s specifika ip --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -s specifik ip --dport 50683 -j ACCEPT
iptables -A INPUT -p tcp --dport 50683 -m anslutning --ctstate NEW -m nyligen --set
--namn SSH -j ACCEPT
iptables -A INPUT -p tcp --dport 50683 -m recent --update --seconds 60 --hitcount 4
--rttl --namn SSH -j LOGG --logg-prefix "SSH_brute_force"
iptables -A INPUT -p tcp --dport 50683 -m recent --update --seconds 60 --hitcount 4
--rttl - namn SSH -j DROP
iptables -A INPUT -p tcp --dport 50683 -m anslutning --ctstate NY -m nyligen --set
--namn SSH
iptables -A INPUT -p tcp --dport 50683 -m anslutning --ctstate NY -j SSH_WHITELIST
iptables -A INPUT -p tcp --dport 50683 -m anslutning --ctstate NY -m senaste --uppdatering
--sekunder 60 --hitcount 4 --rttl --namn SSH -j ULOG --ulog-prefix SSH_bru
iptables -A INPUT -p tcp --dport 50683 -m anslutning --ctstate NEW -m nyligen --uppdatering
--sekunder 60 --hitcount 4 --rttl --namn SSH -j DROP
# Nu tillåter jag imap och smtp.
-EN INGÅNG -p tcp --dport 25 -j ACCEPT
# Tillåter pop- och pop-anslutningar
-EN INGÅNG -p tcp --dport 110 -j ACCEPT
-EN INGÅNG -p tcp --dport 995 -j ACCEPT
############ IMAP & IMAPS #############
-EN INGÅNG -p tcp --dport 143 -j ACCEPT
-EN INGÅNG -p tcp --dport 993 -j ACCEPT
########### MYSQL #######################
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
########## R1soft CDP System #################
iptables -A INPUT -p tcp -m tcp -s specifik ip --dport 1167 -j ACCEPT
################ utgående ######################
iptables -I INPUT -m anslutning --ctstate ESTABLISHED, RELATED -j ACCEPT
### Tillåt pågående, blockera inkommande ej definierat ###
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -L -n
iptables-save | tee / etc / iptables.testa.regler
iptables-återställning < /etc/iptables.test.rules
#service iptables startar om
HD Remastered Games för Linux som aldrig tidigare hade en Linux-version
Många spelutvecklare och utgivare kommer med HD-remaster av gamla spel för att förlänga livstiden för franchisen, snälla fans som begär kompatibilitet...
Hur man använder AutoKey för att automatisera Linux-spel
AutoKey är ett verktyg för desktopautomatisering för Linux och X11, programmerat i Python 3, GTK och Qt. Med hjälp av dess skript och MACRO-funktional...
Hur man visar FPS-räknare i Linux-spel
Linux-spel fick ett stort tryck när Valve tillkännagav Linux-stöd för Steam-klient och deras spel 2012. Sedan dess har många AAA- och indiespel tagit ...