хостер отключил сеть за то что из моего сервера выходят некоторые пакеты с неправильным адресом отправителя (не тем который выдал хостер)ситуация такая:
все запросы на 80 порт пробрасываются на виртуалку
iptables -t nat -A PREROUTING -p tcp --dst $EXTERNALIP --dport 80 -j DNAT --to-destination 192.168.0.10:80
так же есть правила разрешающие интернет в сети
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source $EXTERNALIP
проблема в том что при большом числе соединений адрес отправителя не заменяется на $EXTERNALIP и некоторые пакеты уходят с адресом отправителя 192.168.0.10 что не приемлемо.# tcpdump -nnn -vvv -i eth0 src net 192.168.0
192.168.0.10.80 > ___.___.___.___.4035: Flags [R], cksum 0x8866 (correct), seq 1610568574, win 0, length 0
19:09:54.331214 IP (tos 0x0, ttl 63, id 20204, offset 0, flags [DF], proto TCP (6), length 40)
192.168.0.10.80 > ___.___.___.___.49987: Flags [F.], cksum 0xd8d2 (incorrect -> 0x238f), seq 1858483675, ack 904336 574, win 178, length 0(и еще много подобного вывода)
в чем может быть проблема , что делать? Может что то нужно тюнить для высоких нагрузок
инвалидов надо дропать. (INVALID)
и RELATED,ESTABLISHED первым делом разрешать.
это так, на правах гадалки...
хотите правильный ответ? задайте правильно вопрос (полный список правил iptables, версия ядра, дистр ...)
а то хз что вы там наиндусили.
>[оверквотинг удален]
> proto TCP (6), length 40)
> 192.168.0.10.80 > ___.___.___.___.49987: Flags [F.], cksum 0xd8d2 (incorrect
> -> 0x238f), seq 1858483675, ack 904336
>
>
> 574, win 178,
> length 0
> (и еще много подобного вывода)
> в чем может быть проблема , что делать? Может что то нужно
> тюнить для высоких нагрузокПредполагаю, что нагрузка тут не при чем, просто неправильно составлены правила.
Покажите iptables-save.
> хостер отключил сеть за то что из моего сервера выходят некоторые
> пакеты с неправильным адресом отправителя (не тем который выдал
> хостер)
> ситуация такая:
> все запросы на 80 порт пробрасываются на виртуалкукак организована сеть для виртуалки?
> iptables -t nat -A PREROUTING -p tcp --dst $EXTERNALIP --dport
> 80 -j DNAT --to-destination 192.168.0.10:80что будет если 192.168.0.10 попытается обратится на 80 порт на $EXTERNALIP
> так же есть правила разрешающие интернет в сети
> iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source
> $EXTERNALIPесли 192.168.0.10 не за eth0, то это правило при пробросе работать не будет, обратное преобразование будет в DNAT автоматом
>[оверквотинг удален]
> proto TCP (6), length 40)
> 192.168.0.10.80 > ___.___.___.___.49987: Flags [F.], cksum 0xd8d2 (incorrect
> -> 0x238f), seq 1858483675, ack 904336
>
>
> 574, win 178,
> length 0
> (и еще много подобного вывода)
> в чем может быть проблема , что делать? Может что то нужно
> тюнить для высоких нагрузокскорей всего , как уже сказали , дропать INVALID и смотреть что бы 192.168.0.10 подсеть не была мостом на eth0 , если конечно eth0 это внешний интерфейс.
А нагрузка тут при том что при ней пакеты закрытия соединения идут когда таймауты уже закончились
~ # uname -a
Linux server 2.6.32-26-pve #1 SMP Mon Oct 14 08:22:20 CEST 2013 x86_64 GNU/Linux> как организована сеть для виртуалки?
два интерфейса в виртуалке один 192.168.0.10 на vmbr2 через гейт 192.168.0.1
другой 192.168.1.<какойто> на vmbr1:0 для внутренней сетивот сеть на хосте
# cat /etc/network/interfacesauto lo
iface lo inet loopback# device: eth0
auto eth0
iface eth0 inet static
address ______________
broadcast 148.251.0.127
netmask 255.255.255.224
gateway ______________
# default route to access subnet
up route add -net ________ netmask 255.255.255.224 gw ___________ eth0iface eth0 inet6 static
address ______________::2
netmask 64
gateway fe80::1auto vmbr1
iface vmbr1 inet static
address 10.0.0.3
broadcast 10.0.0.255
netmask 255.255.255.0bridge_ports eth1
bridge_stp off
bridge_fd 0auto vmbr1:0
iface vmbr1:0 inet static
address 192.168.1.3
broadcast 192.168.0.255
netmask 255.255.255.0auto vmbr2
iface vmbr2 inet static
address 192.168.0.1
broadcast 192.168.0.255
netmask 255.255.255.0bridge_ports none
bridge_stp off
bridge_fd 0post-up /root/firewall.sh
<<EOF
# vmbr1 внутреняя сеть зацеплена на eth1
# vmbr2 сеть 192.168.0.0/24 никуда зацеплена. должна использоваться только для через NATвот скрипт который настраивает сеть
cat /root/firewall.sh :
#!/bin/bash
FAILOVERIP=________
EXTERNALIP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`sysctl -w net.netfilter.nf_conntrack_max=196608
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcastsiptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -F -t natiptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPTiptables -A FORWARD -i vmbr1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o vmbr1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i vmbr2 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o vmbr2 -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -m addrtype --dst-type MULTICAST -j ACCEPT
iptables -A INPUT -m pkttype --pkt-type multicast -j ACCEPTiptables -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT
#pings
iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -s 192.168.1.1/24 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPTiptables -A INPUT -i lo -j ACCEPT
#allow internet access for subnet
iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE#port forwarding
iptables -t nat -A PREROUTING -p tcp --dst $EXTERNALIP --dport 80 -j DNAT --to-destination 192.168.0.10:80iptables -t nat -A PREROUTING -p tcp --dst $EXTERNALIP --dport 8889 -j DNAT --to-destination 192.168.0.10:8889
#allow forward to routing failover ip
route add $FAILOVERIP gw 192.168.0.200
iptables -A FORWARD -i eth0 -p tcp -d $FAILOVERIP -j ACCEPT
iptables -A FORWARD -i eth0 -p icmp -d $FAILOVERIP -j ACCEPT#open ports
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
iptables -A INPUT -p tcp --dport 5900 -j ACCEPT
<<EOFпричем получается так что не заменяются адреса не только тех пакетов что через NDAT идут , но и тех которые идут через маскарадинг (но их просто на порядки меньше поэтому они могут даже не встретиться , но замечены были) из других виртуалок. В любом случае на общем фоне пакетов таких неправильных сотые доли процента.. но это не дело.
> что будет если 192.168.0.10 попытается обратится на 80 порт на $EXTERNALIPничего не будет , он по своей воле туда никогда не обратится, если нужно будет допишем правил.
> если 192.168.0.10 не за eth0, то это правило при пробросе работать не
> будет, обратное преобразование будет в DNAT автоматомвсе должно стать понятным из конфигов выше
>> ---сейчас на другом сервере с таким же конфигом я убрал правило (DNAT на 80 порт остался рабочим но левые пакеты рубятся политикой поумолчанию DROP)
#iptables -A FORWARD -i vmbr2 -o eth0 -j ACCEPTи разрешил только жизненонеобходимым ходить в сеть
iptables -A FORWARD -s 192.168.0.200 -i vmbr2 -o eth0 -j ACCEPT ( маскарадинг на всякий случай заменил на SNAT --to-source $EXTERNALIP , вот здесь tcpdump и показал очень редкие пакеты с адресом 192.168.0.200 выходящими из eth0, что говорит о том что и DNAT и SNAT имеют одну и туже проблему сейчас)
>[оверквотинг удален]
> убрал правило (DNAT на 80 порт остался рабочим но
> левые пакеты рубятся политикой поумолчанию DROP)
> #iptables -A FORWARD -i vmbr2 -o eth0 -j ACCEPT
> и разрешил только жизненонеобходимым ходить в сеть
> iptables -A FORWARD -s 192.168.0.200 -i vmbr2 -o eth0 -j ACCEPT
> ( маскарадинг на всякий случай заменил на SNAT --to-source $EXTERNALIP
> , вот здесь tcpdump и показал очень
> редкие пакеты с адресом 192.168.0.200 выходящими из
> eth0, что говорит о том что и DNAT и
> SNAT имеют одну и туже проблему сейчас)нет , это разное, но основа одна - INVALID через таблицу nat не проходят
http://www.opennet.me/openforum/vsluhforumID10/5033.html
http://www.opennet.me/openforum/vsluhforumID1/95327.html
http://www.opennet.me/openforum/vsluhforumID1/88674.html
добавляем "вначале" каждой соответствующей цепочки:
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
#пошёл INPUT
...
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
#пошёл FORWARD
...
iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP
#пошёл OUTPUT
...profit
я ж сразу сказал дропайте инвалидов.