LINUX.ORG.RU

iptables против скана.


3

1

Вообще видел тут один севачёк в сетке, пингуется нормально но вот проскнить его не получается, на попытку скана nmap, причём в режиме стэлса, говорит что хост в дауне, при этом нормально пингуется. Как такое возможно и как добиться такого же?

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

★★★★★

... ах и ещё, необходимо оставить работающие сетевые сервисы, такие как фтп, веб и пр.

cyclon ★★★★★
() автор топика

nmap, наверное, icmp посылает, непохожий чем-то на ping. Вот и посмотри, в чем разница.

ivlad ★★★★★
()
Ответ на: комментарий от ivlad

хм, посмотреть то можно, но я кроме как копания в сырцах вариантов не вижу, но разве что где то дока может валяться по данной тематике..

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

> хм, посмотреть то можно, но я кроме как копания в сырцах вариантов не вижу, но разве что где то дока может валяться по данной тематике..

сниффером посмотреть

ivlad ★★★★★
()

пинг в нмапе не нормальный, а со своими заморочками: если дропать всё кроме ицмп, то такой эффект и достигается.

Pi ★★★★★
()

задай правило дропать всё кроме пинга

anonymous
()

> задай правило дропать всё кроме пинга

нет!
не дропать а реджектить с ти-си-пи_ресет:
-j REJECT --reject-with tcp-reset
так гораздо лучше, и nmap пишет host is down.

boatman
()
Ответ на: комментарий от boatman

вот моя конфигурация. при попытке любого скана - куча мата в логах, 
а nmap'у с параметрами типа -sX, -sN, -sF и прочее -- болта.

единственное от чего нет защиты, так это от "правильного сканирования", попытке реально подцепиться к порту
т.е. от nmap -sS (Scan: SYN+ACK)

а потом мониторить при помощи root-tail, например, файл messages 
или куда-там переопределен вывод логов от iptables по метке IPT

юзайте наздоровье, 
после применения /dev/brain и /dev/hands, разумеется... =)

12:46:31[root@tigra]~/bin# cat ./firewall.sh
#!/bin/sh

##      VERSION 2005-08-23--4WORK
##
##       -----------------------
##       IPTABLES PACKET ROUTING
##       -----------------------
##
##               ([ NET ])
##                   |
##           (mangle)(PREROUTING)
##                   |
##            (nat)(PREROUTING)
##                   |
##                  /-\
##          ---<<---   --->>---
##         /                   \
## (mangle)(INPUT)     (mangle)(FORWARD)
##        |                    |
## (filter)(INPUT)     (filter)(FORWARD)
##        |                    |
## [ local process ]           |
##        |                    |
## (mangle)(OUTPUT)            |
##        |                    |
## (nat)(OUTPUT)               |
##        |                    |
## (filter)(OUTPUT)            |
##        |                    |
##         \--->>---   ---<<---/
##                  \-/
##                   |
##           (mangle)(POSTROUTING)
##                   |
##            (nat)(POSTROUTING)
##                   |
##               ([ NET ])

ME=172.16.31.100
LAN=eth0


###[Total ReSet]####################################################################
## reset the default policies in the filter table.
iptables -P INPUT   ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT  ACCEPT

## reset the default policies in the nat table.
iptables -t nat -P PREROUTING  ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT      ACCEPT

## reset the default policies in the mangle table.
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT     ACCEPT

## flush all the rules in the filter and nat tables.
iptables -F
iptables -t nat    -F
iptables -t mangle -F

## erase all chains that's not default in filter and nat table.
iptables -X
iptables -t nat    -X
iptables -t mangle -X
###[ end of Total ReSet ############################################################


###[ syn-flood chain 4 detecting DOS attaks ]---------------------------------------
iptables -t mangle -N syn-flood
## Limit in 24 connections per sec, max allowed - 48
iptables -t mangle -A syn-flood -m limit --limit 24/s --limit-burst 48 -j RETURN
iptables -t mangle -A syn-flood \
    -m limit --limit 10/s  --limit-burst 10 -j LOG \
    --log-prefix "IPT: DOS (dropped): "
iptables -t mangle -A syn-flood -j DROP
###[ end of syn-flood ]==============================================================

###[ hach_scan shain ]---------------------------------------------------------------
iptables -t filter -N hack_scan
## nmap -sS (Scan: SYN+ACK = no defense... )
## nmap -sX (Scan: SYN+ACK+FIN+RST [+PSH+URG] = not implemented in TCP)
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
    --tcp-flags SYN,ACK,FIN,RST ALL  \
    -j LOG --log-prefix "IPT: Scan: SYN+ACK+FIN+RST: "
#    -m limit --limit 10/minute --limit-burst 10 \

iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
    --tcp-flags SYN,ACK,FIN,RST ALL  \
    -j REJECT --reject-with tcp-reset

## nmap -sN (Scan: none of any flags = not implemented in TCP)
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
    --tcp-flags SYN,ACK,FIN,RST NONE \
    -m limit --limit 10/minute --limit-burst 10 \
    -j LOG --log-prefix "IPT: Scan: empty flags: "
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
    --tcp-flags SYN,ACK,FIN,RST NONE \
    -j REJECT --reject-with tcp-reset

## nmap -sF (Scan: only FIN)
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
    --tcp-flags SYN,ACK,FIN,RST FIN \
    -m limit --limit 10/minute --limit-burst 10 \
    -j LOG --log-prefix "IPT: Scan: only FIN: "
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
    --tcp-flags SYN,ACK,FIN,RST FIN \
    -j REJECT --reject-with tcp-reset

## NEW, not SYN
iptables -t filter -A hack_scan -p tcp ! --syn -m state --state NEW \
    -m limit --limit 10/minute --limit-burst 10 \
    -j LOG --log-prefix "IPT: NEW not SYN (rejected): "
iptables -t filter -A hack_scan -p tcp ! --syn -m state --state NEW \
    -j REJECT --reject-with tcp-reset
###[ end of hach_scan chain ]==========================================================


boatman
()
Ответ на: комментарий от boatman

### Check 4 DOS attack
iptables -t mangle -A PREROUTING -p tcp --syn -j syn-flood

### Check 4 port scanning
iptables -t filter -A INPUT -p ALL -j hack_scan

### Check 4 loopback spoofing
iptables -A INPUT -p ALL -i lo   -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
iptables -A INPUT -p ALL -i ! lo -d 127.0.0.0/8 -j DROP

iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT


## our LANs
LOCAL_NETWORKS="172.16.31.0/24 10.67.136.0/24"
#LOCAL_NETWORKS="10.67.136.0/24"
## serviced, allowed to be requested from our LAN
## 50    -- IPSec: Authentification Header
## 51    -- IPSec: Encapsulated Security Payload
## 514   -- SysLog
## 5222  -- jabberd2: c2s - non-SSL client communication
## 5223  -- jabberd2: c2s - SSL client communication
## 5269  -- jabberd2: s2s - server 2 server communication
## 5347  -- jabberd2: router
## 8767  -- TeamSpeak RC2 Server
LOCAL_NET_SERVICES_TCP="20 21 22 50 51 53 5223 5347"
LOCAL_NET_SERVICES_UDP="53 8767 514"
## services only for me
## 3306  -- MySQL
## 14534 -- TeamSpeak Server Web Admin Interface + 51234
PRIVATE_SERVICES_TCP="20 21 22 25 53 3306 14534 51234"
PRIVATE_SERVICES_UDP="53"
## disables services
DISABLED_SERVICES_TCP="5222 5269"
DISABLES_SERVICES_UDP=""

#iptables -P INPUT   DROP
#iptables -P FORWARD DROP

#ntop
#iptables -A INPUT -p tcp -s ! 127.0.0.1 --destination-port 7891 -j REJECT --reject-with tcp-reset
#iptables -A OUTPUT -p ALL -d 131.114.21.22 -j DROP

# ssh, ftp & other LOCAL_NET_SERVICES
for ip_addr in $LOCAL_NETWORKS; do
    for port in $LOCAL_NET_SERVICES_TCP; do
        iptables -A INPUT -p tcp -i $LAN -s $ip_addr -d $ME --destination-port $port -j ACCEPT
        iptables -A INPUT -p tcp -i $LAN                    --destination-port $port -j REJECT --reject-with tcp-reset
    done;
    for port in $LOCAL_NET_SERVICES_UDP; do
        iptables -A INPUT -p udp -i $LAN -s $ip_addr -d $ME --destination-port $port -j ACCEPT
        iptables -A INPUT -p udp -i $LAN                    --destination-port $port -j REJECT
    done;
done;

# MySQL & other PRIVATE_SERVICES
for port in $PRIVATE_SERVICES_TCP; do
    iptables -A INPUT -i lo   -p tcp -s 127.0.0.1 --destination-port $port -j  ACCEPT
    iptables -A INPUT -i lo   -p tcp -s $ME       --destination-port $port -j  ACCEPT
    iptables -A INPUT -i lo   -p tcp              --destination-port $port -j  REJECT --reject-with tcp-reset
done;
for port in $PRIVATE_SERVICES_UDP; do
    iptables -A INPUT -i lo -p udp -s 127.0.0.1 --destination-port $port -j ACCEPT
    iptables -A INPUT -i lo -p udp -s $ME       --destination-port $port -j ACCEPT
    iptables -A INPUT -i lo -p udp              --destination-port $port -j REJECT
done;

## Disabled TCP
for port in $DISABLED_SERVICES_TCP; do
    iptables -A INPUT -p tcp --destination-port $port -j REJECT --reject-with tcp-reset
done;
## Disabled UDP
for port in $DISABLED_SERVICES_UDP; do
    iptables -A INPUT -p udp --destination-port $port -j REJECT
done;

#iptables -A INPUT -p tcp -s $ME --destination-port 631 -j ACCEPT
#iptables -A INPUT -p udp -s $ME --destination-port 631 -j ACCEPT
#iptables -A INPUT -p tcp -s 127.0.0.1 --destination-port 631 -j ACCEPT
#iptables -A INPUT -p udp -s 127.0.0.1 --destination-port 631 -j ACCEPT
#iptables -A INPUT -p tcp --destination-port 631 -j REJECT --reject-with tcp-reset
#iptables -A INPUT -p udp --destination-port 631 -j DROP


boatman
()
Ответ на: комментарий от anonymous

Да, что-то полезное вынести из него можно, но применять целиком - врядли. Слишком уж много разных ручек и крючёчков, которые в большинстве случаев не будут использованы. Хотя есть интересные подходы, которые можно позаимствовать. Спасибо за линк.

Все равно универсальной конфигурации не существует. Каждый берет что-то, дорабатывает и затачивает под себя.

P.S. Или юзает Аутпост на оффтопике =)

P.P.S. Я и не говорил, что мой вариант - верх совершенства. Но мне он удобен и отвечает моим потребностям. Вот и все =)

boatman
()
Ответ на: комментарий от paranormal

от большинства его опций все-таки есть, если действовать согласно RFC =)

boatman
()
Ответ на: комментарий от boatman

кстати в начале удобнее для флуша всего юзать echo -e "*mangle\nCOMMIT\n*filter\nCOMMIT\n*nat\nCOMMIT"|iptables-restore

woohachabr
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.