The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Нужна помощь по настройке iptables"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Маршрутизация, NAT / Linux)
Изначальное сообщение [ Отслеживать ]

"Нужна помощь по настройке iptables"  +/
Сообщение от LonelyBeast (ok) on 26-Янв-12, 15:41 
Здравствуйте.

Подскажите пожалуйста как мне правильно настроить iptables.

У меня установлен сервер Ubuntu 11.10 x64. На нем установлено 2 сетевых карты:

eth0 (213.xxx.xxx.xxx) — внешний интерфейс
eth1 (192.168.99.1 ) - внутренний интерфейс, локальная сеть 192.168.99.0/24

Выход в интернет осуществляется через pppoe (интерфейс ppp0), с динамическим адресом. Внутри туннеля pppoe провайдер заворачивает на меня пул из 5 статических ip адресов  213.xxx.xxx.xxx/28.
На интерфейсе eth0 с ip адреса  213.xxx.xxx.xxx поднят IP SEC VPN туннель с Cisco ASA (ip 83.xxx.xxx.xxx), за которой находится локальная сеть (192.168.1.0/24).
При запуске сервера у меня выполняются вот такие настройки для iptables

# !/bin/sh
#Включаем ip forward
echo 1 > /proc/sys/net/ipv4/ip_forward

#Добавляем роутинг на локальные сети для VPN
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.99.1

# Настраиваем iptables
INET_IP="213.xxx.xxx.xxx"
INET_DMZ="213.xxx.xxx.xxx/28"
LOCAL_NET="192.168.99.0/24"
ASA_IP="83.xxx.xxx.xxx"
VPN_LOCAL_NET="192.168.1.0/24"


#Сбрасываем настройки
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F

#Почта
iptables -A INPUT -i eth0 -p tcp -d $INET_IP --dport 25 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -d $INET_IP --dport 993 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -d $INET_IP --dport 465 -j ACCEPT

#ssh
iptables -A INPUT -i eth0 -p tcp -d $INET_IP --dport 22 -j ACCEPT

#разрешаем ходить траффику между интерфейсами (тут я не уверен)
iptables -A FORWARD -s $LOCAL_NET -i eth1 -j ACCEPT
iptables -A FORWARD -d $LOCAL_NET -o eth1 -j ACCEPT

iptables -A FORWARD -s $LOCAL_NET -i eth0 -j ACCEPT
iptables -A FORWARD -d $LOCAL_NET -o eth0 -j ACCEPT

#разрешаем нужные порты для VPN туннеля
iptables -A INPUT -p udp -i eth0 -s $VPN_ASA_IP --sport 500 --dport 500 -j ACCEPT
iptables -A OUTPUT -p udp -o eth0 -d $VPN_ASA_IP --sport 500 --dport 500 -j ACCEPT

iptables -A INPUT -p esp -i eth0 -s $VPN_ASA_IP -j ACCEPT
iptables -A OUTPUT -p esp -o eth0 -d $VPN_ASA_IP -j ACCEPT

iptables -A INPUT -p ah -i eth0 -s $VPN_ASA_IP -j ACCEPT
iptables -A OUTPUT -p ah -o eth0 -d $VPN_ASA_IP -j ACCEPT

iptables -A INPUT -i eth0 -s $VPN_ASA_IP -j DROP
iptables -A OUTPUT -o eth0 -d $VPN_ASA_IP -j DROP


#настраиваем нат для VPN (без этого удаленная сеть недоступна)
iptables -t nat -A POSTROUTING -s $LOCAL_NET -d $VPN_LOCAL_NET -o ppp0 -j SNAT --to-source 192.168.99.1


#настраиваем нат для локальной сети, включая сам сервер. При этом сервера из $INET_DMZ будут ходить со совими реальными ip адресами
iptables -t nat -A POSTROUTING ! -s $INET_DMZ -o ppp0 -j SNAT --to-source $INET_IP

#Запрещаем все что не разрешено
iptables -A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options
iptables -A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable

iptables -A FORWARD -o eth0 -p tcp -j DROP
iptables -A FORWARD -o eth1 -p tcp -j DROP

После выполнения этого скрипа iptables выглядит вот так:

root@ss:~# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination        

Chain INPUT (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination        
SNAT       all  --  192.168.99.0/24      192.168.1.0/24      to:192.168.99.1
SNAT       all  -- !213.xxx.xxx.xxx/28   0.0.0.0/0           to:213.xxx.xxx.xxx

root@ss:~# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
fail2ban-dovecot  tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 80,443,25,465,110,995,143,993,4190
fail2ban-postfix  tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 80,443,25,465,110,995,143,993,4190
fail2ban-roundcube  tcp  --  0.0.0.0/0            0.0.0.0/0           multiport dports 80,443,25,465,110,995,143,993,4190
fail2ban-ssh  tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            213.xxx.xxx.xxx     tcp dpt:25
ACCEPT     tcp  --  0.0.0.0/0            213.xxx.xxx.xxx     tcp dpt:993
ACCEPT     tcp  --  0.0.0.0/0            213.xxx.xxx.xxx     tcp dpt:465
ACCEPT     tcp  --  0.0.0.0/0            213.xxx.xxx.xxx     tcp dpt:22
ACCEPT     udp  --  83.xxx.xxx.xxx        0.0.0.0/0           udp spt:500 dpt:500
ACCEPT     esp  --  83.xxx.xxx.xxx        0.0.0.0/0          
ACCEPT     ah   --  83.xxx.xxx.xxx        0.0.0.0/0          
DROP       all  --  83.xxx.xxx.xxx        0.0.0.0/0          
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x13/0x02 LOG flags 2 level 7
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x13/0x02 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     all  --  192.168.99.0/24      0.0.0.0/0          
ACCEPT     all  --  0.0.0.0/0            192.168.99.0/24    
ACCEPT     all  --  192.168.99.0/24      0.0.0.0/0          
ACCEPT     all  --  0.0.0.0/0            192.168.99.0/24    
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0          
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0          

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     udp  --  0.0.0.0/0            83.xxx.xxx.xxx       udp spt:500 dpt:500
ACCEPT     esp  --  0.0.0.0/0            83.xxx.xxx.xxx      
ACCEPT     ah   --  0.0.0.0/0            83.xxx.xxx.xxx      
DROP       all  --  0.0.0.0/0            83.xxx.xxx.xxx      

Chain fail2ban-dovecot (1 references)
target     prot opt source               destination        
RETURN     all  --  0.0.0.0/0            0.0.0.0/0          

Chain fail2ban-postfix (1 references)
target     prot opt source               destination        
RETURN     all  --  0.0.0.0/0            0.0.0.0/0          

Chain fail2ban-roundcube (1 references)
target     prot opt source               destination        
RETURN     all  --  0.0.0.0/0            0.0.0.0/0          

Chain fail2ban-ssh (1 references)
target     prot opt source               destination        
RETURN     all  --  0.0.0.0/0            0.0.0.0/0          

Теперь о том, что я хочу — я хочу чтобы трафик из подсети 192.168.99/24 проходил до удалённой подсети 192.168.1.0/24 без ната. Как мне это сделать? Если я убираю запись

iptables -t nat -A POSTROUTING -s $LOCAL_NET -d $VPN_LOCAL_NET -o ppp0 -j SNAT --to-source 192.168.99.1

то у меня получается следующее: пакет уходит от 192.168.99.2 → 192.168.99.1 → 192.168.1.2
а вот потом он приходит так 192.168.1.2 →  213.xxx.xxx.xxx →  192.168.99.2.
Естественно, что при этом ничего не работает, т. к. ответ приходит не от того ip с которого его ждали …. Что у меня неправильно?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Нужна помощь по настройке iptables"  +/
Сообщение от КуКу (ok) on 26-Янв-12, 18:53 
"На интерфейсе eth0 с ip адреса  213.xxx.xxx.xxx поднят IP SEC VPN туннель с Cisco ASA (ip 83.xxx.xxx.xxx)"

Если я правильно понял, то почему бы не попробывать разрулить маршрутизацией через тунель?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Нужна помощь по настройке iptables"  +/
Сообщение от LonelyBeast (ok) on 26-Янв-12, 18:55 
> "На интерфейсе eth0 с ip адреса  213.xxx.xxx.xxx поднят IP SEC VPN
> туннель с Cisco ASA (ip 83.xxx.xxx.xxx)"
> Если я правильно понял, то почему бы не попробывать разрулить маршрутизацией через
> тунель?

Если я прописываю роутинг на 213.xxx.xxx.xxx - то вообще ничего не работает :( не спасает даже нат.
Можете пояснить, что конкретно Вы предлагаете?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Нужна помощь по настройке iptables"  +/
Сообщение от Loly on 26-Янв-12, 19:56 
IPsec Ubuntu - racoon, ipsec-tools, openswan, strongswan?

покажите route -n или ip r s.

Для начала разберитесь с iptables.

> #Включаем ip forward
> echo 1 > /proc/sys/net/ipv4/ip_forward

Ето должно быть в /etc/sysctl.conf
net.ipv4.ip_forward=1

> #Сбрасываем настройки
> iptables -F INPUT
> iptables -F OUTPUT
> iptables -F FORWARD
> iptables -t nat -F

У Вас есть "цепочки" fail2ban-* но ни в этом скрипте (будьте бдительны).

#------------------------------------------------------------------------------
# Cleanup.
#------------------------------------------------------------------------------

# Delete all rules.
iptables -F
iptables -t nat -F
iptables -t mangle -F

# Delete all (non-builtin) user-defined chains.
iptables -X
iptables -t nat -X
iptables -t mangle -X

# Zero all packet and byte counters.
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z

#------------------------------------------------------------------------------
# Default policies.
#------------------------------------------------------------------------------

# Drop everything by default.
# Note: The default policies are set _before_ flushing the chains, to prevent
# a short timespan between flushing the chains and setting policies where
# any traffic would be allowed.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# LOG packets, then DROP them.
iptables -N DROPLOG
iptables -A DROPLOG -j -j LOG --log-level 4 --log-prefix "DROP "
iptables -A DROPLOG -j DROP

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


> #разрешаем ходить траффику между интерфейсами (тут я не уверен)
> iptables -A FORWARD -s $LOCAL_NET -i eth1 -j ACCEPT
> iptables -A FORWARD -d $LOCAL_NET -o eth1 -j ACCEPT
> iptables -A FORWARD -s $LOCAL_NET -i eth0 -j ACCEPT
> iptables -A FORWARD -d $LOCAL_NET -o eth0 -j ACCEPT

Что куда вы разрешаете?

> #Запрещаем все что не разрешено
> iptables -A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN
> -j LOG --log-level 7 --log-tcp-options
> iptables -A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN
> -j REJECT --reject-with icmp-port-unreachable

Ну запритили TCP(!) трафик и что?

# LOG packets, then DROP them.
-A INPUT   -j DROPLOG
-A OUTPUT  -j DROPLOG
-A FORWARD -j DROPLOG


> то у меня получается следующее: пакет уходит от 192.168.99.2 → 192.168.99.1 →
> 192.168.1.2
> а вот потом он приходит так 192.168.1.2 →  213.xxx.xxx.xxx → 192.168.99.2.
> #настраиваем нат для VPN (без этого удаленная сеть недоступна)
> iptables -t nat -A POSTROUTING -s $LOCAL_NET -d $VPN_LOCAL_NET -o ppp0 -j
> SNAT --to-source 192.168.99.1
> #настраиваем нат для локальной сети, включая сам сервер. При этом сервера из
> $INET_DMZ будут ходить со совими реальными ip адресами
> iptables -t nat -A POSTROUTING ! -s $INET_DMZ -o ppp0 -j SNAT
> --to-source $INET_IP

это маршрутизация. там (в сети 192.168.1) должны знать что хост 192.168.99.2 надо искать за 192.168.99.1.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Нужна помощь по настройке iptables"  +/
Сообщение от LonelyBeast (ok) on 26-Янв-12, 21:40 
> IPsec Ubuntu - racoon, ipsec-tools, openswan, strongswan?

racoon + ipsec-tools
> покажите route -n или ip r s.

root@ss:~# ip r s
default dev ppp0  scope link
192.168.1.0/24 via 192.168.99.1 dev eth1  scope link
192.168.99.0/24 dev eth1  proto kernel  scope link  src 192.168.99.1
212.xxx.xxx.xxx dev ppp0  proto kernel  scope link  src 95.xxx.xxx.xxx
213.xxx.xxx.xxx/29 dev eth0  proto kernel  scope link  src 213.xxx.xxx.xxx

> Для начала разберитесь с iptables.

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

>[оверквотинг удален]
>> а вот потом он приходит так 192.168.1.2 →  213.xxx.xxx.xxx → 192.168.99.2.
>> #настраиваем нат для VPN (без этого удаленная сеть недоступна)
>> iptables -t nat -A POSTROUTING -s $LOCAL_NET -d $VPN_LOCAL_NET -o ppp0 -j
>> SNAT --to-source 192.168.99.1
>> #настраиваем нат для локальной сети, включая сам сервер. При этом сервера из
>> $INET_DMZ будут ходить со совими реальными ip адресами
>> iptables -t nat -A POSTROUTING ! -s $INET_DMZ -o ppp0 -j SNAT
>> --to-source $INET_IP
> это маршрутизация. там (в сети 192.168.1) должны знать что хост 192.168.99.2 надо
> искать за 192.168.99.1.

Cisco ASA умная железка, она и так знает, что траффик для 192.168.99.0/24 надо заворачивать в туннель. И она же является default gateway для подчети 192.168.1.0/24. Так что там точно все нормалдьно. А вот как все организовать на ubuntu я пока еще не разобрался. Предполагаю, что надо сделать 2 вещи:
- правильно прописать роутинг
- правильно настроить FORWARD для того чтобы пакеты беспрепятственно проходили в туннель и обратно.

Верное направление?

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Нужна помощь по настройке iptables"  +/
Сообщение от КуКу (ok) on 27-Янв-12, 12:14 
А Вас линукс видит обе сети(192.168.99.0.24 и 192.168.1.0/24)?

Если да, то нужно проверить разрешен ли форвард пакетов с локальной сети(которя 99) в впн через тунель(ppp0?).

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Нужна помощь по настройке iptables"  +/
Сообщение от КуКу (ok) on 27-Янв-12, 12:37 
Мда нужно спать больше:).
Да Вы смотрите в правильном направлении.
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Нужна помощь по настройке iptables"  +/
Сообщение от LonelyBeast (ok) on 27-Янв-12, 12:40 
> А Вас линукс видит обе сети(192.168.99.0.24 и 192.168.1.0/24)?

да, конечно.
> Если да, то нужно проверить разрешен ли форвард пакетов с локальной сети(которя
> 99) в впн через тунель(ppp0?).

А вот про ppp0 я как то не подумал. Сегодня проверю (и отпишусь), обязательно!


Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Нужна помощь по настройке iptables"  +/
Сообщение от konkor (ok) on 28-Янв-12, 22:57 
    С недавнего времени S2Games продала все права на на игру Heroes Of Newerth игровому сервису GARENA. Т.е. теперь с IP адресом из СНГ залогонится на оффициальной версии клиента на прямую нельзя. 2 недели назад администрация сайта heroesofnewerth.ru предложила свое решение проблемы: создала свой прокси сервер и для пользователей Линукс вопрос решался банальным:
sudo -s echo 78.108.93.36 masterserver.hon.s2games.com >> /etc/hosts.
    Но спустя неделю они решили взымать плату за свои услуги 100р в месяц(1200р в год!!!) при стоимости клиента игры около 1000р. Все бы ничего и можно было бы перейти на Гарену, если не одно НО - для Гарены нет и не предвидится Линукс клиента!!! В поддержке S2Games буквально морозятся... максимум, что предлагают это воспользоваться Wine, но вы наверно в курсе какая разница между нативным клиентом и костылями... Обидно, что я потратил суммарно 100$ на два аккаунта и донорство 40$. В поисках решения многие нашли решение в бесплатных прокси/vpn которых для виндос не мало бесплатных, правда в этом методе есть минусы тоже для всех, в бесплатных прокси серверах доступ открыт не для всех нужных портов и протоколов tcp/udp, поетому заходить в игру приходиться через openvpn, затем разрывать соединение с впн и играть дальше на своем соединении.
    В общем метод сайта heroesofnewerth.ru самый лучший на данный момент...
    Можете ли подсказать как решить этот вопрос? Например через Tor и proxy polipo, чтобы все запросы авторизации на сервера masterserver.hon.s2games.com:80 проходили через polipo, а весь остальной трафик через обычное соединение? Одна из трудностей - это то, что домен masterserver.hon.s2games.com имеет несколько IP адресов... Правда на данный момент авторизация и обновления проходят через 80 порт, на крайний случай приму решение для перенаправления временного всего трафика на 80 порт в polipo(127.0.0.1:8118 - http) / tor (127.0.0.1:9050 - socks).
    ЗЫЖ Уффф... вроде бы все описал. надеюсь что мне смогут помочь на любимом сайте)
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру