Jump to content

Поделитесь правилами


Guest Admin

Recommended Posts

Она работает и на tcp и на udp.

ИМХО она работает всё-же по UDP, а по TCP она _может_ работать, если её попросить специально :tongue:

 

и по теме: вот моё творчество в плане правил (это переходный вариант к роутингу на несколько инет каналов, поэтому там кое-что лишнее. Не смущайтесь... всё равно я пока не понял, как это настраивать :loop:

---------------------------------------------

#!/bin/bash

# Script to control packet filtering.

# (adapting for 2-3 inet routers)

 

# subnets

tamnet="10.100.0.0/16"

goldnet="10.2.0.0/16"

ornet="10.1.0.0/16"

modem0net="10.0.0.0/29"

modem1net="10.0.51.0/29"

modem2net=""

 

# hosts/routers

modem0_ip="10.0.0.1" #

modem0_gw="10.0.0.2" # my modem

modem0_bk="10.0.0.7" #

modem1_ip="10.0.51.2" #

modem1_gw="10.0.51.1" # Danek modem

modem1_bk="10.0.51.7" #

main_gw="10.100.100.115"

prideland_gw="10.100.151.21" # router to other network

 

# interfaces

LAN="eth0"

WAN0="eth1"

#WAN1="eth0"

WAN1="eth0:1"

 

IPT=/usr/local/sbin/iptables

IP=/sbin/ip

action=$1

 

#Turn on source address verification in kernel

function kernel_setup () {

if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do

echo 1 > $f

done

fi

}

 

function clear () {

echo "Clear iptables chains..."

echo 0 > /proc/sys/net/ipv4/ip_forward

$IPT -F; $IPT -X; $IPT -Z

$IPT -t nat -F; $IPT -t nat -X; $IPT -t nat -Z

$IPT -t mangle -F; $IPT -t mangle -X; $IPT -t mangle -Z

$IPT -P INPUT ACCEPT

$IPT -P FORWARD ACCEPT

$IPT -P OUTPUT ACCEPT

echo "Clear route table..."

route del -net $ornet gw $prideland_gw

route del -net $goldnet gw $prideland_gw

route del -host $prideland_gw gw $main_gw

route del -net $modem0net dev $WAN0

route del -net $modem1net dev $WAN1

route del gw $modem0_ip

$IP route flush all

# srazu vosstalovit' loopback

route add -net 127.0.0.0 netmask 255.0.0.0 lo

# esli nado, podnyat' alias

if [ -z `ifconfig|grep eth0:1` ]; then

ifconfig $WAN1 $modem1_ip netmask 255.255.255.248 broadcast $modem1_bk

fi

echo "---------- Done ----------"

echo

}

 

function start () {

clear

kernel_setup

 

#######################

#Creating custom chains.

 

# Logging chains

$IPT -N LDROP

$IPT -A LDROP -p tcp -j LOG --log-level info --log-prefix "DROP "

$IPT -A LDROP -p udp -j LOG --log-level info --log-prefix "DROP "

$IPT -A LDROP -p icmp -j LOG --log-level info --log-prefix "DROP "

$IPT -A LDROP -f -j LOG --log-level warning --log-prefix "DROP "

$IPT -A LDROP -j DROP

$IPT -N LREJECT

$IPT -A LREJECT -p tcp -j LOG --log-level info --log-prefix "REJECT "

$IPT -A LREJECT -p udp -j LOG --log-level info --log-prefix "REJECT "

$IPT -A LREJECT -p icmp -j LOG --log-level info --log-prefix "REJECT "

$IPT -A LREJECT -f -j LOG --log-level warning --log-prefix "REJECT "

$IPT -A LREJECT -j REJECT

$IPT -N LACCEPT

$IPT -A LACCEPT -p tcp -j LOG --log-level info --log-prefix "ACCEPT "

$IPT -A LACCEPT -p udp -j LOG --log-level info --log-prefix "ACCEPT "

$IPT -A LACCEPT -p icmp -j LOG --log-level info --log-prefix "ACCEPT "

$IPT -A LACCEPT -f -j LOG --log-level warning --log-prefix "ACCEPT "

$IPT -A LACCEPT -j ACCEPT

# Reject and close tcp connect

$IPT -N TREJECT

$IPT -A TREJECT -p tcp -j REJECT --reject-with tcp-reset

$IPT -A TREJECT -p ! tcp -j REJECT --reject-with icmp-port-unreachable

$IPT -A TREJECT -j REJECT

 

# OTHER NET

# Дропать пакеты, предназначенные для форварда в GOLDNET/ORNET

# Пропускать только тех, кто заплатил за доступ к серверу

$IPT -N OTHERNET

$IPT -A OTHERNET -j DROP

 

# billing chain

# через эту цепочку проходят все пакеты из/в интернет

$IPT -N BILL

$IPT -A BILL -j DROP

 

# Examples for billing accept/deny rules

# Пример того, что работает в скриптах вкл/выкл инет

# $IPT -I BILL -d $ip -j RETURN # turn on internet

# $IPT -I BILL -s $ip -j RETURN # turn on internet

# $IPT -D BILL -d $ip -j RETURN # turn off internet

# $IPT -D BILL -s $ip -j RETURN # turn off internet

 

# limit icmp chain

$IPT -N ICMP

$IPT -A ICMP -p icmp -m limit --limit 3/s -j ACCEPT

$IPT -A ICMP -j DROP

 

#######################################################

# Main chains

#######################################################

# PREROUTING ################

echo "Createing tables: PREROUTING..."

# подготовка к извратной маршрутизации

iptables -t mangle -I PREROUTING -p tcp -s 10.100.0.0/16 --dport 20:21 -j MARK --set-mark 0x10

iptables -t mangle -I PREROUTING -p tcp -s 10.100.0.0/16 --dport 22 -j MARK --set-mark 0x10

iptables -t mangle -I PREROUTING -p tcp -s 10.100.0.0/16 --dport 25 -j MARK --set-mark 0x10

iptables -t mangle -I PREROUTING -p tcp -s 10.100.0.0/16 --dport 110 -j MARK --set-mark 0x10

 

# INPUT #####################

echo " INPUT..."

$IPT -A INPUT -i lo -j ACCEPT

 

#Block nonroutable IPs

$IPT -A INPUT -s 10.0.0.0/8 -i $WAN0 -j DROP

$IPT -A INPUT -s 127.0.0.0/8 -i $WAN0 -j DROP

$IPT -A INPUT -s 172.16.0.0/12 -i $WAN0 -j DROP

$IPT -A INPUT -s 192.168.0.0/16 -i $WAN0 -j DROP

#Block Back Orifice

$IPT -A INPUT -p tcp -i $WAN0 --dport 31337 -j LDROP

$IPT -A INPUT -p udp -i $WAN0 --dport 31337 -j LDROP

#Block NetBus

$IPT -A INPUT -p tcp -i $WAN0 --dport 12345:12346 -j LDROP

$IPT -A INPUT -p udp -i $WAN0 --dport 12345:12346 -j LDROP

#Block Trin00

$IPT -A INPUT -p tcp -i $WAN0 --dport 1524 -j LDROP

$IPT -A INPUT -p tcp -i $WAN0 --dport 27665 -j LDROP

$IPT -A INPUT -p udp -i $WAN0 --dport 27444 -j LDROP

$IPT -A INPUT -p udp -i $WAN0 --dport 31335 -j LDROP

 

#Block Multicast

#$IPT -A INPUT -s 224.0.0.0/8 -d 0/0 -j DROP

#$IPT -A INPUT -s 0/0 -d 224.0.0.0/8 -j DROP

 

#Rejecting (not denying) ident requests.

$IPT -A INPUT -p tcp -i $WAN0 --dport 113 -j TREJECT

$IPT -A INPUT -p udp -i $WAN0 --dport 113 -j TREJECT

 

$IPT -A INPUT -p tcp --dport 3128 -i $LAN -j BILL

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPT -A INPUT -p icmp -j ICMP

$IPT -A INPUT -p tcp --dport 22 -i $WAN0 -j DROP # Wapr Old - SSH blocked

$IPT -A INPUT -p tcp --dport 80 -i $WAN0 -j DROP # Wapr Old - HTTP blocked

$IPT -A INPUT -p udp --dport 111 -i $WAN0 -j DROP # Wapr Old - sunrpc

$IPT -A INPUT -p tcp --dport 111 -i $WAN0 -j DROP # Wapr Old - sunrpc

$IPT -A INPUT -p udp --dport 135:138 -i $WAN0 -j DROP # Wapr Old - NetBIOS blocked

$IPT -A INPUT -p udp --dport 445 -i $WAN0 -j DROP # Wapr Old - NetBIOS blocked

$IPT -A INPUT -p tcp --dport 135 -i $WAN0 -j DROP # Wapr Old - NetBIOS blocked

$IPT -A INPUT -p tcp --dport 139 -i $WAN0 -j DROP # Wapr Old - NetBIOS blocked

$IPT -A INPUT -p tcp --dport 143 -i $WAN0 -j DROP # Wapr Old - IMAP blocked

$IPT -A INPUT -p tcp --dport 445 -i $WAN0 -j DROP # Wapr Old - NetBIOS blocked

$IPT -A INPUT -p tcp --dport 593 -i $WAN0 -j DROP # Wapr Old - NetBIOS blocked

$IPT -A INPUT -p tcp --dport 5555:5556 -i $WAN0 -j DROP # Wapr Old - Stargazer blocked

$IPT -A INPUT -p udp --dport 5554:5556 -i $WAN0 -j DROP # Wapr Old - Stargazer blocked

$IPT -A INPUT -p tcp -s ! $tamnet --dport 1114 -j DROP # close all nonlocal query to MiniSQL

$IPT -A INPUT -p tcp -s ! $tamnet --dport 3306 -j DROP # close all nonlocal query to MySQL

$IPT -A INPUT -i $LAN -s $tamnet -j ACCEPT # open local net

 

# FORWARD

echo " FORWARD..."

$IPT -A FORWARD -i lo -j ACCEPT

$IPT -A FORWARD -i $WAN1 -o $LAN # -l BILL # free inet

$IPT -A FORWARD -i $LAN -o $WAN1 # -l BILL # free inet

$IPT -A FORWARD -i $WAN0 -o $LAN -j BILL

$IPT -A FORWARD -i $LAN -o $WAN0 -j BILL

$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPT -A FORWARD -p icmp -j ICMP

 

# OUTPUT

echo " OUTPUT..."

$IPT -A OUTPUT -p tcp --sport 3128 -o $LAN -j BILL # query trough squid

 

# POSTROUTING

echo " POSTROUTING..."

$IPT -t nat -A POSTROUTING -d $goldnet -j SNAT --to-source $main_gw

$IPT -t nat -A POSTROUTING -d $ornet -j SNAT --to-source $main_gw

$IPT -t nat -A POSTROUTING -o $WAN0 -j SNAT --to-source $modem0_ip

# for test two link

#$IPT -t nat -A POSTROUTING -o $WAN1 -j SNAT --to-source $modem1_ip

$IPT -t nat -A POSTROUTING -s $tamnet -d $modem1net -j SNAT --to-source $modem1_ip

echo "Done"

 

# ROUTING TABLE

echo "Creating routing: to networks"

route add -net $tamnet dev $LAN

route add -net $modem0net dev $WAN0

route add -net $modem1net dev $WAN1

route add -net $goldnet gw $prideland_gw

route add -net $ornet gw $prideland_gw

echo " to hosts"

#route add -host $prideland_gw gw $main_gw

echo " default gw"

route add default gw $modem0_ip dev $WAN0 #сам не понял, но без этого не работает :(

route add default gw $modem0_gw dev $WAN0

route del default gw $modem0_ip dev $WAN0

# for test two link

route add default gw $modem1_ip dev $WAN1

 

echo "Done"

 

echo 1 > /proc/sys/net/ipv4/ip_forward

 

}

 

function stop () {

clear

}

 

case $action in

start)

start;;

stop)

stop;;

restart)

stop; start;;

*)

echo "Please, use this script with start/stop/restart option."

esac

-----------------------------

Тут видимо надо добавить схему соединений...

          |                                                |
     +---------+                                      +---------+
     | Router1 |                                      | Router0 |
     +---------+                                      +---------+
          |10.0.51.1       10.0.51.2/29                    |  10.0.0.2
          |                  eth0:1 +-------------+        |
====================================| Server MAIN |--------+
 |     |      |                eth0 +-------------+ eth1
 |     |      |            10.100.100.115/16        10.0.0.1/24
User  User    User

Кстати, если кто мне покажет, как сбалансировать трафик при этой схеме, моя благодарность не будет иметь границ... но в разумных пределах :(

Link to post
Share on other sites
  • 3 weeks later...

Что-то я перепробовал все варианты скриптов, а основную проблемму не решил. подскажите плиз, как убивать открытые соединения.

 

Я закрываю FORWARD и выключаю маскарад для клиента, но если качал что-то то оно и продолжает качать. :)

 

RH9.0, iptables......

Link to post
Share on other sites
Что-то я перепробовал все варианты скриптов, а основную проблемму не решил. подскажите плиз, как убивать открытые соединения.

 

Я закрываю FORWARD и выключаю маскарад для клиента, но если качал что-то то оно и продолжает качать. :)

 

RH9.0, iptables......

По умолчанию какая у тя политика на форвард?

Какая цепочка используется? FILTER?

Как ни крути, стандарт подойдет только в идентичной ситуации.

Всегда приходится что-то по месту править. Проверять. Править....

Link to post
Share on other sites
По умолчанию какая у тя политика на форвард?

DROP

Какая цепочка используется? FILTER?

да

Я опытным путем шел, пока закрыл эту дыру.

Все-таки системы разные, версии, настройки разные, вот и разный результат.

На другом сервере я настраивал людям, так что-то добавлял еще, не так как у себя.

Это все-таки не мастдайка, тут несколько вариантов решения может быть.

Есть тулзы для просмотра проходящего трафика, надо смотреть, вносить изменения, пробовать.

Нет панацеи.

Link to post
Share on other sites

Может я чего не понимаю в этой материи, но попробуй правило на ESTABLISHED и RELATED пакеты поставить ПОСЛЕ правил, добавляемых биллингом.

Link to post
Share on other sites

Я не знаю iptables, но думаю, что и там есть правило, запрещающее не сессии, а ПАКЕТЫ. Может попробовать использовать его?

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...