Мне нужно добавить задержку к пакетам после внесения некоторых изменений с помощью встроенного модуля SNORT. Однако я не могу заставить пакеты соответствовать фильтру с использованием tc filter ... Он всегда соответствует фильтру по умолчанию. Команды, которые я использую, указаны ниже:
sudo tc qdisc del dev em1 root
sudo tc qdisc add dev em1 root handle 1: prio
sudo tc filter add dev em1 parent 1:0 protocol all prio 1 u32 match u32 0xac18095a 0xffffffff at 0 flowid 1:1
sudo tc filter add dev em1 parent 1:0 protocol all prio 2 u32 match ip dst 0.0.0.0/0 classid 1:2
sudo tc qdisc add dev em1 parent 1:1 handle 10: netem delay 10ms
sudo tc qdisc add dev em1 parent 1:2 handle 20: netem drop 50%
Любая помощь высоко ценится.
Наконец разобрался, как это сделать. Скрипт ниже, кажется, работает.
#!/bin/bash
configure() {
local device=$1
local totalrate=$2
local maxrate=$3
local limited=$4
# Delete qdiscs, classes and filters
tc qdisc del dev $device root 2> /dev/null
tc qdisc add dev $device root handle 1: cbq avpkt 1000 bandwidth $totalrate
tc class add dev $device parent 1: classid 1:1 cbq rate $limited allot 1500 prio 3 bounded isolated
tc class add dev $device parent 1: classid 1:2 cbq rate $maxrate allot 1500 prio 5 bounded isolated
tc qdisc add dev $device parent 1:2 handle 20: netem delay 1000ms rate $maxrate
# Classify ICMP into high priority queue
tc filter add dev $device parent 1:0 protocol all prio 3 u32 \
match ip protocol 1 0xff flowid 1:1
# Classify DNP3 into low priority queue
tc filter add dev $device parent 1: protocol all prio 1 u32 \
match ip protocol 6 0xff \
match ip sport 20000 0xffff \
flowid 1:2
tc filter add dev $device parent 1: protocol all prio 2 u32 \
match ip protocol 6 0xff \
match u8 0x05 0x0f at 0 \
match u16 0x0000 0xffc0 at 2 \
match u8 0x10 0xff at 33 \
flowid 1:2
}
main() {
configure em1 1000Mbit 800Mbit 200Mbit
# configure p24p1 200mbit 100mbit
}
main "$@"
Однако я столкнулся с другой проблемой. Я экспериментировал со следующими настройками. Первый работает с задержкой и модификацией встроенного пакета snort. Однако второго нет. Когда я проверяю связь с машиной A с Linux со своей машины с Windows, машина с Linux A отправляет 2 ответа ping на некоторые запросы. Тогда на некоторые из них не ответят.
Setup 1:
_________ _________ _________ ___________
|Linux PC | |Linux PC | | L2 | |Windows PC |
| A |-------------|Running |----------| Switch |-------------| A |
|_________| | Snort & | |_________| |___________|
| tc netem|
|_________|
Setup 2:
_________ _____ _________ _________ ___________
|Linux PC | |L2 SW| |Linux PC | | L2 | |Windows PC |
| A |---|_____|----|Running |----------| Switch |-------------| A |
|_________| | Snort & | |_________| |___________|
| tc netem|
|_________|
Любая помощь в этом приветствуется.