1

Уважаемые специалисты подскажите возможно ли побороть такое ?

Сервер астериск висит на реальном айпи с одним Eth0

есть скрипт IPtables который замечательно работает но )) только с реальными айпи , то есть если пакет пришел с айпи который разрешен в списке то фаерволл его пропустит ...


проблема возникла с фильтрацией пакетов пришедших от пользователей за натом ...
то есть например сидит абонент с сипфоном на 192.168.1.2 и выходит натом через 8.8.8.8 фаерволл видит пакет от 192.168.1.2 и даже если открыт 8.8.8.8 не пускает его ....
Прописываю доступ с 192.168.1.0/24 и все начинает работать
Открыть доступ пакетам с фейк подсетей наверно не совсем хорошо ... )))
Абонеттов за натом предвидится достаточно ...


Заранее спасибо

а вот и сам скрипт который берет айпи с текстового файла в указанной дериктории )))

#!/bin/sh

# iptables script generated 2010-04-09
# [url]http://www.mista.nu/iptables[/url]

iptables="/sbin/iptables"

# Flush old rules, old custom tables
iptables --flush
iptables --delete-chain

# Enable free use of loopback interfaces
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

for IP in `cat /root/ip.txt`
do

iptables -A INPUT -p tcp ! --syn -m state --state NEW -s $IP -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -s $IP -j ACCEPT ; http for friends
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -s $IP -j ACCEPT ; ssh for friends
iptables -A INPUT -p tcp --dport 5000:65000 -m state --state NEW -s $IP -j ACCEPT ; full access for friends
iptables -A INPUT -p udp --dport 5000:65000 -m state --state NEW -s $IP -j ACCEPT ; full access for friends

done

# По умолчанию ...
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

2

newman пишет:

проблема возникла с фильтрацией пакетов пришедших от пользователей за натом ...

Я так понимаю, что сипфон к астериску снаружи подключается?
Если так и если сипфон действительно за натом, то iptables не должен видеть сеть 192.168.1.0

3

Да, все дело в том, что сам по себе SIP, всего лишь сигнальный протокол и для реальной передачи данных используется RTP.
При передаче пакета происходит след вещь: при машрутизации шлюз за которым висит софтфон меняет адрес отправителя в заголовке пакета, но не учитывает что это SIP и в нем адрес отправителя содержится еще и в "теле" самого пакета (в данных которые несет в себе пакет).  А вот астериск отвечает на пакет исходя из адреса который содержится в САМОМ пакете а не в заголовке.
Есть несколько способов обойти  данную проблему:
1) на шлюзе за которым стоит софтфон загрузить модули ip_conntrack_sip и ip_nat_sip (modprobe ip_conntrack_sip & modprobe ip_nat_sip)
2) на софтфоне заюзать STUN (что это такое, смотри википедию)
3) на самом астериске в файле /etc/asterisk/sip.con включить NAT  для учетки софтфонов которые находятся за натом. (пример смотри далее)

[6543]
deny=0.0.0.0/0.0.0.0
secret=6543
dtmfmode=rfc2833
canreinvite=no
context=from-internal
host=dynamic
type=friend
nat=yes
port=5060
qualify=yes
callgroup=
pickupgroup=
dial=SIP/6543
accountcode=
mailbox=6543@device
permit=0.0.0.0/0.0.0.0
callerid=device <6543>
call-limit=50

4

С отключенным фаерволом все работает )))