ื”ื“ืžื™ื™ืช ื‘ืขื™ื•ืช ืจืฉืช ื‘ืœื™ื ื•ืงืก

ืฉืœื•ื ืœื›ื•ืœื, ืฉืžื™ ืกืฉื”, ืื ื™ ืžื•ื‘ื™ืœ ื‘ื“ื™ืงื•ืช ืขื•ืจืคื™ื•ืช ื‘-FunCorp. ืื ื—ื ื•, ื›ืžื• ืจื‘ื™ื ืื—ืจื™ื, ื™ื™ืฉืžื ื• ืืจื›ื™ื˜ืงื˜ื•ืจื” ืžื•ื›ื•ื•ื ืช ืฉื™ืจื•ืช. ืžืฆื“ ืื—ื“, ื–ื” ืžืคืฉื˜ ืืช ื”ืขื‘ื•ื“ื”, ื›ื™... ืงืœ ื™ื•ืชืจ ืœื‘ื“ื•ืง ื›ืœ ืฉื™ืจื•ืช ื‘ื ืคืจื“, ืืš ืžืฆื“ ืฉื ื™, ื™ืฉ ืฆื•ืจืš ืœื‘ื“ื•ืง ืืช ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ื”ืฉื™ืจื•ืชื™ื ื–ื” ืขื ื–ื”, ื”ืžืชืจื—ืฉืช ืœืจื•ื‘ ื‘ืจืฉืช.

ื‘ืžืืžืจ ื–ื”, ืื“ื‘ืจ ืขืœ ืฉื ื™ ื›ืœื™ ืขื–ืจ ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ื›ื“ื™ ืœื‘ื“ื•ืง ืชืจื—ื™ืฉื™ื ื‘ืกื™ืกื™ื™ื ื”ืžืชืืจื™ื ืืช ืคืขื•ืœืช ื”ืืคืœื™ืงืฆื™ื” ื‘ื ื•ื›ื—ื•ืช ื‘ืขื™ื•ืช ืจืฉืช.

ื”ื“ืžื™ื™ืช ื‘ืขื™ื•ืช ืจืฉืช ื‘ืœื™ื ื•ืงืก

ื”ื“ืžื™ื™ืช ื‘ืขื™ื•ืช ืจืฉืช

ื‘ื“ืจืš ื›ืœืœ, ืชื•ื›ื ื” ื ื‘ื“ืงืช ืขืœ ืฉืจืชื™ ื‘ื“ื™ืงื” ืขื ื—ื™ื‘ื•ืจ ืื™ื ื˜ืจื ื˜ ื˜ื•ื‘. ื‘ืกื‘ื™ื‘ื•ืช ื™ื™ืฆื•ืจ ืงืฉื•ืช, ื™ื™ืชื›ืŸ ืฉื”ื“ื‘ืจื™ื ืœื ื™ื”ื™ื• ื›ืœ ื›ืš ื—ืœืงื™ื, ืื– ืœืคืขืžื™ื ืืชื” ืฆืจื™ืš ืœื‘ื“ื•ืง ืชื•ื›ื ื™ื•ืช ื‘ืชื ืื™ ื—ื™ื‘ื•ืจ ื’ืจื•ืขื™ื. ื‘-Linux, ื›ืœื™ ื”ืฉื™ืจื•ืช ื™ืขื–ื•ืจ ื‘ืžืฉื™ืžื” ืฉืœ ื”ื“ืžื™ื™ืช ืชื ืื™ื ื›ืืœื” tc.

tc(ืจืืฉื™ ืชื™ื‘ื•ืช ืžื‘ืงืจืช ืชื ื•ืขื”) ืžืืคืฉืจ ืœืš ืœื”ื’ื“ื™ืจ ืืช ื”ืฉื™ื“ื•ืจ ืฉืœ ืžื ื•ืช ืจืฉืช ื‘ืžืขืจื›ืช. ืœื›ืœื™ ื”ืฉื™ืจื•ืช ื”ื–ื” ื™ืฉ ื™ื›ื•ืœื•ืช ื ื”ื“ืจื•ืช, ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืขืœื™ื”ื ืขื•ื“ ื›ืืŸ. ื›ืืŸ ืืชื™ื™ื—ืก ืจืง ืœื›ืžื” ืžื”ื: ืื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ืชื–ืžื•ืŸ ืชื ื•ืขื”, ืฉืขื‘ื•ืจื• ืื ื• ืžืฉืชืžืฉื™ื qdisc, ื•ืžื›ื™ื•ื•ืŸ ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื—ืงื•ืช ืจืฉืช ืœื ื™ืฆื™ื‘ื”, ื ืฉืชืžืฉ ื‘-qdisc ืœืœื classless ื ื˜ื.

ื‘ื•ืื• ื ืคืขื™ืœ ืฉืจืช ื”ื“ ื‘ืฉืจืช (ื”ืฉืชืžืฉืชื™ nmap-ncat):

ncat -l 127.0.0.1 12345 -k -c 'xargs -n1 -i echo "Response: {}"'

ืขืœ ืžื ืช ืœื”ืฆื™ื’ ื‘ืคื™ืจื•ื˜ ืืช ื›ืœ ื—ื•ืชืžื•ืช ื”ื–ืžืŸ ื‘ื›ืœ ืฉืœื‘ ืฉืœ ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ื”ืœืงื•ื— ืœืฉืจืช, ื›ืชื‘ืชื™ ืกืงืจื™ืคื˜ Python ืคืฉื•ื˜ ืฉืฉื•ืœื— ื‘ืงืฉื” ืžึดื‘ึฐื—ึธืŸ ืœืฉืจืช ื”ื”ื“ ืฉืœื ื•.

ืงื•ื“ ืžืงื•ืจ ื”ืœืงื•ื—

#!/bin/python

import socket
import time

HOST = '127.0.0.1'
PORT = 12345
BUFFER_SIZE = 1024
MESSAGE = "Testn"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
t1 = time.time()
print "[time before connection: %.5f]" % t1
s.connect((HOST, PORT))
print "[time after connection, before sending: %.5f]" % time.time()
s.send(MESSAGE)
print "[time after sending, before receiving: %.5f]" % time.time()
data = s.recv(BUFFER_SIZE)
print "[time after receiving, before closing: %.5f]" % time.time()
s.close()
t2 = time.time()
print "[time after closing: %.5f]" % t2
print "[total duration: %.5f]" % (t2 - t1)

print data

ื‘ื•ืื• ื ืฉื™ืง ืื•ืชื• ื•ื ืกืชื›ืœ ืขืœ ื”ืชืขื‘ื•ืจื” ื‘ืžืžืฉืง lo ื•ื™ืฆื™ืื” 12345:

[user@host ~]# python client.py
[time before connection: 1578652979.44837]
[time after connection, before sending: 1578652979.44889]
[time after sending, before receiving: 1578652979.44894]
[time after receiving, before closing: 1578652979.45922]
[time after closing: 1578652979.45928]
[total duration: 0.01091]
Response: Test

ืžื–ื‘ืœื” ืฉืœ ืชื ื•ืขื”

[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:42:59.448601 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [S], seq 3383332866, win 43690, options [mss 65495,sackOK,TS val 606325685 ecr 0,nop,wscale 7], length 0
10:42:59.448612 IP 127.0.0.1.12345 > 127.0.0.1.54054: Flags [S.], seq 2584700178, ack 3383332867, win 43690, options [mss 65495,sackOK,TS val 606325685 ecr 606325685,nop,wscale 7], length 0
10:42:59.448622 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 606325685 ecr 606325685], length 0
10:42:59.448923 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 606325685 ecr 606325685], length 5
10:42:59.448930 IP 127.0.0.1.12345 > 127.0.0.1.54054: Flags [.], ack 6, win 342, options [nop,nop,TS val 606325685 ecr 606325685], length 0
10:42:59.459118 IP 127.0.0.1.12345 > 127.0.0.1.54054: Flags [P.], seq 1:15, ack 6, win 342, options [nop,nop,TS val 606325696 ecr 606325685], length 14
10:42:59.459213 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [.], ack 15, win 342, options [nop,nop,TS val 606325696 ecr 606325696], length 0
10:42:59.459268 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [F.], seq 6, ack 15, win 342, options [nop,nop,TS val 606325696 ecr 606325696], length 0
10:42:59.460184 IP 127.0.0.1.12345 > 127.0.0.1.54054: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 606325697 ecr 606325696], length 0
10:42:59.460196 IP 127.0.0.1.54054 > 127.0.0.1.12345: Flags [.], ack 16, win 342, options [nop,nop,TS val 606325697 ecr 606325697], length 0

ื”ื›ืœ ืกื˜ื ื“ืจื˜ื™: ืœื—ื™ืฆืช ื™ื“ ืชืœืช ื›ื™ื•ื•ื ื™ืช, PSH/ACK ื•-ACK ื‘ืชื’ื•ื‘ื” ืคืขืžื™ื™ื - ื–ื•ื”ื™ ื—ื™ืœื•ืคื™ ื”ื‘ืงืฉื” ื•ื”ืชื’ื•ื‘ื” ื‘ื™ืŸ ื”ืœืงื•ื— ืœืฉืจืช, ื•-FIN/ACK ื•-ACK ืคืขืžื™ื™ื - ื”ืฉืœืžืช ื”ื—ื™ื‘ื•ืจ.

ืขื™ื›ื•ื‘ ืžื ื•ืช

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื’ื“ื™ืจ ืืช ื”ื”ืฉื”ื™ื” ืœ-500 ืžื™ืœื™ืฉื ื™ื•ืช:

tc qdisc add dev lo root netem delay 500ms

ืื ื• ืžืคืขื™ืœื™ื ืืช ื”ืœืงื•ื— ื•ืจื•ืื™ื ืฉื”ืกืงืจื™ืคื˜ ืคื•ืขืœ ื›ืขืช ืœืžืฉืš 2 ืฉื ื™ื•ืช:

[user@host ~]# ./client.py
[time before connection: 1578662612.71044]
[time after connection, before sending: 1578662613.71059]
[time after sending, before receiving: 1578662613.71065]
[time after receiving, before closing: 1578662614.72011]
[time after closing: 1578662614.72019]
[total duration: 2.00974]
Response: Test

ืžื” ื™ืฉ ื‘ืชื ื•ืขื”? ื‘ื•ืื• ื ืจืื”:

ืžื–ื‘ืœื” ืฉืœ ืชื ื•ืขื”

13:23:33.210520 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [S], seq 1720950927, win 43690, options [mss 65495,sackOK,TS val 615958947 ecr 0,nop,wscale 7], length 0
13:23:33.710554 IP 127.0.0.1.12345 > 127.0.0.1.58694: Flags [S.], seq 1801168125, ack 1720950928, win 43690, options [mss 65495,sackOK,TS val 615959447 ecr 615958947,nop,wscale 7], length 0
13:23:34.210590 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 615959947 ecr 615959447], length 0
13:23:34.210657 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 615959947 ecr 615959447], length 5
13:23:34.710680 IP 127.0.0.1.12345 > 127.0.0.1.58694: Flags [.], ack 6, win 342, options [nop,nop,TS val 615960447 ecr 615959947], length 0
13:23:34.719371 IP 127.0.0.1.12345 > 127.0.0.1.58694: Flags [P.], seq 1:15, ack 6, win 342, options [nop,nop,TS val 615960456 ecr 615959947], length 14
13:23:35.220106 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [.], ack 15, win 342, options [nop,nop,TS val 615960957 ecr 615960456], length 0
13:23:35.220188 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [F.], seq 6, ack 15, win 342, options [nop,nop,TS val 615960957 ecr 615960456], length 0
13:23:35.720994 IP 127.0.0.1.12345 > 127.0.0.1.58694: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 615961457 ecr 615960957], length 0
13:23:36.221025 IP 127.0.0.1.58694 > 127.0.0.1.12345: Flags [.], ack 16, win 342, options [nop,nop,TS val 615961957 ecr 615961457], length 0

ื ื™ืชืŸ ืœืจืื•ืช ืฉื”ืคื™ื’ื•ืจ ื”ืฆืคื•ื™ ืฉืœ ื—ืฆื™ ืฉื ื™ื™ื” ื”ื•ืคื™ืข ื‘ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ื”ืœืงื•ื— ืœืฉืจืช. ื”ืžืขืจื›ืช ืžืชื ื”ื’ืช ื‘ืฆื•ืจื” ื”ืจื‘ื” ื™ื•ืชืจ ืžืขื ื™ื™ื ืช ืื ื”ืคื™ื’ื•ืจ ื’ื“ื•ืœ ื™ื•ืชืจ: ื”ืงืจื ืœ ืžืชื—ื™ืœ ืœืฉืœื•ื— ืžื—ื“ืฉ ื›ืžื” ืžื ื•ืช TCP. ื‘ื•ืื• ื ืฉื ื” ืืช ื”ื”ืฉื”ื™ื” ืœืฉื ื™ื™ื” ืื—ืช ื•ื ืกืชื›ืœ ืขืœ ื”ืชืขื‘ื•ืจื” (ืื ื™ ืœื ืืจืื” ืืช ื”ืคืœื˜ ืฉืœ ื”ืœืงื•ื—, ื™ืฉ ืืช ื”-1 ืฉื ื™ื•ืช ื”ืฆืคื•ื™ื•ืช ืœื›ืœ ืžืฉืš ื”ื–ืžืŸ ื”ื›ื•ืœืœ):

tc qdisc change dev lo root netem delay 1s

ืžื–ื‘ืœื” ืฉืœ ืชื ื•ืขื”

13:29:07.709981 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [S], seq 283338334, win 43690, options [mss 65495,sackOK,TS val 616292946 ecr 0,nop,wscale 7], length 0
13:29:08.710018 IP 127.0.0.1.12345 > 127.0.0.1.39306: Flags [S.], seq 3514208179, ack 283338335, win 43690, options [mss 65495,sackOK,TS val 616293946 ecr 616292946,nop,wscale 7], length 0
13:29:08.711094 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [S], seq 283338334, win 43690, options [mss 65495,sackOK,TS val 616293948 ecr 0,nop,wscale 7], length 0
13:29:09.710048 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 616294946 ecr 616293946], length 0
13:29:09.710152 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 616294947 ecr 616293946], length 5
13:29:09.711120 IP 127.0.0.1.12345 > 127.0.0.1.39306: Flags [S.], seq 3514208179, ack 283338335, win 43690, options [mss 65495,sackOK,TS val 616294948 ecr 616292946,nop,wscale 7], length 0
13:29:10.710173 IP 127.0.0.1.12345 > 127.0.0.1.39306: Flags [.], ack 6, win 342, options [nop,nop,TS val 616295947 ecr 616294947], length 0
13:29:10.711140 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 616295948 ecr 616293946], length 0
13:29:10.714782 IP 127.0.0.1.12345 > 127.0.0.1.39306: Flags [P.], seq 1:15, ack 6, win 342, options [nop,nop,TS val 616295951 ecr 616294947], length 14
13:29:11.714819 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [.], ack 15, win 342, options [nop,nop,TS val 616296951 ecr 616295951], length 0
13:29:11.714893 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [F.], seq 6, ack 15, win 342, options [nop,nop,TS val 616296951 ecr 616295951], length 0
13:29:12.715562 IP 127.0.0.1.12345 > 127.0.0.1.39306: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 616297952 ecr 616296951], length 0
13:29:13.715596 IP 127.0.0.1.39306 > 127.0.0.1.12345: Flags [.], ack 16, win 342, options [nop,nop,TS val 616298952 ecr 616297952], length 0

ื ื™ืชืŸ ืœืจืื•ืช ืฉื”ืœืงื•ื— ืฉืœื— ื—ื‘ื™ืœืช SYN ืคืขืžื™ื™ื, ื•ื”ืฉืจืช ืฉืœื— SYN/ACK ืคืขืžื™ื™ื.

ื‘ื ื•ืกืฃ ืœืขืจืš ืงื‘ื•ืข, ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืืช ื”ื”ืฉื”ื™ื” ืœืกื˜ื™ื™ื”, ืคื•ื ืงืฆื™ื™ืช ื”ืคืฆื” ื•ืžืชืื (ืขื ื”ืขืจืš ืฉืœ ื”ื—ื‘ื™ืœื” ื”ืงื•ื“ืžืช). ื–ื” ื ืขืฉื” ื‘ืื•ืคืŸ ื”ื‘ื:

tc qdisc change dev lo root netem delay 500ms 400ms 50 distribution normal

ื›ืืŸ ืงื‘ืขื ื• ืืช ื”ื”ืฉื”ื™ื” ื‘ื™ืŸ 100 ืœ-900 ืžื™ืœื™ืฉื ื™ื•ืช, ื”ืขืจื›ื™ื ื™ื™ื‘ื—ืจื• ืœืคื™ ื”ืชืคืœื’ื•ืช ื ื•ืจืžืœื™ืช ื•ืชื”ื™ื” ืžืชืื ืฉืœ 50% ืขื ืขืจืš ื”ื”ืฉื”ื™ื” ืฉืœ ื”ื—ื‘ื™ืœื” ื”ืงื•ื“ืžืช.

ืื•ืœื™ ืฉืžืชื ืœื‘ ืœื–ื” ื‘ืคืงื•ื“ื” ื”ืจืืฉื•ื ื” ืฉื”ืฉืชืžืฉืชื™ ื‘ื” ืœื”ื•ืกื™ืฃื•ืื– ืฉื™ื ื•ื™. ื”ืžืฉืžืขื•ืช ืฉืœ ื”ืคืงื•ื“ื•ืช ื”ืœืœื• ื‘ืจื•ืจื”, ืื– ืื ื™ ืจืง ืื•ืกื™ืฃ ืฉื™ืฉ ืขื•ื“ ื“ืœ, ืฉื‘ื• ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœื”ืกื™ืจ ืืช ื”ืชืฆื•ืจื”.

ืื•ื‘ื“ืŸ ืžื ื•ืช

ื›ืขืช ื ื ืกื” ืœื‘ืฆืข ืื•ื‘ื“ืŸ ืžื ื•ืช. ื›ืคื™ ืฉื ื™ืชืŸ ืœืจืื•ืช ืžื”ืชื™ืขื•ื“, ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื‘ืฉืœื•ืฉ ื“ืจื›ื™ื: ืื™ื‘ื•ื“ ืžื ื•ืช ื‘ืื•ืคืŸ ืืงืจืื™ ื‘ื”ืกืชื‘ืจื•ืช ืžืกื•ื™ืžืช, ืฉื™ืžื•ืฉ ื‘ืฉืจืฉืจืช ืžืจืงื•ื‘ ืฉืœ 2, 3 ืื• 4 ืžืฆื‘ื™ื ืœื—ื™ืฉื•ื‘ ืื•ื‘ื“ืŸ ืžื ื•ืช, ืื• ืฉื™ืžื•ืฉ ื‘ืžื•ื“ืœ ืืœื™ื•ื˜-ื’ื™ืœื‘ืจื˜. ื‘ืžืืžืจ ืืฉืงื•ืœ ืืช ื”ืฉื™ื˜ื” ื”ืจืืฉื•ื ื” (ื”ืคืฉื•ื˜ื” ื•ื”ื‘ืจื•ืจื” ื‘ื™ื•ืชืจ), ื•ืชื•ื›ืœื• ืœืงืจื•ื ืขืœ ืื—ืจื•ืช ื›ืืŸ.

ื‘ื•ื ื ืขืฉื” ืื•ื‘ื“ืŸ ืฉืœ 50% ืžื”ืžื ื•ืช ืขื ืžืชืื ืฉืœ 25%:

tc qdisc add dev lo root netem loss 50% 25%

ืœืžืจื‘ื” ื”ืฆืขืจ, tcpdump ืœื ื™ื•ื›ืœ ืœื”ืจืื•ืช ืœื ื• ื‘ื‘ื™ืจื•ืจ ืืช ืื•ื‘ื“ืŸ ื”ื—ื‘ื™ืœื•ืช, ืื ื—ื ื• ืจืง ื ื ื™ื— ืฉื–ื” ื‘ืืžืช ืขื•ื‘ื“. ื•ื–ืžืŸ ื”ืจื™ืฆื” ื”ืžื•ื’ื“ืœ ื•ื”ืœื ื™ืฆื™ื‘ ืฉืœ ื”ืกืงืจื™ืคื˜ ื™ืขื–ื•ืจ ืœื ื• ืœืืžืช ื–ืืช. client.py (ื ื™ืชืŸ ืœื”ืฉืœื™ื ื‘ืื•ืคืŸ ืžื™ื™ื“ื™, ืื• ืื•ืœื™ ืชื•ืš 20 ืฉื ื™ื•ืช), ื›ืžื• ื’ื ืžืกืคืจ ืžื•ื’ื‘ืจ ืฉืœ ืžื ื•ืช ืžืฉื•ื“ืจื•ืช ืžื—ื“ืฉ:

[user@host ~]# netstat -s | grep retransmited; sleep 10; netstat -s | grep retransmited
    17147 segments retransmited
    17185 segments retransmited

ื”ื•ืกืคืช ืจืขืฉ ืœื—ื‘ื™ืœื•ืช

ื‘ื ื•ืกืฃ ืœืื•ื‘ื“ืŸ ืžื ื•ืช, ืืชื” ื™ื›ื•ืœ ืœื“ืžื•ืช ื ื–ืง ืœืžื ื•ืช: ืจืขืฉ ื™ื•ืคื™ืข ื‘ืžื™ืงื•ื ืžื ื•ืช ืืงืจืื™. ื‘ื•ืื• ื ืขืฉื” ื ื–ืง ืœืžื ื•ืช ืขื ื”ืกืชื‘ืจื•ืช ืฉืœ 50% ื•ืœืœื ืงื•ืจืœืฆื™ื”:

tc qdisc change dev lo root netem corrupt 50%

ืื ื—ื ื• ืžืจื™ืฆื™ื ืืช ืกืงืจื™ืคื˜ ื”ืœืงื•ื— (ืฉื•ื ื“ื‘ืจ ืžืขื ื™ื™ืŸ ืฉื, ืื‘ืœ ื–ื” ืœืงื— 2 ืฉื ื™ื•ืช ืœื”ืฉืœื™ื), ืชืกืชื›ืœ ืขืœ ื”ืชืขื‘ื•ืจื”:

ืžื–ื‘ืœื” ืฉืœ ืชื ื•ืขื”

[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:20:54.812434 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [S], seq 2023663770, win 43690, options [mss 65495,sackOK,TS val 1037001049 ecr 0,nop,wscale 7], length 0
10:20:54.812449 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [S.], seq 2104268044, ack 2023663771, win 43690, options [mss 65495,sackOK,TS val 1037001049 ecr 1037001049,nop,wscale 7], length 0
10:20:54.812458 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 1037001049 ecr 1037001049], length 0
10:20:54.812509 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1037001049 ecr 1037001049], length 5
10:20:55.013093 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1037001250 ecr 1037001049], length 5
10:20:55.013122 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [.], ack 6, win 342, options [nop,nop,TS val 1037001250 ecr 1037001250], length 0
10:20:55.014681 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [P.], seq 1:15, ack 6, win 342, options [nop,nop,TS val 1037001251 ecr 1037001250], length 14
10:20:55.014745 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 15, win 340, options [nop,nop,TS val 1037001251 ecr 1037001251], length 0
10:20:55.014823 IP 127.0.0.1.43666 > 127.0.0.5.12345: Flags [F.], seq 2023663776, ack 2104268059, win 342, options [nop,nop,TS val 1037001251 ecr 1037001251], length 0
10:20:55.214088 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [P.], seq 1:15, ack 6, win 342, options [nop,unknown-65 0x0a3dcf62eb3d,[bad opt]>
10:20:55.416087 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [F.], seq 6, ack 15, win 342, options [nop,nop,TS val 1037001653 ecr 1037001251], length 0
10:20:55.416804 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 1037001653 ecr 1037001653], length 0
10:20:55.416818 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 16, win 343, options [nop,nop,TS val 1037001653 ecr 1037001653], length 0
10:20:56.147086 IP 127.0.0.1.12345 > 127.0.0.1.43666: Flags [F.], seq 15, ack 7, win 342, options [nop,nop,TS val 1037002384 ecr 1037001653], length 0
10:20:56.147101 IP 127.0.0.1.43666 > 127.0.0.1.12345: Flags [.], ack 16, win 342, options [nop,nop,TS val 1037002384 ecr 1037001653], length 0

ื ื™ืชืŸ ืœืจืื•ืช ืฉื—ืœืง ืžื”ืžื ื•ืช ื ืฉืœื—ื• ืฉื•ื‘ ื•ืฉื•ื‘ ื•ื™ืฉ ื—ื‘ื™ืœื” ืื—ืช ืขื ืžื˜ื ื ืชื•ื ื™ื ืฉื‘ื•ืจื™ื: ืืคืฉืจื•ื™ื•ืช [nop,unknown-65 0x0a3dcf62eb3d,[bad opt]>. ืื‘ืœ ื”ืขื™ืงืจ ืฉื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื”ื›ืœ ืขื‘ื“ ื›ืžื• ืฉืฆืจื™ืš - TCP ื”ืชืžื•ื“ื“ื” ืขื ื”ืžืฉื™ืžื” ืฉืœื”.

ืฉื›ืคื•ืœ ืžื ื•ืช

ืขื ืžื” ืขื•ื“ ืืคืฉืจ ืœืขืฉื•ืช ื ื˜ื? ืœื“ื•ื’ืžื”, ื”ื“ืžื™ื™ืช ืžืฆื‘ ื”ืคื•ืš ืฉืœ ืื•ื‘ื“ืŸ ืžื ื•ืช - ืฉื›ืคื•ืœ ืžื ื•ืช. ืคืงื•ื“ื” ื–ื• ืœื•ืงื—ืช ื’ื 2 ืืจื’ื•ืžื ื˜ื™ื: ื”ืกืชื‘ืจื•ืช ื•ืžืชืื.

tc qdisc change dev lo root netem duplicate 50% 25%

ืฉื™ื ื•ื™ ืกื“ืจ ื”ื—ื‘ื™ืœื•ืช

ืืคืฉืจ ืœืขืจื‘ื‘ ืืช ื”ืฉืงื™ื•ืช ื‘ืฉืชื™ ื“ืจื›ื™ื.

ื‘ืจืืฉื•ืŸ, ื—ืœืง ืžื”ืžื ื•ืช ื ืฉืœื—ื•ืช ืžื™ื“, ื”ืฉืืจ ื‘ืื™ื—ื•ืจ ืžื•ื’ื“ืจ. ื“ื•ื’ืžื” ืžื”ืชื™ืขื•ื“:

tc qdisc change dev lo root netem delay 10ms reorder 25% 50%

ื‘ื”ืกืชื‘ืจื•ืช ืฉืœ 25% (ื•ืžืชืื ืฉืœ 50%) ื”ื—ื‘ื™ืœื” ืชื™ืฉืœื— ืžื™ื“, ื”ืฉืืจ ื™ื™ืฉืœื—ื• ื‘ืื™ื—ื•ืจ ืฉืœ 10 ืžื™ืœื™ืฉื ื™ื•ืช.

ื”ืฉื™ื˜ื” ื”ืฉื ื™ื™ื” ื”ื™ื ื›ืืฉืจ ื›ืœ ื—ื‘ื™ืœื” N ื ืฉืœื—ืช ื‘ืื•ืคืŸ ืžื™ื™ื“ื™ ื‘ื”ืกืชื‘ืจื•ืช (ื•ืžืชืื) ื ืชื•ื ื”, ื•ื”ืฉืืจ ื‘ื”ืฉื”ื™ื” ื ืชื•ื ื”. ื“ื•ื’ืžื” ืžื”ืชื™ืขื•ื“:

tc qdisc change dev lo root netem delay 10ms reorder 25% 50% gap 5

ืœื›ืœ ื—ื‘ื™ืœื” ื—ืžื™ืฉื™ืช ื™ืฉ ืกื™ื›ื•ื™ ืฉืœ 25% ืœื”ื™ืฉืœื— ืœืœื ื“ื™ื—ื•ื™.

ืฉื™ื ื•ื™ ืจื•ื—ื‘ ืคืก

ื‘ื“ืจืš ื›ืœืœ ื‘ื›ืœ ืžืงื•ื ืืœื™ื• ื”ื ืžืชื™ื™ื—ืกื™ื TBF, ืื‘ืœ ื‘ืขื–ืจืช ื”ืขื–ืจื” ื ื˜ื ืืชื” ื™ื›ื•ืœ ื’ื ืœืฉื ื•ืช ืืช ืจื•ื—ื‘ ื”ืคืก ืฉืœ ื”ืžืžืฉืง:

tc qdisc change dev lo root netem rate 56kbit

ื”ืฆื•ื•ืช ื”ื–ื” ื™ืขืฉื” ื˜ืจืงื™ื ืžืกื‘ื™ื‘ localhost ื›ื•ืื‘ ื›ืžื• ื’ืœื™ืฉื” ื‘ืื™ื ื˜ืจื ื˜ ื‘ืืžืฆืขื•ืช ืžื•ื“ื ื‘ื—ื™ื•ื’. ื‘ื ื•ืกืฃ ืœื”ื’ื“ืจืช ืงืฆื‘ ื”ืกื™ื‘ื™ื•ืช, ื ื™ืชืŸ ื’ื ืœื—ืงื•ืช ืืช ืžื•ื“ืœ ืคืจื•ื˜ื•ืงื•ืœ ืฉื›ื‘ืช ื”ืงื™ืฉื•ืจ: ื”ื’ื“ืจ ืืช ื”ืชืงื•ืจื” ืขื‘ื•ืจ ื”ื—ื‘ื™ืœื”, ืืช ื’ื•ื“ืœ ื”ืชื ื•ืืช ื”ืชืงื•ืจื” ืขื‘ื•ืจ ื”ืชื. ืœื“ื•ื’ืžื”, ื ื™ืชืŸ ืœื“ืžื•ืช ื–ืืช ื›ึผึทืกืคึผื•ึนืžึธื˜ ื•ืงืฆื‘ ืกื™ื‘ื™ื•ืช 56 kbit/sek:

tc qdisc change dev lo root netem rate 56kbit 0 48 5

ื”ื“ืžื™ื™ืช ืคืกืง ื–ืžืŸ ืœื—ื™ื‘ื•ืจ

ื ืงื•ื“ื” ื—ืฉื•ื‘ื” ื ื•ืกืคืช ื‘ืชื•ื›ื ื™ืช ื”ื‘ื“ื™ืงื” ื‘ืขืช ืงื‘ืœืช ืชื•ื›ื ื” ื”ื™ื ืคืกืงื™ ื–ืžืŸ. ื–ื” ื—ืฉื•ื‘ ืžื›ื™ื•ื•ืŸ ืฉื‘ืžืขืจื›ื•ืช ืžื‘ื•ื–ืจื•ืช, ื›ืืฉืจ ืื—ื“ ื”ืฉื™ืจื•ืชื™ื ืžื•ืฉื‘ืช, ื”ืื—ืจื™ื ื—ื™ื™ื‘ื™ื ืœื™ืคื•ืœ ื‘ื–ืžืŸ ืœืื—ืจื™ื ืื• ืœื”ื—ื–ื™ืจ ืฉื’ื™ืื” ืœืœืงื•ื—, ื•ื‘ืฉื•ื ืžืงืจื” ืืกื•ืจ ืœื”ื ืคืฉื•ื˜ ืœื”ื™ืชืงืข, ืœื”ืžืชื™ืŸ ืœืชื’ื•ื‘ื” ืื• ืœื—ื™ื‘ื•ืจ ืœื”ืงื™ื.

ื™ืฉื ืŸ ืžืกืคืจ ื“ืจื›ื™ื ืœืขืฉื•ืช ื–ืืช: ืœืžืฉืœ, ืœื”ืฉืชืžืฉ ื‘-mock ืฉืœื ืžื’ื™ื‘, ืื• ืœื”ืชื—ื‘ืจ ืœืชื”ืœื™ืš ื‘ืืžืฆืขื•ืช debugger, ืœืฉื™ื ื ืงื•ื“ืช ืขืฆื™ืจื” ื‘ืžืงื•ื ื”ื ื›ื•ืŸ ื•ืœืขืฆื•ืจ ืืช ื”ืชื”ืœื™ืš (ื–ื• ื›ื ืจืื” ื”ื“ืจืš ื”ืžืขื•ื•ืชืช ื‘ื™ื•ืชืจ). ืื‘ืœ ืื—ื“ ื”ื‘ืจื•ืจื™ื ื‘ื™ื•ืชืจ ื”ื•ื ื™ืฆื™ืื•ืช ื—ื•ืžืช ืืฉ ืื• ืžืืจื—ื™ื. ื–ื” ื™ืขื–ื•ืจ ืœื ื• ื‘ื–ื” iptables.

ืœืฆื•ืจืš ื”ื“ื’ืžื”, ืื ื• ื ื•ืฆื™ื ื—ื•ืžืช ืืฉ 12345 ื•ื ืคืขื™ืœ ืืช ืกืงืจื™ืคื˜ ื”ืœืงื•ื— ืฉืœื ื•. ืืชื” ื™ื›ื•ืœ ื—ื•ืžืช ืืฉ ืžื ื•ืช ื™ื•ืฆืื•ืช ืœื™ืฆื™ืื” ื–ื• ืืฆืœ ื”ืฉื•ืœื— ืื• ืžื ื•ืช ื ื›ื ืกื•ืช ื‘ืžืงืœื˜. ื‘ื“ื•ื’ืžืื•ืช ืฉืœื™, ืžื ื•ืช ื ื›ื ืกื•ืช ื™ื”ื™ื• ื—ื•ืžืช ืืฉ (ืื ื• ืžืฉืชืžืฉื™ื ื‘- INPUT ื‘ืฉืจืฉืจืช ื•ื‘ืื•ืคืฆื™ื” --dport). ืžื ื•ืช ื›ืืœื” ื™ื›ื•ืœื•ืช ืœื”ื™ื•ืช DROP, REJECT ืื• REJECT ืขื ื“ื’ืœ TCP RST, ืื• ืขื ืžืืจื— ICMP ืฉืื™ ืืคืฉืจ ืœื”ื’ื™ืข ืืœื™ื• (ืœืžืขืฉื”, ื”ืชื ื”ื’ื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื icmp-port-unreachable, ื•ื™ืฉ ื’ื ืืคืฉืจื•ืช ืœืฉืœื•ื— ืชืฉื•ื‘ื” icmp-net-unreachable, icmp-proto-unreachable, icmp-net-ืืกื•ืจ ะธ icmp-host-ืื™ืกื•ืจ).

DROP

ืื ื™ืฉ ื›ืœืœ ืขื DROP, ืžื ื•ืช ืคืฉื•ื˜ "ื™ื™ืขืœืžื•".

iptables -A INPUT -p tcp --dport 12345 -j DROP

ืื ื—ื ื• ืžืคืขื™ืœื™ื ืืช ื”ืœืงื•ื— ื•ืจื•ืื™ื ืฉื”ื•ื ืงื•ืคื ื‘ืฉืœื‘ ื”ื—ื™ื‘ื•ืจ ืœืฉืจืช. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื”ืชื ื•ืขื”:
ืžื–ื‘ืœื” ืฉืœ ืชื ื•ืขื”

[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
08:28:20.213506 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203046450 ecr 0,nop,wscale 7], length 0
08:28:21.215086 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203047452 ecr 0,nop,wscale 7], length 0
08:28:23.219092 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203049456 ecr 0,nop,wscale 7], length 0
08:28:27.227087 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203053464 ecr 0,nop,wscale 7], length 0
08:28:35.235102 IP 127.0.0.1.32856 > 127.0.0.1.12345: Flags [S], seq 3019694933, win 43690, options [mss 65495,sackOK,TS val 1203061472 ecr 0,nop,wscale 7], length 0

ื ื™ืชืŸ ืœืจืื•ืช ืฉื”ืœืงื•ื— ืฉื•ืœื— ืžื ื•ืช SYN ืขื ืคืกืง ื–ืžืŸ ื”ื•ืœืš ื•ื’ื“ืœ ื‘ืื•ืคืŸ ืืงืกืคื•ื ื ืฆื™ืืœื™. ืื– ืžืฆืื ื• ื‘ืื’ ืงื˜ืŸ ื‘ืœืงื•ื—: ืืชื” ืฆืจื™ืš ืœื”ืฉืชืžืฉ ื‘ืฉื™ื˜ื” settimeout()ื›ื“ื™ ืœื”ื’ื‘ื™ืœ ืืช ื”ื–ืžืŸ ืฉื‘ืžื”ืœื›ื• ื”ืœืงื•ื— ื™ื ืกื” ืœื”ืชื—ื‘ืจ ืœืฉืจืช.

ืื ื• ืžืกื™ืจื™ื ืžื™ื“ ืืช ื”ื›ืœืœ:

iptables -D INPUT -p tcp --dport 12345 -j DROP

ืืชื” ื™ื›ื•ืœ ืœืžื—ื•ืง ืืช ื›ืœ ื”ื›ืœืœื™ื ื‘ื‘ืช ืื—ืช:

iptables -F

ืื ืืชื” ืžืฉืชืžืฉ ื‘-Docker ื•ืืชื” ืฆืจื™ืš ืœืขืฉื•ืช ื—ื•ืžืช ืืฉ ืœื›ืœ ื”ืชืขื‘ื•ืจื” ืฉืขื•ื‘ืจืช ืœืงื•ื ื˜ื™ื™ื ืจ, ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื–ืืช ื‘ืื•ืคืŸ ื”ื‘ื:

iptables -I DOCKER-USER -p tcp -d CONTAINER_IP -j DROP

ื“ื—ื”

ืขื›ืฉื™ื• ื‘ื•ืื• ื ื•ืกื™ืฃ ื›ืœืœ ื“ื•ืžื”, ืื‘ืœ ืขื ื“ื—ื™ื™ื”:

iptables -A INPUT -p tcp --dport 12345 -j REJECT

ื”ืœืงื•ื— ื™ื•ืฆื ืœืื—ืจ ืฉื ื™ื™ื” ืขื ืฉื’ื™ืื” [ืฉื’ื™ืื” 111] ื”ื—ื™ื‘ื•ืจ ืกื™ืจื‘ื”. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืชืขื‘ื•ืจืช ICMP:

[user@host ~]# tcpdump -i lo -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
08:45:32.871414 IP 127.0.0.1 > 127.0.0.1: ICMP 127.0.0.1 tcp port 12345 unreachable, length 68
08:45:33.873097 IP 127.0.0.1 > 127.0.0.1: ICMP 127.0.0.1 tcp port 12345 unreachable, length 68

ื ื™ืชืŸ ืœืจืื•ืช ืฉื”ืœืงื•ื— ืงื™ื‘ืœ ืคืขืžื™ื™ื ืœื ื ื™ืชืŸ ืœื”ื’ื™ืข ืœื ืžืœ ื•ืื– ื”ืกืชื™ื™ื ื‘ืฉื’ื™ืื”.

ื“ื—ื” ืขื tcp-reset

ื‘ื•ืื• ื ื ืกื” ืœื”ื•ืกื™ืฃ ืืช ื”ืืคืฉืจื•ืช --reject-with tcp-reset:

iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with tcp-reset

ื‘ืžืงืจื” ื–ื”, ื”ืœืงื•ื— ื™ื•ืฆื ืžื™ื“ ืขื ืฉื’ื™ืื”, ืžื›ื™ื•ื•ืŸ ืฉื”ื‘ืงืฉื” ื”ืจืืฉื•ื ื” ืงื™ื‘ืœื” ื—ื‘ื™ืœืช RST:

[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
09:02:52.766175 IP 127.0.0.1.60658 > 127.0.0.1.12345: Flags [S], seq 1889460883, win 43690, options [mss 65495,sackOK,TS val 1205119003 ecr 0,nop,wscale 7], length 0
09:02:52.766184 IP 127.0.0.1.12345 > 127.0.0.1.60658: Flags [R.], seq 0, ack 1889460884, win 0, length 0

ื“ื—ื” ืขื icmp-host-unreachable

ื‘ื•ืื• ื ื ืกื” ืืคืฉืจื•ืช ืื—ืจืช ืœืฉื™ืžื•ืฉ ื‘-REJECT:

iptables -A INPUT -p tcp --dport 12345 -j REJECT --reject-with icmp-host-unreachable

ื”ืœืงื•ื— ื™ื•ืฆื ืœืื—ืจ ืฉื ื™ื™ื” ืขื ืฉื’ื™ืื” [ืฉื’ื™ืื” 113] ืื™ืŸ ืžืกืœื•ืœ ืœืืจื—, ืื ื• ืจื•ืื™ื ื‘ืชืขื‘ื•ืจืช ICMP ืžืืจื— ICMP 127.0.0.1 ืœื ื ื™ืชืŸ ืœื”ืฉื’ื”.

ืืชื” ื™ื›ื•ืœ ื’ื ืœื ืกื•ืช ืืช ื”ืคืจืžื˜ืจื™ื ื”ืื—ืจื™ื ืฉืœ REJECT, ื•ืื ื™ ืืชืžืงื“ ื‘ืืœื” :)

ื”ื“ืžื™ื™ืช ืคืกืง ื–ืžืŸ ืฉืœ ื‘ืงืฉื”

ืžืฆื‘ ื ื•ืกืฃ ื”ื•ื ื›ืืฉืจ ื”ืœืงื•ื— ื”ืฆืœื™ื— ืœื”ืชื—ื‘ืจ ืœืฉืจืช, ืืš ืื™ื ื• ื™ื›ื•ืœ ืœืฉืœื•ื— ืืœื™ื• ื‘ืงืฉื”. ืื™ืš ืœืกื ืŸ ืžื ื•ืช ื›ืš ืฉื”ืกื™ื ื•ืŸ ืœื ื™ืชื—ื™ืœ ืžื™ื“? ืื ืชืกืชื›ืœ ืขืœ ื”ืชืขื‘ื•ืจื” ืฉืœ ืชืงืฉื•ืจืช ื›ืœืฉื”ื™ ื‘ื™ืŸ ื”ืœืงื•ื— ืœืฉืจืช, ืชื‘ื—ื™ืŸ ื›ื™ ื‘ืขืช ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ, ื ืขืฉื” ืฉื™ืžื•ืฉ ืจืง ื‘ื“ื’ืœื™ SYN ื•-ACK, ืืš ื‘ืขืช ื”ื—ืœืคืช ื ืชื•ื ื™ื, ื—ื‘ื™ืœืช ื”ื‘ืงืฉื•ืช ื”ืื—ืจื•ื ื” ืชื›ื™ืœ ืืช ื“ื’ืœ PSH. ื–ื” ืžื•ืชืงืŸ ืื•ื˜ื•ืžื˜ื™ืช ื›ื“ื™ ืœืžื ื•ืข ื—ืฆื™ืฆื”. ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ืžื™ื“ืข ื–ื” ื›ื“ื™ ืœื™ืฆื•ืจ ืžืกื ืŸ: ื”ื•ื ื™ืืคืฉืจ ืืช ื›ืœ ื”ื—ื‘ื™ืœื•ืช ืžืœื‘ื“ ืืœื” ื”ืžื›ื™ืœื•ืช ืืช ื“ื’ืœ ื”-PSH. ืœืคื™ื›ืš, ื”ื—ื™ื‘ื•ืจ ื™ื™ื•ื•ืฆืจ, ืืš ื”ืœืงื•ื— ืœื ื™ื•ื›ืœ ืœืฉืœื•ื— ื ืชื•ื ื™ื ืœืฉืจืช.

DROP

ืขื‘ื•ืจ DROP ื”ืคืงื•ื“ื” ืชื™ืจืื” ื›ืš:

iptables -A INPUT -p tcp --tcp-flags PSH PSH --dport 12345 -j DROP

ื”ืคืขืœ ืืช ื”ืœืงื•ื— ื•ืฆืคื” ื‘ืชื ื•ืขื”:

ืžื–ื‘ืœื” ืฉืœ ืชื ื•ืขื”

[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:02:47.549498 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [S], seq 2166014137, win 43690, options [mss 65495,sackOK,TS val 1208713786 ecr 0,nop,wscale 7], length 0
10:02:47.549510 IP 127.0.0.1.12345 > 127.0.0.1.49594: Flags [S.], seq 2341799088, ack 2166014138, win 43690, options [mss 65495,sackOK,TS val 1208713786 ecr 1208713786,nop,wscale 7], length 0
10:02:47.549520 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 1208713786 ecr 1208713786], length 0
10:02:47.549568 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1208713786 ecr 1208713786], length 5
10:02:47.750084 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1208713987 ecr 1208713786], length 5
10:02:47.951088 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1208714188 ecr 1208713786], length 5
10:02:48.354089 IP 127.0.0.1.49594 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1208714591 ecr 1208713786], length 5

ืื ื• ืจื•ืื™ื ืฉื”ื—ื™ื‘ื•ืจ ื ื•ืฆืจ ื•ื”ืœืงื•ื— ืœื ื™ื›ื•ืœ ืœืฉืœื•ื— ื ืชื•ื ื™ื ืœืฉืจืช.

ื“ื—ื”

ื‘ืžืงืจื” ื–ื” ื”ื”ืชื ื”ื’ื•ืช ืชื”ื™ื” ื–ื”ื”: ื”ืœืงื•ื— ืœื ื™ื•ื›ืœ ืœืฉืœื•ื— ืืช ื”ื‘ืงืฉื”, ืืœื ื™ืงื‘ืœ ื™ืฆื™ืืช tcp 127.0.0.1 ICMP 12345 ืœื ื ื™ืชื ืช ืœื”ืฉื’ื” ื•ืœื”ื’ื“ื™ืœ ืืช ื”ื–ืžืŸ ื‘ื™ืŸ ื”ื’ืฉืช ื‘ืงืฉื” ืžื—ื“ืฉ ื‘ืื•ืคืŸ ืืงืกืคื•ื ื ืฆื™ืืœื™. ื”ืคืงื•ื“ื” ื ืจืื™ืช ื›ืš:

iptables -A INPUT -p tcp --tcp-flags PSH PSH --dport 12345 -j REJECT

ื“ื—ื” ืขื tcp-reset

ื”ืคืงื•ื“ื” ื ืจืื™ืช ื›ืš:

iptables -A INPUT -p tcp --tcp-flags PSH PSH --dport 12345 -j REJECT --reject-with tcp-reset

ืื ื—ื ื• ื›ื‘ืจ ื™ื•ื“ืขื™ื ืืช ื–ื” ื‘ืขืช ื”ืฉื™ืžื•ืฉ --reject-with tcp-reset ื”ืœืงื•ื— ื™ืงื‘ืœ ื—ื‘ื™ืœืช RST ื‘ืชื’ื•ื‘ื”, ื›ืš ืฉื ื™ืชืŸ ืœื—ื–ื•ืช ืืช ื”ื”ืชื ื”ื’ื•ืช: ืงื‘ืœืช ื—ื‘ื™ืœืช RST ื‘ื–ืžืŸ ืฉื”ื—ื™ื‘ื•ืจ ื ื•ืฆืจ ืคื™ืจื•ืฉื” ืฉื”ืฉืงืข ื ืกื’ืจ ื‘ืื•ืคืŸ ื‘ืœืชื™ ืฆืคื•ื™ ื‘ืฆื“ ื”ืฉื ื™, ืžื” ืฉืื•ืžืจ ืฉื”ืœืงื•ื— ืฆืจื™ืš ืœืงื‘ืœ ื—ื™ื‘ื•ืจ ืื™ืคื•ืก ืขืœ ื™ื“ื™ ืขืžื™ืชื™ื. ื‘ื•ื ื ืจื™ืฅ ืืช ื”ืชืกืจื™ื˜ ืฉืœื ื• ื•ื ื•ื•ื“ื ืืช ื–ื”. ื•ื›ืš ืชื™ืจืื” ื”ืชื ื•ืขื”:

ืžื–ื‘ืœื” ืฉืœ ืชื ื•ืขื”

[user@host ~]# tcpdump -i lo -nn port 12345
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:22:14.186269 IP 127.0.0.1.52536 > 127.0.0.1.12345: Flags [S], seq 2615137531, win 43690, options [mss 65495,sackOK,TS val 1209880423 ecr 0,nop,wscale 7], length 0
10:22:14.186284 IP 127.0.0.1.12345 > 127.0.0.1.52536: Flags [S.], seq 3999904809, ack 2615137532, win 43690, options [mss 65495,sackOK,TS val 1209880423 ecr 1209880423,nop,wscale 7], length 0
10:22:14.186293 IP 127.0.0.1.52536 > 127.0.0.1.12345: Flags [.], ack 1, win 342, options [nop,nop,TS val 1209880423 ecr 1209880423], length 0
10:22:14.186338 IP 127.0.0.1.52536 > 127.0.0.1.12345: Flags [P.], seq 1:6, ack 1, win 342, options [nop,nop,TS val 1209880423 ecr 1209880423], length 5
10:22:14.186344 IP 127.0.0.1.12345 > 127.0.0.1.52536: Flags [R], seq 3999904810, win 0, length 0

ื“ื—ื” ืขื icmp-host-unreachable

ืื ื™ ื—ื•ืฉื‘ ืฉื–ื” ื›ื‘ืจ ื‘ืจื•ืจ ืœื›ื•ืœื ืื™ืš ืชื™ืจืื” ื”ืคืงื•ื“ื” :) ื”ืชื ื”ื’ื•ืช ื”ืœืงื•ื— ื‘ืžืงืจื” ื–ื” ืชื”ื™ื” ืžืขื˜ ืฉื•ื ื” ืžื–ื• ืขื REJECT ืคืฉื•ื˜: ื”ืœืงื•ื— ืœื ื™ื’ื“ื™ืœ ืืช ื”ื–ืžืŸ ื”ืงืฆื•ื‘ ื‘ื™ืŸ ื ื™ืกื™ื•ื ื•ืช ืœืฉืœื•ื— ืžื—ื“ืฉ ืืช ื”ื—ื‘ื™ืœื”.

[user@host ~]# tcpdump -i lo -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
10:29:56.149202 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:56.349107 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:56.549117 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:56.750125 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:56.951130 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:57.152107 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65
10:29:57.353115 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable, length 65

ืคืœื˜

ืื™ืŸ ืฆื•ืจืš ืœื›ืชื•ื‘ ื“ืžื” ื›ื“ื™ ืœื‘ื“ื•ืง ืืช ื”ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ืฉื™ืจื•ืช ืขื ืœืงื•ื— ืื• ืฉืจืช ืชืœื•ื™ื™ื; ืœืคืขืžื™ื ื–ื” ืžืกืคื™ืง ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ ืขื–ืจ ืกื˜ื ื“ืจื˜ื™ื™ื ืฉื ืžืฆืื™ื ื‘ืœื™ื ื•ืงืก.

ืœื›ืœื™ ื”ืฉื™ืจื•ืช ื”ื ื™ื“ื•ื ื™ื ื‘ืžืืžืจ ื™ืฉ ืืคื™ืœื• ื™ื•ืชืจ ื™ื›ื•ืœื•ืช ืžืžื” ืฉืชื•ืืจื•, ื›ืš ืฉืชื•ื›ืœ ืœื”ืžืฆื™ื ื›ืžื” ืžื”ืืคืฉืจื•ื™ื•ืช ืฉืœืš ืœืฉื™ืžื•ืฉ ื‘ื”ื. ื‘ืื•ืคืŸ ืื™ืฉื™, ืชืžื™ื“ ื™ืฉ ืœื™ ืžืกืคื™ืง ืžืžื” ืฉื›ืชื‘ืชื™ ืขืœื™ื• (ืœืžืขืฉื”, ืืคื™ืœื• ืคื—ื•ืช). ืื ืืชื” ืžืฉืชืžืฉ ื‘ื›ืœื™ ืฉื™ืจื•ืช ืืœื” ืื• ื“ื•ืžื™ื ื‘ื‘ื“ื™ืงื•ืช ื‘ื—ื‘ืจื” ืฉืœืš, ืื ื ื›ืชื•ื‘ ื›ื™ืฆื“ ื‘ื“ื™ื•ืง. ืื ืœื, ืื– ืื ื™ ืžืงื•ื•ื” ืฉื”ืชื•ื›ื ื” ืฉืœืš ืชืฉืชืคืจ ืื ืชื—ืœื™ื˜ ืœื‘ื“ื•ืง ืื•ืชื” ื‘ืชื ืื™ื ืฉืœ ื‘ืขื™ื•ืช ืจืฉืช ื‘ืืžืฆืขื•ืช ื”ืฉื™ื˜ื•ืช ื”ืžื•ืฆืขื•ืช.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”