[quote=a-x]разве что радикально
Конечно радикально.
Отрубил торенты и можно спокойно спать. Пусть дома качают.[/quote]
торент тоже вещь хитрая smile
[quote=a-x]разве что радикально
Конечно радикально.
Отрубил торенты и можно спокойно спать. Пусть дома качают.[/quote]
торент тоже вещь хитрая smile
Шейпер стоит! Но шейпер ограничивает скорость! Я понимаю что средствами iptables возможно это как то решить. Но как? Так как торент могут ставить на скачку по 20 штук сразу и это то и забивает канал из-за количества соединений!
Ну, так сказано, что соединение устанавливается SYN пакетом, вот их и ограничивайте. -m conntrack --ctstate NEW
Как, тут кому чего больше подходит - limit, recent.
Н.р.
iptables -A torrent -m recent --update --seconds 600 --hitcount 3 -j DROP
iptables -A torrent -m recent --set -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -p tcp --dport [список портов] -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -p tcp -j torrent
Получается, мы не ограничиваем уже установленные соединения, скорость пусть шейпер режет, также мы не ограничванием соединения
к стандартным сервисам, типа веб, фтп и т.д., а остальные новые соединения отправляем в цепочку torrent, которая в данном случае разрешит не более двух новых соединений за 10 минут.
... так это получается применяется к общему потоку. А как, чтобы это можно было сделать определенному ip ? к примеру 192.168.0.2...
... так это получается применяется к общему потоку. А как, чтобы это можно было сделать определенному ip ? к примеру 192.168.0.2...
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.2 -p tcp -j torrent
Простите за безграмотность. Я немного не понял, мне для каждого ip нужно добавлять первые четыре строки и потом для каждого строку с ip ?
iptables -A torrent -m recent --update --seconds 600 --hitcount 3 -j DROP
iptables -A torrent -m recent --set -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -p tcp --dport 80 443 53 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.2 -p tcp -j torrent
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.3 -p tcp -j torrent
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.4 -p tcp -j torrent
...
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.10 -p tcp -j torrent
Так а то чту у меня клиенты ходят через NAT и я ограничиваю скорость через htb для каждого, то у меня путаница какая то получается?
Прошу подскажите поточнее, я не сильно разбираюсь в iptables и оно мне с большим трудом дается.
Спасибо!
Простите за безграмотность. Я немного не понял, мне для каждого ip нужно добавлять первые четыре строки и потом для каждого строку с ip ?
Первые 4 строки один раз добавляются.
А дальше для каждого ип нужно завернуть проверку в цепочку torrent
Т.е. вот эту строчку повторять для каждого ип
[console]iptables -A FORWARD -m conntrack --ctstate NEW -s <ip адрес клиента> -p tcp -j torrent[/console]
astalavista зря! закрой просто все лишние порты и всё.
Первые 4 строки один раз добавляются.
А дальше для каждого ип нужно завернуть проверку в цепочку torrent
Т.е. вот эту строчку повторять для каждого ип
...а через nat пусть тоже будет пробрасываться?
Получается что через nat пусть ходит и через forward тоже?
iptables -S выдает у меня сечас это.
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DMZ_INET_FORWARD_CHAIN
-N DMZ_INPUT_CHAIN
-N DMZ_LAN_FORWARD_CHAIN
-N EXT_ICMP_FLOOD_CHAIN
-N EXT_INPUT_CHAIN
-N EXT_OUTPUT_CHAIN
-N HOST_BLOCK
-N INET_DMZ_FORWARD_CHAIN
-N LAN_INET_FORWARD_CHAIN
-N LAN_INPUT_CHAIN
-N MAC_FILTER
-N RESERVED_NET_CHK
-N SPOOF_CHK
-N UPNP_FORWARD
-N VALID_CHK
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state RELATED -m tcp --dport 1024:65535 -j ACCEPT
-A INPUT -p udp -m state --state RELATED -m udp --dport 1024:65535 -j ACCEPT
-A INPUT -p icmp -m state --state RELATED -j ACCEPT
-A INPUT -j HOST_BLOCK
-A INPUT -i eth2 -j MAC_FILTER
-A INPUT -j SPOOF_CHK
-A INPUT -i eth0 -j VALID_CHK
-A INPUT -i eth0 -p ! icmp -m state --state NEW -j EXT_INPUT_CHAIN
-A INPUT -i eth0 -p icmp -m state --state NEW -m limit --limit 60/sec --limit-burst 100 -j EXT_INPUT_CHAIN
-A INPUT -i eth0 -p icmp -m state --state NEW -j EXT_ICMP_FLOOD_CHAIN
-A INPUT -i eth2 -j LAN_INPUT_CHAIN
-A INPUT -m limit --limit 1/sec -j LOG --log-prefix "Dropped INPUT packet: " --log-level 6
-A INPUT -j DROP
-A FORWARD -i lo -j ACCEPT
-A FORWARD -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -m state --state ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m state --state RELATED -m tcp --dport 1024:65535 -j ACCEPT
-A FORWARD -p udp -m state --state RELATED -m udp --dport 1024:65535 -j ACCEPT
-A FORWARD -p icmp -m state --state RELATED -j ACCEPT
-A FORWARD -j HOST_BLOCK
-A FORWARD -i eth2 -j MAC_FILTER
-A FORWARD -i eth0 -o ! eth0 -j UPNP_FORWARD
-A FORWARD -j SPOOF_CHK
-A FORWARD -i eth0 -j VALID_CHK
-A FORWARD -i eth2 -o eth2 -j ACCEPT
-A FORWARD -i eth2 -o eth0 -j LAN_INET_FORWARD_CHAIN
-A FORWARD -m limit --limit 1/min --limit-burst 3 -j LOG --log-prefix "Dropped FORWARD packet: " --log-level 6
-A FORWARD -j DROP
-A OUTPUT -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A OUTPUT -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -j HOST_BLOCK
-A OUTPUT -f -m limit --limit 3/min -j LOG --log-prefix "FRAGMENTED PACKET (OUT): " --log-level 6
-A OUTPUT -f -j DROP
-A OUTPUT -o eth0 -j EXT_OUTPUT_CHAIN
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-request(ping) flood: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 8 -j DROP
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 3 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-unreachable flood: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 3 -j DROP
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 4 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-source-quench flood: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 4 -j DROP
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 11 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-time-exceeded flood: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 11 -j DROP
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 12 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-param.-problem flood: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 12 -j DROP
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP(other) flood: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -j DROP
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0 -m limit --limit 6/hour --limit-burst 1 -j LOG --log-prefix "TCP port 0 OS fingerprint: " --log-level 6
-A EXT_INPUT_CHAIN -p udp -m udp --dport 0 -m limit --limit 6/hour --limit-burst 1 -j LOG --log-prefix "UDP port 0 OS fingerprint: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0 -j DROP
-A EXT_INPUT_CHAIN -p udp -m udp --dport 0 -j DROP
-A EXT_INPUT_CHAIN -p tcp -m tcp --sport 0 -m limit --limit 6/hour -j LOG --log-prefix "TCP source port 0: " --log-level 6
-A EXT_INPUT_CHAIN -p udp -m udp --sport 0 -m limit --limit 6/hour -j LOG --log-prefix "UDP source port 0: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --sport 0 -j DROP
-A EXT_INPUT_CHAIN -p udp -m udp --sport 0 -j DROP
-A EXT_INPUT_CHAIN -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "ICMP-request: " --log-level 6
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 3 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-unreachable: " --log-level 6
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 4 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-source-quench: " --log-level 6
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 11 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-time-exceeded: " --log-level 6
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 12 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "ICMP-param.-problem: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 1024:65535 ! --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 3/min -j LOG --log-prefix "Stealth scan (UNPRIV)?: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0:1023 ! --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 3/min -j LOG --log-prefix "Stealth scan (PRIV)?: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0:1023 -m limit --limit 6/min --limit-burst 2 -j LOG --log-prefix "Connection attempt (PRIV): " --log-level 6
-A EXT_INPUT_CHAIN -p udp -m udp --dport 0:1023 -m limit --limit 6/min --limit-burst 2 -j LOG --log-prefix "Connection attempt (PRIV): " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 1024:65535 -m limit --limit 6/min --limit-burst 2 -j LOG --log-prefix "Connection attempt (UNPRIV): " --log-level 6
-A EXT_INPUT_CHAIN -p udp -m udp --dport 1024:65535 -m limit --limit 6/min --limit-burst 2 -j LOG --log-prefix "Connection attempt (UNPRIV): " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -j DROP
-A EXT_INPUT_CHAIN -p udp -j DROP
-A EXT_INPUT_CHAIN -p icmp -j DROP
-A EXT_INPUT_CHAIN -m limit --limit 1/min -j LOG --log-prefix "Other-IP connection attempt: " --log-level 6
-A EXT_INPUT_CHAIN -j DROP
-A EXT_OUTPUT_CHAIN -j ACCEPT
-A LAN_INET_FORWARD_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 20/sec --limit-burst 100 -j ACCEPT
-A LAN_INET_FORWARD_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "ICMP-request: " --log-level 6
-A LAN_INET_FORWARD_CHAIN -p icmp -m icmp --icmp-type 8 -j DROP
-A LAN_INET_FORWARD_CHAIN -j ACCEPT
-A LAN_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 20/sec --limit-burst 100 -j ACCEPT
-A LAN_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "ICMP-request: " --log-level 6
-A LAN_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -j DROP
-A LAN_INPUT_CHAIN -j ACCEPT
-A RESERVED_NET_CHK -s 10.0.0.0/8 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "Class A address: " --log-level 6
-A RESERVED_NET_CHK -s 172.16.0.0/12 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "Class B address: " --log-level 6
-A RESERVED_NET_CHK -s 192.168.0.0/16 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "Class C address: " --log-level 6
-A RESERVED_NET_CHK -s 169.254.0.0/16 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "Class M$ address: " --log-level 6
-A RESERVED_NET_CHK -s 10.0.0.0/8 -j DROP
-A RESERVED_NET_CHK -s 172.16.0.0/12 -j DROP
-A RESERVED_NET_CHK -s 192.168.0.0/16 -j DROP
-A RESERVED_NET_CHK -s 169.254.0.0/16 -j DROP
-A SPOOF_CHK -s 192.168.1.0/24 -i eth2 -j RETURN
-A SPOOF_CHK -s 192.168.1.0/24 -m limit --limit 3/min -j LOG --log-prefix "Spoofed packet: " --log-level 6
-A SPOOF_CHK -s 192.168.1.0/24 -j DROP
-A SPOOF_CHK -j RETURN
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -m limit --limit 3/min -j LOG --log-prefix "Stealth XMAS scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -m limit --limit 3/min -j LOG --log-prefix "Stealth XMAS-PSH scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -m limit --limit 3/min -j LOG --log-prefix "Stealth XMAS-ALL scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -m limit --limit 3/min -j LOG --log-prefix "Stealth FIN scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 3/min -j LOG --log-prefix "Stealth SYN/RST scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -m limit --limit 3/min -j LOG --log-prefix "Stealth SYN/FIN scan(?): " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -m limit --limit 3/min -j LOG --log-prefix "Stealth Null scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-option 64 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "Bad TCP flag(64): " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-option 128 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "Bad TCP flag(128): " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-option 64 -j DROP
-A VALID_CHK -p tcp -m tcp --tcp-option 128 -j DROP
-A VALID_CHK -m state --state INVALID -j DROP
-A VALID_CHK -f -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "Fragmented packet: "
-A VALID_CHK -f -j DROP
потом через скрипт
#!/bin/bash
iptables -A POSTROUTING -t nat -s 192.168.1.2 -j SNAT --to-source 10.1.1.1
iptables -A POSTROUTING -t nat -s 192.168.1.3 -j SNAT --to-source 10.1.1.1
iptables -A POSTROUTING -t nat -s 192.168.1.4 -j SNAT --to-source 10.1.1.1
iptables -A POSTROUTING -t nat -s 192.168.1.5 -j SNAT --to-source 10.1.1.1
iptables -A POSTROUTING -t nat -s 192.168.1.6 -j SNAT --to-source 10.1.1.1
iptables -t mangle -A PREROUTING -s 192.168.1.3 -j MARK --set-mark 101
iptables -t mangle -A PREROUTING -s 192.168.1.3 -j RETURN
iptables -t mangle -A PREROUTING -s 192.168.1.4 -j MARK --set-mark 102
iptables -t mangle -A PREROUTING -s 192.168.1.4 -j RETURN
iptables -t mangle -A PREROUTING -s 192.168.1.5 -j MARK --set-mark 103
iptables -t mangle -A PREROUTING -s 192.168.1.5 -j RETURN
iptables -t mangle -A PREROUTING -s 192.168.1.6 -j MARK --set-mark 104
iptables -t mangle -A PREROUTING -s 192.168.1.6 -j RETURNЯ так понимаю что возможно в скрипт дописать это?
Решая не совсем тривиальные задачи, я бы iptables изучил получше, там всё просто, а главное не будет таких ляпов
...а через nat пусть тоже будет пробрасываться?
Получается что через nat пусть ходит и через forward тоже?
достаточно пару картинок глянут, чтобы понять где там нат, а где форвард.
nat - это маршрутизация,
forward - фильтрация.
Это в принципе разные вещи.
Говоря простым языком, то nat говорит куда идти, а forward говорит кому идти (или не идти).
Сделал так
iptables -A torrent -m recent --update --seconds 600 --hitcount 3 -j DROP
iptables -A torrent -m recent --set -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -p tcp --dport 80 443 53 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.2 -p tcp -j torrent
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.3 -p tcp -j torrent
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.4 -p tcp -j torrent
...
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.10 -p tcp -j torrent
Выдает
Couldn't load target `torrent`:/lib/xtables/libipt_torrent.so: cannot open shared object file: No such file or directoryЭто наверное какой то модуль не установлен? Как его установить?
Я не поддерживаю вышестоящую идею но подскажу.
Перед тем как что что кидать в цепочку torrent её надо создать.
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.2 -p tcp -j torrent
ну ну с такими правилами вас юзеры порвут как тузик грелку.
iptables -A FORWARD -m conntrack --ctstate NEW -s 192.168.0.2 -p tcp -j torrent
ну ну с такими правилами вас юзеры порвут как тузик грелку.
А конкретнее, за что будут рвать?
Да потомуч-то по умолчанию всех гонит через torrent
а там через
iptables -A torrent -m recent --update --seconds 600 --hitcount 3 -j DROP
Тут надо по другому. Иметь 2 цепочки
В первую цепочку гнать нам основые порты (53 80 110 5190 и т. д)
Во вторую всё что нам не известно и всякую хрень. Но ещё чтоб на засрали канал настроить tc ну это уже приоритет прохождения.
Помогите пожалуйста практическим советом. Если можно скиньте скрипт, который добавляет эти правила в iptables. Я настолько уже устал, если честно, от этого поиска решения и т.п. что мне уже ... :(
astalavista вы провайдер или кто? Вам уже сказали закрыть все порты и открыть нужные
Сначала найдите проблему потом можно решить.
Тут надо по другому. Иметь 2 цепочки
В первую цепочку гнать нам основые порты (53 80 110 5190 и т. д)
Во вторую всё что нам не известно и всякую хрень. Но ещё чтоб на засрали канал настроить tc ну это уже приоритет прохождения.
Так и было сказано, внимательнее надо бы smile
astalavista вы провайдер или кто? Вам уже сказали закрыть все порты и открыть нужные
Сначала найдите проблему потом можно решить.
Какие порты Вы так настойчиво предлагате закрыть? Обрубить торрент так можно, так вот тогда клиенты и съедят smile