Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2014-10-14 05:15:43

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Czasowe reguły iptables

Wpadł mi do głowy projekt, który miałby na celu zdławienie pewnego ruchu sieciowego w określonych godzinach, tak by odciążyć całkowicie sieć. Chodzi oczywiście o ruch p2p, który powinien zostać przykręcony na czas przeprowadzania przez nsaboxa pomiarów. xD Czytając dokumentację, pomiary rozpoczynają z chwilą wybicia pełnej godziny i jeśli obciążenie łącza up/down przekracza jakieś tam progi, pomiar jest usypiany na 1min i ponawiany chyba 5 razy. Jeśli 5 próba się nie powiedzie, pomiar nie zostaje przeprowadzony i tak w kółko. Zatem by zrealizować to przedsięwzięcie, trzeba odciąć ruch p2p na 3min przed pełną godziną i tak do 3min po pełnej godzinie.

Jest niby hashlimit, którym można by zweryfikować ilość pakietów na portach ! 80,443 i tam jeszcze parę innych i jeśli liczba przekracza 0/s to zacząć je zrzucać. Problem w tym, że nie mam pojęcia jak ogarnąć taki przedział czasu, w którym taka reguła z hashlimitem byłaby wywoływana. Z tego co widzę, to ten moduł time raczej nie poradzi sobie z tym zadaniem, chyba, że trzeba by zrobić 24 reguły i przepuścić przez nie pakiety wchodzące i wychodzące. Da radę jakoś inaczej to rozwiązać?

EDIT:

W sumie to ten hashlimit to będzie raczej zbędny, trzeba jakoś ten time ogarnąć xD

Ostatnio edytowany przez morfik (2014-10-14 06:04:03)

Offline

 

#2  2014-10-14 07:35:22

  qlemik - Użytkownik

qlemik
Użytkownik
Zarejestrowany: 2007-11-27

Re: Czasowe reguły iptables

to nie lepiej własny skrypt włączajcy i wyłczajcy z normalnymi regułami iptables (bez time )  i zaprzyjaźnić to z cronem?

Offline

 

#3  2014-10-14 09:15:20

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

Ten ruch p2p  jakieś programy  generują lokalnie na Linuxie, gdzie ustawiasz FW?

Jeśli tak, to ogarnij te programy P2P modułem CGROUP do Firewalla (trzeba zaznaczyć w jaju i skompilować chyba iptables z git) i potem z górki, możesz programy zaklasyfikowane przez Cgroup obcinać modułem Time jak Ci się żywnie podoba.
[s]Chociaż dynamiczne zarządzanie regułkami Cię chyba nie minie, bo po prostu ciężko mi sobie wyobrazić sytuację, kiedy regułka time dotyczy w każdej godzinie czasu 5 minut po pełnej do 3 minuty  przed następną pełną,[/s] chyba, żeby wyrzeźbić  24 reguły, dla każdej godziny z osoba.

Hashlimita raczej bym do tego nie mieszał, bo po prostu ruch P2P ciężko cały  zidentyfikować i obciąć klasyfikacją portów czy protokołów.

EDIT:
Chyba gotowe:

Kod:

seq 0 23 | while read godzina; do echo "iptables -I OUTPUT -m cgroup --cgroup 5 -m time --weekdays 1-7 --timestart $godzina:05:00 --timestop $godzina:57:00 -j ACCEPT"; done;

Mniej więcej tak to można zrobić w miarę prosto i bezstresowo. :D

EDIT2:
[quote="qlemik"]to nie lepiej własny skrypt włączajcy i wyłczajcy z normalnymi regułami iptables (bez time )  i zaprzyjaźnić to z cronem?[/quote]
A cóż to nienormalnego jest w module time firewalla? xD

Ostatnio edytowany przez Jacekalex (2014-10-14 09:57:02)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#4  2014-10-14 10:06:29

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

W sumie to mam skrypt odpalający qbittorrent-nox i do crona można by go wrzucić -- tak chyba by było najłatwiej.

Co do cgroups, to o jaki moduł w kernelu dokładnie chodzi?

Kod:

root:~# cat /boot/config-3.16-2-amd64 |grep -i cgroup
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
# CONFIG_CGROUP_HUGETLB is not set
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=m
CONFIG_CGROUP_NET_PRIO=y
CONFIG_CGROUP_NET_CLASSID=y

Któryś z tych?

I jeszcze taka sprawa z tym cgroup. Kiedyś przerabiałem te skrypty startowe z redhata i mi to niby działa do tej pory, z tym, że po instalacji jakiś czas temu systemd-shim to pobrało cgmanager . Teraz tak patrzę na podmontowane katalogi od cgroups i mam coś takiego:

Kod:

morfik:~$ mount | grep -i cgroup
cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,size=12k)
none on /cgroups/blkio type cgroup (rw,relatime,blkio,release_agent=/run/cgmanager/agents/cgm-release-agent.blkio,clone_children)
none on /cgroups/cpu type cgroup (rw,relatime,cpu,release_agent=/run/cgmanager/agents/cgm-release-agent.cpu,clone_children)
none on /cgroups/cpuacct type cgroup (rw,relatime,cpuacct,release_agent=/run/cgmanager/agents/cgm-release-agent.cpuacct,clone_children)
none on /cgroups/cpuset type cgroup (rw,relatime,cpuset,release_agent=/run/cgmanager/agents/cgm-release-agent.cpuset,clone_children)
none on /cgroups/devices type cgroup (rw,relatime,devices,release_agent=/run/cgmanager/agents/cgm-release-agent.devices,clone_children)
none on /cgroups/freezer type cgroup (rw,relatime,freezer,release_agent=/run/cgmanager/agents/cgm-release-agent.freezer,clone_children)
none on /cgroups/memory type cgroup (rw,relatime,memory,release_agent=/run/cgmanager/agents/cgm-release-agent.memory,clone_children)
none on /cgroups/net_cls type cgroup (rw,relatime,net_cls,release_agent=/run/cgmanager/agents/cgm-release-agent.net_cls,clone_children)
none on /cgroups/net_prio type cgroup (rw,relatime,net_prio,release_agent=/run/cgmanager/agents/cgm-release-agent.net_prio,clone_children)
none on /cgroups/perf_event type cgroup (rw,relatime,perf_event,release_agent=/run/cgmanager/agents/cgm-release-agent.perf_event,clone_children)

I teraz pytanie, czy mając ten cgmanager potrzebuję tych pakietów cgroup-bin cgroup-tools libcgroup1 ? Z tego co widzę, to można je wywalić i nie pociągają za sobą ani cgmanagera ani libcgmanager0 . Czy zostawić to tak jak jest i ewentualnie zmienić lokalizację tych katalogów tak by wszystko siedziało w  /sys/fs/cgroup ?

Co do samego problemu jeszcze, to spróbuje ogarnąć to przez cgroups tylko pierw muszę ten bałagan posprzątać trochę. xD

Offline

 

#5  2014-10-14 10:58:21

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

[quote="morfik"]Któryś z tych?[/quote]

cat /proc/`pidof pidgin`/cgroup
13:debug:/
12:hugetlb:/
11:net_prio:/
10:perf_event:/
9:blkio:/
[b]8:net_cls:/users/pidgin[/b]
7:freezer:/
6:devices:/
5:memory:/users/pidgin
4:cpuacct:/
3:cpu:/users/pidgin
2:cpuset:/[/quote]

Kod:

iptables -S | grep cgroup
-A OUTPUT -m cgroup --cgroup 1 -j ACCEPT
-A OUTPUT -m cgroup --cgroup 2 -j ACCEPT
-A OUTPUT -m cgroup --cgroup 3 -j ACCEPT
-A OUTPUT -m cgroup --cgroup 4 -j ACCEPT
-A OUTPUT -m cgroup --cgroup 5 -j ACCEPT
-A OUTPUT -m cgroup --cgroup 9 -j ACCEPT

SOA#1

Czy potrzebujesz jakiegoś [b]cgmanagera[/b], i jakieś paczki nie wiem, u mnie starcza [b]dev-libs/libcgroup[/b] - w nim jest [b]/usr/sbin/cgrulesengd[/b] który pakuje procesy do grup zgodnie z tym, co ma w [url=http://jacekalex.sh.dug.net.pl/cgroup/cgrules.conf]/etc/cgroup/cgrules.conf[/url], a konfigurację robi mój skrypt [url=http://jacekalex.sh.dug.net.pl/cgstart]cgstart[/url].

Jak na razie to starcza i działa. :)

Ostatnio edytowany przez Jacekalex (2014-10-14 11:32:33)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#6  2014-10-14 11:22:20

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

Czyli moduł cls_cgroup , no to go mam tylko ten iptables trzeba by kompilować bo nie wchodzą reguły z "-m cgroup". pokombinuje wieczorem i zobaczę też czy ten cgmanager sam sobie ogarnie to wszystko, bo chyba od tamtego czasu co przerabiałem te skrypty, to się nic nie zmieniło w tej kwestii i ten cgroup debianowy standardowo dalej chyba nie działa.

Offline

 

#7  2014-10-14 11:34:15

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

Ja mam iptables z gita, do którejś nowej wersji w Debianie  powinien ten moduł dotrzeć, ale nie wiem, której, Developerzy Debiana nigdy się nie spieszyli z takimi drobiazgami.
Na Cgmanagera bym nie liczył, on zastępuje funkcjonalność Cgroup z Systemd, taką samą mam w OpenRC, ale nie ma to w desktopie żadnego praktycznego zastosowania, a potencjalna konfiguracja w OpenRC jest 50 razy trudniejsza, niż w narzędziach libcgroup i moich skryptach.

Ostatnio edytowany przez Jacekalex (2014-10-14 11:37:11)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#8  2014-10-14 19:47:52

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

Już powoli się to wszystko wyjaśnia.

Pakiet cgroup-bin do wywalenia jest, w nim i tak już nic nie ma i pewnie niedługo zostanie usunięty z debiana.
Pakiet cgmanager to jest podstawa i to on montuje:

Kod:

cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,size=12k

Ale tylko to.

Dalej, doinstalowałem pakiet cgroupfs-mount i wywaliłem te skrypty redhata z autostartu, po resecie:

Kod:

root:~# mount | grep cgr
cgroup on /sys/fs/cgroup type tmpfs (rw,relatime,size=12k)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,relatime,cpuset,release_agent=/run/cgmanager/agents/cgm-release-agent.cpuset,clone_children)
cgroup on /sys/fs/cgroup/cpu type cgroup (rw,relatime,cpu,release_agent=/run/cgmanager/agents/cgm-release-agent.cpu)
cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,relatime,cpuacct,release_agent=/run/cgmanager/agents/cgm-release-agent.cpuacct)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,relatime,memory,release_agent=/run/cgmanager/agents/cgm-release-agent.memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,relatime,devices,release_agent=/run/cgmanager/agents/cgm-release-agent.devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,relatime,freezer,release_agent=/run/cgmanager/agents/cgm-release-agent.freezer)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,relatime,net_cls,release_agent=/run/cgmanager/agents/cgm-release-agent.net_cls)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,relatime,blkio,release_agent=/run/cgmanager/agents/cgm-release-agent.blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,relatime,perf_event,release_agent=/run/cgmanager/agents/cgm-release-agent.perf_event)
cgroup on /sys/fs/cgroup/net_prio type cgroup (rw,relatime,net_prio,release_agent=/run/cgmanager/agents/cgm-release-agent.net_prio)

Także się wszystko ładnie zamontowało samo z siebie.

Kod:

root:~# tree /sys/fs/cgroup/
/sys/fs/cgroup/
├── blkio
│   ├── blkio.io_merged
│   ├── blkio.io_merged_recursive
│   ├── blkio.io_queued
│   ├── blkio.io_queued_recursive
│   ├── blkio.io_service_bytes
│   ├── blkio.io_service_bytes_recursive
│   ├── blkio.io_service_time
│   ├── blkio.io_service_time_recursive
│   ├── blkio.io_serviced
│   ├── blkio.io_serviced_recursive
│   ├── blkio.io_wait_time
│   ├── blkio.io_wait_time_recursive
│   ├── blkio.leaf_weight
│   ├── blkio.leaf_weight_device
│   ├── blkio.reset_stats
│   ├── blkio.sectors
│   ├── blkio.sectors_recursive
│   ├── blkio.throttle.io_service_bytes
│   ├── blkio.throttle.io_serviced
│   ├── blkio.throttle.read_bps_device
│   ├── blkio.throttle.read_iops_device
│   ├── blkio.throttle.write_bps_device
│   ├── blkio.throttle.write_iops_device
│   ├── blkio.time
│   ├── blkio.time_recursive
│   ├── blkio.weight
│   ├── blkio.weight_device
│   ├── cgroup.clone_children
│   ├── cgroup.procs
│   ├── cgroup.sane_behavior
│   ├── notify_on_release
│   ├── release_agent
│   └── tasks
├── cgmanager
│   └── sock
├── cpu
│   ├── cgroup.clone_children
│   ├── cgroup.procs
│   ├── cgroup.sane_behavior
│   ├── cpu.shares
│   ├── notify_on_release
│   ├── release_agent
│   └── tasks
├── cpuacct
│   ├── cgroup.clone_children
│   ├── cgroup.procs
│   ├── cgroup.sane_behavior
│   ├── cpuacct.stat
│   ├── cpuacct.usage
│   ├── cpuacct.usage_percpu
│   ├── notify_on_release
│   ├── release_agent
│   └── tasks
├── cpuset
│   ├── cgroup.clone_children
│   ├── cgroup.procs
│   ├── cgroup.sane_behavior
│   ├── cpuset.cpu_exclusive
│   ├── cpuset.cpus
│   ├── cpuset.mem_exclusive
│   ├── cpuset.mem_hardwall
│   ├── cpuset.memory_migrate
│   ├── cpuset.memory_pressure
│   ├── cpuset.memory_pressure_enabled
│   ├── cpuset.memory_spread_page
│   ├── cpuset.memory_spread_slab
│   ├── cpuset.mems
│   ├── cpuset.sched_load_balance
│   ├── cpuset.sched_relax_domain_level
│   ├── notify_on_release
│   ├── release_agent
│   └── tasks
├── devices
│   ├── cgroup.clone_children
│   ├── cgroup.procs
│   ├── cgroup.sane_behavior
│   ├── devices.allow
│   ├── devices.deny
│   ├── devices.list
│   ├── notify_on_release
│   ├── release_agent
│   └── tasks
├── freezer
│   ├── cgroup.clone_children
│   ├── cgroup.procs
│   ├── cgroup.sane_behavior
│   ├── notify_on_release
│   ├── release_agent
│   └── tasks
├── memory
│   ├── cgroup.clone_children
│   ├── cgroup.event_control
│   ├── cgroup.procs
│   ├── cgroup.sane_behavior
│   ├── memory.failcnt
│   ├── memory.force_empty
│   ├── memory.limit_in_bytes
│   ├── memory.max_usage_in_bytes
│   ├── memory.move_charge_at_immigrate
│   ├── memory.numa_stat
│   ├── memory.oom_control
│   ├── memory.pressure_level
│   ├── memory.soft_limit_in_bytes
│   ├── memory.stat
│   ├── memory.swappiness
│   ├── memory.usage_in_bytes
│   ├── memory.use_hierarchy
│   ├── notify_on_release
│   ├── release_agent
│   └── tasks
├── net_cls
│   ├── cgroup.clone_children
│   ├── cgroup.procs
│   ├── cgroup.sane_behavior
│   ├── net_cls.classid
│   ├── notify_on_release
│   ├── release_agent
│   └── tasks
├── net_prio
│   ├── cgroup.clone_children
│   ├── cgroup.procs
│   ├── cgroup.sane_behavior
│   ├── net_prio.ifpriomap
│   ├── net_prio.prioidx
│   ├── notify_on_release
│   ├── release_agent
│   └── tasks
└── perf_event
    ├── cgroup.clone_children
    ├── cgroup.procs
    ├── cgroup.sane_behavior
    ├── notify_on_release
    ├── release_agent
    └── tasks

11 directories, 124 files

Kod:

# cat /proc/cgroups
#subsys_name    hierarchy       num_cgroups     enabled
cpuset  4       1       1
cpu     2       1       1
cpuacct 3       1       1
memory  7       1       1
devices 5       1       1
freezer 6       1       1
net_cls 8       1       1
blkio   1       1       1
perf_event      10      1       1
net_prio        9       1       1

Czegoś brakuje?

Do tego są jeszcze dwa pakiety libcgroup1 oraz cgroup-tools , który to zawiera min cgrulesengd i szereg innych narzędzi. Także teraz już tylko trzeba pisać reguły i powinno działać bez problemu. No i muszę nieco przepisać swój text o cgroups bo trochę się zasyfił. xD

Przetestowałem jeszcze tak na szybko kontenery LXC -- po odpaleniu, grupy są dodawane automatycznie:

Kod:

├── net_prio
│   ├── cgroup.clone_children
│   ├── cgroup.procs
│   ├── cgroup.sane_behavior
│   ├── lxc
│   │   ├── cgroup.clone_children
│   │   ├── cgroup.procs
│   │   ├── net_prio.ifpriomap
│   │   ├── net_prio.prioidx
│   │   ├── notify_on_release
│   │   ├── server_www
│   │   │   ├── cgroup.clone_children
│   │   │   ├── cgroup.procs
│   │   │   ├── net_prio.ifpriomap
│   │   │   ├── net_prio.prioidx
│   │   │   ├── notify_on_release
│   │   │   └── tasks
│   │   └── tasks
│   ├── net_prio.ifpriomap
│   ├── net_prio.prioidx
│   ├── notify_on_release
│   ├── release_agent
│   └── tasks

Także zdaje się to działać poprawnie.

Ostatnio edytowany przez morfik (2014-10-14 19:56:09)

Offline

 

#9  2014-10-14 20:21:52

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

Cgstart u mnie montuje wsio w  [b]/cgroup[/b], do tego OpenRC czy inne licho montuje w [b]/sys/fs/cgroup[/b].
Skrypcio robi wszystkie grupy,  po nim wstaje [b]/usr/sbin/cgrulesengd[/b] i pilnuje, żeby wszystkie programy przy starcie lądowały w odpowiednich przegródkach.

Kod:

cat /proc/cgroups
#subsys_name    hierarchy    num_cgroups    enabled
cpuset    2    27    1
cpu    3    46    1
cpuacct    4    25    1
memory    5    46    1
devices    6    1    1
freezer    7    1    1
net_cls    8    38    1
blkio    9    19    1
perf_event    10    1    1
net_prio    11    1    1
hugetlb    12    1    1
debug    13    1    1

Tu wiele nie widać, ale wsio co trzeba, ma odpowiednie grupy.

Kod:

cat /proc/`pidof firefox`/cgroup
13:debug:/
12:hugetlb:/
11:net_prio:/
10:perf_event:/
9:blkio:/
8:net_cls:/users/firefox
7:freezer:/
6:devices:/
5:memory:/users/firefox
4:cpuacct:/
3:cpu:/users/firefox
2:cpuset:/
1:name=openrc:/

Ostatnio edytowany przez Jacekalex (2014-10-14 20:29:20)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#10  2014-10-14 20:35:21

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

Z tego co czytam sobie, to brakuje jednej rzeczy -- /sys/fs/cgroup/net_filter , tutaj info http://lwn.net/Articles/569678/ . Jeszcze nie czytałem artykułu, tylko przejrzałem i tam jest coś o "-m cgroup" . Z tym, że u mnie póki co wyrzuca:

Kod:

root:~# mkdir /sys/fs/cgroup/net_filter
root:~# mount -t cgroup -o net_filter net_filter /sys/fs/cgroup/net_filter
mount: special device net_filter does not exist

Tutaj są załadowane moduły:

Kod:

root:~# lsmod | grep -i cgr
cls_cgroup             12761  0 
xt_cgroup              12465  0 
x_tables               27111  22 xt_cgroup,ip6table_filter,xt_mark,xt_CT,xt_comment,xt_recent,ip_tables,xt_tcpudp,xt_limit,xt_owner,xt_conntrack,xt_LOG,xt_nat,xt_set,xt_multiport,iptable_filter,xt_connmark,ipt_REJECT,iptable_mangle,ip6_tables,iptable_raw,ip6t_REJECT

Zaraz obadam i będzie miało to wszystkie 4 łapy. xD

Offline

 

#11  2014-10-14 20:41:36

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

Raczej nie pójdzie, xt_cgroup czyta z [b]/sys/fs/cgroup/net_cls/*/classid[/b]


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#12  2014-10-14 20:45:18

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

Coś jednak trzeba więcej pomyśleć nad tym.

Offline

 

#13  2014-10-14 23:19:52

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

SOA#1 coś za bardzo kombinujesz.

Pokaż:

Kod:

iptables -m cgroup --help |tail -n2

Prawidłowy wynik:

Kod:

cgroup match options:
[!] --cgroup fwid  Match cgroup fwid

Proces pakujący programy gdzie trzeba:

Kod:

root      5847  0.1  0.0  22372  3976 ?        Ss   18:08   0:23 /usr/sbin/cgrulesengd --nodaemon --nolog

Podnosi go  skrypt startowy [b]/etc/init.d/cgred[/b].

Resztę u mnie robi skrypcio [b]cgstart[/b] i wszystko śmiga jak Pan Bóg przykazał.

A u Ciebie gimnastyki, kombinacje, ino rezultatu jakoś nie widać i nie slychać.


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#14  2014-10-15 01:50:29

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

No bo przerabiałem skrypt startowy -- w końcu ma ręce i nogi. xD

Kod:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          cgrulesengd
# Required-Start:    $local_fs $syslog
# Required-Stop:     $local_fs $syslog
# Should-Start:      cgmanager cgroupfs-mount cgproxy 
# Should-Stop:       cgmanager cgroupfs-mount cgproxy 
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: start and stop the cgroups rules engine daemon
# Description:         CGroup Rules Engine is a tool for automatically using \
#                     cgroups to classify processes
### END INIT INFO

# Author: Mikhail Morfikov <morfikov@gmail.com>

# Do NOT "set -e"

PATH=/sbin:/usr/sbin:/bin:/usr/bin

NAME="cgrulesengd"
DESC="CGroup Rules Engine Daemon"
SCRIPTNAME="/etc/init.d/$NAME"
PIDFILE="/var/run/$NAME.pid"
LOCKFILE="/run/lock/$NAME.lock"
DAEMON="/usr/sbin/$NAME"
DAEMON_ARGS="-n --nolog"

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 1

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start()
{
    if [ -f "$LOCKFILE" ]; then
        log_warning_msg "$NAME is already running with PID `cat ${PIDFILE}`"
        exit 0
    fi

    log_daemon_msg "Starting $DESC" "$NAME"
    start-stop-daemon --start --quiet --make-pidfile --pidfile $PIDFILE --background --name $NAME --exec $DAEMON -- $DAEMON_ARGS
    RETVAL="$?"

    if [ "$RETVAL" -eq "0" ]; then
        log_end_msg 0
        touch "$LOCKFILE"
    else
        log_end_msg 1
    fi
}

do_stop()
{
    if [ ! -f "$LOCKFILE" ]; then
        log_warning_msg "$NAME is not running, so it can't be stopped"
        exit 0
    fi
    
    log_daemon_msg "Stopping $DESC" "$NAME"
    start-stop-daemon --stop --quiet --pidfile $PIDFILE --name $NAME
    RETVAL="$?"

    if [ "$RETVAL" -eq "0" ]; then
        log_end_msg 0
        rm -f $PIDFILE $LOCKFILE
    else
        log_end_msg 1
    fi
}


case "$1" in
    start)
        do_start
    ;;
    stop)
        do_stop
    ;;
    restart)
        do_stop
        do_start
    ;;
    status)
        status_of_proc "$DAEMON" "$NAME"
        exit 0
    ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
        exit 0
    ;;
esac

exit 0

Daemon działa, cgroups jest montowany. Teraz bedę generował regułki z wykorzystaniem tych narzędzi co tam dają.

Co do samego iptables to mój iptables nie ma tego modułu: xD

Kod:

root:~# iptables -m cgroup --help |tail -n2
iptables v1.4.21: Couldn't load match `cgroup':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.

Offline

 

#15  2014-10-15 07:42:53

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

To trzeba znaleźć iptablesa i jajo, co ma ten moduł.

Ja teoretycznie mam tą samą wersję:

Kod:

iptables v1.4.21

Ale skompilowaną z palca prosto z gita, i moduł jest na swoim miejscu.

Kod:

ls  /usr/lib64/xtables/* | grep cgroup
/usr/lib64/xtables/libxt_cgroup.so

W Debianie chyba Developerzy nie dopisali ;)

A w jaju:

Kod:

CONFIG_NETFILTER_XT_MATCH_CGROUP=y

Jak widać też wsio na swoim miejscu. :)

Ostatnio edytowany przez Jacekalex (2014-10-15 07:48:56)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#16  2014-10-15 14:04:27

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

Kernel w debianie też jest w porządku ale coś ten iptables ssie i nie mam pojęcia skąd wziąć ten inny iptables, no bo ten co jest w debianie też ma  v1.4.21 .

Offline

 

#17  2014-10-15 15:58:18

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

[quote=morfik]Kernel w debianie też jest w porządku ale coś ten iptables ssie i nie mam pojęcia skąd wziąć ten inny iptables, no bo ten co jest w debianie też ma  v1.4.21 .[/quote]
Ja mam z tego źródełka:
https://git.netfilter.org/iptables/

A tu łatka:
https://git.netfilter.org/iptables/commit/?id=6465867eb48506687872b838b1ddfee61d1a0aeb

Powinna być w źródle głównym  bez żadnej łaski.

EDIT:
Jest na swoim miejscu:

Kod:

find $PWD -type f | grep cg
/usr/src/netf/iptables/extensions/libxt_cgroup.c
/usr/src/netf/iptables/extensions/libxt_cgroup.man

Więc:

Kod:

 git clone git://git.netfilter.org/iptables.git

Potem jak powiada klasyk "Alleluja i do przodu..." :D

Ostatnio edytowany przez Jacekalex (2014-10-15 16:09:42)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#18  2014-10-15 17:35:58

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

Pobrałem paczkę z repo debiana i ten patch co dałeś linka. Łata się zaaplikowała bez problemu i mam teraz:

Kod:

# dpkg -L iptables | grep cgr
/lib/xtables/libxt_cgroup.so
# iptables -m cgroup --help |tail -n2
cgroup match options:
[!] --cgroup fwid  Match cgroup fwid

Tylko, że jeśli iść według instrukcji pod tym linkiem http://lwn.net/Articles/569678/ , to nie działa, nie ma tego systemu plików net_filter . Jak określic ID ?

Ostatnio edytowany przez morfik (2014-10-15 17:54:05)

Offline

 

#19  2014-10-15 19:29:26

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

[quote=morfik]Pobrałem paczkę z repo debiana i ten patch co dałeś linka. Łata się zaaplikowała bez problemu i mam teraz:

Kod:

# dpkg -L iptables | grep cgr
/lib/xtables/libxt_cgroup.so
# iptables -m cgroup --help |tail -n2
cgroup match options:
[!] --cgroup fwid  Match cgroup fwid

Tylko, że jeśli iść według instrukcji pod tym linkiem http://lwn.net/Articles/569678/ , to nie działa, nie ma tego systemu plików net_filter . Jak określic ID ?[/quote]
Moduł cgroup już jest na swoim miejscu.

Jak określić ID?

Kod:

iptables -S | grep cgroup
-A OUTPUT -m cgroup --cgroup 1 -j ACCEPT
-A OUTPUT -m cgroup --cgroup 2 -j ACCEPT
-A OUTPUT -m cgroup --cgroup 3 -j ACCEPT
-A OUTPUT -m cgroup --cgroup 4 -j ACCEPT
-A OUTPUT -m cgroup --cgroup 5 -j ACCEPT
-A OUTPUT -m cgroup --cgroup 9 -j ACCEPT

W skrypcie [b]Cgstart[/b], masz tam sznurka wyżej do całego skrypta:

Kod:

grep firefox `which cgstart` | grep cls
mkdir -p $CGDIR/net_cls/users/firefox
echo '3' > $CGDIR/net_cls/users/firefox/net_cls.classid
echo '1' > $CGDIR/net_cls/users/firefox/cgroup.clone_children

Trudne?

To by było na tyle.
;-)

Ostatnio edytowany przez Jacekalex (2014-10-15 19:30:55)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#20  2014-10-15 19:58:04

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

Czyli to jest to samo co przy traffic control? Z tym, że już się nie precyzuje:

Kod:

echo '0x00010005' > $CGDIR/net_cls/users/firefox/net_cls.classid

tylko

Kod:

echo '5'' > $CGDIR/net_cls/users/firefox/net_cls.classid

Zaraz popatrzę.

EDIT:

No i dział. Łapie i przychodzące i wychodzące pakiety. Zaraz jakoś milusio sobie ogarnę ten ruch p2p. xD

Ostatnio edytowany przez morfik (2014-10-15 20:07:43)

Offline

 

#21  2014-10-15 20:38:38

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

Kod:

echo '0x00010005' > $CGDIR/net_cls/users/firefox/net_cls.classid

[/quote]
CO TO JEST?

Kod:

echo '5' > $CGDIR/net_cls/users/firefox/net_cls.classid

i musi działać, jak sobie kernel sam  przeliczy na układ szesnastkowy, to nie twoja sprawa, tylko kernela. :D

To wpisywanie cyframi szesnastkowymi to pieprzenie Red-Hatowców, którzy tak próbują zaciemnieć sytuację, żeby obsługę Cgroup sprzedawać jako 4 stopnie szkolenia po 1000$ za jeden stopień wtajemniczenia.
Całą dokumentację SELinuxa tak zaszyfrowali, że anioła by szlag trafił.
Ale tak to jest, jak marketingowy bełkot jakiejś korpo nazywa się dokumentacją.

No i dział. Łapie i przychodzące i wychodzące pakiety. Zaraz jakoś milusio sobie ogarnę ten ruch p2p. xD[/quote]
Jak łapiesz przychodzące? masz na myśli tylko nawiązanie połączenia z kompa, czy może już jakiś kombinacje w typie cgroup+connmark (np do filtrów TC)?

EDIT:
Kernel niczego nie przelicza, starczają mu zwykle cyferki:

Kod:

~> cat /cgroup/net_cls/users/firefox/net_cls.classid 
3

Jakby jeszcze był jakiś działający moduł do klasyfikowania ruchu przychodzącego na podstawie CONNMARK, to cgroup+commark+iproute dawałoby całkowita kontrolę nad siecią włącznie z regulowaniem pasma dla ruchu przychodzącego per/program, czego w tej chwili nie ma.

Ostatnio edytowany przez Jacekalex (2014-10-15 20:54:54)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#22  2014-10-15 21:04:36

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

No jak co to jest? xD To była jedna z reguł używane przy TC, wiesz chodzi o definiowanie klasy typu 1:5 w tc . Tak to kiedyś działało by ten ruch oznaczyć chyba. W każdym razie ja to kiedyś opisałem w ten sposób:

Ten numerek 0x00010002 , to są dwie liczby hexalne, składające się na określenie grupy. Ta ma numer w postaci 1:2. Cztery pierwsze cyfry odpowiadają liczbie przed ":" , cztery kolejne, cyfrze po ":". Tak więc mamy dwie liczby 0001 oraz 0002, co daje 1:2. Każda z pozycji może przyjąć 16 wartości, w końcu to zapisz szesnastkowy.[/quote]
Także jak teraz jest tylko 1,2,3 to ciekawe jak to przesłać do TC. xD

Co do samego blokowania przychodzących, to przerobiłem trochę twój skrypt i wyszło mi w sumie coś takiego:

Kod:

iptables -t mangle -N time-p2p
iptables -t mangle -A OUTPUT -m cgroup --cgroup 5 -j time-p2p
iptables -t mangle -A INPUT -m cgroup --cgroup 5 -j time-p2p
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 0:03:30 --timestop 0:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 1:03:30 --timestop 1:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 2:03:30 --timestop 2:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 3:03:30 --timestop 3:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 4:03:30 --timestop 4:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 5:03:30 --timestop 5:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 6:03:30 --timestop 6:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 7:03:30 --timestop 7:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 8:03:30 --timestop 8:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 9:03:30 --timestop 9:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 10:03:30 --timestop 10:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 11:03:30 --timestop 11:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 12:03:30 --timestop 12:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 13:03:30 --timestop 13:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 14:03:30 --timestop 14:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 15:03:30 --timestop 15:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 16:03:30 --timestop 16:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 17:03:30 --timestop 17:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 18:03:30 --timestop 18:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 19:03:30 --timestop 19:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 20:03:30 --timestop 20:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 21:03:30 --timestop 21:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 22:03:30 --timestop 22:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -m time --weekdays 1,2,3,4,5,6,7 --timestart 23:03:30 --timestop 23:55:00 --kerneltz -j ACCEPT
iptables -t mangle -A time-p2p -j DROP

Wyciąłem to dopasowanie z samych reguł i włączyłem do przekierowania do łańcucha time-p2p, co odciąży trochę proca, bo tylko pakiety mające 5 będą przechodzić przez te reguł← w łańcuchu time-p2p , a tak by przechodziły wszystkie.

Sprawdziłem wcześniej czy na pojedynczych łańcuchach INPUT I OUTPUT w tablicy FILTER to zaskoczy i zarówno blokowało pakiety w jednym i drugim. Temu sobie pomyślałem, że ja to sobie przeniosę do MANGLE i tam stworzę sobie łańcuchy typu time-p2p i do nich przekieruje ruch z INPUT/OUTPUT, bo i tak nigdzie nie widziałem by ktoś tych łańcuchów używał, jak już to używają POSTROUTING I PREROUTING . No i blokuje. xD

Offline

 

#23  2014-10-15 22:13:48

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

Właśnie przeprowadziłem test w warunkach bojowych i rezultaty są mizerne. xD

Pierwsze co, to ogromna część pakietów przychodzących nie jest dopasowywana do qbittorrenta . Trochę to dziwne, bo część z nich jest dopasowywana, więc czemu ta większa część nie jest? xD

Druga sprawa, to ilość połączeń w tablicy conntracka, po 5min od zrzucania pakietów (w godzinie 0) liczba spadła z 1200 do 700, to przez te pakiety przychodzące, na które może i qbittorrent nie odpowiada ale system ich nie zrzuca i dzięki temu powodują jakiś tam mały ruch, na poziomie 2-3KiB. Poza tym, qbittorrent ma z 80 połączeń w stanie syn-sent i nawet kilka w stanie established. xD

Także, póki nie da rady się zidentyfikować tych pakietów przychodzących i przypisać ich konkretnym procesom, to raczej zostanę przy cronie. xD

Offline

 

#24  2014-10-15 23:40:41

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/urandom
Zarejestrowany: 2008-01-07

Re: Czasowe reguły iptables

Cgroup działa tylko w tablicy filter łańcuchu OUTPUT.

Jeśli chcesz przez cgroup łapać INPUT, to musisz oznaczyć CONNMARKIEM połączenia na OUTPUCIE, i potem na podstawie tego CONNMARKU łapać INPUT.


W FW masz tyle różnych modułów, typu Quota, limit, connlimit, cgroup, że możesz dowolnie przyciąć torrenta czy co tam chcesz.

Torrenta z reszta możesz zidentyfikować w tablicy conntrack dzięki cgroup,
i tym samym zrobić limit liczby połączeń, nie transferu, a także wyciąć połączenia torrenta o określonych godzinach.

Jeśli połączenie jest nawiązane z procesu wewnątrz systemu, to masz wpis w tablicy Conntrack, jeśli w tedy przed dopasowanie grupy przy pomocy cgroup, dasz connmark, to te połączenia (i pakiety, które nimi lecą) będą oznakowane.

Jeśli natomiast masz otwarty port torrenta, i przychodzą do niego połączenia z zewnątrz, to przychodzą na konkrenty, otwarty port docelowy na twoim kompie, i też znając port możesz je markować i blokować do woli.

W ten sposób możesz ogarnąć każdy pakiet, jaki przechodzi przez FW i należy do połączeń TCp czy UDP, a problemem nie jest FW, problem siedzi przed klawiaturą.

Ostatnio edytowany przez Jacekalex (2014-10-16 01:12:23)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#25  2014-10-16 11:31:37

  morfik - Cenzor wirtualnego świata

morfik
Cenzor wirtualnego świata
Skąd: ze WSI
Zarejestrowany: 2011-09-15
Serwis

Re: Czasowe reguły iptables

Ja markowanie mam zrobione w taki sposób:

Kod:

    iptables -t mangle -N qos_egress
    iptables -t mangle -N qos_ingress

    iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
    iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT
    iptables -t mangle -A PREROUTING -i bond0 -j qos_ingress
    iptables -t mangle -A PREROUTING -j CONNMARK --save-mark
    
    iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark
    iptables -t mangle -A POSTROUTING -m mark ! --mark 0 -j ACCEPT
    iptables -t mangle -A POSTROUTING -o bond0 -j qos_egress
    iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark

    iptables -t mangle -A qos_egress -s 192.168.1.0/24 -d 192.168.1.0/24 -j MARK --set-mark 10
    iptables -t mangle -A qos_egress -s 192.168.1.0/24 -d 192.168.1.0/24 -j RETURN
    iptables -t mangle -A qos_egress -m owner --gid-owner p2p -j MARK --set-mark 5
    iptables -t mangle -A qos_egress -m owner --gid-owner p2p -j RETURN
    iptables -t mangle -A qos_egress -m owner --gid-owner morfik -j MARK --set-mark 2
    iptables -t mangle -A qos_egress -m owner --gid-owner morfik -j RETURN
    iptables -t mangle -A qos_egress -m owner --gid-owner root -j MARK --set-mark 3
    iptables -t mangle -A qos_egress -m owner --gid-owner root -j RETURN
    iptables -t mangle -A qos_egress -s 192.168.10.0/24 -j MARK --set-mark 4
    iptables -t mangle -A qos_egress -s 192.168.10.0/24 -j RETURN

    iptables -t mangle -A qos_ingress -p tcp --dport 22222 -j MARK --set-mark 5
    iptables -t mangle -A qos_ingress -p tcp --dport 22222 -j RETURN
    iptables -t mangle -A qos_ingress -p udp --dport 22222 -j MARK --set-mark 5
    iptables -t mangle -A qos_ingress -p udp --dport 22222 -j RETURN

I według tego co piszesz, to powinno oznaczyć cały ruch p2p? Qbittorrenta odpalam z grupą p2p, bo on generuje ruch też na innych portach niż ten ustawiony w opcjach.TC bez problemu kolejkuje ten ruch, także wszystkie stosowne pakiety na wyjściu są dobrze oznaczane.

Teraz dopisałem te 4 ostatnie linijki. I sprawdziłem jak to będzie wyglądać gdy dopiszę te dwie poniższe linijki do iptables:

Kod:

iptables -I INPUT -m mark --mark 5 -j DROP
iptables -I OUTPUT -m cgroup --cgroup 5 -j DROP

No i blokuje zarówno to co przychodzi jak i to co wychodzi. Po 5min, ilość wpisów w tablicy conntracka spadła chyba do 150, po kilku następnych do 50.

Tylko, że w sumie to mi ten moduł cgroup teraz do niczego nie jest potrzebny, bo mógłbym zastąpić moduł cgroup modułem mark i wrzucić te dwa poniższe wpisy do iptables:

Kod:

iptables -t mangle -A INPUT -m mark --mark 5 -j DROP
iptables -t mangle -A POSTROUTING -m mark --mark 5 -j DROP

I zgodnie z tym obrazkiem:

[img]http://i.imgur.com/hgzULrm.png[/img]

Powinno zrobić swoje. I z tego co widzę, to robi. Czyli na dobrą sprawę, to moduł owner zostałby zastąpiony przez moduł cgroup, przynajmniej na wyjściu, no bo ten owner też można używać tylko na wyjściu. Co lepsze? owner czy cgroup? xD

Ostatnio edytowany przez morfik (2014-10-16 13:13:27)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)

[ Generated in 0.011 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00012 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00098 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.145.164.47' WHERE u.id=1
0.00122 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.145.164.47', 1732815022)
0.00038 SELECT * FROM punbb_online WHERE logged<1732814722
0.00059 SELECT topic_id FROM punbb_posts WHERE id=277636
0.00028 SELECT id FROM punbb_posts WHERE topic_id=26550 ORDER BY posted
0.00029 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26550 AND t.moved_to IS NULL
0.00028 SELECT search_for, replace_with FROM punbb_censoring
0.00131 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26550 ORDER BY p.id LIMIT 0,25
0.00085 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26550
Total query time: 0.00634 s