[Question] (Cần giúp đỡ) Băng thông vào server cao đột biến không rõ nguyên nhân. |
25/08/2011 16:43:39 (+0700) | #31 | 245850 |
vd_
Member
|
0 |
|
|
Joined: 06/03/2010 03:05:09
Messages: 124
Offline
|
|
Cảm ơn anh conmale.
Thiệt tình vẫn cảm thấy không ổn lắm vì các wwwect này sẽ phải tốn thêm 1 process (netcat chẳng hạn) để bỏ packet, như vậy thì packet vẫn đi từ card mạng đến user process, tức là pass qua toàn bộ các table và chain của iptable (?), trong khi với dòng drop thì packet được drop ngay từ lúc PREROUTING.
Mà thực tế (đã được chứng minh) nhiều khi lại khác với những gì mình nghĩ nên bữa nào quởn phải nghiên cứu thử vụ này. |
|
|
|
|
[Question] (Cần giúp đỡ) Băng thông vào server cao đột biến không rõ nguyên nhân. |
25/08/2011 17:12:50 (+0700) | #32 | 245852 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
vd_ wrote:
Cảm ơn anh conmale.
Thiệt tình vẫn cảm thấy không ổn lắm vì các wwwect này sẽ phải tốn thêm 1 process (netcat chẳng hạn) để bỏ packet, như vậy thì packet vẫn đi từ card mạng đến user process, tức là pass qua toàn bộ các table và chain của iptable (?), trong khi với dòng drop thì packet được drop ngay từ lúc PREROUTING.
Mà thực tế (đã được chứng minh) nhiều khi lại khác với những gì mình nghĩ nên bữa nào quởn phải nghiên cứu thử vụ này.
Đoạn màu đỏ không đúng. Packets khi hit PREROUTING chain, ở đây nó thuộc mangle table và được route thẳng đến port nào đó mà netcat đang listening. Nó không qua "trọn bộ các tables và chains của iptables". Netcat không spawn thêm cái gì hết mà nó chỉ nhận và đưa thẳng vô null. Nó cũng không thực hiện đúng quy trình 3 bước gì hết bởi vì trong trường hợp này, nó chỉ đơn thuần forward data thẳng vô null như mình đã ấn định. Cái này bồ chỉ cần put 1 cái sniffer trên port nào đó mà netcat tạo ra thì sẽ thấy. Riêng phần mangling thì không thể sniff được (bởi vì nó vẫn còn nằm trên kernel space). |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] (Cần giúp đỡ) Băng thông vào server cao đột biến không rõ nguyên nhân. |
25/08/2011 22:35:48 (+0700) | #33 | 245880 |
mapthulu
Member
|
0 |
|
|
Joined: 10/06/2011 12:16:42
Messages: 28
Offline
|
|
edge wrote:
Sau khi thêm dòng:
iptables -t mangle -I PREROUTING -p udp -j REDIRECT --to-ports 9
vào iptables, e gặp lỗi sau:
[7258252.635604] x_tables: ip_tables: REDIRECT target: only valid in nat table, not mangle
Trong khi đó trong "man iptables", table mangle có chain PREROUTING:
mangle:
This table is used for specialized packet alteration. Until kernel 2.4.17 it had two built-in chains: PREROUTING (for altering incoming packets before routing) and OUTPUT (for altering locally-generated packets before routing). Since kernel 2.4.18, three other built-in chains are also supported: INPUT (for packets coming into the box itself), FORWARD (for altering packets being routed through the box), and POSTROUTING (for altering packets as they are about to go out)
$iptables --version
iptables v1.4.10
$ uname -a
Linux ubuntu 2.6.38-8-generic-pae #42-Ubuntu SMP Mon Apr 11 05:17:09 UTC 2011 i686 i686 i386 GNU/Linux
Em không hiểu sao lại bị lỗi trên, mong anh xem giúp.
Ở đây, lỗi mà bạn gặp cũng giống mình, điều chắc chắn là phải biên dịch lại nhân của hệ thống để có tuỳ chọn cho việc REDIRECT khi dùng PREROUTING trong mangle |
|
|
|
|
[Question] (Cần giúp đỡ) Băng thông vào server cao đột biến không rõ nguyên nhân. |
09/11/2011 14:10:45 (+0700) | #34 | 249667 |
vd_
Member
|
0 |
|
|
Joined: 06/03/2010 03:05:09
Messages: 124
Offline
|
|
@conmale
Bữa nay mới thử setup để test thử việc send udp đến port 9 để xem coi nó có đi qua các chain hay không.
Hệ thống gồm:
- máy linux A 172.16.34.1 chạy debian sid
- máy windows B 172.16.34.222 chạy windows, có cài oscinato (traffic generator)
Rule iptables trên A:
# iptables -t nat -I PREROUTING -s 172.16.34.222 -p udp --dport 1999 -j REDIRECT --to-port 9
# iptables -A INPUT -s 172.16.34.222 -p udp --dport 9 -j ACCEPT
run netcat vào null
# netcat -l -u -p 9 > /dev/null &
Oscinato trên B:
port group là card mạng, create new stream với các thông số sau:
tab Protocol selection
frame length fixed (64), L1 = MAC, L2 = Ethernet II, L3 = IPv4, L4 = UDP, L5 = none, VLAN untagged
tab Protocol data:
Media Access Protocol -> đưa MAC của A vào phần source, và MAC của B vào phần dest
Ethernet II -> check vào ethernet type 08 00 (default - ip4)
UDP -> Override source port = 9999, Override dest port = 1999
Payload Data -> Fix word = 0 1 2 3
tab Stream control
Send = packet, Mode = Fixed, Number of packets = 100, After this stream = go to first (tức là sẽ loop ở đây), rate = 2 packet/s
Tổng kết cấu hình:
Máy B sẽ send 2 packet UDP/s từ port 9999 vào port 1999 của máy A, đồng thời ở Máy A có rule để match các UDP packet từ máy B gửi đến port UDP 1999 của máy A và wwwect từ port 1999 sang port 9 trong table nat của iptables. Đồng thời user process netcat listen trên udp port 9 và vứt bỏ packet.
Trong oscinato tiến hành gửi packet, mở console root bên máy A lên và type vào
# watch iptables -L -n -v
Ta sẽ thấy rule iptables của chúng ta nhập được match (số lượng packet tăng) ->nghĩa là rule wwwect ở table nat match và rule accept trong table filter được match. Kill netcat process thì rule trong table filter vẫn tăng match count.
Như vậy có thể kết luận là udp packet thực sự có traverse đến table filter cho đến khi match 1 rule, bất kể có service nào đăng ký listen hay không.
Theo suy nghĩ của tui là cũng hợp logic khi ở kernel, xử lý packet sẽ không quan tâm nhiều đến ý nghĩa quy ước của port number. Đằng nào thì kernel cũng xử lý xong packet mới handle sang user space process. Tuy nhiên cũng có thể có những optimization nào bên dưới để xử lý các trường hợp ngoại lệ như thực tế đã chứng minh.
|
|
|
|
|
[Question] (Cần giúp đỡ) Băng thông vào server cao đột biến không rõ nguyên nhân. |
10/11/2011 03:11:57 (+0700) | #35 | 249695 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
vd_ wrote:
@conmale
Bữa nay mới thử setup để test thử việc send udp đến port 9 để xem coi nó có đi qua các chain hay không.
Hệ thống gồm:
- máy linux A 172.16.34.1 chạy debian sid
- máy windows B 172.16.34.222 chạy windows, có cài oscinato (traffic generator)
Rule iptables trên A:
# iptables -t nat -I PREROUTING -s 172.16.34.222 -p udp --dport 1999 -j REDIRECT --to-port 9
# iptables -A INPUT -s 172.16.34.222 -p udp --dport 9 -j ACCEPT
run netcat vào null
# netcat -l -u -p 9 > /dev/null &
Oscinato trên B:
port group là card mạng, create new stream với các thông số sau:
tab Protocol selection
frame length fixed (64), L1 = MAC, L2 = Ethernet II, L3 = IPv4, L4 = UDP, L5 = none, VLAN untagged
tab Protocol data:
Media Access Protocol -> đưa MAC của A vào phần source, và MAC của B vào phần dest
Ethernet II -> check vào ethernet type 08 00 (default - ip4)
UDP -> Override source port = 9999, Override dest port = 1999
Payload Data -> Fix word = 0 1 2 3
tab Stream control
Send = packet, Mode = Fixed, Number of packets = 100, After this stream = go to first (tức là sẽ loop ở đây), rate = 2 packet/s
Tổng kết cấu hình:
Máy B sẽ send 2 packet UDP/s từ port 9999 vào port 1999 của máy A, đồng thời ở Máy A có rule để match các UDP packet từ máy B gửi đến port UDP 1999 của máy A và wwwect từ port 1999 sang port 9 trong table nat của iptables. Đồng thời user process netcat listen trên udp port 9 và vứt bỏ packet.
Trong oscinato tiến hành gửi packet, mở console root bên máy A lên và type vào
# watch iptables -L -n -v
Ta sẽ thấy rule iptables của chúng ta nhập được match (số lượng packet tăng) ->nghĩa là rule wwwect ở table nat match và rule accept trong table filter được match. Kill netcat process thì rule trong table filter vẫn tăng match count.
Như vậy có thể kết luận là udp packet thực sự có traverse đến table filter cho đến khi match 1 rule, bất kể có service nào đăng ký listen hay không.
Theo suy nghĩ của tui là cũng hợp logic khi ở kernel, xử lý packet sẽ không quan tâm nhiều đến ý nghĩa quy ước của port number. Đằng nào thì kernel cũng xử lý xong packet mới handle sang user space process. Tuy nhiên cũng có thể có những optimization nào bên dưới để xử lý các trường hợp ngoại lệ như thực tế đã chứng minh.
rd đưa ra một thử nghiệm rất lý thú. Nếu tham khảo bức hình này thì sẽ thấy lý do tại sao:
Trong trường hợp rules rd đưa ra, REDIRECT ở đây thuộc "local wwwection" (bởi vì sau khi packet được mangle, destination IP chính là IP của FW). Bởi thế, packet traverse filter table. Lý do rd thấy có số lượng count gia tăng là vì rd đã ấn định rule "iptables -A INPUT -s 172.16.34.222 -p udp --dport 9 -j ACCEPT" ở đây.
Nếu rd ấn định:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
và không có rule cho INPUT ở trên, thử xem kết quả của "watch iptables -L -n -v" là gì? . |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Question] (Cần giúp đỡ) Băng thông vào server cao đột biến không rõ nguyên nhân. |
10/11/2011 08:16:48 (+0700) | #36 | 249700 |
vd_
Member
|
0 |
|
|
Joined: 06/03/2010 03:05:09
Messages: 124
Offline
|
|
@conmale
Hiển nhiên khi default policy là drop và không có matching rule thì sẽ không có count.
Cũng chính vì suy nghĩ netfilter sử dụng các table như hình anh conmale đưa mà vd_ (không phải rd ) nghĩ vị trí thích hợp để -j DROP các bad IP là ở table raw, chain PREROUTING.
|
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|