[Question] Hỏi về iptables ? |
17/09/2006 23:54:25 (+0700) | #1 | 23957 |
vietwow
Member
|
0 |
|
|
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
|
|
Theo mình đọc trong tài liệu http://www.acsu.buffalo.edu/~dudek/linux/iptables/img8.html thì nó bảo table NAT gồm 3 chain là PREROUTING, POSTROUTING và OUTPUT còn theo 1 tài liệu trung tâm mình đang học thì nói là table NAT gồm 3 chain : DNAT, SNAT, MASQUERADE
Vậy cái nào là đúng nhỉ ? Ai bít thì giải thích giúp mình )
Cám ơn
Thân |
|
|
|
|
[Question] Hỏi về iptables ? |
18/09/2006 00:51:55 (+0700) | #2 | 23969 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
vietwow wrote:
Theo mình đọc trong tài liệu http://www.acsu.buffalo.edu/~dudek/linux/iptables/img8.html thì nó bảo table NAT gồm 3 chain là PREROUTING, POSTROUTING và OUTPUT còn theo tài liệu trung tâm mình đang học thì nói là table NAT gồm 3 chain : DNAT, SNAT, MASQUERADE
Vậy cái nào là đúng nhỉ ? Ai bít thì giải thích giúp mình )
Cám ơn
Thân
Đúng cho cái gì em?
Em thử tìm hiểu xem DNAT là cái gì, nó dùng cho cái gì? SNAT là cái gì, nó dùng cho cái gì? và MASQ là cái gì, nó dùng cho cái gì?
Thân mến. |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Re: Hỏi về iptables ? |
18/09/2006 04:22:42 (+0700) | #3 | 24013 |
vietwow
Member
|
0 |
|
|
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
|
|
SNAT, DNAT và Masquerade thì em bít rồi ạ. Khi có gói liệu với IP nguồn là 1 Private IP đến router, router sẽ đổi IP nguồn thành Public IP sau đó mới gởi ra ngoài. Quá trình này gọi là SNAT (Source-NAT, NAT nguồn). Ngược lại, khi có một gói từ liệu từ gởi từ ngoài vào với IP đích là Public IP, router sẽ căn cứ vào bảng NAT động hiện tại để đổi địa chỉ đích Public IP này thành địa chỉ đích mới là Private IP. Quá trình này gọi là DNAT. Còn Masquerade là khái niệm khi ta có duy nhất 1 Public IP mà lại có nhiều Private IP muốn ra ngoài thì ta phải dùng Masquerade, tất cả các máy nội bộ đều dùng chung 1 Public IP đó tuy nhiên trong bảng NAT động sẽ "gán" cho mỗi máy nội bộ này 1 port riêng tương ứng để khi quay về, router nhìn vào port này trong bảng NAT động này mà bít gói tin đó sẽ được đưa đến máy nào
Em chỉ thắc mắc là NAT nó nằm trong những chain nào ? (tức là sẽ khi xử lý ở những công đoạn nào). VD như đối với table FILTER thì sẽ nằm trong chain INPUT (công đoạn khi packet đi vào máy), FORWARD (công đoạn khi packet được chuyển tiếp) và OUTPUT (công đoạn khi packet đi ra khỏi máy)
Thân |
|
|
|
|
[Question] Re: Hỏi về iptables ? |
18/09/2006 04:36:42 (+0700) | #4 | 24020 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
vietwow wrote:
SNAT, DNAT và Masquerade thì em bít rồi ạ. Khi có gói liệu với IP nguồn là 1 Private IP đến router, router sẽ đổi IP nguồn thành Public IP sau đó mới gởi ra ngoài. Quá trình này gọi là SNAT (Source-NAT, NAT nguồn). Ngược lại, khi có một gói từ liệu từ gởi từ ngoài vào với IP đích là Public IP, router sẽ căn cứ vào bảng NAT động hiện tại để đổi địa chỉ đích Public IP này thành địa chỉ đích mới là Private IP. Quá trình này gọi là DNAT.
Em "bít" như thế là đúng rồi.
vietwow wrote:
Còn Masquerade là khái niệm khi ta có duy nhất 1 Public IP mà lại có nhiều Private IP muốn ra ngoài thì ta phải dùng Masquerade, tất cả các máy nội bộ đều dùng chung 1 Public IP đó tuy nhiên trong bảng NAT động sẽ "gán" cho mỗi máy nội bộ này 1 port riêng tương ứng để khi quay về, router nhìn vào port này trong bảng NAT động này mà bít gói tin đó sẽ được đưa đến máy nào
Cái này chưa đúng 100%. MASQUERADING giống như SNAT mà thôi và MASQUERADING thích hợp cho dynamic public IP.
vietwow wrote:
Em chỉ thắc mắc là NAT nó nằm trong những chain nào ? (tức là sẽ khi xử lý ở những công đoạn nào). VD như đối với table FILTER thì sẽ nằm trong chain INPUT (công đoạn khi packet đi vào máy), FORWARD (công đoạn khi packet được chuyển tiếp) và OUTPUT (công đoạn khi packet đi ra khỏi máy)
Thân
SNAT, MASQ --> POSTROUTING
DNAT --> PREROUTING
Lý do tại sao thì em đã đưa ra ở trên ).
Thân. |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Re: Hỏi về iptables ? |
18/09/2006 04:53:40 (+0700) | #5 | 24027 |
vietwow
Member
|
0 |
|
|
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
|
|
Thanx anh, em đã hiểu. Mà tại sao anh lại nói MAS phù hợp cho dynamic public IP nhỉ? em nghĩ nó phù hợp cho những ai có 1 Public IP mà lại có nhiều máy muốn "đi ra ngoài" chứ, sao lại liên quan đến việc dynamic hay ko dynamic nhỉ ? )
À, sẵn anh cho em hỏi thêm là khi xem State Table trong /proc/net/ip_conntrack, có các connection ở tình trạng ETABLISHED, nhưng em thắc mắc là 1 connection bắt đâu chuyển sang ESTABLISHED ngay sau khi client nhận được SYN/ACK (tức là sau bước thứ 2 trong quá trình bắt tay) hay là sau khi thực hiện đầu đủ 3 bước của quá trình bắt tay nhỉ ? |
|
|
|
|
[Question] Re: Hỏi về iptables ? |
18/09/2006 05:13:44 (+0700) | #6 | 24030 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
vietwow wrote:
Thanx anh, em đã hiểu. Mà tại sao anh lại nói MAS phù hợp cho dynamic public IP nhỉ? em nghĩ nó phù hợp cho những ai có 1 Public IP mà lại có nhiều máy muốn "đi ra ngoài" chứ, sao lại liên quan đến việc dynamic hay ko dynamic nhỉ ? )
MASQ là target đặc biệt của POSTROUTING. Đặc biệt ở chỗ, em không cần phải dùng IP cụ thể của network interface nào tiếp diện với Internet. Bởi thế:
Code:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
là đủ.
Trong khi đó, DNAT thì phải ấn định cụ thể IP:
Code:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4
Nếu IP của em bị thay đổi (dùng dynamic IP) từ 1.2.3.4 thành, 2.3.4.5 chẳng hạn thì chain ở trên trở nên vô dụng. Trong khi đó, chain ở trên nữa (cho MASQ) thì vẫn ok vì nó dùng bất cứ IP nào đang bind vào ppp0 interface.
vietwow wrote:
À, sãn anh cho em hỏi thêm là khi xem State Table trong /proc/net/ip_conntrack , có các connection ở tình trạng ETABLISHED, nhưng em thắc mắc là 1 connection bắt đâu chuyển sang ESTABLISHED ngay sau khi client nhận được SYN/ACK (tức là bước thứ 2 trong quá trình bắt tay) hay là sau khi thực hiện đầu đủ 3 bước của quá trình bắt tay nhỉ ?
Không. socket đó phải ở tình trạng ESTABLISHED thì netfilter connection state mới ghi nhận đúng như thế. Có thể nó xảy ra quá nhanh nên mắt người thường + động tác kiểm tra không kịp nên em nghĩ là nó vẫn còn đang ở bước SYN/ACK.
Thân mến. |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Re: Hỏi về iptables ? |
18/09/2006 05:28:15 (+0700) | #7 | 24034 |
vietwow
Member
|
0 |
|
|
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
|
|
Hihi, nếu anh ko ngại thì cho em hỏi 1 câu cuối luôn : Theo tài liệu em đọc thì "các connection sau khi ESTABLISHED thì nó sẽ được mark là ASSURED để ko bị xoá đi trong bảng connection tracking khi bảng connection tracking đạt đến giá trị lớn nhất và refresh lại". Cái này thì em hiểu, nhưng em ko hiểu câu sau của nó là : "1 TCP Connection có thể ở trạng thái ESTABLISHED nhưng ko được mark ASSURED. Trường hợp này xảy ra nếu ta dùng tcp-window-tracking patch và ip_conntrack_tcp_loose >=1"
Vậy tóm lại 1 connection khi nào thì được mark ASSURED và khi nào thì ko được mark ASSURED ? Và Iptables dựa vào đặc điểm nào của connection để quyết định có mark ASSURED cho connection đó hay ko ?
Hy vọng được anh giải đáp, hỏi nhiều wá nên em hơi ngại nhưng mấy cái này thực sự làm em thắc mắc trong quá trình học cũng như đọc tài liệu -)) |
|
|
|
|
[Question] Re: Hỏi về iptables ? |
18/09/2006 06:26:06 (+0700) | #8 | 24050 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] Re: Hỏi về iptables ? |
18/09/2006 06:37:49 (+0700) | #9 | 24053 |
vietwow
Member
|
0 |
|
|
Joined: 28/06/2006 13:15:47
Messages: 90
Offline
|
|
- Sau khi connection đã ESTABLISHED, không có gì bảo đảm là nó được ASSURED ngoại trừ:
a. Cho TCP: server (phía netfilter) phải nhận được gói ACK có giá trị từ đầu bên kia (đúng sequence, thuộc về ESTABLISHED connection).
ACK đúng seq number (phía server phải nhận) mà anh nói là ACK của packet đầu tiên sau quá trình bắt tay 3 bước (tức là packet thứ 4 trong 1 TCP stream) phải ko anh ?
Và nếu theo anh nói vậy thì tất cả các connection hợp lệ đều sẽ được mark ASSURED, còn các connection "bất thường" từ TCP Scan của nmap, hay SYN DoS ... thì sẽ ko được mark ASSURED đúng ko anh ? |
|
|
|
|
[Question] Re: Hỏi về iptables ? |
18/09/2006 17:43:18 (+0700) | #10 | 24135 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
vietwow wrote:
- Sau khi connection đã ESTABLISHED, không có gì bảo đảm là nó được ASSURED ngoại trừ:
a. Cho TCP: server (phía netfilter) phải nhận được gói ACK có giá trị từ đầu bên kia (đúng sequence, thuộc về ESTABLISHED connection).
ACK đúng seq number (phía server phải nhận) mà anh nói là ACK của packet đầu tiên sau quá trình bắt tay 3 bước (tức là packet thứ 4 trong 1 TCP stream) phải ko anh ?
Và nếu theo anh nói vậy thì tất cả các connection hợp lệ đều sẽ được mark ASSURED, còn các connection "bất thường" từ TCP Scan của nmap, hay SYN DoS ... thì sẽ ko được mark ASSURED đúng ko anh ?
Hì hì, tối hôm qua sau khi trả lời em xong, anh thử ngẫm nghĩ thì thấy có điểm không ổn, giở tài liệu ra xem lại cũng không thoả mãn, cho nên anh "test" thử luôn để xác thực vấn đề. Anh rất tiếc là điều anh nói về ESTALISHED trong bài trước không chính xác. Vậy để anh xác minh lại như sau:
1) connection state của netfilter không tương đương với tcp state (SYN_RECV, ESTABLISHED...). Client gởi SYN đến server, server trả lời SYN/ACK, ở bước này conntrack của netfilter đã xác định state của connection là ESTABLISHED. Tuy nhiên, tcp state trên socket vẫn chưa ở ESTABLISHED state cho đến khi server nhận được cú ACK từ client (trả lời cho cú SYN/ACK từ server).
2) khi client gởi cú SYN, connection state của netfilter ghi nhận state ở đây là NEW. Sau khi client gởi cú ACK (để trả lời cú SYN/ACK của server) thì conntrack của netfilter đã xác định state là "ASSURED" bởi vì nó nhận được cú ACK hợp lệ từ đúng client gởi cú SYN lúc đầu.
Nói tóm lại, trên bình diện conntrack của netfilter:
- cú SYN/ACK từ server đã hình thành ESTABLISHED state.
- cú ACK từ client hình thành ASSURED state.
Hy vọng giải thích trên rõ ràng hơn ).
Thân. |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
|