IPtables korlátozás

 ( XmIsTeR | 2009. március 22., vasárnap - 13:13 )

Meg tudja nekem mondani valaki, h az alábbi iptables szabályok miért korlátozzák sikeresen a 4040-es portot, de a 80-ast nem?
A poén az, ha a 80-ast átírom 81-re, a 81-es portot már rendesen korlátozza.
A másik poén, h tegnap még működött rendesen, ma reggelre meg nem. Gondoltam betelt az nf_conntrack tábla, szóval növeltem a méretét, újra is indítottam a gépet, de semmi hatása.

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT #Localt engedjuk mar
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent \
--update --seconds 60 --hitcount 3 --name web -j DROP
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent \
--set --name web
iptables -A INPUT -p tcp --dport 4040 -m state --state NEW -m recent \
--update --seconds 60 --hitcount 3 --name ssh -j DROP
iptables -A INPUT -p tcp --dport 4040 -m state --state NEW -m recent \
--set --name ssh
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 4040 -j ACCEPT

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ilyen egyszerűen nincs, nem létezik, nem tudom elhinni.

Létrehoztam külön láncokat, hogy jobban lehessen kezelni a dolgokat:

#!/bin/bash
iptables -F
iptables -X
iptables -N ssh
iptables -N apache
iptables -N bind
iptables -N blacklist

#Blacklist lanc
iptables -A blacklist -m recent --name blacklist --set
iptables -A blacklist -j DROP

#SSH lanc
#Ha blacklistes akkor dobás
iptables -A ssh -m recent --update --name blacklist --seconds 600 --hitcount 1 -j DROP
#Ha nem, akkor percenkent 3at engedunk neki
iptables -A ssh -m recent --update --name ssh --seconds 60 --hitcount 3 -j blacklist
#Eloszor jar erre
iptables -A ssh -m recent --set --name ssh
iptables -A ssh -j ACCEPT

#Apache lanc
#Ha blacklistes akkor dobás
iptables -A apache -m recent --update --name blacklist --seconds 600 --hitcount 1 -j DROP
#Ha nem, akkor percenkent 3at engedunk neki, majd mehet a blacklistbe
iptables -A apache -m recent --update --name apache --seconds 60 --hitcount 3 -j blacklist
#Eloszor jar erre
iptables -A apache -m recent --set --name apache
iptables -A apache -j ACCEPT

#Bind lanc
#Ha blacklistes akkor dobás
iptables -A bind -m recent --update --name blacklist --seconds 600 --hitcount 1 -j DROP
#Ha nem, akkor percenkent 3at engedunk neki, majd mehet a blacklistbe
iptables -A bind -m recent --update --name bind --seconds 60 --hitcount 10 -j blacklist
#Eloszor jar erre
iptables -A bind -m recent --set --name bind
iptables -A bind -j ACCEPT

#Input lanc
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT #Localt engedjuk mar
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 4040 -m state --state NEW -j ssh
iptables -A INPUT -p tcp -m tcp -m multiport --dports 82,81 -m state --state NEW -j apache

Amint látható az apache láncba most nem a 80-as port megy, próbaképp. Így jónak néz ki a dolog, tiltja a kapcsolatot a 82-es és 81-es portra is.
DE!!!!
Amint átírom az egyik portot 80-ra, már nem tilt a másikra se!! Én ezt nem hiszem el. Mi van azzal a 80-as porttal amit egyszerűen nem bír elviselni?? Nem értem.
Valaki aki találkozott már ilyennel pls....

Nem tudom, hogy tesztelted, de nem az lehet, hogy fut a 80-as porton a webszerver felépült kapcsolattal, és egy ilyennel próbálkozol?

Nem, direkt nem fut, hogy ne legyen semmi különbség a portok közt.
Nem tudom pontosan hogy működik ez a conntrack tábla vagy a recent modul, de nem tud vmelyik portra specifikusan betelni?

meg tudod növelni a recent modul által használt tábla méretét. ezeket állíthatod (iptables man):

The module itself accepts parameters, defaults shown:
ip_list_tot=100
Number of addresses remembered per table
ip_pkt_list_tot=20
Number of packets per address remembered
ip_list_hash_size=0
Hash table size. 0 means to calculate it based on ip_list_tot, default: 512
ip_list_perms=0644
Permissions for /proc/net/ipt_recent/* files
debug=0
Set to 1 to get lots of debugging info

pl. modprobe ipt_recent ip_list_tot=1000 ip_pkt_list_tot=200

update helyett pedig rcheck lehet takarékosabb.

Lehet, h takarékosabb, de kevésbé hatékony.
És köszi a tippet, holnap megnézem mit tudok kihozni belőle.

Hali!
Elsőre jónak tűnik, de részeket kihagytál.
Én "iptables-save > ki"-t átnézném.

A szabályrendszer sztem jó, mert más portra működik.
Holnap megpróbálom feltolni a recent tábla nagyságat a paraméterekkel, amit donzoronzo leírt, és ha úgy se lesz jó, akkor bemásolom az egész iptables scriptet, vagy az iptables-save -t, amelyik jobban tetszik :)

Nah sikerült stabilan összehoznom, h ne teljen be semmilyen tábla.
Leírom, hátha mások is találkoznak ilyennel:
1. nf_conntrack tábla méretének megnövelése, stabil kapcsolatok idejének korlátozása
/etc/sysctl.conf végére

net.netfilter.nf_conntrack_expect_max = 150000
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_max = 150000

2. ipt_recent modul tábla méretének megnövelése, címenkénti bejegyzések számának maximálisra állítása
/etc/modprobe.d/options végére

options ipt_recent ip_list_tot=262143 ip_pkt_list_tot=255

3. iptables beállítása

#!/bin/bash
iptables -F
iptables -X
iptables -N ssh
iptables -N apache
iptables -N bind
iptables -N blacklist

#Blacklist lanc
iptables -A blacklist -m recent --name blacklist --set
iptables -A blacklist -j DROP

#SSH lanc
#Percenkent 5ot engedunk neki
iptables -A ssh -m recent --rcheck --name ssh --seconds 60 --hitcount 5 -j blacklist
#Eloszor jar erre
iptables -A ssh -m recent --set --name ssh
iptables -A ssh -j ACCEPT

#Apache lanc
#Percenkent 25 oldaltoltes engedunk neki, majd mehet a blacklistbe
iptables -A apache -m recent --rcheck --name apache --seconds 10 --hitcount 11 -j blacklist
#Eloszor jar erre
iptables -A apache -m recent --set --name apache
iptables -A apache -j ACCEPT

#Bind lanc
#Percenkent 30at engedunk neki, majd mehet a blacklistbe
iptables -A bind -m recent --rcheck --name bind --seconds 60 --hitcount 30 -j blacklist
#Eloszor jar erre
iptables -A bind -m recent --set --name bind
iptables -A bind -j ACCEPT

#Input lanc
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT #Localt engedjuk mar
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 4050 -j ACCEPT #Webmin

#Ha blacklistes akkor minden probalkozasnal mehet 5 percre
iptables -A INPUT -m recent --update --name blacklist --seconds 300 --hitcount 1 -j DROP
iptables -A INPUT -p tcp --dport 4040 -m state --state NEW -j ssh
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j apache
iptables -A INPUT -p tcp --dport 53 -m state --state NEW -j bind
iptables -A INPUT -p udp --dport 53 -m state --state NEW -j bind
...(A többi szabály, amiknél nem félünk támadástól)
#portscan elleni vedelem
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#ping-flood elleni vedelem
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

#Output lanc
iptables -P OUTPUT ACCEPT

Ezekkel a beállításokkal megy már 48 órája tökéletesen. Ez a védelem nélkül a 80as portra érkező kapcsolatok száma másodpercek alatt több 10.000-re megy föl, ha tovább várnék talán 100.000 fölé is menne.
Ezekkel a beállításokkal(amiken még lehet szigorítani), a kapcsolatok száma 1000 és 2000 között stabilizálódik, a server load 0.00 és 0.2 vagy nagyon ritkán 0.3 között mozog, a RAM-nak csak a 40%-a van használatban az alkalmazások és a kernel által, ami egy 2.6-os Celerontól és 1GB Ram-tól nem olyan rossz ilyen körülmények között.

És persze köszönöm mindenkinek aki segített!

Az Iptables szabályokat kicsit bonyolítottam, valamint írtam egy szkriptet(phpben, mivel ebben a legegyszerűbb), ami lementi és újratölti a blacklist-et, emellett egyszer éjszaka 1 órán keresztül minden 80-as portra érkező próbálkozást a blacklistbe raktam(ezek 99%-a támadó kellett, h legyen, a maradék 1%, meg úgyse próbálkozott újra 1 óránként egész éjjel, így másnap már nem vehetett észre semmit). Ezután állítottam a blacklist újrainduló számlálót 10 órára. A mostani kapcsolatok száma a szerveren 20!!. Azért nem mind1...
Szal a szkript:

#!/bin/bash
. /lib/lsb/init-functions
log_daemon_msg "Configuring System"
sysctl -p /etc/sysctl.close.conf
modprobe ipt_recent ip_list_tot=262143 ip_pkt_list_tot=255
if [ $1 = "restart" ] || [ $1 = "stop" ];
then
log_daemon_msg "Saving blacklist..."
/usr/local/bin/php /etc/recent/copy.php
fi
log_end_msg 0
log_daemon_msg "Initializing IPTables Firewall..."
iptables -F
iptables -X
iptables -A INPUT -j DROP
iptables -N ssh
iptables -N apache
iptables -N bind_dns
iptables -N blacklist
iptables -N other
iptables -N rapache
iptables -N rother

#Blacklist lanc
log_daemon_msg " Blacklist"
iptables -A blacklist -m recent --name blacklist --set
iptables -A blacklist -m recent --name ssh --remove
iptables -A blacklist -m recent --name apache --remove
iptables -A blacklist -m recent --name bind_dns --remove
iptables -A blacklist -m recent --name other --remove
iptables -A blacklist -j DROP

sleep 1

log_end_msg 0

#SSH lanc
log_daemon_msg " SSH"
iptables -A ssh -m recent --rcheck --name ssh --seconds 60 --hitcount 10 -j blacklist
#Eloszor jar erre
iptables -A ssh -m recent --set --name ssh
iptables -A ssh -j ACCEPT

sleep 1

log_end_msg 0

#Apache lanc
log_daemon_msg " Apache"
iptables -A apache -m recent --rcheck --name apache --seconds 5 --hitcount 10 -j blacklist
#iptables -A apache -m recent --rcheck --name apache ! --seconds 5 -j rapache
#iptables -A apache -m recent --rcheck --name apache --seconds 300 --hitcount 1 -j blacklist
#Eloszor jar erre
iptables -A apache -m recent --set --name apache
iptables -A apache -j ACCEPT

sleep 1

log_end_msg 0

#Bind lanc
log_daemon_msg " Bind"

sleep 3

#Percenkent 30at engedunk neki, majd mehet a blacklistbe
iptables -A bind_dns -m recent --rcheck --name bind_dns --seconds 60 --hitcount 30 -j blacklist
#Eloszor jar erre
iptables -A bind_dns -m recent --set --name bind_dns
iptables -A bind_dns -j ACCEPT

sleep 1

log_end_msg 0

#Other lanc
log_daemon_msg " Other"

sleep 3

iptables -A other -m recent --rcheck --name other --seconds 5 --hitcount 10 -j blacklist
#iptables -A other -m recent --rcheck --name other ! --seconds 5 -j rother
#Eloszor jar erre
iptables -A other -m recent --set --name other
iptables -A other -p tcp --dport 21 -j ACCEPT #FTP
iptables -A other -p tcp --dport 20 -j ACCEPT #FTP
iptables -A other -p udp --dport 21 -j ACCEPT #FTP
iptables -A other -p udp --dport 20 -j ACCEPT #FTP
iptables -A other -p tcp --dport 110 -j ACCEPT #POP3
iptables -A other -p tcp --dport 25 -j ACCEPT #SMTP
...
#portscan elleni vedelem
iptables -A other -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

#ping-flood elleni vedelem
iptables -A other -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A other -p tcp ! --syn -m state --state NEW -j DROP

iptables -A other -j REJECT

sleep 1

log_end_msg 0

#Rapache lanc
#Remove from apache if its not bad

sleep 1

iptables -A rapache -m recent --name apache --remove
iptables -A rapache -j ACCEPT

#Rother lanc
#Remove from other if its not bad

sleep 1

iptables -A rother -m recent --name other --remove
iptables -A rother -j ACCEPT

#Input lanc
log_daemon_msg " Input"
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT #Localt engedjuk mar

log_end_msg 0

#Ha blacklistes akkor minden probalkozasnal mehet 5 percre
log_daemon_msg " Input 2"
iptables -A INPUT -p tcp --dport xxxx -j ACCEPT #Webmin
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m recent --update --name blacklist --seconds 36000 -j DROP
#Ha kivarta az idot akkor torolhetjuk
iptables -A INPUT -m recent --name blacklist --remove
iptables -A INPUT -p tcp --dport 4040 -m state --state NEW -j ssh
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j apache
iptables -A INPUT -p tcp --dport 53 -m state --state NEW -j bind_dns
iptables -A INPUT -p udp --dport 53 -m state --state NEW -j bind_dns
iptables -A INPUT -m state --state NEW -j other
log_end_msg 0

######>>>>>>OUTPUT<<<<<<#####
log_daemon_msg " Output"
iptables -P OUTPUT ACCEPT
log_end_msg 0

log_daemon_msg "Enabling network..."
if [ $1 = "restart" ] || [ $1 = "start" ];
then
log_daemon_msg "Reloading blacklist"
/usr/local/bin/php /etc/recent/back.php
fi;
sysctl -p
iptables -D INPUT -j DROP
log_end_msg 0

Az rother és rapache lánc használaton kívüli /pill.

copy.php:

<?php
$f=fopen("/proc/net/ipt_recent/blacklist","r");
$out=fopen("/etc/recent/blacklist.txt","w+");
while (!feof($f) ) {
$line=fgets($f);
$ip=substr($line,strpos($line,"=")+1);
$ip=substr($ip,0,strpos($ip,"ttl")-1);
fputs($out,"$ip\n");
}
fclose($out);
fclose($f);
?>

back.php

<?php
$out="/proc/net/ipt_recent/blacklist";
$f=fopen("/etc/recent/blacklist.txt","r");
while (!feof($f)) {
exec("echo '".fgets($f)."' > $out");
}
fclose($f);
?>

Ezt csak azért osztottam meg a nagyközönséggel, hátha jól jön majd valakinek egy szerver-confignál :)

subscribe

színes aláírás

+1

Subscribe. Koszi, ez nagyon hasznos topic.

+1

+1

+1

---
Lehet, hogy kívül szőke vagyok, de belül sötét, oké?!

+1

+1

---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

subscribe
--
Imperare sibi maximum imperium est.

+1
--
A legértékesebb idő a pillanat amelyben élsz.
http://phoenix-art.hanzo.hu/
https://sites.google.com/site/jupiter2005ster/

s

subs.

Egy WRT54G router Tomato firmware-el.

A tűzfalnál akarok IP címeket tiltani, de sehogy sem működik.

Mit csinálok rosszul?
Próbaképp a forum.index.hu és az origo.hu IP címeit raktam be, de mindkét oldalt meg lehet nyitni.
Esetleg valahol külön engedélyezni kellene a scripteket? Erről nem találtam semmit sem a beállítások és a leírások között sem.

Itt vannak a szabályok:

#--------------------------------------------
#WRT54 Script Generator v1.02
#(C) 2006-2007 Robert "Robson" Mytkowski
#--------------------------------------------
TCAU="tc class add dev imq0"
TFAU="tc filter add dev imq0"
TQAU="tc qdisc add dev imq0"
SFQ="sfq perturb 10"
modprobe imq
modprobe ipt_IMQ
ip link set imq0 up
tc qdisc del dev imq0 root
tc qdisc add dev imq0 root handle 1: htb
tc class add dev imq0 parent 1: classid 1:1 htb rate 2048kbit
$TCAU parent 1:1 classid 1:10 htb rate 100kbit ceil 1700kbit prio 2
$TQAU parent 1:10 handle 10: $SFQ
$TFAU parent 1:0 prio 2 protocol ip handle 10 fw flowid 1:10
iptables -t mangle -A PREROUTING -s 192.168.1.110 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -j IMQ --todev 0
iptables -I wanin -s 217.20.131.3/24 -j DROP
iptables -I wanin -s 217.20.131.3 -j DROP
iptables -A INPUT -p tcp --dport 110 -s 217.20.131.3 -j REJECT
iptables -A OUTPUT -p tcp --dport 110 -s 217.20.131.3 -j REJECT
iptables -A INPUT -p tcp --dport 110 -s 217.20.131.97 -j REJECT
iptables -A OUTPUT -p tcp --dport 110 -s 217.20.131.97 -j REJECT
iptables -A INPUT -s 195.228.240.145 -j DROP
iptables -A OUTPUT -s 195.228.240.145 -j DROP
_________________________________________________________
6.5GB online tárhely INGYEN. gépről, mobilról: SugarSync

Valószínűleg nem a router akar letölteni, hanem mögötte lévő gépről próbálod, ezért nem az INPUT-OUTPUT, hanem a FORWARD láncban kellene kezelned. A wanin pedig vélhetőleg azért nem működik, mert a FORWARD-ban még a wanin-re ugrás előtt át van engedve az ESTABLISHED állapot. De ha nem a választ szűrnéd, hanem a wanout-ban már ki sem engednéd, működne.

Egyéb bajok az INPUT-OUTPUT sorokkal:
Például a forum.index.hu-n nem fut POP3 szerver, márpedig te azt tiltottad a - gondolom - HTTP helyett. Valamint az irány és a forráscímek pedig kissé összekuszálódtak, például OUTPUT szabály forrásként az Origo IP-jével, vagy INPUT az Index IP-jéről a routered POP3 szerverére.

Megjegyzés a wanin sorokhoz: a 217.20.131.0/24 tartalmazza a 217.20.131.3/32-t, az egyik felesleges.

Kösz a választ. Így már megtaláltam a helyes megoldást. :)
Pl origo.hu tiltása. Ez csak próba.

iptables -I FORWARD -d 195.228.240.145 -j DROP
_________________________________________________________
6.5GB online tárhely INGYEN. gépről, mobilról: SugarSync

sc.

sub

s

subscribe

+