Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Помогите разобраться с правилом iptables

1

Есть вот такое правило:

iptables - A INPUT -p udp —dport 5060 -j SCAMBLOCK

iptables -A INPUT -p udp —dport 5060 -m recent —set —name SIP

iptables -A INPUT -p udp —dport 5060 -m recent —update —seconds 2 —hitcount 60 —name SIP \

iptables -j LOG —log-prefix «SIP flood detected:»

Взятое с вот этой статьи, я в iptables не силен, по этому тупо скопипэстил в rc.local и запустил. И баш ругнулся на то, что нет файла или директории SCAMBLOCK и на то, что iptables это плохой аргумент. вот:

iptables v1.4.12: Couldn't load target `SCAMBLOCK':No such file or directory

Try iptables -h' or 'iptables --help' for more information. Bad argumentiptables'

Я создал этот файл SCAMBLOCK (в нем должен, как я понял, список черных IP), в папке /etc/ исходя из логики, где исполняющий файл там нужно и создавать этот. Но iptables все равно не может его найти.

Суть вопроса, где нужно создать этот файл и есть ли синтаксис записи IP в этот файл?

Спасибо за ответ!

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

спросил 2012-09-06 23:08:03 +0400

vlad.v Gravatar vlad.v
377 28 5 21

обновил 2012-10-31 02:07:08 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

2 Ответа

3

вот рабочий кусок. там в конце можете посмотреть как считается.

#!/bin/sh
#
# SIP DoS mitigation script using Linux iptables/netfilter
# WILL NOT WORK WITH SIP TLS, FOR OBVIOUS REASONS...

# Copyright 2008 Kristian Kielhofner <kkielhofner@star2star.com>
# changed by arheops@gmail.com 2011
# This program is distributed under the terms of the GNU Public License V2
#
# TODO: Use the state module for TCP (maybe even UDP)?
# TODO: Evaluate string matching algorithms and offsets
# TODO: Better matching for URIs (support tel:)?
# TODO: Tweak and/or provide configuration for hashlimit expires and bursts
# TODO: Support configuration of INVITE/REGISTER/etc limits and methods
# TODO: Don't always clear INPUT/FORWARD tables - allow for other rulesets
# TODO: Testing?

# INVITE rate, per host.  Remember a successful (authenticated) call requires 2 INVITEs-
# Initial INVITE, 407 auth required (w/ nonce), INVITE with nonce and authentication.
IRATE=50/minute

# REGISTER rate, per host.
RRATE=10/minute

# All other SIP methods rate, per host.  Be careful with SUBSCRIBEs, OPTIONS, CANCELs, etc.
ORATE=60/minute

# Methods for this script to ignore.  These SIP methods are always allowed.
IGMETH="OPTIONS NOTIFY"

# Burst
BURST=20

# Interface(s) to protect on INPUT. Seperate multiple interfaces with spaces.
# This will protect SIP services on THIS HOST.
IFACE="eth0"

# Reject/drop action - usually something like DROP or REJECT.
# Use ACCEPT to use this script to not filter traffic but still collect statistics.
DACTION=DROP

# Protocol(s) to filter - can be either tcp or udp or both. Seperate multiples with spaces.
PROTOCOLS="udp"

# Enable logging.
LOG=YES

# Block tel: URIs completely?
# P.S. - tel: sucks!
BLOCKTEL=yes

# Interface(s) to protect on FORWARD. Seperate multiple interfaces with spaces.
# The same hashtable will protect the entire network from the same host(s).
# Destination IP is NOT taken into consideration.
# This will protect any SIP services running on the network that uses this machine
# as a router (as long as you get the interfaces right).
FIFACE="eth0"

# Location of iptables binary.
IPTABLES=`which iptables`

# Search packet to this location. A larger offset looks further into the packet
# and takes more time but could catch more attacks (and false alarms).
# Remember, the method to match on is always in the beginning of the packet.
OFFSET=65

# SIP port
SPORT=5060

SSHPORT=22

if [ ! "$1" ]
then
echo "SIP DoS/DDoS mitigation script for iptables
See top of script for configuration

Usage:
$0 [start|stop|status]"
exit 1
fi

if [ "$1" = "status" ]
then
$IPTABLES -L -v -n
exit
fi

# Setup iptables
for i in sipdos sshdos whitelist blacklist sipdosregister sipdosinvite fail2ban-sip
do
$IPTABLES -F $i 2> /dev/null
$IPTABLES -X $i 2> /dev/null
$IPTABLES -N $i 2> /dev/null
done;

if [ "$1" = "stop" ]
then
echo "Clearing iptables rules..."
if [ "$FIFACE" ]
then
$IPTABLES -F FORWARD 2> /dev/null
fi
$IPTABLES -F INPUT 2> /dev/null
exit
fi

# Send the right traffic through our chain
for i in $IFACE
do
for l in $PROTOCOLS
do
$IPTABLES -D INPUT -i $i -m $l -p $l --dport $SPORT -j sipdos 2>/dev/null
$IPTABLES -D INPUT -i $i -m $l -p $l --dport $SPORT -j sipdos 2>/dev/null
$IPTABLES -A INPUT -i $i -m $l -p $l --dport $SPORT -j sipdos
done
done

# Send the right forwarded traffic through our chain
if [ "$FIFACE" ]
then
for j in $FIFACE
do
for l in $PROTOCOLS
do
$IPTABLES -D INPUT  -m $l -p $l --dport $SPORT -j sipdos
$IPTABLES -I INPUT  -m $l -p $l --dport $SPORT -j sipdos
done
done
fi

for i in `cat /etc/block/blacklist`
do
$IPTABLES -I blacklist -s $i -j REJECT --reject-with icmp-host-unreachable

done;

for i in `cat /etc/block/whitelist`
do
$IPTABLES -A whitelist -s $i -j ACCEPT
$IPTABLES -A whitelist -d $i -j ACCEPT
done;

$IPTABLES -A whitelist -s 78.47.159.176/28       -j ACCEPT

$IPTABLES -A sipdos -j fail2ban-sip
$IPTABLES -A sipdos -j blacklist
$IPTABLES -A sipdos -j whitelist

# "Handle" tel: URIs
if [ "$BLOCKTEL" ]
then
$IPTABLES -A sipdos -m string --string "tel:" --algo bm --to $OFFSET -j $DACTION
fi

# Ignore certain (configured) methods
if [ "$IGMETH" ]
then
for k in $IGMETH
do
$IPTABLES -A sipdos -m string --string "$k sip:" --algo bm --to $OFFSET -j ACCEPT
done
fi

# Finally set some limits...

# INVITE limit
$IPTABLES -A sipdos -m string --string "INVITE sip:" --algo bm --to $OFFSET -j sipdosinvite

$IPTABLES -A sipdosinvite \
-m hashlimit --hashlimit $IRATE --hashlimit-burst $BURST \
--hashlimit-mode srcip,dstport --hashlimit-name sip_i_limit -j ACCEPT

# REGISTER limit
$IPTABLES -A sipdos -m string --string "REGISTER sip:" --algo bm --to $OFFSET -j sipdosregister

$IPTABLES -A sipdosregister \
-m hashlimit --hashlimit $RRATE --hashlimit-burst $BURST \
--hashlimit-mode srcip,dstport --hashlimit-name sip_r_limit -j ACCEPT

# All other SIP packets...
$IPTABLES -A sipdos -m hashlimit --hashlimit $ORATE --hashlimit-burst $BURST \
  --hashlimit-mode srcip,dstport --hashlimit-name sip_o_limit -j ACCEPT



# Take action on everything else
if [ $LOG ]
then
$IPTABLES -A sipdosregister -j LOG --log-prefix SIP_TO_MANY
$IPTABLES -A sipdosinvite -j LOG --log-prefix SIP_TO_MANY
fi

$IPTABLES -A sipdosregister -j $DACTION
$IPTABLES -A sipdosinvite -j $DACTION
ссылка удалить спам редактировать

ответил 2012-09-08 10:39:25 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

обновил 2012-09-08 10:43:53 +0400

0

Прежде чем начинать работать с iptables посоветую зайти на www.opennet.ru Там есть очень много примеров.

Сделайте следующее:

  1. создайте фаил с именем iptables.ok
  2. скопируйте следующее в этот фаил (может вам нужно видоизменить даный код)

        # Generated by iptables-save v1.4.2 on Tue Nov 16 10:00:55 2010
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :SCAMBLOCK - [0:0]
    
    # Jump to SCAMBLOCK chain to check connection to 5060 udp port
    -A INPUT -p udp —dport 5060 -j SCAMBLOCK
    
    # Returning after SCAMBLOCK chain
    -A INPUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j LOG --log-prefix "SYN Not New:"
    -A INPUT -p tcp -m tcp ! --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
    -A INPUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
    -A INPUT -m limit --limit 3/min --limit-burst 3 -j LOG --log-prefix "Packet died: " --log-level 7
    -A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 128:65535 -j LOG --log-prefix "ICMP Oversize:" --log-level 7
    -A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 128:65535 -j REJECT --reject-with icmp-port-unreachable
    -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 3/sec -j ACCEPT
    -A INPUT -p icmp -f -j LOG --log-prefix "ICMP Fagment:"
    -A INPUT -p icmp -f -j REJECT --reject-with icmp-port-unreachable
    -A INPUT -p tcp -m tcp --dport 3306 -j LOG --log-prefix "TCP Try connect MySQL server:"
    -A INPUT -p tcp -m tcp --dport 3306 -j REJECT --reject-with icmp-host-prohibited
    -A INPUT -p udp -m udp --dport 3306 -j LOG --log-prefix "UDP Try connect MySQL server:"
    -A INPUT -p udp -m udp --dport 3306 -j REJECT --reject-with icmp-host-prohibited
    -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -j DROP
    
    #SCAMBLOCK chain for cheking udp 5060 port
    -A SCAMBLOCK -p udp —dport 5060 -m recent —set —name SIP
    -A SCAMBLOCK -p udp —dport 5060 -m recent —update —seconds 2 —hitcount 60 —name SIP -j LOG —log-prefix «SIP flood detected:»
    -A SCAMBLOCK -p udp —dport 5060 -m recent —update —seconds 2 —hitcount 60 —name SIP -j REJECT --reject-with icmp-port-unreachable
    #Return to INPUT chain
    -A SCAMBLOCK -j RETURN
    COMMIT
    # Completed on Tue Nov 16 10:00:55 2010
    
  3. потом iptables-restore < <имя файла>

  4. я прописал это "iptables-restore < <имя файла>" в rc.local. У меня Дебиян.

Посмотрите в сторону fail2ban. Про него много написано и под разные Linux дистрибутивы

ссылка удалить спам редактировать

ответил 2012-09-06 23:46:13 +0400

varnar Gravatar varnar
11 3

обновил 2012-09-06 23:47:31 +0400

Comments

-A INPUT -p tcp -m tcp --dport 3306 - какое глупое правило. Статистику обращений на порт грустными вечерами рассматривать?

zzuz ( 2012-09-06 23:55:58 +0400 )редактировать

а почему? это просто пример там много чего закрыто и открыто

varnar ( 2012-09-07 01:32:05 +0400 )редактировать

*filter - COMMIT - это полный пример.

zzuz ( 2012-09-07 10:29:43 +0400 )редактировать

ОК :) - но все таки это example

varnar ( 2012-09-07 12:02:18 +0400 )редактировать

Спасибо всем ОГРОМНОЕ за советы!

vlad.v ( 2012-09-09 03:47:26 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку
1 закладка

подписаться на rss ленту новостей

Статистика

Задан: 2012-09-06 23:08:03 +0400

Просмотрен: 6,784 раз

Обновлен: Oct 31 '12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.