Sada je: 05 kol 2020, 23:44.
Linux, poslužitelj, mreže i sigurnost

Moderator/ica: Moderatori/ce

@tech_soul8

Hvala na iscrpnom objasnjenju, no 3-way handshake poznajem. Odgovor prilazem dolje.

Problem je sto iptables connection tracking podsistem zapravo ne prati dosljedno "flow" TCP konekcije. Drugim rijecima, kada taj podsistem prepozna SYN flag, on to smatra NEW stateom, a kada vidi SYN/ACK odgovor, pretvara NEW u ESTABLISHED state.
When you're a kid and you wanna go "Weee !", but you ain't got drugs yet ... You hold out for your life, hold on to your little GONADS ... and STRIFE.
Avatar
Postovi: 910
Postovi: 910
Pridružen/a: 12 svi 2010, 07:57
Podijelio/la zahvalu: 0 puta
Primio/la zahvalu: 13 puta
OS: linux
Netko je napisao/la:Ja se ispricavam, iz nekog razloga sam zabrijo da iptables parse-a sve ruleove i da ono zadnje prevlada... Ocito mi "jump" nije dovoljno intuativno :facepalm . Jos jednom se ispricavam...


Ma nema problema, pa nemas se sta ispricavat, ja sam samo pojasnio zasto ti to nije dobro na taj nacin :))
drade je napisao/la:@tech_soul8

Hvala na iscrpnom objasnjenju, no 3-way handshake poznajem. Odgovor prilazem dolje.

Problem je sto iptables connection tracking podsistem zapravo ne prati dosljedno "flow" TCP konekcije. Drugim rijecima, kada taj podsistem prepozna SYN flag, on to smatra NEW stateom, a kada vidi SYN/ACK odgovor, pretvara NEW u ESTABLISHED state.


Pa upravo tako drade :) zato u OUTPUT lancu moramo imati NEW state prema portu 80 :)
Postovi: 177
Postovi: 177
Pridružen/a: 26 pro 2010, 16:12
Podijelio/la zahvalu: 3 puta
Primio/la zahvalu: 0 puta
OS: Debian
Samo da se nadovezem drade! Pazi krivo si malo rekao! Ti saljes SYN paket, server ti odgovara SYN/ACK paketom, taj paket dolazni sa remote servera se jos uvijek smatra NEW stanjem, tek nakon sto si ti odgovorio na taj SYN/ACK paket ACK paketom i uvecao seq broj za 1 tada iptables konekciju smatra uspostavljenom (ESTABLISHED).
Postovi: 177
Postovi: 177
Pridružen/a: 26 pro 2010, 16:12
Podijelio/la zahvalu: 3 puta
Primio/la zahvalu: 0 puta
OS: Debian
Jer to ti je i logicno! Nakon SYN/ACK odgovora na tvoj SYN paket veza jos uvijek nije uspostavljena jel tako? Ako ti ne odgovoris sa ACK paketom dali ce remote server na koji zelis pristupiti vezu smatrat uspostavljenom? Nece! Znaci 3-way handshake nije uspostavljen :)
Postovi: 177
Postovi: 177
Pridružen/a: 26 pro 2010, 16:12
Podijelio/la zahvalu: 3 puta
Primio/la zahvalu: 0 puta
OS: Debian
Cirkularna logika.

Dopustio si NEW prema portu 80 -> imas konekciju (NEW, ESTABLISHED).

Prvi rule u OUTPUT tablici ti je -j ACCEPT -- (ESTABLISHED, RELATED), dolazi do drugog rulea koji kaze timelimit je takav, no buduci da vec imas ESTABLISHED/RELATED konekciju, timestamp rule ti nikada ne dolazi do izrazaja.

Mozda sam u zabludi, po meni to bi trebalo ovako izgledati:
Kod: Označi sve
# Generated by iptables-save v1.4.8 on Mon Mar 19 16:36:46 2012
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:firewall-eth0-INPUT - [0:0]
-A INPUT -j firewall-eth0-INPUT
-A FORWARD -j firewall-eth0-INPUT
-A OUTPUT -p tcp -m state --state NEW -m time --timestart 16:36:00 --timestop 16:40:00 -m tcp --dport 80 -j DROP
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
-A OUTPUT -s 192.168.200.17/32 -d 192.168.200.30/32 -p tcp -m state --state NEW -m tcp --dport 23 -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A OUTPUT -p tcp -j LOG --log-prefix "fw-eth0-out-rejected"
-A OUTPUT -p udp -j LOG --log-prefix "fw-eth0-out-rejected"
-A OUTPUT -j DROP
-A firewall-eth0-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A firewall-eth0-INPUT -i lo -j ACCEPT
-A firewall-eth0-INPUT -p icmp -m icmp --icmp-type any -m limit --limit 3/sec -j ACCEPT
-A firewall-eth0-INPUT -j DROP
COMMIT
# Completed on Mon Mar 19 16:36:46 2012


Dodatno, zasto ne bi aplicirao za sve "connection tracking" stateove, a kako sam naveo u jednom od odgovora.
Kod: Označi sve
-A OUTPUT -p tcp --dport 80 -m state --state NEW, ESTABLISHED, RELATED -m time --timestart 16:36:00 --timestop 16:40:00 -j DROP


@tech_soul8

Da, iz TCP flow perspektive to tako funkcionira, iz perspektive netfilter connection tracking podsustava to funkcionira kako sam ti naveo ranije.

Navedeno mozes promatrati u /proc/net/ip_conntrack datoteci, ili dodatno procitati na netfilter stranicama. Kao sto sam rekao, netfilter conn tracking podsustav ne prati bas dosljedno TCP flow.

Prilazem .PDF od tvorca podsustava:
http://people.netfilter.org/pablo/docs/login.pdf

Izvadak:
The possible states defined for a connection are the following:

NEW: The connection is starting. This state is reached if the packet is
valid, that is, if it belongs to the valid sequence of initialization (e.g.,
in a TCP connection, a SYN packet is received), and if the firewall has
only seen traffic in one direction (i.e., the firewall has not yet seen any
reply packet).

ESTABLISHED:
The connection has been established. In other words,
this state is reached when the firewall has seen two-way communication.
Zadnja izmjena: drade; 19 ožu 2012, 20:56; ukupno mijenjano 1 put/a.
When you're a kid and you wanna go "Weee !", but you ain't got drugs yet ... You hold out for your life, hold on to your little GONADS ... and STRIFE.
Avatar
Postovi: 910
Postovi: 910
Pridružen/a: 12 svi 2010, 07:57
Podijelio/la zahvalu: 0 puta
Primio/la zahvalu: 13 puta
OS: linux
Nije istina! Gle ovako! Nema veze sto je meni prvo pravilo:

-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
kada mi se sva ostala pravila nalaze ispod njega razumijes?? Ja tebe razumijem sto ti zelis reci, ali to bi npr.vrijedilo u slucaju da je meni recimo host na kojem sam implementirao iptables firewall/gateway. I sada recimo ja dodam ovaj set pravila (moj, kako jesu) tim redosljedom, a vec na lokalnoj mrezi imam neki host koji ima uspostavljenu vezu sa nekim serverom. U tom slucaju vrijedit ce ova tvoja teorija, ali cim taj netko prekine konekciju, zatvori web browser ilii bilo sto drugo cekaju ga pravila koja se nalaze ispod

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

Znaci kako ce netko uspostaviti konekciju prem bilo kojem web serveru ako ja npr kazem ovako:

-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m state --state NEW -m tcp --dport -j DROP

Znaci na ovaj nacin pravilo broj jedan:

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

uopce nece moci doci do primjene jer sam zabranio bilo kakve nove konekcije pravilom broj dva prem nekom web serveru, a samim time konekcija mi ni nemoze uc u stanje RELATED, ESTABLISHED kako bi praivlo broj jedan vrijedilo. Dali razumijes sto ti zelim reci?
Postovi: 177
Postovi: 177
Pridružen/a: 26 pro 2010, 16:12
Podijelio/la zahvalu: 3 puta
Primio/la zahvalu: 0 puta
OS: Debian
NEW state se ne odnosi samo na SYN paket, nego na bilo kakav paket koji prvi dodje do netfilter connection tracking podsustava.

EDIT:
U pravu si da nece doci do inicijalizacije TCP connection toka.
When you're a kid and you wanna go "Weee !", but you ain't got drugs yet ... You hold out for your life, hold on to your little GONADS ... and STRIFE.
Avatar
Postovi: 910
Postovi: 910
Pridružen/a: 12 svi 2010, 07:57
Podijelio/la zahvalu: 0 puta
Primio/la zahvalu: 13 puta
OS: linux
Evo ovako! Nemoj se ljutit i nemoj mislit da se pravim pametan, ali samo ti zelim dokazat da si u krivu pa cu ti dat da napravis jedan test da se i sam uvjeris u to :)

Napravi sljedece:

Otvori web browser npr. firefox i odi na youtube.com ili neku drugu stranicu di ima za gledat neke filmove recimo. Pokreni neki film i pusti ga neka se vrti! (pazi da filmic bude barem 3,4 min dug da stignes napravit sve sto trebas). Nakon sto si pokrenuo film smanji prozorcic od web browsera (nemoj ga zatvarat, nego odi na minus) zatim otvori terminal i ukucaj sljedece:

iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m state --state NEW -m tcp --dport -j DROP

Nakon toga povecaj firefox prozorcic i otvori novi tab. U novom tabu odi na recimo google.hr ili bilo koju drugu web adresu. Sto ce se desiti? Pa desit ce se to da u novom tabu neces moci otovoriti niti jednu stranicu dok ce ti se u prvom tabu i dalje vrtit film bez problema. Zasto? Pa zato sto ti se film kaci na prvo pravilo:

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

a drugi tab ti se kaci na drugo pravilo i samim time nemoze uopce doc na red uopce da ga zahvati pravilo broj 1

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

Nakon sto zatvoris web browser neces vise moci otovoriti niti jednu web stranicu :)

Nadam se da ti je sada jasno o cemu se radi :)
Postovi: 177
Postovi: 177
Pridružen/a: 26 pro 2010, 16:12
Podijelio/la zahvalu: 3 puta
Primio/la zahvalu: 0 puta
OS: Debian
Ovaj prvi ruleset ima logike, i priznajem da radi (isprobao sam). Bio sam uvjerenja da ce se RELATED, ESTABLISHED aplicirati na sve subsekventne uspostave konekcija.

Trenutno isprobavam ovaj s timestampom, doduse na RHEL boxu radi bez problema (koristim tvoja inicijalna pravila).
When you're a kid and you wanna go "Weee !", but you ain't got drugs yet ... You hold out for your life, hold on to your little GONADS ... and STRIFE.
Avatar
Postovi: 910
Postovi: 910
Pridružen/a: 12 svi 2010, 07:57
Podijelio/la zahvalu: 0 puta
Primio/la zahvalu: 13 puta
OS: linux
[quote="drade"]Ovaj prvi ruleset ima logike, i priznajem da radi (isprobao sam). Bio sam uvjerenja da ce se RELATED, ESTABLISHED aplicirati na sve subsekventne uspostave konekcija.

Razumijem ja na sto ti mislis, zato sam ti isao dat ovaj primjer. Jer caka je u tome da bi se konekcija samtrala uspostavljenom treba proci handshake, a kako ce proci handshake ako si mu zabranio bilo kakve nove pakete? Logicno :)

E pa vidis to zaista ne razumijem zasto mi nece radit, a trebaloooo bi! Tip mi je linuxquestions.org isto potvrdio da sve radi bez problema, a meni nece li ga nece :( ne znam zasto!
Postovi: 177
Postovi: 177
Pridružen/a: 26 pro 2010, 16:12
Podijelio/la zahvalu: 3 puta
Primio/la zahvalu: 0 puta
OS: Debian

Na mreži
Trenutno korisnika/ca: / i 1 gost.