Avatar billede mgjuhler Nybegynder
12. februar 2012 - 09:27 Der er 13 kommentarer og
1 løsning

Iptables NAT "husker" regler selvom de er fjernet

Goddag,

Jeg har et problem med iptables som jeg benytter til at NAT'te nogle spil servere igennem en "hoved" maskine.

eth0: internet (192.168.1.2)
eth1: lokal netværk (10.10.10.1->10.10.10.10)

Spil serverene har deres eget netværk, de er forbundet med hoved maskinen via eth1, serverene bliver så nattet igennem hoved maskinen så alt trafik på eth0 ryger videre til eth1 via iptables regler.

Mit problem er at iptables på en eller anden måde "husker" reglerne selvom de er blevet slettet. Spil serverene kører med load ballance system så en port kan godt blive tildelt forskellige spil servere.

eks:
192.168.1.2:1001 -> 10.10.10.1:1001
192.168.1.2:1002 -> 10.10.10.2:1002
192.168.1.2:1003 -> 10.10.10.3:1003

hvis en spil server bliver tildelt en anden host så skifter ipen til porten, eks:
192.168.1.2:1001 -> 10.10.10.1:1001 (uændret)
192.168.1.2:1002 -> 10.10.10.5:1002 (ændret)
192.168.1.2:1003 -> 10.10.10.8:1003 (ændret)

spil serveren på port 1001 er der forsat forbindelse til, men port 1002 samt 1003 er "døde", og det er selv om at "iptables -t nat -L" fortæller at forbindelserne er som de skal være.

Mine iptables regler:
#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward

/sbin/iptables -t nat -F PREROUTING
/sbin/iptables -t nat -F POSTROUTING
/sbin/iptables -F INPUT
/sbin/iptables -F FORWARD

#/sbin/iptables -P INPUT ACCEPT
#/sbin/iptables -P FORWARD ACCEPT

/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.2

/sbin/iptables -t nat -A PREROUTING -p udp --dport 1001 -j DNAT --to-destination 10.10.10.1
/sbin/iptables -t nat -A PREROUTING -p udp --dport 1002 -j DNAT --to-destination 10.10.10.5
/sbin/iptables -t nat -A PREROUTING -p udp --dport 1003 -j DNAT --to-destination 10.10.10.8


[root@server ~]# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target    prot opt source              destination
DNAT      udp  --  anywhere            anywhere            udp dpt:1001 to:10.10.10.1
DNAT      udp  --  anywhere            anywhere            udp dpt:1002 to:10.10.10.5
DNAT      udp  --  anywhere            anywhere            udp dpt:1003 to:10.10.10.8


Hvad er det der går galt?
Avatar billede Broxigar Praktikant
12. februar 2012 - 10:55 #1
Prøv og flushe din iptables med iptables -F og så reapply dine regler og så kør iptables -L
Avatar billede Wally1973 Praktikant
12. februar 2012 - 11:12 #2
NAT'ing virker kun på den første pakke i en forbindelse.
Når forbindelsen først er kreereret via denne NAT'ing, så holdes den åben.

Du skal benytte firewall funktionen i IPTables og så droppe alle de problematiske forbindelser.
Avatar billede mgjuhler Nybegynder
12. februar 2012 - 14:06 #3
Broxigar: dit forslag havde ingen indflydelse på tingene, NAT reglerne var der stadig selvom jeg havde flushet med "iptables -F"

Wally1973: firewall funktionen? vil du uddybe det?
Avatar billede mgjuhler Nybegynder
12. februar 2012 - 14:06 #4
Broxigar: dit forslag havde ingen indflydelse på tingene, NAT reglerne var der stadig selvom jeg havde flushet med "iptables -F"

Wally1973: firewall funktionen? vil du uddybe det?
Avatar billede Wally1973 Praktikant
12. februar 2012 - 22:54 #5
Jeg skal se om jeg kan huske IPTables rigtigt.

Dine linjer med DNAT rammer kun den første pakke i en forbindelse (vist nok den med SYN-bitten sat).
Derefter vil alle efterfølgende pakker køre som en normal forbindelse.

Du skal altså til at lave DROP eller REJECT på de efterfølgende pakker, når du fjerner en DNAT linje, da de forbindelser der allerede er oprettet ellers vil bestå indtil en af enderne i forbindelsen lukker den af sig selv.

Din firewall er så vidt jeg husker det din FORWARD table og den har du kun ACCEPT på og ACCEPT af oprettede forbindelser.
Avatar billede mgjuhler Nybegynder
13. februar 2012 - 08:42 #6
Wally1973:
Tilføj NAT:
/sbin/iptables -t nat -A PREROUTING -p udp --dport 1001 -j DNAT --to-destination 10.10.10.1

Fjern NAT:
/sbin/iptables -A FORWARD -d 10.10.10.1 -p udp --dport 1001 -j DROP

Korrekt?
Avatar billede Wally1973 Praktikant
13. februar 2012 - 11:40 #7
Kommer lidt an på hvor du er henne i processen. :)

Hvis routing ikke kører og du har sat blokering op for den tidligere NAT'ing, så ja.

Hvis det er en stop af en NAT'ing og blokering du vil lave, så skal du vist lige bytte om på tilføj og fjern.

HUSK: når du gør dette, så ryger alle forbindelser, der er oprettet til den server og port du blokerer.

HUSK OGSÅ: at den DROP ikke vil virke, hvis der er en ACCEPT før det, så som din ACCEPT af established forbindelser.
Avatar billede mgjuhler Nybegynder
13. februar 2012 - 14:31 #8
puha det er godt nok indviklet det her iptables om NAT :)

Vil du være så flink at forklare mig hvor i mine regler jeg skal indsætte "DROP" reglerne og hvor jeg skal indsætte "PREROUTING" reglerne?

#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward

/sbin/iptables -t nat -F PREROUTING
/sbin/iptables -t nat -F POSTROUTING
/sbin/iptables -F INPUT
/sbin/iptables -F FORWARD

/sbin/iptables -P FORWARD ACCEPT

/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.2
Avatar billede Wally1973 Praktikant
13. februar 2012 - 14:46 #9
Ups, så lige at din ACCEPT af established forbindelser er på INPUT, hvilket betyder den kan ignores i din normale NAT'ing.
Så er det bare at smide din DROP i FORWARD. Husk dog at din DROP skal tilpasses til forbindelsen som den ser ud efter en evt. PREROUTING regel har ændret den.

Og ja, IPTables er forbandet indviklet når man begynder på de avancerede ting, men det kan klare opgaven.

Jeg ved ikke lige hvad du bruger som kilde til vejledning, men jeg fandt følgende side ret så god, da den har packet flow diagrammer, hvilket hjælper en del til forståelsen.

http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables#Table_14-1_Processing_For_Packets_Routed_By_The_Firewall
Avatar billede mgjuhler Nybegynder
13. februar 2012 - 15:25 #10
Wally1973: smide min drop i en forward? jeg er efterhånden helt lost. Det skal lige siges at de ting jeg har stående er noget en ven har lavet til mig, han kunne dog ikke hjælpe mig videre med dette.

Kunne jeg få dig til at lave et konkret eksempel på hvor "DROP" og "PREROUTING" skal være?
Avatar billede Wally1973 Praktikant
13. februar 2012 - 23:45 #11
Du havde den sådan set før.

Når du skal lukke en NAT'ing, så gør følgende:
Fjern: /sbin/iptables -t nat -A PREROUTING -p udp --dport 1001 -j DNAT --to-destination 10.10.10.1
Opret: /sbin/iptables -A FORWARD -d 10.10.10.1 -p udp --dport 1001 -j REJECT

Jeg bruger REJECT i stedet for DROP, da REJECT sender en besked tilbage til afsender maskinen om at forbindelsen er tabt, hvor efter afsender maskinen lukker sin forbindelse og ved næste forsøg er det så en ny forbindelse, som NAT'ing vil fange og route rigtigt.
Avatar billede mgjuhler Nybegynder
14. februar 2012 - 06:41 #12
Skal jeg have "/sbin/iptables -P FORWARD ACCEPT" med i firewall filen? og er det korrekt at mine PREROUTING og REJECT kommer til sidst i firewall filen?
Avatar billede mgjuhler Nybegynder
14. februar 2012 - 10:13 #13
Hmm, den fjerner ikke reglen med reject og heller ikke med drop.
hvad gør jeg forkert?


[root@server sys]# /sbin/iptables -A FORWARD -d 10.10.10.1 -p udp --dport 1001 -j REJECT
[root@server sys]# /sbin/iptables -A FORWARD -d 10.10.10.1 -p tcp --dport 1001 -j REJECT
[root@server sys]# iptables -t nat -L | grep 1001
DNAT      udp  --  anywhere            anywhere            udp dpt:1001 to:10.10.10.1
DNAT      tcp  --  anywhere            anywhere            tcp dpt:1001 to:10.10.10.1
DNAT      udp  --  anywhere            anywhere            udp dpt:1001 to:10.10.10.2
DNAT      tcp  --  anywhere            anywhere            tcp dpt:1001 to:10.10.10.2
[root@server sys]#
Avatar billede mgjuhler Nybegynder
13. marts 2012 - 10:04 #14
Lukker spørgsmål, ingen af de overstående løsninger virker og jeg har endnu ikke fået løst problemet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester