Страница 1 из 1

DDOS атака на kernel NAT

Добавлено: 2011-06-01 16:55:59
gilas
Привет!

Обращаюсь к вам с одной просьбой, с просьбой остановить меня от идеи перехода на linux платформу :( . Ближе к делу, ситуация такова:


1. есть 2-х процессорный PC с установленной FreeBSD 7.2 32 бит, играет в роли шлюза, имеет прямой выход во внешку. выполняет роль NAT сервера (на основе ядерного ipfw nat). Назначение машины: прозрачный проброс UDP/TCP на рядом стоящие сервера. Кол-во портов которые пробрасываются около 200. Почти всегда больше половина из них активные (прокачивается трафик).
2. есть линукс/виндовые сервера, на которых запущены потоковое радио и прочие развлекательные сервисы: контра, тимспик, starcraft (почти все сервисы используют только UDP)
3. имеются желающие побрутить пароли от игрух/устраивать ддос атаки

Проблема: при ддосе какого-то сервиса, который расположен на linux машине, сервер с freebsd начинает просто умирать. ддос не несет нагрузку на канал и порой может исходить всего лишь от 1-2-3 человек, нагоняя каких-то 3 мегабита нагрузки канала. Повторюсь - все ддос атаки (судя по графику загрузки канала провайдера) незначительные и несут вред именно НАТ-серверу на freebsd. Если такой ддос проворонить и IP адреса не будут заблокированы, то весь ресурс становится недоступным на время атаки, как только атака прекращается - ресурс спустя 1 минуту снова становится доступным.

Задача: попытаться ввести какие-либо фильтры на пробрасываемые порты ipfw nat-а (вот только какие?), сделать так, чтобы машина под ОС freebsd 7.2 не умирала при таких малозначимых UDP/TCP ддосах.

Подзадачи: сообщить, верно ли выбрана ОС для задачи "проброса" трафика ? Вот что есть сейчас:

пользователь --> nat_server_bsd --> linux_game_server

Текущее решение: в один прекрасный момент начинается ddos-атака на любой из linux-серверов (самые разные машины которых находятся в локалке с bsd-nat сервером), предположим на порт 27015 udp. Замечаю это по полной недоступности nat-сервера. Кое-как удается подключиться к ней по ssh или к linux машине (на которую и идет ддос и где собственно и запущен игровой сервис). Затем на линукс машине я останавливаю сервис, который и атакуют злоумышленники. Как только трафик от nat сервера начинает попадать в "пустой" порт линукс сервера (UDP 27015) - ситуация тут же приходит в норму, нат-сервер начинает жить. В этот момент я с помощью tcpdump-а смотрю интенсивность и содержимое пакетов, а далее баню их на стороне нат-сервера. После чего я вновь запускаю игрушку, она открывает порт 27015 UDP и так до следующего ддоса. Само собой легитимные игроки этого и других сервисов испытывают неудобства.

Из-за скудного функционала ядерного ната и небольшой документации по нему, в голову приходит мысль перевести машину на linux + iptables и начать жить спокойно, ибо функционал iptables позволяет делать фильтрацию пробрасываемых портов, так же nat iptables гораздо стабильней, чем ядерный нат bsd (к сожалению). Переход на pf/natd/rinetd и прочее похожее не рассматриваю.

вывод разнообразных утилит при ддосе предоставить не могу по причине невозможности подключаться на машину во время атаки , она жутко залипает. примечательно одно - параметр interrupts зашкаливает вплоть до 90% . Вот вывод разнообразных параметров, которые надеюсь помогут дать подсказку моему случают, ддос отсутствует, машина прокачивает 20 мегабит трафика, большая часть которого - UDP:

Код: Выделить всё

# top
last pid: 32085;  load averages:  0.04,  0.05,  0.00                                            up 82+18:12:59  17:25:57
58 processes:  1 running, 60 sleeping
CPU:  0.2% user,  0.0% nice,  0.4% system,  9.9% interrupt, 89.5% idle
Mem: 125M Active, 2572M Inact, 307M Wired, 30M Cache, 199M Buf, 217M Free
Swap: 1000M Total, 4K Used, 1000M Free

  PID USERNAME  THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
85545 www         1   4    0 24044K 17436K kqread 0  24:50  0.00% nginx
85544 www         1   4    0 15852K 13524K kqread 0  23:15  0.00% nginx
  595 root        1  44    0  3184K   944K select 0   2:56  0.00% syslogd
  691 root        1  44    0  4672K  1800K select 0   2:50  0.00% ntpd
  517 root        1  44    0  5560K  2756K select 0   2:27  0.00% ssh
43229 root        1  49    0  5752K  2724K select 0   1:47  0.00% sshd
  815 root        1  44    0  5876K  2644K select 1   1:14  0.00% sendmail
32855 nobody      1  44    0  4340K  1236K select 0   0:33  0.00% dnsmasq
 5503 irc         1  44    0  9692K  7396K select 1   0:32  0.00% services
  827 root        1   8    0  3212K  1068K nanslp 1   0:11  0.00% cron
29309 spy         1  44    0  9452K  4264K select 1   0:03  0.00% sshd
  821 smmsp       1  20    0  5876K  2488K pause  0   0:01  0.00% sendmail
92841 root        1   4    0  8428K  3124K sbwait 1   0:00  0.00% sshd
в момент ддоса, параметры tot достигают вплоть до 17-20 тысяч,

Код: Выделить всё

# ipfw nat show
nat 2: icmp=0, udp=1096, tcp=258, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=1354
nat 1: icmp=0, udp=1142, tcp=205, pptp=0, proto=0, frag_id=0 frag_ptr=0 / tot=1347

Код: Выделить всё

# ipfw show
00100    2063668    315844568 allow ip from any to any via lo0
00200          0            0 deny ip from any to 127.0.0.0/8
00300          0            0 deny ip from 127.0.0.0/8 to any
00400          0            0 reject tcp from any to any tcpflags syn,fin,ack,psh,rst,urg
00500         19         1030 reject tcp from any to any tcpflags !syn,!fin,!ack,!psh,!rst,!urg
00600         10          636 reject tcp from any to any not established tcpflags fin
00700       1474       338063 reject log logamount 10 ip from any to any not verrevpath in
00800          0            0 deny ip from any to 192.168.0.0/16 in recv re0
00900         66         4379 deny ip from 192.168.0.0/16 to any in recv re0
01000          0            0 deny ip from any to 172.16.0.0/12 in recv re0
01100      18225      1020917 deny ip from 172.16.0.0/12 to any in recv re0
01200          0            0 deny ip from any to 169.254.0.0/16 in recv re0
01300          0            0 deny ip from 169.254.0.0/16 to any in recv re0
02800          0            0 deny udp from me to 207.38.0.0/16 dst-port 29900-29910
02900          0            0 deny icmp from any to any frag
03000      39693      2994159 allow icmp from any to any via fxp0
03100    1033698    116037952 allow icmp from any to xx.xx.xx.xx in via re0 icmptypes 3,8,12
03200      67429      5659377 allow icmp from xx.xx.xx.xx to any out via re0 icmptypes 0,3,4,11,12
03300          0            0 allow icmp from xx.xx.xx.xx to any out via re0 frag
03400  373933257 102101249709 allow tcp from any to any out via fxp0
03500  929025969  73548004216 allow udp from any to any out via fxp0
03600          0            0 allow udp from any 53 to any via fxp0
03700          0            0 allow tcp from any to any dst-port 10000 in via fxp0
03800     421297     82522167 allow tcp from any to any dst-port 10000 in via re0
04000     250209     44036842 allow tcp from xx.xx.xx.xx to any dst-port 22 in via re0
04100   38333068  28020302848 allow tcp from any to xx.xx.xx.xx dst-port 80 limit src-addr 10
04200    4145143    235963801 allow tcp from any to any dst-port 80 in via fxp0
05000    6594642    370463604 allow tcp from xx.xx.xx.xx to any dst-port 3306 in via re0
05100          0            0 allow tcp from xx.xx.xx.xx to any dst-port 3306 in via re0
05400      25081      1906156 allow udp from any to xx.xx.xx.xx dst-port 123 limit src-addr 3
05500      31549      2398871 allow udp from any to any dst-port 123 via fxp0
05700 2841624758 519570703068 nat 1 ip from any to any via re0
05800 1764302031 486141335165 nat 2 ip from any to any via fxp0
05900          0            0 deny log logamount 10 ip from any to any
65535      88731     12167919 deny ip from any to any
ipfw.sh:

Код: Выделить всё

#!/bin/sh


FwCMD="/sbin/ipfw -q"
LanIn="fxp0"
LanOut="re0"
IpIn="192.168.1.1"
IpOut="xx.xx.xx.xx"
NetMask="24"



local="192.168.1.0/24"
linux_serv1="192.168.1.5"
linux_serv3="192.168.1.6"
linux_serv2="192.168.1.7"
win_serv1="192.168.1.8"


${FwCMD} -f flush
${FwCMD} add allow ip from any to any via lo0
${FwCMD} add deny ip from any to 127.0.0.0/8
${FwCMD} add deny ip from 127.0.0.0/8 to any

# Antiscan
${FwCMD} add reject tcp from any to any tcpflags fin, syn, rst, psh, ack, urg
${FwCMD} add reject tcp from any to any tcpflags !fin, !syn, !rst, !psh, !ack, !urg
${FwCMD} add reject tcp from any to any not established tcpflags fin
${FwCMD} add reject log ip from any to any not verrevpath in

# Private networks
${FwCMD} add deny ip from any to 192.168.0.0/16 in recv ${LanOut}
${FwCMD} add deny ip from 192.168.0.0/16 to any in recv ${LanOut}
${FwCMD} add deny ip from any to 172.16.0.0/12 in recv ${LanOut}
${FwCMD} add deny ip from 172.16.0.0/12 to any in recv ${LanOut}
${FwCMD} add deny ip from any to 169.254.0.0/16 in recv ${LanOut}
${FwCMD} add deny ip from 169.254.0.0/16 to any in recv ${LanOut}


# ICMP
${FwCMD} add deny icmp from any to any frag
${FwCMD} add allow icmp from any to any via ${LanIn}
${FwCMD} add allow icmp from any to ${IpOut} in via ${LanOut} icmptype 3,8,12
${FwCMD} add allow icmp from ${IpOut} to any out via ${LanOut} icmptype 0,3,4,11,12
${FwCMD} add allow icmp from ${IpOut} to any out via ${LanOut} frag


# server v inet
${FwCMD} add allow tcp from any to any out via ${LanIn}
${FwCMD} add allow udp from any to any out via ${LanIn}

# dns
${FwCMD} add allow udp from any 53 to any via ${LanIn}

# ssh server
${FwCMD} add allow tcp from any to any 10000 in via ${LanIn}
${FwCMD} add allow tcp from any to any 10000 in via ${LanOut}

# web server
${FwCMD} add allow tcp from any to ${IpOut} 80 limit src-addr 10
${FwCMD} add allow tcp from any to any 80 in via ${LanIn}

# ntp time
${FwCMD} add allow udp from any to ${IpOut} 123 limit src-addr 3
${FwCMD} add allow udp from any to any 123 via ${LanIn}


################################ NAT ############################

${FwCMD} nat 1 config log if ${LanOut} deny_in same_ports \
redirect_port tcp ${linux_serv1}:22 10004 \
redirect_port tcp ${linux_serv3}:22 10005 \
redirect_port tcp ${linux_serv2}:22 10006 \
redirect_port tcp ${win_serv1}:15009 34009 \
redirect_port tcp ${linux_serv1}:21 20002 \
redirect_port tcp ${linux_serv1}:82 82 \
redirect_port udp ${linux_serv1}:82 82 \
redirect_port tcp ${win_serv1}:21 20004 \
redirect_port tcp ${linux_serv2}:21 20005 \
redirect_port tcp ${linux_serv1}:2107 2107 \
redirect_port tcp ${linux_serv2}:7778 7778 \
redirect_port udp ${linux_serv1}:27021 27021 \
redirect_port udp ${linux_serv2}:27016 27016 \
redirect_port udp ${linux_serv1}:27017 27017 \
redirect_port udp ${linux_serv2}:27018 27018 \
redirect_port udp ${linux_serv3}:6112 6112 \
redirect_port tcp ${linux_serv3}:6112 6112 \
redirect_port tcp ${linux_serv3}:6200 6200 \
redirect_port udp ${linux_serv3}:8303 8303 \
redirect_port tcp ${win_serv1}:4567 4567 \
redirect_port udp ${win_serv1}:4567 4567 \
redirect_port udp ${linux_serv1}:27015 27015 \
redirect_port udp ${win_serv1}:27019 27019 \
redirect_port udp ${linux_serv1}:27020 27020 \
redirect_port udp ${linux_serv2}:27022 27022 \
redirect_port udp ${linux_serv2}:27023 27023 \
redirect_port udp ${linux_serv2}:27024 27024 \
redirect_port udp ${win_serv1}:27025 27025 \
redirect_port udp ${linux_serv3}:8767 8767 \
redirect_port udp ${win_serv1}:5555 5555 \
redirect_port udp ${linux_serv1}:6666 6666 \
redirect_port udp ${linux_serv1}:6667 6667 \
redirect_port udp ${linux_serv1}:6668 6668 \
redirect_port udp ${linux_serv2}:6669 6669 \
redirect_port udp ${linux_serv1}:6791 6791 \
redirect_port udp ${win_serv1}:16567 16567 \
redirect_port udp ${linux_serv1}:23073 23073 \
redirect_port udp ${linux_serv1}:23074 23073 \
redirect_port udp ${linux_serv1}:23196 23196 \
redirect_port udp ${linux_serv1}:23197 23197 \
redirect_port tcp ${linux_serv1}:23073 23073 \
redirect_port tcp ${linux_serv1}:23074 23074 \
redirect_port tcp ${linux_serv2}:52999 52999 \
redirect_port udp ${linux_serv1}:28960 28960 \
redirect_port udp ${win_serv1}:3101-3119 3101-3119 \
redirect_port tcp ${linux_serv3}:14534 14534 \
redirect_port udp ${linux_serv1}:9987 9987 \
redirect_port tcp ${linux_serv1}:30033 30033 \
redirect_port udp ${win_serv1}:21000 21000 \
redirect_port tcp ${linux_serv1}:10011 10011 \
redirect_port tcp ${linux_serv1}:25000 25000 \
redirect_port tcp ${linux_serv1}:25566 25566 \
redirect_port tcp ${linux_serv2}:2350 2350 \
redirect_port udp ${linux_serv2}:2350 2350 \
redirect_port udp ${linux_serv2}:3450 3450 \
redirect_port udp ${linux_serv1}:3838 3838
${FwCMD} add nat 1 ip from any to any via ${LanOut}

${FwCMD} nat 2 config log if ${LanIn} reset same_ports
${FwCMD} add nat 2 ip from any to any via ${LanIn}
##################################################################


${FwCMD} add deny log ip from any to any

Код: Выделить всё

# netstat -s -p udp
udp:
        1130540 datagrams received
        0 with incomplete header
        0 with bad data length field
        0 with bad checksum
        294 with no checksum
        109489 dropped due to no socket
        18385 broadcast/multicast datagrams undelivered
        0 dropped due to full socket buffers
        0 not for hashed pcb
        1002666 delivered
        908208 datagrams output
        0 times multicast source filter matched

Код: Выделить всё

# netstat -s -p tcp
tcp:
        1925557835 packets sent
                928672901 data packets (143099564 bytes)
                7361153 data packets (916089878 bytes) retransmitted
                173518 data packets unnecessarily retransmitted
                63 resends initiated by MTU discovery
                922459914 ack-only packets (0 delayed)
                0 URG only packets
                5233 window probe packets
                11184300 window update packets
                55894100 control packets
        2221444608 packets received
                1306980341 acks (for 2802301645 bytes)
                90933115 duplicate acks
                23529929 acks for unsent data
                829947995 packets (1187323998 bytes) received in-sequence
                11207653 completely duplicate packets (166594538 bytes)
                1907 old duplicate packets
                13411 packets with some dup. data (11153701 bytes duped)
                17641394 out-of-order packets (3640897497 bytes)
                44 packets (30177 bytes) of data after window
                4 window probes
                32092976 window update packets
                40499 packets received after close
                567 discarded for bad checksums
                0 discarded for bad header offset fields
                0 discarded because packet too short
                2187428 discarded due to memory problems
        22641117 connection requests
        11294917 connection accepts
        56 bad connection attempts
        0 listen queue overflows
        715043 ignored RSTs in the windows
        33927078 connections established (including accepts)
        33936154 connections closed (including 852209 drops)
                13685827 connections updated cached RTT on close
                13932383 connections updated cached RTT variance on close
                12509308 connections updated cached ssthresh on close
        1221 embryonic connections dropped
        1232792321 segments updated rtt (of 666408140 attempts)
        6443463 retransmit timeouts
                55363 connections dropped by rexmit timeout
        7823 persist timeouts
                22 connections dropped by persist timeout
        0 Connections (fin_wait_2) dropped because of timeout
        16359813 keepalive timeouts
                15900242 keepalive probes sent
                47075 connections dropped by keepalive
        47464376 correct ACK header predictions
        557088970 correct data packet header predictions
        11321701 syncache entries added
                83506 retransmitted
                47866 dupsyn
                0 dropped
                11294917 completed
                26 bucket overflow
                0 cache overflow
                15488 reset
                17067 stale
                0 aborted
                0 badack
                7 unreach
                0 zone failures
        11321699 cookies sent
        5887 cookies received
        2876124 SACK recovery episodes
        4241850 segment rexmits in SACK recovery episodes
        1438423461 byte rexmits in SACK recovery episodes
        45657040 SACK options (SACK blocks) received
        19597859 SACK options (SACK blocks) sent
        0 SACK scoreboard overflow

Код: Выделить всё

# vmstat -z
ITEM                     SIZE     LIMIT      USED      FREE  REQUESTS  FAILURES

UMA Kegs:                 128,        0,       83,        7,       83,        0
UMA Zones:                480,        0,       83,        5,       83,        0
UMA Slabs:                 64,        0,     1382,      919,   256176,        0
UMA RCntSlabs:            104,        0,     1630,      738,    77126,        0
UMA Hash:                 128,        0,        4,       26,        8,        0
16 Bucket:                 76,        0,       20,       80,      101,        0
32 Bucket:                140,        0,       47,       65,      240,        0
64 Bucket:                268,        0,       44,       82,      627,        7
128 Bucket:               524,        0,     1321,      373,    50081,    27534
VM OBJECT:                128,        0,    57023,    33637, 146016602,        0
MAP:                      140,        0,        7,       21,        7,        0
KMAP ENTRY:                68,    90272,     1289,      839, 12082951,        0
MAP ENTRY:                 68,        0,     1979,     1997, 184418482,        0
DP fakepg:                 72,        0,        0,      159,       22,        0
mt_zone:                 1032,        0,      192,        0,      192,        0
16:                        16,        0,     2998,     2077, 189747206,        0
32:                        32,        0,     2284,     1106, 69506181,        0
64:                        64,        0,     4987,     7108, 577153178,        0
128:                      128,        0,     5626,    11714, 189321742,        0
256:                      256,        0,      571,      959, 51013070,        0
512:                      512,        0,      529,      343,  4911427,        0
1024:                    1024,        0,       49,      155,  9912771,        0
2048:                    2048,        0,      179,      359,   165596,        0
4096:                    4096,        0,      116,      241,  4168127,        0
Files:                     76,        0,      361,     1789, 223571890,        0
TURNSTILE:                 76,        0,      491,      133,      561,        0
umtx pi:                   52,        0,        0,        0,        0,        0
PROC:                     696,        0,       79,       76,  2328996,        0
THREAD:                   556,        0,      168,      322,  6280939,        0
UPCALL:                    44,        0,        0,        0,        0,        0
SLEEPQUEUE:                32,        0,      491,      187,      561,        0
VMSPACE:                  236,        0,       47,       97,  2329020,        0
cpuset:                    40,        0,        2,      182,        2,        0
audit_record:             856,        0,        0,        0,        0,        0
mbuf_packet:              256,        0,      340,      556, 33673178116,        0
mbuf:                     256,        0,        4,     1545, 17087203594,        0
mbuf_cluster:            2048,    25600,      896,      642,   115456,        0
mbuf_jumbo_pagesize:     4096,    12800,        2,      859, 254235381,        0
mbuf_jumbo_9k:           9216,     6400,        0,        0,        0,        0
mbuf_jumbo_16k:         16384,     3200,        0,        0,        0,        0
mbuf_ext_refcnt:            4,        0,        0,      812, 30588989,        0
ACL UMA zone:             388,        0,        0,        0,        0,        0
g_bio:                    132,        0,        0,     1711, 1049114550,        0
ata_request:              192,        0,        0,      760, 266025627,        0
ata_composite:            184,        0,        0,        0,        0,        0
VNODE:                    276,        0,    79427,    14177, 97847251,        0
VNODEPOLL:                 64,        0,        2,      175,        9,        0
S VFS Cache:               68,        0,    82851,    13749, 122813337,        0
L VFS Cache:              291,        0,      380,     1960,  3501765,        0
NAMEI:                   1024,        0,        0,      308, 720944239,        0
DIRHASH:                 1024,        0,     1771,      193,     8750,        0
NFSMOUNT:                 560,        0,        0,        0,        0,        0
NFSNODE:                  452,        0,        0,        0,        0,        0
pipe:                     396,        0,       10,      180,  1968287,        0
ksiginfo:                  80,        0,      128,      112,      128,        0
itimer:                   220,        0,        1,       35,        1,        0
KNOTE:                     68,        0,       84,      644, 781373313,        0
socket:                   416,    25605,      134,     6283, 36110031,        0
unpcb:                    168,    25622,       23,      345,  1799726,        0
ipq:                       32,      904,        0,      452,      154,        0
udpcb:                    180,    25608,       10,      100,   369980,        0
inpcb:                    180,    25608,      100,     6280, 33936517,        0
tcpcb:                    464,    25600,      100,     6204, 33936517,        0
tcptw:                     52,     5184,        0,      576,  1237975,        0
syncache:                 104,    15392,        0,      370, 11321816,        0
hostcache:                 76,    15400,      192,      358,   142571,        0
tcpreass:                  20,     1690,        0,      507, 17643282,        0
sackhole:                  20,        0,        0,      507,  4787958,        0
sctp_ep:                  816,    25600,        0,        0,        0,        0
sctp_asoc:               1436,    40000,        0,        0,        0,        0
sctp_laddr:                24,    80040,        0,      145,        2,        0
sctp_raddr:               388,    80000,        0,        0,        0,        0
sctp_chunk:                96,   400000,        0,        0,        0,        0
sctp_readq:                76,   400000,        0,        0,        0,        0
sctp_stream_msg_out:       64,   400020,        0,        0,        0,        0
sctp_asconf:               24,   400055,        0,        0,        0,        0
sctp_asconf_ack:           24,   400055,        0,        0,        0,        0
ripcb:                    180,    25608,        0,       66,     3795,        0
rtentry:                  124,        0,       23,      163,    25140,        0
IPFW dynamic rule:        108,        0,       74,      682,  7604594,        0
SWAPMETA:                 276,   121576,        1,       27,        1,        0
Mountpoints:              720,        0,        5,       10,        5,        0
FFS inode:                124,        0,    79378,    14118, 97845392,        0
FFS1 dinode:              128,        0,        0,        0,        0,        0
FFS2 dinode:              256,        0,    79378,    13727, 97845392,        0
re0 - внешка
fxp0 - локалка

Код: Выделить всё

# netstat -bdhI re0 -w1
            input          (re0)           output
   packets  errs      bytes    packets  errs      bytes colls drops
      3.8K     0       352K       5.4K     0       1.3M     0     0
      3.9K     0       359K       5.4K     0       1.2M     0     0
      3.9K     0       370K       5.7K     0       1.0M     0     0
      4.0K     0       365K       5.4K     0       1.1M     0     0
      3.9K     0       353K       5.7K     0       1.3M     0     0
      4.1K     0       367K       5.7K     0       1.6M     0     0
      3.9K     0       350K       5.2K     0       1.4M     0     0
      3.8K     0       347K       5.2K     0       1.1M     0     0
      4.1K     0       416K       5.9K     0       1.5M     0     0
      3.9K     0       363K       5.6K     0       1.4M     0     0
      3.7K     0       336K       5.1K     0       1.2M     0     0
      3.8K     0       334K       5.0K     0       1.4M     0     0
      3.9K     0       342K       5.5K     0       1.7M     0     0

Код: Выделить всё

# netstat -bdhI fxp0 -w1
            input         (fxp0)           output
   packets  errs      bytes    packets  errs      bytes colls drops
      6.1K     0       1.2M       4.8K     0       326K     0     0
      5.4K     0       1.1M       3.9K     0       316K     0     0
      5.2K     0       1.1M       3.7K     0       323K     0     0
      4.8K     0       1.0M       3.7K     0       318K     0     0
      5.0K     0       1.2M       3.7K     0       933K     0     0
      5.2K     0       1.3M       3.7K     0       813K     0     0
      6.5K     0       1.1M       4.9K     0       327K     0     0
      5.1K     0       1.1M       3.9K     0       336K     0     0
      5.0K     0       1.6M       3.6K     0       1.4M     0     0
      6.3K     0       1.2M       4.8K     0       329K     0     0
      5.7K     0       1.1M       4.1K     0       335K     0     0
      5.3K     0       1.3M       3.7K     0       353K     0     0
      5.3K     1       1.2M       3.7K     0       337K     0     0
      5.9K     0       1.1M       3.9K     0       336K     0     0
      5.5K     0       1.1M       3.7K     0       334K     0     0

Код: Выделить всё

# dmesg
Copyright (c) 1992-2009 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 7.2-RELEASE-p6 #0: Fri Dec 10 18:33:39 MSK 2010
    root@local.gameserver.dmz:/usr/src/sys/i386/compile/kern.10-12-2010
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: Intel(R) Celeron(R) CPU          430  @ 1.80GHz (1795.04-MHz 686-class CPU)
  Origin = "GenuineIntel"  Id = 0x10661  Stepping = 1
  Features=0xafebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,TM,PBE>
  Features2=0xe31d<SSE3,DTES64,MON,DS_CPL,TM2,SSSE3,CX16,xTPR,PDCM>
  AMD Features=0x20000000<LM>
  AMD Features2=0x1<LAHF>
real memory  = 3480944640 (3319 MB)
avail memory = 3403415552 (3245 MB)
acpi0: <A_M_I OEMRSDT> on motherboard
acpi0: [ITHREAD]
acpi0: Power Button (fixed)
acpi0: reservation of 0, a0000 (3) failed
acpi0: reservation of 100000, cf700000 (3) failed
Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x808-0x80b on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
vgapci0: <VGA-compatible display> port 0xcc00-0xcc07 mem 0xfe980000-0xfe9fffff,0xd0000000-0xdfffffff,0xfe940000-0xfe97ffff irq 11 at device 2.0 on pci0
agp0: <Intel 82945G (945G GMCH) SVGA controller> on vgapci0
agp0: detected 7932k stolen memory
agp0: aperture size is 256M
pcib1: <ACPI PCI-PCI bridge> irq 11 at device 28.0 on pci0
pci2: <ACPI PCI bus> on pcib1
pcib2: <ACPI PCI-PCI bridge> irq 10 at device 28.1 on pci0
pci1: <ACPI PCI bus> on pcib2
re0: <RealTek 8101E/8102E/8102EL PCIe 10/100baseTX> port 0xd800-0xd8ff mem 0xfeaff000-0xfeafffff irq 10 at device 0.0 on pci1
re0: turning off MSI enable bit.
re0: Chip rev. 0x34000000
re0: MAC rev. 0x00000000
miibus0: <MII bus> on re0
rlphy0: <RTL8201L 10/100 media interface> PHY 1 on miibus0
rlphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
re0: Ethernet address: 00:19:66:26:ef:64
re0: [FILTER]
pcib3: <ACPI PCI-PCI bridge> at device 30.0 on pci0
pci3: <ACPI PCI bus> on pcib3
fxp0: <Intel 82551 Pro/100 Ethernet> port 0xec00-0xec3f mem 0xfebff000-0xfebfffff,0xfebc0000-0xfebdffff irq 15 at device 2.0 on pci3
miibus1: <MII bus> on fxp0
inphy0: <i82555 10/100 media interface> PHY 1 on miibus1
inphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
fxp0: Ethernet address: 00:0e:0c:aa:af:b3
fxp0: [ITHREAD]
isab0: <PCI-ISA bridge> at device 31.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <Intel ICH7 UDMA100 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xffa0-0xffaf at device 31.1 on pci0
ata0: <ATA channel 0> on atapci0
ata0: [ITHREAD]
atapci1: <Intel ICH7 SATA300 controller> port 0xc080-0xc087,0xc000-0xc003,0xbc00-0xbc07,0xb880-0xb883,0xb800-0xb80f irq 5 at device 31.2 on pci0
atapci1: [ITHREAD]
atapci1: failed to enable memory mapping!
ata2: <ATA channel 0> on atapci1
ata2: [ITHREAD]
ata3: <ATA channel 1> on atapci1
ata3: [ITHREAD]
pci0: <serial bus, SMBus> at device 31.3 (no driver attached)
acpi_button0: <Power Button> on acpi0
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
atkbd0: [GIANT-LOCKED]
atkbd0: [ITHREAD]
cpu0: <ACPI CPU> on acpi0
pmtimer0 on isa0
orm0: <ISA Option ROM> at iomem 0xcb000-0xcc7ff pnpid ORM0000 on isa0
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio0: configured irq 4 not in bitmap of probed irqs 0
sio0: port may not be enabled
sio0: configured irq 4 not in bitmap of probed irqs 0
sio0: port may not be enabled
sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
sio0: type 8250 or not responding
sio0: [FILTER]
sio1: configured irq 3 not in bitmap of probed irqs 0
sio1: port may not be enabled
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
Timecounter "TSC" frequency 1795042728 Hz quality 800
Timecounters tick every 1.000 msec
ipfw2 initialized, divert loadable, nat enabled, rule-based forwarding disabled, default to deny, logging limited to 100 packets/entry by default
ad0: 28667MB <SAMSUNG SV0301H RG100-15> at ata0-master UDMA100
ad4: 78533MB <Hitachi HDS728080PLA380 PF2OA6EA> at ata2-master SATA150
GEOM_LABEL: Label for provider ad0s1a is ufsid/3c310420f0bbeb7f.
GEOM_LABEL: Label for provider ad0s1d is ufsid/3c310422d7654579.
GEOM_LABEL: Label for provider ad0s1e is ufsid/3c310422dac7b3a9.
GEOM_LABEL: Label for provider ad4s1d is ufsid/4cf38c6660d3783a.
Trying to mount root from ufs:/dev/ad0s1a
GEOM_LABEL: Label ufsid/3c310420f0bbeb7f removed.
GEOM_LABEL: Label for provider ad0s1a is ufsid/3c310420f0bbeb7f.
GEOM_LABEL: Label ufsid/4cf38c6660d3783a removed.
GEOM_LABEL: Label for provider ad4s1d is ufsid/4cf38c6660d3783a.
GEOM_LABEL: Label ufsid/3c310422d7654579 removed.
GEOM_LABEL: Label for provider ad0s1d is ufsid/3c310422d7654579.
GEOM_LABEL: Label ufsid/3c310422dac7b3a9 removed.
GEOM_LABEL: Label for provider ad0s1e is ufsid/3c310422dac7b3a9.
GEOM_LABEL: Label ufsid/3c310420f0bbeb7f removed.
GEOM_LABEL: Label ufsid/3c310422d7654579 removed.
GEOM_LABEL: Label ufsid/3c310422dac7b3a9 removed.
GEOM_LABEL: Label ufsid/4cf38c6660d3783a removed.

Перечитал пол интернета, но все что касается фильтрации или UDP-ддоса на freebsd и ipfw - тишина, молчу про ipfwnat. В связи с этим у меня уже и появилась идея перевести нат сервер на линукс, ибо в последнее время атаки увеличиваются и простой повышается, может кто сможет подсказать хоть что-то, что может помочь отражать UDP ддос в моем случае ? спасибо заранее, рад буду любым ответам и предположениям

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-01 19:39:46
vadim64
ng_nat смотрели?

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-01 20:34:58
gilas
vadim64 писал(а):ng_nat смотрели?
Признаться честно, синтаксис этой "машины" выглядет пугающе...думаете стоит копнуть в ng_nat вместо iptables?

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-01 20:40:04
hizel
нет не стоит, ng_nat и kernel nat друзья братья из одного яичка libalias
если вам доступнее iptables не вижу зачем вы мучаетесь

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-01 21:14:17
gilas
hizel писал(а):нет не стоит, ng_nat и kernel nat друзья братья из одного яичка libalias
если вам доступнее iptables не вижу зачем вы мучаетесь

bsd был намного гибче, легче и более производительным, чем остальные ОС. вот только в задаче NAT-сервера видимо у нашей ос не все хорошо, говорю с надеждой что ошибаюсь

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-01 22:28:54
Alex Keda
сетевухи нормальные поставить.
как минимум - re на fxp/em/bge заменить

с поллингом побаловаться.

и конфиг... это феерический пиздец в правиле для nat...
я бы тоже на трёх мегабитах повесился на таком...

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-01 22:31:45
vadim64
а если попробывать log убрать из правил ната?

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-01 22:32:52
vadim64
и какого назначение второго ната?

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-01 23:51:05
gilas
Alex Keda писал(а):сетевухи нормальные поставить.
как минимум - re на fxp/em/bge заменить

с поллингом побаловаться.

и конфиг... это феерический пиздец в правиле для nat...
я бы тоже на трёх мегабитах повесился на таком...

полинг на SMP вроде бы до сих пор не дает производительности или ошибаюсь? сетевухи менять на более дорогостоящие - нет возможности (проект некомерчесский). фееричные элементы прошу указать, потому как не исключаю что где-то в правилах фаервола и есть ошибка. несмотря на тормоза, вопрос с фильтрацией пробрасываемого трафика остается актуальным.

vadim64 писал(а):а если попробывать log убрать из правил ната?
NAT логирует ограниченное кол-во сообщений, подозреваю что опция из ядра и ограничивает логирование, врятли дело в логах

Код: Выделить всё

options         IPFIREWALL_VERBOSE_LIMIT=100
vadim64 писал(а):и какого назначение второго ната?
без него - НАТ (пробросы) не работают, вот так вот...

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 0:01:16
vadim64
обновитесь до стейбла
это необходимо сделать для очистки совести

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 0:10:01
Гость
нужен top в момент загрузки когда как вы говорите интеррапт поднимается до 99%

и кстати
у вас еще пробелема возможно со скоростю в дисках будет
atapci1: failed to enable memory mapping!
вообщем то я бы сказал ее надо решать

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 0:22:46
gilas
vadim64 писал(а):обновитесь до стейбла
это необходимо сделать для очистки совести
спасибо за совет, остается лишь организовать тестовый стенд..

Гость писал(а):нужен top в момент загрузки когда как вы говорите интеррапт поднимается до 99%

и кстати
у вас еще пробелема возможно со скоростю в дисках будет
atapci1: failed to enable memory mapping!
вообщем то я бы сказал ее надо решать
top во время ddos атаки отличается лишь idle-ом и interrupts, в остальном отличий нет. хочется узнать, а при чем тут дисковая подсистема в целом? сервер задействован лишь для передачи данных, с диска ничего не читается и ничего не пишется...

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 9:07:30
hizel
второй НАТ не нужен,

классика:

Код: Выделить всё

$fw nat 1 config ip $uplink_ip redirect_port udp 192.168.22.240:51413 51413 redirect_port tcp 192.168.22.240:51413 51413
$fadd 10 allow ip from any to any via lo0
$fadd 500 allow ip from any to any via $local_int 
$fadd 1000 nat 1 ip from any to $uplink_ip via $uplink_int
$fadd 60000 nat 1 ip from any to any out via $uplink_int
$fadd 64020 allow ip from any to any 
работает проброс и собстно nat, постарайтесь избавится от вашего второго нат-а, попытка представить как у вас ходят пакеты - вызывает у меня головную боль :-(
со stable не советую мучатся, или перед тем как мучатся посмотрите чейнджлог -stable на предмет изменений, есть ли там то что вам нужно, а вот с поллингом
на тестовом стенде поиграйтесь

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 9:42:23
mak_v_
Как вариант - вижу ограничить кол-во пакетов в секунду с IP, наподобие такого

Код: Выделить всё

add allow ip from any to $SRV_service keep-state limit src-addr 10 via $if1 
Не факт что я прав, но вороде оно. От ДОСа поможет, от распределенного ДДОСа - нет

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 9:57:41
terminus
realtek это не те сетевухи которые имеет смысл использовать для нагрузки. Это раз.
попробуйте потюнить систему в соответсвиии с этой статьей:

FreeBSD для обслуживания 100-200 тысяч соединений (freebsd tcp optimization tune speed socket mbuf sendfile sysctl)
http://www.opennet.ru/base/net/tune_freebsd.txt.html

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 10:10:06
hizel
от udp ДДоса не поможет, если я правильно понял упирается в прерывания, пинать сетевухи тоже

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 11:03:50
mak_v_
Ну почему же, у меня конструкции с pf

Код: Выделить всё

pass in on $ext_if proto udp from any to $ext_if port $vpn flags S/SA synproxy state ( max-src-conn 10, max-src-conn-rate 4/600, overload <deny> flush global)
block in log on $ext_if inet from <deny>
Отрабатывают, или я не прав?

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 11:08:47
hizel
значит у вас изначально сетевушка справляется, пакеты которые пришли - пришли

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 12:47:34
gilas
mak_v_ писал(а):Как вариант - вижу ограничить кол-во пакетов в секунду с IP, наподобие такого

Код: Выделить всё

add allow ip from any to $SRV_service keep-state limit src-addr 10 via $if1 
Не факт что я прав, но вороде оно. От ДОСа поможет, от распределенного ДДОСа - нет
Речь идет о защите сервиса, которму freebsd пускает трафик.

Код: Выделить всё

keep-state limit src-addr 10 via
разьве это правило применится к НАТ порту?


terminus писал(а):realtek это не те сетевухи которые имеет смысл использовать для нагрузки. Это раз.
попробуйте потюнить систему в соответсвиии с этой статьей:

FreeBSD для обслуживания 100-200 тысяч соединений (freebsd tcp optimization tune speed socket mbuf sendfile sysctl)
http://www.opennet.ru/base/net/tune_freebsd.txt.html
в моем случае реалтек это сетевая карта, встроенная в мат. плату. был вариант использовать 2 fxp, но я посчитал целесообразным задействовать внутренюю сетевуху. на мой взгляд обмен данными через встроенный риалтек будет быстрее, чем обмен данными через мои fxp, вставленные в обычный PCI. На счет тюнинга по статье Игоря - уже следовал его советам, это не единственная статья, которую я применял для тюнинга, но увы, результат не меняется.
mak_v_ писал(а):Ну почему же, у меня конструкции с pf

Код: Выделить всё

pass in on $ext_if proto udp from any to $ext_if port $vpn flags S/SA synproxy state ( max-src-conn 10, max-src-conn-rate 4/600, overload <deny> flush global)
block in log on $ext_if inet from <deny>
Отрабатывают, или я не прав?
Вот узнать бы такие конструкции правил, да только для Ipfw и под udp...


Из всех советов, можно сделать пока такой вывод:

- убрать 2-й НАТ (точнее перелопатить заново все правила, ибо без второго ната пакеты перестают идти любые стороны)
- включить полинг (но вот только от владельцев SMP ходят плохие отзывы о полинге)
- обновить ос до 7.4 стебл
- убрать опции log из НАТ-правил

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-02 13:12:48
Менделеев
когда начнется флуд, смотрите на

Код: Выделить всё

top -SH -n 500 | grep swi1

Код: Выделить всё

vmstat -m | grep libalias
то есть на то сколько жоет ipfw проца, и libalias памяти.

собстно, если шторм интераптов на реалтеке это единственный затык, то меняйте местами реалтек и интел и смотрите что бедет.
в моем случае реалтек это сетевая карта, встроенная в мат. плату. был вариант использовать 2 fxp, но я посчитал целесообразным задействовать внутренюю сетевуху. на мой взгляд обмен данными через встроенный риалтек будет быстрее, чем обмен данными через мои fxp, вставленные в обычный PCI.
так внетри то мамы реалтек все равно на PCI шине висит. Какая разница. Тем более, что интел должен быть производительнее просто потому, что на нем свой чип, а реалтек выносит обработку в драйвер... :Search:

Re: DDOS атака на kernel NAT

Добавлено: 2011-06-07 16:28:00
mak_v_
Речь идет о защите сервиса, которму freebsd пускает трафик.
А вам 10 коннектов с одного айпи мало? надо десять тыщ?
Конечно если ДДОСят с ведра машин да по ведру коннектов, то и будет вам работающий сервис.