Автор Тема: Iptables с drop по дефолт - отворени портове  (Прочетена 10575 пъти)

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #15 -: May 31, 2007, 20:44 »
1. Пробвай експлицитно да добавиш в края:
iptables -A INPUT -j DROP
както предложи tony1975
2. Все пак какво става, ако му дадеш:
iptables -A INPUT -p tcp --dport 3306 -j DROP

пробвай и да го сложиш съвсем в началото.



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

daxen

  • Напреднали
  • *****
  • Публикации: 31
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #16 -: May 31, 2007, 22:27 »
Цитат (tmcdos @ Май 31 2007,20:35)
Този код ще спре изцяло достъпа до MySQL - на мен ми трябва да реже всички, освен мен ;-)

Цитат
iptables -t nat -A PREROUTING -p tcp -s 0.0.0.0 -d ip.to.na.servera --dport 3306 -j DROP


В ръководството на IPTABLES изрично се указва, че таблица NAT се използва само за промяна на адресите и/или портовете на източника/получателя на пакета - а за филтрация на пакетите да се използва таблица FILTER.

еми добавяш си едно правило да пуска само тебе и така ...
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #17 -: May 31, 2007, 23:43 »
Ако не се справяш - пробвай в debug mode  '<img'> :
сложи едно правило:
-A INPUT -p tcp --dport 3306 -j LOG --log-level info --log-prefix '### SQL ###'
в края, пусни си в една конзола "tail -f /var/log/messages" и пусни скенера.
Ако не излезе нищо, значи вече или е DROP-нат или ACCEPT-нат (в твоя случай явно второто). Тогава придвижваш това правило с едно правило по-нагоре и пак .. и пак .. докато не откриеш колко правило всъщност ти прави мизериите '<img'>
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

alex_c

  • Напреднали
  • *****
  • Публикации: 122
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #18 -: Jun 01, 2007, 00:14 »
Абе, пичове, нали с правилото:
-A INPUT -i eth0 -p tcp --syn -m limit --limit 25/s --limit-burst 35 -j ACCEPT

разрешава конекции по протокол TCP с честота 25 в секунда, без да е указано на кой порт става това.
Не виждам къде в таблицата се указва достъп по SSH и до MySQL сървъра само от конкретно IP.
За да се постигне желания ефект (заедно със защита от syn-flood), таблицата трябва да изглежда примерно така:

-----------------------------------------------
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

*filter
:FORWARD DROP [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
:syn-food - [0:0]

# Enable full access from my home IP
-A INPUT -s xx.xx.xx.xx/32 -i eth0 -j ACCEPT
-A INPUT -p all -s localhost -i eth0 -j DROP
-A INPUT -p all -s localhost -i eth1 -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type echo-request -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type time-exceeded -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type destination-unreachable -j ACCEPT

# PROTECTION SYN flood
-A INPUT -i eth0 -p tcp -m tcp --dport 25 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --dport 80 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --dport 110 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --dport 2120 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --dport 909 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --dport 30000:30024 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --syn -j REJECT

-A syn-food -m limit --limit 25/s --limit-burst 35 -j ACCEPT

# PROTECTION port scanner
-A INPUT -i eth0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 3/s --limit-burst 5 -j ACCEPT
# PROTECTION Ping of Death
-A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 3 -j ACCEPT

# Drop hijackers !!!
-A INPUT -i eth0 -s 81.169.186.45/32 -j DROP
-A INPUT -i eth0 -s 84.170.202.66/32 -j DROP
-A INPUT -i eth0 -s 203.172.213.122/32 -j DROP
-A INPUT -i eth0 -s 194.242.112.72/32 -j ACCEPT
-A INPUT -i eth0 -s 212.241.246.148/32 -j ACCEPT
-A INPUT -i eth0 -s 204.13.82.60/32 -j DROP
-A INPUT -i eth0 -s 85.140.156.23/32 -j DROP
-A INPUT -i eth0 -s 213.234.30.79/32 -j DROP
-A INPUT -i eth0 -s 87.106.12.174/28 -j DROP
-A INPUT -i eth0 -s 213.91.242.188/32 -j DROP
-A INPUT -i eth0 -s 87.126.147.86/32 -j DROP
-A INPUT -i eth0 -s 217.160.23.161/32 -j DROP


-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

COMMIT
-----------------------------------------------

По принцип може и без реда:
-A INPUT -i eth0 -p tcp -m tcp --syn -j REJECT

но без него при сканиране ще бъде открито, че всички останали портове са филтрирани, докато така ще се върне ICMP съобщение: destination port unreachable.

P.S. Сега видях, че съм именовал веригата за ограничаване на SYN пакетите syn-food, а не syn-flood (не че е от значение, но някак си храната няма място тук ':p' ), но ме мързи да го поправям

Best wishes!
Alex
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #19 -: Jun 01, 2007, 00:18 »
Цитат (alex_c @ Юни 01 2007,00:14)
Абе, пичове, нали с правилото:
-A INPUT -i eth0 -p tcp --syn -m limit --limit 25/s --limit-burst 35 -j ACCEPT

разрешава конекции по протокол TCP с честота 25 в секунда, без да е указано на кой порт става това.

Имаме победител '<img'>
tmcdos, струва ми се, че дължиш една бира на alex '<img'>

Сега по темата:

Аз по принцип не съм привърженик на -P директивите ...

Предпочитам всяка верига, която се занимава с даден проблем да извършва две действия - или DROP/REJECT или RETURN, но никога ACCEPT. Точно покрай такива простотии се научих на това.

След като мина всякакви предпазни вериги, то чак тогава почвам да ACCEPT-вам пакети по услуги, ИП-та, мрежи и т.н.

И най-накрая си добавям едно тотално DROP/REJECT правило.



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #20 -: Jun 01, 2007, 00:37 »
Та, по "моя" начин стената би изглеждала примерно така:

Примерен код


-A INPUT -s xx.xx.xx.xx/32 -i eth0 -j ACCEPT
-A INPUT -p all -i !lo -s localhost -j DROP
-A INPUT -i lo -j ACCEPT

-A INPUT -i eth0 -s 81.169.186.45/32 -j DROP
-A INPUT -i eth0 -s 84.170.202.66/32 -j DROP
-A INPUT -i eth0 -s 203.172.213.122/32 -j DROP
-A INPUT -i eth0 -s 194.242.112.72/32 -j DROP
-A INPUT -i eth0 -s 212.241.246.148/32 -j DROP
-A INPUT -i eth0 -s 204.13.82.60/32 -j DROP
-A INPUT -i eth0 -s 85.140.156.23/32 -j DROP
-A INPUT -i eth0 -s 213.234.30.79/32 -j DROP
-A INPUT -i eth0 -s 87.106.12.174/28 -j DROP
-A INPUT -i eth0 -s 213.91.242.188/32 -j DROP
-A INPUT -i eth0 -s 87.126.147.86/32 -j DROP
-A INPUT -i eth0 -s 217.160.23.161/32 -j DROP

-N ICMP
-A INPUT -i eth0 -p icmp -j ICMP
-A ICMP -p icmp -m icmp --icmp-type echo-request -j RETURN
-A ICMP -p icmp -m icmp --icmp-type echo-reply -j RETURN
-A ICMP -p icmp -m icmp --icmp-type time-exceeded -j RETURN
-A ICMP -p icmp -m icmp --icmp-type destination-unreachable -j RETURN
-A ICMP -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 3 -j RETURN
-A ICMP -j DROP

# PROTECTION services
-A INPUT -i eth0 -p tcp -j TCP

-A TCP -p tcp --syn -m ! limit --limit 25/s --limit-burst 35 -j DROP
-A TCP -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m ! limit --limit 3/s --limit-burst 5 -j DROP

-A TCP -p tcp -m state --state INVALID -j DROP

-A TCP -p tcp --dport 25 -j RETURN
-A TCP -p tcp --dport 80 -j RETURN
-A TCP -p tcp --dport 110 -j RETURN
-A TCP -p tcp --dport 2120 -j RETURN
-A TCP -p tcp --dport 909 -j RETURN
-A TCP -p tcp --dport 30000:30024 -j RETURN

-A TCP -p tcp -j REJECT

-A INPUT -p tcp -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -j DROP



Това, което alex_c забеляза, всъщност го има и при Ping-of-Death защитата - ти ВЕЧЕ си приел тези пакети по-горе.

Както виждаш използвам много малко ACCEPT правила при това само в края. За DROP правилото винаги си сигурен, че не искаш пакета да продължи по нататък, независимо какво има след него. За ACCEPT правилата обаче, това съвсем не е така - винаги може да се появи нещо след него, което да иска да отхвърли този пакет по друг признак '<img'>



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

alex_c

  • Напреднали
  • *****
  • Публикации: 122
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #21 -: Jun 01, 2007, 09:14 »
@VladSun:
 За ACCEPT правилата обаче, това съвсем не е така - винаги може да се появи нещо след него, което да иска да отхвърли този пакет по друг признак

Не съм съгласен с това - след като веднъж един пакет е ACCEPT-нат, той излиза от текущата таблица (filter, nat или mangle) и повече не се проверява за съответствие от правилата след реда, с който е извършено ACCEPT-ването.
Не случайно (или може би е улучил мястото ':p' ) tmcdos е сложил правилото:

-A INPUT -s xx.xx.xx.xx/32 -i eth0 -j ACCEPT
в началото на таблицата, а именно, за да приемат и да не се проверяват повече пакетите със сорс адрес xx.xx.xx.xx/32 повече.

Best wishes!
Alex
Активен

tmcdos

  • Напреднали
  • *****
  • Публикации: 53
  • Distribution: Fedora Core 6
  • Window Manager: Не използвам - само Command-Line
    • Профил
    • WWW
Iptables с drop по дефолт - отворени портове
« Отговор #22 -: Jun 01, 2007, 11:22 »
Съвсем нарочно и преднамерено съм си сложил "вратичката" още в началото, това го научих малко по-отдавна  '<img'>
Алекс, наистина заслужи бирата - остава само да я изпием. За пореден път се убеждавам колко е важен реда на правилата.
Влади, аз продължавам да съм убеден, че DROP-ACCEPT начина на работа позволява да имаш по-малко правила и (поне на мен) ми е по-лесен да си го представя, отколкото ACCEPT-DROP. Както винаги - въпрос на лични предпочитания. Между другото, ти с коя версия на IPTABLES си, използваш ли някакви допълнителни пачове ? Защото доколкото зная, до версия 1.3.1 опцията LIMIT не може да работи с инверсия:
Примерен код

-A TCP -p tcp --syn -m ! limit --limit 25/s --limit-burst 35 -j DROP
-A TCP -p tcp --syn -m limit ! --limit 25/s --limit-burst 35 -j DROP

този код не работи.
Преработих си малко правилата, и сега вече порт 3306 е отворен само за мен и никой друг.

Примерен код

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

*filter
:FORWARD DROP [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
:protect - [0:0]

-A INPUT -s хх.хх.хх.хх/32 -i eth0 -j ACCEPT
-A INPUT -p all -s localhost -i eth0 -j DROP
-A INPUT -p all -s localhost -i eth1 -j DROP
-A INPUT -i lo -j ACCEPT

# PROTECTION port scanner
#-A INPUT -i eth0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 3/s --limit-burst 5 -j REJECT --reject-with icmp-host-unreachable

# Drop hijackers !!!
-A INPUT -i eth0 -s 81.169.186.45/32 -j DROP
-A INPUT -i eth0 -s 84.170.202.66/32 -j DROP
-A INPUT -i eth0 -s 203.172.213.122/32 -j DROP
-A INPUT -i eth0 -s 194.242.112.72/32 -j DROP
-A INPUT -i eth0 -s 212.241.246.148/32 -j DROP
-A INPUT -i eth0 -s 204.13.82.60/32 -j DROP
-A INPUT -i eth0 -s 85.140.156.23/32 -j DROP
-A INPUT -i eth0 -s 213.234.30.79/32 -j DROP
-A INPUT -i eth0 -s 87.106.12.174/28 -j DROP
-A INPUT -i eth0 -s 213.91.242.188/32 -j DROP
-A INPUT -i eth0 -s 87.126.147.86/32 -j DROP
-A INPUT -i eth0 -s 217.160.23.161/32 -j DROP

-A INPUT -i eth0 -p tcp -m tcp --dport 25 -j protect
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j protect
-A INPUT -i eth0 -p tcp -m tcp --dport 110 -j protect
#-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j protect
-A INPUT -i eth0 -p tcp -m tcp --dport 2120 -j protect
-A INPUT -i eth0 -p tcp -m tcp --dport 909 -j protect
-A INPUT -i eth0 -p tcp -m tcp --dport 5222:5223 -j protect
-A INPUT -i eth0 -p tcp -m tcp --dport 5269 -j protect
-A INPUT -i eth0 -p tcp -m tcp --dport 30000:30024 -j protect
# Should be last in this block
-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# PROTECTION SYN flood
-A protect -i eth0 -p tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 100/s --limit-burst 200 -j ACCEPT
# There is no need for the next rule, since if packet does not match the rule above, it will leave chain PROTECT
# and return back to the originating INPUT chain, where a DROP by default will be made
#-A protect -i eth0 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT --reject-with icmp-host-unreachable

# PROTECTION Ping of Death
-A INPUT -i eth0 -p icmp -m icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# Accept all ICMP answers, hopefully they do not need further processing
# but this is not tested against DoS attacks
-A INPUT -i eth0 -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type time-exceeded -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type destination-unreachable -j ACCEPT
# if this is Ping-of-Death or something similar, it will not match the rules above, so we handle it here
-A INPUT -i eth0 -p icmp -m icmp -j REJECT --reject-with icmp-host-unreachable

COMMIT


Само защитата от сканиране на портове още не съм измислил как да я направя, но ще се справя.

Благодаря !
Активен

teh

  • Напреднали
  • *****
  • Публикации: 56
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #23 -: Jun 01, 2007, 11:43 »
Има малки изключения но като цяло сте изписали три страници глупости.

Ако говорим само за ipv4, "standalone" машина и SPI, iptables скрипта ти *трябва* да изглежда така:

Примерен код

#!/bin/bash

ipt=/sbin/iptables
myip=10.0.0.110

for table in mangle nat filter; do \
$ipt -t $table -F
$ipt -t $table -X
$ipt -t $table -Z
done

$ipt -P INPUT DROP
$ipt -P FORWARD DROP
$ipt -P OUTPUT ACCEPT

$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A INPUT -i lo -j ACCEPT

$ipt -A INPUT -p tcp --syn --dport 21 -j ACCEPT
$ipt -A INPUT -p tcp --syn --dport 22 -s $myip -j ACCEPT
$ipt -A INPUT -p tcp --syn --dport 25 -j ACCEPT
$ipt -A INPUT -p tcp --syn --dport 80 -j ACCEPT
$ipt -A INPUT -p tcp --syn --dport 113 -j REJECT --reject-with tcp-reset
$ipt -A INPUT -p tcp --syn --dport 443 -j ACCEPT
$ipt -A INPUT -p tcp --syn --dport 3306 -s $myip -j ACCEPT

$ipt -A INPUT -p icmp -j ACCEPT



Файлът /etc/sysctl.conf трябва да изглежда *поне* така:

Примерен код

net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.tcp_syncookies=1
net.ipv4.ip_forward=0





Активен

alex_c

  • Напреднали
  • *****
  • Публикации: 122
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #24 -: Jun 01, 2007, 13:08 »
@teh
Не разбирам какво имаш против ограничаването на наводняването със SYN пакети?
Активен

tmcdos

  • Напреднали
  • *****
  • Публикации: 53
  • Distribution: Fedora Core 6
  • Window Manager: Не използвам - само Command-Line
    • Профил
    • WWW
Iptables с drop по дефолт - отворени портове
« Отговор #25 -: Jun 01, 2007, 13:30 »
Алекс, не му се връзвай на teh, вече разбрах откъде ми идва проблема, и дори си го оправих  '<img'>
Благодаря ти.

teh, не се сърди - но твоето решение не ми върши работа.
Активен

teh

  • Напреднали
  • *****
  • Публикации: 56
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #26 -: Jun 01, 2007, 13:46 »
Просто е още един начин да се прецакаш ;-)

Примерен код
# PROTECTION SYN flood
-A protect -i eth0 -p tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 100/s --limit-burst 200 -j ACCEPT


Ти от къде си сигурен, че с това правило няма да спреш легитимни syn пакети преди още да са напълнили опашката (DoS yourself)?
Или обратното - опашката вече ще е пълна (DoS attack successful) пък твоето правило няма да влезе в сила защото всеоще не е достигнат желания rate?

Този тип ограничение изисква много подробно тестване от всевъзможни източници (различни в отношение "network distance") на всеки един хост върху който ще го прилагаш и пак накрая е твърде вероятно нищо полезно да не си направил а напротив - точно обратното.

Именно против syn flood хората (DJB) са измислили т.нар. syn cookies(1). Имат няколко недостатъка но при положение, че syn cookies проверките влизат в сила единствено когато опашката се напълни и включват проверката за следващите постъпили syn пакети (вместо да ги drop-ват както ще стане ако не е вкл. tcp_syncookies), тогава това *Е* по-доброто решение.

1 - http://en.wikipedia.org/wiki/Syncookies
Активен

teh

  • Напреднали
  • *****
  • Публикации: 56
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #27 -: Jun 01, 2007, 13:51 »
@tmcdos:

"Проблема си е във клуба".

За вършене - върши. Проблема е, че не можеш да го разчетеш въпреки, че е в пъти по изчистено, просто и функционално от предните "опити".
Активен

teh

  • Напреднали
  • *****
  • Публикации: 56
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #28 -: Jun 01, 2007, 14:11 »
@alex_c

Звучиш малко по разумен. Помисли върху това:

Имаш една опашка с определен максимален размер. Когато опашката се запълни - не се допускат повечете хора/единици/пакети/топчета/.../ и се отпращат. Отбелязвам, че и в този случай никой не прави проверка легитимни ли са или не хората.

Със правило като твоето (или на който е там) казваш следното:  "Няма да пускам по повече от 5 човека на минута". Тук също не правиш проверка дали са легитмни или не.

Какво можеш да постигнеш с наложеното правило? Ще държиш опашката наполовина пълна и другите хора ще ги отпращаш или пък опашката ще е постоянно пълна и хората ще бъдат отпращани защото е пълна а твоето правило няма да влезе в сила защото опашката се пълни цялата въпреки, че пускаш само по 5 човека на минута. Като и тук никъде не проверяваш легитмни ли са или не хората на опашката.

Много по добре звучи да няма такива правила а просто когато опашката се напълни, вместо да отпращаш хората да започнеш да ги проверяваш дали са легитимни докато опашката отново се върне обратно на максимално допустимия размер.

Отбелязвам, че последното не е 100% решение на проблема
, но е доста по логичен ход от колкото сам да се прецакваш.
Активен

teh

  • Напреднали
  • *****
  • Публикации: 56
    • Профил
Iptables с drop по дефолт - отворени портове
« Отговор #29 -: Jun 01, 2007, 14:43 »
Ето ви един thread за размисъл относно syn cookies:

http://www.redhat.com/archive....47.html
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
SpamAssassin drop SPAM messages?
Настройка на програми
kiroffbg 0 1715 Последна публикация Jan 12, 2004, 09:51
от kiroffbg
drop-down from location bar in Konqueror
Настройка на програми
jojopara 1 2295 Последна публикация Jul 16, 2004, 23:46
от XaugyTuH
Irc drop при load balancing
Настройка на програми
bombe 5 4351 Последна публикация Jul 05, 2008, 11:33
от bombe
Drop line На Slackware 13.0 не иска да се инсталира ?
Настройка на хардуер
Pavlik 6 3661 Последна публикация Nov 24, 2009, 10:42
от bazu
Iptables Mac drop
Настройка на програми
Breakfist 1 2578 Последна публикация Nov 18, 2010, 13:28
от tolostoi