LinuxForum.Fans
Тема

Ограничение скорости и запрет соц. сетей

Автор: XliN 30 сообщений 10919 просмотров
#136741
Kettler написал:
Ведь для web надо 2 порта) 80 (tcp) и 53 (udp) 443 (tcp)

а торрент может работать на любом порте. искать сидов можно по DHT. на практике не получается конечно, но в ED2K всё работает. smile

#136743

А вот мой стандартыный скрипт знаю что надо перевести на переменные но пока лень smile

text

#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F
iptables -F -t nat
iptables -F -t mangle

iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP

#Маскардинг в инет и локалку iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#Разрешаем порты для l2tp iptables -A INPUT -i eth1 -p udp --dport 1701 --sport 1701 -j ACCEPT iptables -A OUTPUT -o eth1 -p udp --sport 1701 --dport 1701 -j ACCEPT iptables -A INPUT -i eth1 -p udp --dport 500 --sport 500 -j ACCEPT iptables -A OUTPUT -o eth1 -p udp --sport 500 --dport 500 -j ACCEPT iptables -A INPUT -i eth1 -p udp --dport 47 --sport 47 -j ACCEPT iptables -A OUTPUT -o eth1 -p udp --sport 47 --dport 17 -j ACCEPT

# разрешаем локальный траффик для loopback и внутренней сети iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT iptables -A INPUT -i eth0 -j ACCEPT iptables -A OUTPUT -o eth0 -j ACCEPT

# ICMP разрешаем пинг с локальной сети провайдера до сервера iptables -A INPUT -i eth1 -p icmp -j ACCEPT iptables -A OUTPUT -o eth1 -p icmp -j ACCEPT iptables -A INPUT -i ppp0 -p icmp -j ACCEPT iptables -A OUTPUT -o ppp0 -p icmp -j ACCEPT

# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса. iptables -A INPUT -m state --state INVALID -j DROP iptables -A FORWARD -m state --state INVALID -j DROP

# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED. # Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным. iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Разрешаем ssh серверу iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -o eth1 -p tcp --sport 22 -j ACCEPT # Разрешаем dns серверу iptables -A INPUT -i eth1 -p udp --sport 53 -j ACCEPT iptables -A OUTPUT -o eth1 -p udp --dport 53 -j ACCEPT

#Разрешаем пинговать узлы интернета iptables -A INPUT -i ppp0 -p icmp -j ACCEPT iptables -A OUTPUT -o ppp0 -p icmp -j ACCEPT

#Разрешаем серверу http и dydns iptables -A INPUT -i ppp0 -p tcp --sport 80 -j ACCEPT iptables -A OUTPUT -o ppp0 -p tcp --dport 80 -j ACCEPT

#Разрешаем серверу https и webmin iptables -A INPUT -i eth1 -p tcp --dport 443 -j ACCEPT iptables -A OUTPUT -o eth1 -p tcp --sport 443 -j ACCEPT iptables -A INPUT -i eth1 -p tcp --dport 10000 -j ACCEPT iptables -A OUTPUT -o eth1 -p tcp --sport 10000 -j ACCEPT

#Netbios серверу нафиг не надо)

#Разрешаем серверу ftp iptables -A INPUT -i ppp0 -p tcp --sport 21 --dport 21 -j ACCEPT iptables -A OUTPUT -o ppp0 -p tcp --sport 21 --dport 21 -j ACCEPT

#Ну а тут разрешаем пользователям внутренней сети доступ в инет и в локалку iptables -A FORWARD -i eth0 -o ppp0 -p tcp -m multiport --dport 80,443,110,25,143,5190 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p udp --dport 53 -j ACCEPT iptables -A FORWARD -i ppp0 -o eth0 -p tcp -m multiport --sport 80,110,443,25,143,5190 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p udp --sport 53 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p tcp -m multiport --dport 80,443,110,25,143,5190 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport --sport 80,110,443,25,143,5190 -j ACCEPT

#Разрешаем пинговать узлы интернета iptables -A FORWARD -i eth0 -o ppp0 -p icmp -j ACCEPT iptables -A FORWARD -i ppp0 -o eth0 -p icmp -j ACCEPT

#Разрешаем RDP iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport 3389 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 3389 -j ACCEPT

#Бхгалтерия iptables -A FORWARD -i eth0 -o ppp0 -p tcp --dport 1024 -j ACCEPT iptables -A FORWARD -i ppp0 -o eth0 -p tcp --sport 1024 -j ACCEPT iptables -A FORWARD -i eth0 -o ppp0 -p udp --dport 55777 -j ACCEPT iptables -A FORWARD -i ppp0 -o eth0 -p udp --sport 55777 -j ACCEPT

#Разрешаем NETBIOS iptables -A FORWARD -i eth0 -o eth1 -p udp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p tcp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p udp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p tcp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT

#Разрешаем пинговать узлы локальной сети iptables -A FORWARD -i eth0 -o eth1 -p icmp -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p icmp -j ACCEPT

#Порт маппинг radmin iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport порт -j DNAT --to-destination ип:порт iptables -A FORWARD -p tcp -s ип --sport порт -j ACCEPT iptables -A FORWARD -p tcp -d ип --dport порт -j ACCEP

И юзеры получают всё что им надо и не каких торрентов и всякой гадости.

Если надо собирать логи как пример

text

iptables -t nat -A PREROUTING -p tcp -i vlan5 --dport 80 -m limit --limit 1/min -j LOG --log-prefix "Incominglocal80: "
iptables -t nat -A PREROUTING -p tcp -i vlan5 --dport 80 -j DNAT --to-destination 172.16.0.100:80

Ну собственно настраиваем syslog-ng

text

source s_all {
        # message generated by Syslog-NG
        internal();
        # standard Linux log source (this is the default place for the syslog()
        # function to send logs to)
        unix-stream("/dev/log");
        # messages from the kernel
        file("/proc/kmsg" log_prefix("kernel: "));
        # use the following line if you want to receive remote UDP logging messages
        # (this is equivalent to the "-r" syslogd flag)
        # udp();
};

# destinations #firewall destination httplocal { file("/var/log/firewall/httplocal.log"); };

#firewall filter httplocal80 { match (Incominglocal80:); };

#firewall log { source(s_all); filter(httplocal80); destination(httplocal); };

#136744
drBatty написал:
в смысле - торренты не работают, а веб работает?

торренты должны работать, но только когда канал свободен.

drBatty написал:
Итого: манипуляции с портами вам НЕ помогут.

Ну, а если не закрывать, а только ограничивать скорость? Насколько я понимаю большинство торрент программ очень хитрожопные, и они лезут через что можно) Качалки будут думать что все круто, и канал загружаться не будет.
Kettler, ну я маленько по другому помечаю

Показать
iptables -t nat -A POSTROUTING -s 192.168.77.0/24 -j MASQUERADE
#помечаем пакеты для инета, остальные на максималке(web-файлопомойка, ftp)
iptables -t mangle -A FORWARD -d 192.168.77.0/24 -j MARK --set-mark 128
iptables -t mangle -A FORWARD -s 192.168.77.0/24 -j MARK --set-mark 128
#помечаем инет для избранных =)
iptables -t mangle -A FORWARD -d 192.168.77.252 -j MARK --set-mark 1000
iptables -t mangle -A FORWARD -s 192.168.77.252 -j MARK --set-mark 1000
и тд

а разделение приоритета хочу сделать по портам через tc.

#136746
3axapp написал:
[quote=drBatty]в смысле - торренты не работают, а веб работает?

торренты должны работать, но только когда канал свободен.

drBatty написал:
Итого: манипуляции с портами вам НЕ помогут.

Ну, а если не закрывать, а только ограничивать скорость? Насколько я понимаю большинство торрент программ очень хитрожопные, и они лезут через что можно) Качалки будут думать что все круто, и канал загружаться не будет.
Kettler, ну я маленько по другому помечаю

Показать
iptables -t nat -A POSTROUTING -s 192.168.77.0/24 -j MASQUERADE
#помечаем пакеты для инета, остальные на максималке(web-файлопомойка, ftp)
iptables -t mangle -A FORWARD -d 192.168.77.0/24 -j MARK --set-mark 128
iptables -t mangle -A FORWARD -s 192.168.77.0/24 -j MARK --set-mark 128
#помечаем инет для избранных =)
iptables -t mangle -A FORWARD -d 192.168.77.252 -j MARK --set-mark 1000
iptables -t mangle -A FORWARD -s 192.168.77.252 -j MARK --set-mark 1000
и тд

а разделение приоритета хочу сделать по портам через tc.[/quote]

PS: кстати эти же правила и дома пригодятся, чтоб вручную не следить за торрентами. Чтоб более нужные вещи не тормозили, ну там ssh, онлайн-видео, онлайн игры

PSS: какой-то глюк. Как сообщение удалить?

#136747

Ну меть порты и после по фильтрам. Извращается каждый как ему удобно.

#136752
3axapp написал:
Насколько я понимаю большинство торрент программ очень хитрожопные, и они лезут через что можно)

там весь фокус в том, что закачка происходит от клиента к клиенту. при этом исходящие порты определяет удалённый сид (в настройках своего торрента), а входящий порт случайный, как и при связи с вебом. Фокус в том, что для поднятия своего рейтинга некоторые сиды ставят 80й порт, и вот такие "заблокированные" качают только с этих сидов, поднимая им рейтинг. Приоритет тоже ничего не даст. Единственная проблема - не найти треккер (торрентсру ЕМНИП не работает на 80ом порту, а может теперь и работает). Но это решаемая проблема, если использовать DHT или Kademlia.

#136783

Торренту надо не только скорость, но и количество одновремено открытых соединений резать.

#136790
drBatty написал:
Приоритет тоже ничего не даст

почему? я ставил приоритет для прокидываемого трафика 0, для всего остального 10. И соответсвенно я даже обновить пакеты на серваке вечером не смог-timeout =) Утром же когда студенты на парах/спят все нормально прошло.
elve, кстати да.

#140590

Подскажите пожалуйста почему клиент из сети 192.168.3.0/24 не имеет выход в инет? Вроде все разрешено.
Вот выкладываю сам скрипт фаирвола.
Мне нужно что бы 192.168.3.254 выходил в инет и был доступ к DNS серверу (192.168.1.77)

Показать

[root@ldap script]# cat /root/script/firewall
#!/bin/bash
inet="ppp0"
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F
iptables -F -t nat
iptables -F -t mangle

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#Маскардинг в инет и локалку
iptables --table nat --append POSTROUTING --out-interface vlan3 -j MASQUERADE
#iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface vlan4 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
#iptables --table nat --append POSTROUTING --out-interface vlan5 -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#iptables -A FORWARD -i vlan3 -s 192.168.3.250 -o ppp0 -j DROP
#iptables -A FORWARD -i vlan3 -s 192.168.3.249 -o ppp0 -j DROP

#Разрешаем гулять всем подсетям
iptables -A FORWARD -i vlan4 -o vlan3 -j ACCEPT
iptables -A FORWARD -i vlan3 -o vlan4 -j ACCEPT
# разрешаем локальный траффик для локальной сети
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -i vlan3 -j ACCEPT
iptables -A OUTPUT -o vlan3 -j ACCEPT

iptables -A INPUT -i vlan4 -j ACCEPT
iptables -A OUTPUT -o vlan4 -j ACCEPT

# ICMP разрешаем пинг с локальной сети провайдера до сервера
iptables -A INPUT -i $inet -p icmp -j ACCEPT
iptables -A OUTPUT -o $inet -p icmp -j ACCEPT

# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED.
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP


# Разрешаем dns серверу
iptables -A INPUT -i $inet -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -o $inet -p udp --dport 53 -j ACCEPT

#Разрешаем серверу http и dydns
iptables -A INPUT -i $inet -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport 80 -j ACCEPT


NUMBERS_I="192.168.1.127 192.168.1.173 192.168.1.174 192.168.1.177 192.168.1.178 192.168.1.179 192.168.1.180"
for number_i in `echo $NUMBERS_I`
do
#Ну а тут разрешаем пользователям внутренней сети доступ в инет и в локалку
iptables -A FORWARD -s $number_i -o $inet -p tcp -m multiport --dport 80,443,110,25,143,5190,20,21,50225 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i -p tcp -m multiport --sport 80,443,110,25,143,5190,20,21,50225 -j ACCEPT
done

NUMBERS_I2="192.168.3.249 192.168.3.250 192.168.3.254"
for number_i2 in `echo $NUMBERS_I2`
do
##Ну а тут разрешаем пользователям внутренней сети доступ в инет и в локалку
iptables -A FORWARD -s $number_i2 -o $inet -p tcp -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i2 -p tcp -j ACCEPT
done

#inet="ppp0"

#Режем входящую
NUMBERS_VLAN="vlan3 vlan4"
for number_vl in `echo $NUMBERS_VLAN`
do
echo $number_vl
#Даём всем инет но min
iptables -t mangle -A FORWARD -i $number_vl -o $inet -j MARK --set-mark 90
iptables -t mangle -A FORWARD -i $inet -o $number_vl -j MARK --set-mark 90

tc qdisc del dev $number_vl root
tc qdisc add dev $number_vl root handle 1: htb
tc class add dev $number_vl parent 1: classid 1:1 htb rate 100Mbit

tc class add dev $number_vl parent 1:1 classid 1:100 htb rate 100Mbit ceil 100Mbit prio 20
tc class add dev $number_vl parent 1:1 classid 1:90 htb rate 300Kbit ceil 400Kbit prio 90
tc class add dev $number_vl parent 1:1 classid 1:80 htb rate 1Mbit ceil 2Mbit prio 80
tc class add dev $number_vl parent 1:1 classid 1:70 htb rate 150Kbit ceil 200Kbit prio 1
tc class add dev $number_vl parent 1:1 classid 1:10 htb rate 1Mbit ceil 3Mbit prio 10

tc qdisc add dev $number_vl parent 1:100 handle 100: sfq perturb 10
tc qdisc add dev $number_vl parent 1:90 handle 90: sfq perturb 10
tc qdisc add dev $number_vl parent 1:80 handle 80: sfq perturb 10
tc qdisc add dev $number_vl parent 1:70 handle 70: sfq perturb 10
tc qdisc add dev $number_vl parent 1:10 handle 10: sfq perturb 10
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 100 fw classid 1:100
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 90 fw classid 1:90
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 80 fw classid 1:80
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 70 fw classid 1:70
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10
done

#Даём начальнику по max
iptables -t mangle -A FORWARD -s 192.168.1.173 -j MARK --set-mark 10
iptables -t mangle -A FORWARD -d 192.168.1.173 -j MARK --set-mark 10

#Между подсетями на 100
iptables -t mangle -A FORWARD -i vlan3 -o vlan4 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -i vlan4 -o vlan3 -j MARK --set-mark 100

#Кому необходим интернет на средней скорости + приоритет на портах
NUMBERS_N="192.168.1.174"
for number_n in `echo $NUMBERS_N`
do
iptables -t mangle -A FORWARD -s $number_n -p tcp -m multiport --dport 80,443,110,25,143,5190,20,21,50225 -j MARK --set-mark 80
iptables -t mangle -A FORWARD -d $number_n -p tcp -m multiport --sport 80,443,110,25,143,5190,20,21,50225 -j MARK --set-mark 80
iptables -t mangle -A FORWARD -s $number_n -p udp -m multiport --dport 80,443,110,25,143,5190,20,21,50225 -j MARK --set-mark 80
iptables -t mangle -A FORWARD -d $number_n -p udp -m multiport --sport 80,443,110,25,143,5190,20,21,50225 -j MARK --set-mark 80
done

#Даём 20Kbit
NUMBERS_MAX="192.168.1.127 192.168.1.177 192.168.1.178 192.168.1.179 192.168.1.180"
for number_mx in `echo $NUMBERS_MAX`
do
iptables -t mangle -A FORWARD -s $number_mx -j MARK --set-mark 70
iptables -t mangle -A FORWARD -d $number_mx -j MARK --set-mark 70
done

NUMBERS_MAX1="192.168.3.250 192.168.3.249 192.168.3.254"
for number_mx1 in `echo $NUMBERS_MAX1`
do
iptables -t mangle -A FORWARD -s $number_mx1 -j MARK --set-mark 90
iptables -t mangle -A FORWARD -d $number_mx1 -j MARK --set-mark 90
done


#Режем исходящую
tc qdisc del dev $inet root
tc qdisc add dev $inet root handle 1: htb
tc class add dev $inet parent 1: classid 1:1 htb rate 100Mbit
tc class add dev $inet parent 1:1 classid 1:90 htb rate 300Kbit ceil 400Kbit prio 90
tc class add dev $inet parent 1:1 classid 1:80 htb rate 1Mbit ceil 2Mbit prio 80
tc class add dev $inet parent 1:1 classid 1:70 htb rate 150Kbit ceil 200Kbit prio 1
tc class add dev $inet parent 1:1 classid 1:10 htb rate 1Mbit ceil 3Mbit prio 10
tc qdisc add dev $inet parent 1:90 handle 90: sfq perturb 10
tc qdisc add dev $inet parent 1:80 handle 80: sfq perturb 10
tc qdisc add dev $inet parent 1:70 handle 70: sfq perturb 10
tc qdisc add dev $inet parent 1:10 handle 10: sfq perturb 10
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 90 fw classid 1:90
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 80 fw classid 1:80
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 70 fw classid 1:70
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10

#140607

iptables -A FORWARD -s $number_i2 -o $inet -p tcp -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i2 -p tcp -j ACCEPT

-p tcp

просто вываливает ошибку

Войдите или зарегистрируйтесь, чтобы ответить.