Здравствуйте.Подскажите пожалуйста как мне правильно настроить 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 ACCEPTiptables -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 ACCEPTiptables -A INPUT -p esp -i eth0 -s $VPN_ASA_IP -j ACCEPT
iptables -A OUTPUT -p esp -o eth0 -d $VPN_ASA_IP -j ACCEPTiptables -A INPUT -p ah -i eth0 -s $VPN_ASA_IP -j ACCEPT
iptables -A OUTPUT -p ah -o eth0 -d $VPN_ASA_IP -j ACCEPTiptables -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-unreachableiptables -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 destinationChain INPUT (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destinationChain 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.xxxroot@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-unreachableChain 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/0Chain 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.xxxChain fail2ban-dovecot (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0Chain fail2ban-postfix (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0Chain fail2ban-roundcube (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0Chain 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 с которого его ждали …. Что у меня неправильно?
"На интерфейсе eth0 с ip адреса 213.xxx.xxx.xxx поднят IP SEC VPN туннель с Cisco ASA (ip 83.xxx.xxx.xxx)"Если я правильно понял, то почему бы не попробывать разрулить маршрутизацией через тунель?
> "На интерфейсе eth0 с ip адреса 213.xxx.xxx.xxx поднят IP SEC VPN
> туннель с Cisco ASA (ip 83.xxx.xxx.xxx)"
> Если я правильно понял, то почему бы не попробывать разрулить маршрутизацией через
> тунель?Если я прописываю роутинг на 213.xxx.xxx.xxx - то вообще ничего не работает :( не спасает даже нат.
Можете пояснить, что конкретно Вы предлагаете?
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 DROPiptables -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.
> 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 для того чтобы пакеты беспрепятственно проходили в туннель и обратно.Верное направление?
А Вас линукс видит обе сети(192.168.99.0.24 и 192.168.1.0/24)?Если да, то нужно проверить разрешен ли форвард пакетов с локальной сети(которя 99) в впн через тунель(ppp0?).
Мда нужно спать больше:).
Да Вы смотрите в правильном направлении.
> А Вас линукс видит обе сети(192.168.99.0.24 и 192.168.1.0/24)?да, конечно.
> Если да, то нужно проверить разрешен ли форвард пакетов с локальной сети(которя
> 99) в впн через тунель(ppp0?).А вот про ppp0 я как то не подумал. Сегодня проверю (и отпишусь), обязательно!
С недавнего времени 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).
ЗЫЖ Уффф... вроде бы все описал. надеюсь что мне смогут помочь на любимом сайте)