Tűzfal beüzemelés

Fórumok

iptables, firestarter...

Hozzászólások

Bocs az új topikért, de amikor nekem kellett help, szanaszét találtam mindent.

Nem a saját agyszüleményem a szkript amit ide beollózok, hanem több hozzáértő ötletét próbáltam összeszedni. Kérlek nézzétek át, és szívesen venném az érdemi hozzászólásokat.
Igyekeztem a hasznos portokat is beleírni, akinek az a protokoll kell, kommentezze ki.
Köszike

#!/bin/bash

#innentol nem szabad a ctrl-c-nek mukodnie
trap "" INT

## otthoni tűzfal

## megkeressük az iptables -t
IPTABLES=`which iptables`
IP6TABLES=`which ip6tables`
IFCONFIG=`which ifconfig`
## megadjuk a modulkönyvtárat:
MODKT=/lib/modules/`uname -r`/kernel/net/ipv4/netfilter
## megkeressük a modprobe parancsot
MODPROBE=`which modprobe`
## kivesszük az ipcímünket:
IFACE=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print }'`
IP_LOCAL="`ifconfig ppp0 | grep inet\ addr | cut -f2 -d: | cut -f1 -d\ `"
LOG_LIMIT='2/min'
echo
echo "=========================================="
echo "| :: TŰZFAL BEÁLLÍTÁSA :: |"
echo "=========================================="

echo $IP_LOCAL

## először törlünk minden szabályt.
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES --flush
$IPTABLES --delete-chain
$IPTABLES -t nat -F
$IPTABLES -t nat --delete-chain

echo "Minden szabály törlése .............[ OK ]"

## felállítjuk az alap policyt.
## mindent tiltunk, amit külön nem engedélyezünk.
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
$IP6TABLES -P INPUT DROP
$IP6TABLES -P OUTPUT DROP
$IP6TABLES -P FORWARD DROP
echo "Alap szabályok beállítása ..........[ OK ]"

modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe iptable_filter
echo "Modulok betöltése ..................[ OK ]"

## figyeljük a syn sütiket
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "Anti-synflood védelem ..............[ OK ]"

## bekapcsoljuk a forráscímhitelesítést.
#echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
for spoofing in /proc/sys/net/ipv4/conf/default/rp_filter; do
echo "1" > $spoofing
done
echo "Anti-spoofing védelem ..............[ OK ]"

$IPTABLES -A INPUT -i lo -j ACCEPT ## loopback -en engedélyezzük a forgalmat.

$IPTABLES -N security
$IPTABLES -N dosattack

$IPTABLES -A INPUT -i IFACE -s 192.168.0.0/16 -j REJECT ## igaz , hogy a forráscímhitelesítés be van kapcsolva,
$IPTABLES -A INPUT -i IFACE -s 172.16.0.0/12 -j REJECT
$IPTABLES -A INPUT -i IFACE -s 10.0.0.0/8 -j REJECT ## de azért biztosra megyünk. A hamis IP címeket kiszűrjük.
$IPTABLES -A INPUT -s 255.0.0.0/8 -j LOG --log-prefix "Hamis IP forrás (INPUT)"
$IPTABLES -A INPUT -s 255.0.0.0/8 -j DROP
$IPTABLES -A INPUT -s 0.0.0.0/8 -j LOG --log-prefix "Hamis IP forrás (INPUT)"
$IPTABLES -A INPUT -s 0.0.0.0/8 -j DROP
$IPTABLES -A INPUT -s 127.0.0.0/8 -j LOG --log-prefix "Hamis IP forrás (INPUT)"
$IPTABLES -A INPUT -s 127.0.0.0/8 -j DROP
##$IPTABLES -A INPUT -s $IP_LOCAL -j LOG --log-prefix "Hamistott IP forrás (INPUT)"
##$IPTABLES -A INPUT -s $IP_LOCAL -j DROP
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "Letap. kísérlet? (INP)"
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

$IPTABLES -A security -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-prefix "Xmas-tree scan? (INPUT)" #Portscan & PoD loggolas
$IPTABLES -A security -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A security -p tcp --tcp-flags ALL NONE -j LOG --log-prefix "FW: Null scan! (INPUT)"
$IPTABLES -A security -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A security -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
$IPTABLES -A security -p icmp --icmp-type echo-request -j LOG --log-prefix "Ping of Death attack? (INPUT)"
$IPTABLES -A security -p icmp --icmp-type echo-request -j DROP
$IPTABLES -A security -p tcp --syn -m limit --limit 2/s --limit-burst 10 -j RETURN #syn storm
$IPTABLES -A dosattack -p tcp --syn -m limit --limit 8/s -j RETURN #DoS & agressziv Port scan kivedesere
$IPTABLES -A dosattack -p tcp --syn -m limit --limit $LOG_LIMIT -j LOG --log-prefix "FW: Syn-Flood attack? (INP)"
$IPTABLES -A dosattack -p tcp --syn -j DROP

## INPUT szabályok.
##$IPTABLES -A INPUT -p icmp -j ACCEPT --icmp-type echo-request ## kintről "ping" mehet.
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## engedélyezzük befele, ami tőlünk származik.
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -m limit --limit $LOG_LIMIT -j LOG --log-prefix 'FW-HIDDEN-SCAN? ' # uj kapcsolat
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP #syn-nel kezdodik, kulonben esetleg tamadas
$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT -m state --state NEW ## kintről http hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 443 -j ACCEPT -m state --state NEW ## kintről https hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT -m state --state NEW ## kintről ssh hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT -m state --state NEW ## kintről ftp control hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 20 -j ACCEPT -m state --state NEW ## kintről ftp data hozzáférést akarunk.
##$IPTABLES -A INPUT -p tcp --dport 5900 -j ACCEPT-m state --state NEW ## kintről vnc hozzáférést akarunk. (távoli asztal)

$IPTABLES -A INPUT -j LOG --log-prefix "Alapért. elutasítva (INP): " ## ami jönne, azt loggoljuk:
$IPTABLES -A INPUT -j DROP ## utána eldobjuk.
echo "INPUT szabályok beállítása .........[ OK ]"

## OUTPUT szabályok.
##$IPTABLES -A OUTPUT -p icmp -j ACCEPT --icmp-type echo-request ##kifele menő "ping" -re szükség lehet.
$IPTABLES -A OUTPUT -o lo -j ACCEPT ## loopback -en engedélyezzük a forgalmat.
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## jóváhagyott kapcsolatok engedélyezése.
$IPTABLES -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT ## a DNS -re szükség van.
$IPTABLES -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 123 -j ACCEPT ## ntp mehet
$IPTABLES -A OUTPUT -p tcp --dport 123 -m state --state NEW -j ACCEPT

$IPTABLES -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT ## http mehet.
$IPTABLES -A OUTPUT -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT ## https mehet
$IPTABLES -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT ## ssh mehet.
$IPTABLES -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT ## ftp control mehet
$IPTABLES -A OUTPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT ## ftp data mehet
##$IPTABLES -A OUTPUT -p tcp --dport 989 -m state --state NEW,ESTABLISHED -j ACCEPT ## FTPs data mehet
##$IPTABLES -A OUTPUT -p udp --dport 989 -m state --state NEW,ESTABLISHED -j ACCEPT ## FTPs data mehet
##$IPTABLES -A OUTPUT -p tcp --dport 990 -m state --state NEW,ESTABLISHED -j ACCEPT ## FTPs control mehet
##$IPTABLES -A OUTPUT -p udp --dport 990 -m state --state NEW,ESTABLISHED -j ACCEPT ## FTPs control mehet
$IPTABLES -A OUTPUT -p tcp --dport 587 -m state --state NEW,ESTABLISHED -j ACCEPT ## SMTP subsession mehet
$IPTABLES -A OUTPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés SMTP
$IPTABLES -A OUTPUT -p tcp --dport 587 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés SMTP
$IPTABLES -A OUTPUT -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés POP3
$IPTABLES -A OUTPUT -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés IMAP4s
$IPTABLES -A OUTPUT -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés POP3s
##$IPTABLES -A OUTPUT -p tcp --dport 220 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés IMAP3
$IPTABLES -A OUTPUT -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT ## Levelezés IMAP4
##$IPTABLES -A OUTPUT -p udp --dport 1241 -m state --state NEW,ESTABLISHED -j ACCEPT ## Nessus Security Scanner
##$IPTABLES -A OUTPUT -p tcp --dport 1241 -m state --state NEW,ESTABLISHED -j ACCEPT ## Nessus Security Scanner
##$IPTABLES -A OUTPUT -p tcp --dport 5900 -m state --state NEW,ESTABLISHED -j ACCEPT ## vnc mehet (Távoli asztal)
##$IPTABLES -A OUTPUT -p tcp --dport 604 -m state --state NEW,ESTABLISHED -j ACCEPT ## TUNNEL
##$IPTABLES -A OUTPUT -p tcp --dport 901 -m state --state NEW,ESTABLISHED -j ACCEPT ## Samba
$IPTABLES -A OUTPUT -p tcp --dport 6668 -m state --state NEW,ESTABLISHED -j ACCEPT ## bnc mehet
$IPTABLES -A OUTPUT -p tcp --dport 37 -m state --state NEW,ESTABLISHED -j ACCEPT ## rdate mehet

$IPTABLES -A OUTPUT -p tcp --dport 1755 -m state --state NEW,ESTABLISHED -j ACCEPT ## MMS, ms-streaming
$IPTABLES -A OUTPUT -p udp --dport 1755 -m state --state NEW,ESTABLISHED -j ACCEPT ## MMS, ms-streaming
$IPTABLES -A OUTPUT -p tcp --dport 554 -m state --state NEW,ESTABLISHED -j ACCEPT ## RTSP Real Time Streaming Protocol
$IPTABLES -A OUTPUT -p udp --dport 554 -m state --state NEW,ESTABLISHED -j ACCEPT ## RTSP Real Time Streaming Protocol
$IPTABLES -A OUTPUT -p udp --dport 5004 -m state --state NEW,ESTABLISHED -j ACCEPT ## RTP Real-time Transport Protocol
$IPTABLES -A OUTPUT -p udp --dport 5005 -m state --state NEW,ESTABLISHED -j ACCEPT ## RTP Real-time Transport Protocol
$IPTABLES -A OUTPUT -p tcp --dport 3689 -m state --state NEW,ESTABLISHED -j ACCEPT ## Apple’s iTunes
$IPTABLES -A OUTPUT -p udp --dport 7070 -m state --state NEW,ESTABLISHED -j ACCEPT ## RealAudio
$IPTABLES -A OUTPUT -p tcp --dport 8000 -m state --state NEW,ESTABLISHED -j ACCEPT ## rádió mehet SHOUTcast

$IPTABLES -A OUTPUT -p tcp --dport 1863 -m state --state NEW,ESTABLISHED -j ACCEPT ## msn
$IPTABLES -A OUTPUT -p tcp --dport 6891 -m state --state NEW,ESTABLISHED -j ACCEPT ## msn file transfer
$IPTABLES -A OUTPUT -p tcp --dport 6901 -m state --state NEW,ESTABLISHED -j ACCEPT ## msn hang
##$IPTABLES -A OUTPUT -p tcp --dport 5050 -m state --state NEW,ESTABLISHED -j ACCEPT ## yahoo mehet
##$IPTABLES -A OUTPUT -p tcp --dport 531 -m state --state NEW,ESTABLISHED -j ACCEPT ## AOL irc mehet
##$IPTABLES -A OUTPUT -p udp --dport 531 -m state --state NEW,ESTABLISHED -j ACCEPT ## AOL irc mehet
##$IPTABLES -A OUTPUT -p tcp --dport 5190 -m state --state NEW,ESTABLISHED -j ACCEPT ## ICQ and AOL Instant Messenger
##$IPTABLES -A OUTPUT -p tcp --dport 6346 -m state --state NEW,ESTABLISHED -j ACCEPT ## gnutella mehet
##$IPTABLES -A OUTPUT -p tcp --dport 6347 -m state --state NEW,ESTABLISHED -j ACCEPT ## gnutella mehet
##$IPTABLES -A OUTPUT -p tcp --dport 6667 -m state --state NEW,ESTABLISHED -j ACCEPT ## irc mehet

##$IPTABLES -A OUTPUT -p tcp --dport 6880 -m state --state NEW,ESTABLISHED -j ACCEPT ## torrent
$IPTABLES -A OUTPUT -p tcp --dport 6881 -m state --state NEW,ESTABLISHED -j ACCEPT ## torrent
$IPTABLES -A OUTPUT -p udp --dport 4444 -m state --state NEW,ESTABLISHED -j ACCEPT ## torrent

$IPTABLES -A OUTPUT -j LOG --log-prefix "Alapért. elutasítva (OUT): "
$IPTABLES -A OUTPUT -j DROP

echo "OUTPUT szabályok beállítása ........[ OK ]"
echo "Kész!! Tűzfal: OK! .................[ OK ]"
echo "=========================================="
echo

Én a külső IP címet a ppp0 interfészről szedem, ha valaki más interfészt használ, írja át az elején az IP_LOCAL sort!
Ha valaki használ swatch-ot naplóelemzésre, a .swatchrc fájlba a logüzeneteket beillesztve gyorsan kikereshető a fontos rész. !?

Kezdő linuxos vagyok és csak az lenne a kérdésem hogy hogyan tudom beálitani a tűzfalat, iptables-t configot kell átirni vagy egy script segitségével müködik, igazán ez nem világos számomra tudom hülye kérdés, de itt elakadtam. Elöre is köszönöm

Google powa.

Az iptables egy program, ezzel lehet a kernelben levő tűzfalat konfigolni. Tehát látszólag nagyon sokszor indítod el az iptables nevű programot, de valójában csak a kernelt konfigolod vele. De tényleg google, mert ez annyira agyon van dokumentálva, hogy sok projekt sírva kérné a receptet.

köszönöm a segítséget, igazából egy otthoni kis webszervernek szeretném beállitani a tűzfalát, és ha lehetséges ragaszkodnék az iptables-hez, ebben tudnátok segiteni hogyan induljak el, hova kell betenni a scriptet és hogyan kell futatni és hol találok egy egyszerű kis scriptet, meg szeretném értenni a lényegét, ezek a programok beálitják nekem és úgy nem látom át.

Írj egy scriptet, és rakd a megfelelő init futtatási szintre. Elvileg az iptables szabályok lefuthatnak még az előtt is, mielőtt felhúzódnak (de szép szó) a hálózati interface -k. Így keresd meg, hogy melyik script húzza fel a hálózati eszközöket és előtte futtasd a scriptedet. Igaz, ha a szabályok között vannak IP címek vagy domain nevek, akkor adódhat probléma, mert azt fogja nyüsszögni az iptables, hogy nem találja az xy hostnevet. Erre van valakinek ötlete, hogy lehet ezt kiszűrni, esetleg egy -n kapcsoló az iptables futtatásánal?

--
http://laszlo.co.hu/

Ne haragudj, de egyaltalan megnezted a linket amit adtam? Ha csak vegignezed, akkor lathatod hogy a 8. pont pont azt targyalja hogy hogyan mentsed es/vagy toltsed vissza a szabalyokat.

Amugy ha az /etc/iptables allomanyba mented akkor azt a rendszer indulaskor automatikusan be fogja tolteni.

egyébként azt bogárászom, csak nem jutottam egyből a 8.pontra.
tehát mentsem ki a iptable-t.
iptables-save -c > /etc/iptables-save
aztán majd miután beleirtam a megfelelő scriptet, töltsem vissza.
iptables-restore -c < /etc/iptables-save
más azt ajánlotta hogy egy valahol elhelyezett scriptett irni, mondjuk elhelyezem a /usr/local/sbin/firewall.sh és az indítószkript lefut rendszerinditáskor és ez is hasonloan beállitja a tűzfalat mi a különbség a kettő között?

Az, hogy a iptables-restore egy darab parancs, a script meg sok darab parancs :)

De még az is, hogy ha esetleg akarnál NAT-ot akkor kell egy sysctl hívás is. De mivel neked nem kell NAT, ezért neked nincs hírértéke a dolognak. Használd az iptables-save/iptables-restore parancsokat nyugodt szívvel.

megvan köszi, és miután beálitottam hogy fusson le a script, csak kitörlön az init-böl és már nem fog legközelebb lefutni de a szabályok bent maradnak, és ha változtatni szeretnék akkor csak lefutatom ujra a változtatással együtt, igy van ha jó sejtem.
Hogy lehet kikuszöbölni hogy ne irja ki a képernyöre a keletkező forgalmat??

Mint ahogy minden reboot után be kell lépned a rendszerbe mert nem marad úgy. A kikapcsolás arról szól, hogy a rendszer mindent elfelejt. Amikor indul valaminek meg kell mondania, hogy itten tűzfalról van szó, hiszen pont úgy indítod, mintha nem tűzfalról lenne szó. Ez Windows esetén is így működik.

#!/bin/bash
## megkeressük az iptables -t
IPTABLES=`which iptables`
## megadjuk a modulkönyvtárat:
MODKT=/lib/modules/`uname -r`/kernel/net/ipv4/netfilter
## megkeressük a modprobe parancsot
MODPROBE=`which modprobe`
## kivesszük az ipcímünket:
IFACE=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1 }'`
echo
echo "=========================================="
echo "| :: TUZFAL BEÁLLITÁSA :: |"
echo "=========================================="
## először törlünk minden szabályt.
$IPTABLES -F
$IPTABLES -X
$IPTABLES -Z
$IPTABLES --flush
$IPTABLES --delete-chain
$IPTABLES -t nat -F
$IPTABLES -t nat --delete-chain
echo "Minden szabály törlése .............[ OK ]"

## felállítjuk az alap policyt.
## mindent tiltunk, amit külön nem engedélyezünk.
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
echo "Alap szabályok beállítása ..........[ OK ]"

## beállitjuk a betöltendő modulokat
modprobe ip_tables
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe iptable_filter
echo "Modulok betöltése ..................[ OK ]"

## figyeljük a syn sütiket
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "Anti-synflood védelem ..............[ OK ]"

## bekapcsoljuk a forráscímhitelesítést.
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
for spoofing in /proc/sys/net/ipv4/conf/default/rp_filter; do
echo "1" > $spoofing
done
echo "Anti-spoofing védelem ..............[ OK ]"

## INPUT szabályok.
## loopback -en engedélyezzük a forgalmat.
$IPTABLES -A INPUT -i lo -j ACCEPT
## engedélyezzük befele, ami tőlünk származik.
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
## figyeljük, hogy a tcp kapcsolatok, tényleg a syn bittel kezdődjenek.
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

## SSH hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT -m state --state NEW

## HTTP hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT -m state --state NEW

## INPUT logolás
$IPTABLES -A INPUT -j LOG --log-prefix "Alapért. elutasítva (INP): " ## ami jönne, azt loggoljuk
$IPTABLES -A INPUT -j DROP ## utána eldobjuk.
echo "INPUT szabályok beállítása .........[ OK ]"

## OUTPUT szabályok.
##$IPTABLES -A OUTPUT -p icmp -j ACCEPT --icmp-type echo-request ##kifele menő "ping" -re szükség lehet.
$IPTABLES -A OUTPUT -o lo -j ACCEPT ## loopback -en engedélyezzük a forgalmat.
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## jóváhagyott kapcsolatok engedélyezése.

## SSH mehet.
$IPTABLES -A OUTPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

##kifele menő "ping" -re szükség lehet.
#$IPTABLES -A OUTPUT -p icmp -j ACCEPT --icmp-type echo-request

## OUTPUT logolás
$IPTABLES -A OUTPUT -j LOG --log-prefix "Alapért. elutasítva (OUT): " ## ami jönne, azt loggoljuk
$IPTABLES -A OUTPUT -j DROP ## utána eldobjuk.

echo "OUTPUT szabályok beállítása ........[ OK ]"
echo "Kész!! Tüzfal: OK! .................[ OK ]"
echo "=========================================="
echo

az lenne a kérdésem hol rontottam el hogy nem tudok frissiteni a tárolokból??

a MODKT változót és a modprobe-t is felejtsd el. Automatikus modulbetöltés van, ráadásul ma már nincsen olyan, hogy ip_conntrack, csak olyan, hogy nf_conntrack...

IPTABLES=`which iptables`
ez is rossz
export PATH=/bin:/sbin:usr/bin:/usr/sbin

és akkor az iptables parancsot használhatod a teljes elérési út nélkül. Vagy pedig így: IPTABLES=/sbin/iptables.

## bekapcsoljuk a forráscímhitelesítést.
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
for spoofing in /proc/sys/net/ipv4/conf/default/rp_filter; do
echo "1" > $spoofing
done
echo "Anti-spoofing védelem ..............[ OK ]"

Ez meg csak lelassítja a gépedet. Akkor már adj hozzá néhány iptables parancsot, amelyik elvégzi ugyanezt, többet érsz vele és gyorsabb lesz.

Az iptables -X és --delete-chain opciója ugyanazt teszi, akárcsak a -F és a --flush.

A mangle és a raw táblát nem törlöd (raw nem feltétlenül van), csak a filter és a nat táblákat.

Befelé tiltod az ICMP-t, ezáltal nem kapsz meg egy csomó üzenetet, pl. a port nem érhető el, vagy bármi egyéb lényeges. Szűrd megfelelően, de ne dobd el mindet (nem tudom fejből, miket érdemes hagyni).

Csak azt logold, ami fontos, különben iszonyatosan megnőveled a syslog méretét (amibe logolod), és semmit nem fogsz látni a sok sortól.


IPTABLES=`which iptables`
ez is rossz
export PATH=/bin:/sbin:usr/bin:/usr/sbin

Ha meg esetleg nem ott van, akkor megszopta. Nem, tessék csak a which-et használni, de még jobb, ha a teljes elérési út bele van égetve a programba. Én speciel azért nemszeretem a path-os keresést, mert ha valamiből új verziót teszekfel, azt én a /usr/local alá teszem. Most akkor minden ilyen PATH-os scriptemet írjam át?

mangle és raw táblákat nem törlöd
És ugyan minek is törölné? Hiszen nem is használja! Arról nem beszélve, hogy saját kernel esetében yó eséllyel mangle tábla sincs

ICMP-ből mindent érdemes fogadni - de csak módjával. Asszem connection trackingot arra is lehet kérni (ha mégse, az ecoho reply-t kell fogadni), a bejövő echo requesteket meg lehet limitálni. Ha semmiképp nem akar az ember ICMP-t akkor kiveszi a kernelből a supportot rá.
Az "iptables -p icmp -h" parancs mondja meg, milyen ICMP üzeneteket ismerünk.

"Ha meg esetleg nem ott van, akkor megszopta."

Hát én folyton megszívom, hogy feltételezem, hogy a PATH-ban benne van, pedig nincsen, és nézem, miért nem ismeri az új opciókat. Hát persze hogy azért, mert a régi változat indul el :S Így meg nehéz a netfilter/iptables-t tesztelni. Pont ezért írtam a teljes elérési utat is.

Ezzel most nem mindenki fog egyetérteni, de valahogy hidegen hagy...

Meglátásom szerint addig nem szabad ilyen mankókat használni, amíg nem tudsz kézzel legalább egy alap tűzfalat felhúzni, és meg nem érted, hogy hogyan működik, mi hajtja. Én a saját hibámból tanultam ezt meg.
Nem mondom, hogy legyél 1 hónap alatt profi iptables-ben, csak azt, hogy legalább az alapokat tessék megérteni.

Ha ajánlhatok valamit, az otthoni gépedre tegyél fel egy VMware-t/VirtualBox-ot, és tesztelj, próbálkozz ezerrel. Rakj össze többféle környezetet, próbáld ki mi mitől megy, mikor nem, próbálj hibát előidézni, és próbáld meg úgy javítani a hibát, mintha nem tudnád, hogy hol van. Én sokkal többet tanultam virtuális gépekből, mint tankönyvből. Ugyanis a tankönyvi tudás mindaddig lexikális tudás marad, amíg át nem látod, hogyan hat ez a rendszer egészére, hogyan működik egy ilyen egy éles rendszerben.

Én is nem rég bütyköltem tűzfalat. Javaslatom:
1. OUTPUT NTP mehet részhez: ne engedd globálisan kifele a 123 -as portot, korlátozd -d (destination) fix ntp szerver(ek)hez: time.kfki.hu
és ennek megfelelően konfiguráld az ntp kliensedet
2. OUTPUT DNS mehet, itt is a szolgáltatód fele engedélyezd a DNS kéréseket
3. OUTPUT SMTP, szintén csak a szolgáltatód SMTP szervere fele engedélyezd a kéréseket
4. Az OUTPUT szabályoknál jobb meghatározni a kimenő interface nevét (-o ppp0), így külön lehet (kell) szedni a kifele menő kéréseket. Pl. én kifele menő NEW http, https, ftp, rsync (disztribúció függő) portokat csak a disztribúció frissítéséhez szükséges szervereket engedélyezem
Így hirtelen ennyi, ha még jut eszembe, megírom. Biztos másnak is van még hasznos tippe, tanácsa. Lényeg az szerintem, hogy mindent tilts le, és csak azokat engedélyezd, ami tényleg szükséges és szedd szét az INPUT és OUTPUT láncokat interface -k szerint.

--
http://laszlo.co.hu/

SMTP cím (elvileg) változhat, bár nem jellemző.

"Tájékoztató a KFKI pontosidő szolgáltatásáról
A time.kfki.hu nevű gép pontosidő szolgáltatást nyújt NTP (csak udp/123) protokollon keresztül a magyarországi felhasználók számára.
Igénybevétele előtt kérünk egy e-mailt erről az igénybevételi szándékról a time kukac sunserv.kfki.hu cimre."

time.kfki.hu helyett lehet használni a {0..3}.hu.pool.ntp.org-t, bár kicsit nehéz bedrótozni a címeket. :))

Még valami eszembe jutott ötletként:
Ha egy tcp szabályra illeszkedő csomagot DROP helyett REJECT utasítasz el, akkor lehet használni a --reject-with tcp-reset megoldást, ami le is zárja a felépített tcp kapcsolatot. Értelemszerűen CSAK TCP -re lehet használni, pl így:
iptables -A OUTPUT -o ppp0 -p TCP --dport 22 -j REJECT --reject-with tcp-reset

--
http://laszlo.co.hu/

Ez a sor így nem jó, mert ezzel nagyon becsapjuk magunkat (és tényleg, a szkriptben később interfészként értelmezed az IFACE változót), mert valójában IP-címet ad. Az elnevezésekre jó figyelni.

Tehát 1.)


IFACE=eth0    # vagy attól függ, mi kell
IP_CIM=`ifconfig $IFACE | grep 'inet addr:' |
   cut -d: -f2 | awk '{ print $1 }'`

2.) Mint látható, a ,,grep -v'' nem kell, nem is működne jól abban az esetben, ha 2-nél több interfész lenne fölhúzva. Viszont ifconfig-nak megadva az interfészt, pont le lehet kérdezni a rá vonatkozó dolgokat.

$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT -m state --state NEW ## kintről http hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 443 -j ACCEPT -m state --state NEW ## kintről https hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT -m state --state NEW ## kintről ssh hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT -m state --state NEW ## kintről ftp control hozzáférést akarunk.
$IPTABLES -A INPUT -p tcp --dport 20 -j ACCEPT -m state --state NEW ## kintről ftp data hozzáférést akarunk.

Ezeket miért nem teszed egybe?
$IPTABLES -A INPUT -p tcp -m multiport --dport 20,21,22,80,443 -j ACCEPT -m state --state NEW

Folytatva az OUTPUT láncon is, de az most sok, nem akarom megcsinálni.

Szerk.: a lényegen nem változtat, de szerintem átláthatóbb, feltéve ha a portok a fejedben vannak. Ha nem az se gáz, kommentbe beteszed, na mindegy ...

Azt hogyan oldjátok meg hogy menjen a firestarterrel az SMB?
A windowsos hálózat random portokon próbál bejönni, és ha be van kapcsolva a firestarter, nem látom a megosztásokat.
Találtam egy ilyen postot: http://ubuntuforums.org/showthread.php?t=190542 de elég kétes megoldás.
--
Degradálódjunk kicsit visszább!

Random port? Ez vicces.


# /etc/services
netbios-ns      137/tcp                         # NETBIOS Name Service
netbios-ns      137/udp
netbios-dgm     138/tcp                         # NETBIOS Datagram Service
netbios-dgm     138/udp
netbios-ssn     139/tcp                         # NETBIOS Session Service
netbios-ssn     139/udp

és első szabályként meg -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT.

#!/bin/sh

echo "==================== Tüzfal inditása ===================================="

## Megkeressük az iptables -t
IPTABLES="/sbin/iptables"
IPTS="/sbin/iptables-save"
IPTR="/sbin/iptables-restore"

# Internet interface adatai
INET_IFACE="eth0"
INET_ADDRESS="192.168.0.100"

# Intranet interface adatai
LO_IFACE="lo"
LO_IP="127.0.0.1"

echo "Kernel modulok betöltése:............................................[OK]"

/sbin/depmod -a

/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
# /sbin/modprobe iptable_filter
# /sbin/modprobe iptable_mangle
# /sbin/modprobe iptable_nat
# /sbin/modprobe ipt_LOG
# /sbin/modprobe ipt_limit
# /sbin/modprobe ipt_MASQUERADE
# /sbin/modprobe ipt_owner
# /sbin/modprobe ipt_REJECT
# /sbin/modprobe ipt_mark
# /sbin/modprobe ipt_tcpmss
# /sbin/modprobe multiport
# /sbin/modprobe ipt_state
# /sbin/modprobe ipt_unclean
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc

echo "Kernel paraméterek beállítása:.......................................[OK]"
# IP továbbítás engedélyezése.
echo "1" > /proc/sys/net/ipv4/ip_forward
# DynamicAddr engedélyezése.
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
# SYN Flood védelem aktiválása.
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
# This enables source validation by reversed path according to RFC1812.
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
# This option allows a subnet to be firewalled with a single IP address.
#echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
# ICMP csomagok elfogadása.
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# This option can be used to accept or refuse source routed
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
# This option can disable ICMP redirects. ICMP redirects
#echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# Secure_redirect kérések elfogadása csak az alapértelmezett gateway-től.
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
# Valótlan címekről érkező csomagok naplózása.
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

echo "Irányelvek beállítása:...............................................[OK]"

echo "Alapértelmezett szabályok irányelveinek átállítása:..................[OK]"
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT

echo "Láncok szabályainak törlése:.........................................[OK]"
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

echo "Üres láncok törlése:.................................................[OK]"
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

echo "Irányelvek beállítása:...............................................[OK]"
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

echo "Saját láncok és szabályok létrehozása, beállítása:...................[OK]"

$IPTABLES -N bad_packets
$IPTABLES -N bad_tcp_packets
$IPTABLES -N icmp_packets
$IPTABLES -N udp_inbound
$IPTABLES -N udp_outbound
$IPTABLES -N tcp_inbound
$IPTABLES -N tcp_outbound

echo "Saját láncok és szabályok beállítása:................................[OK]"

### bad_packets szabályok
$IPTABLES -A bad_packets -p ALL -m state --state INVALID -j LOG --log-prefix "Invalid packet: "
$IPTABLES -A bad_packets -p ALL -m state --state INVALID -j DROP
$IPTABLES -A bad_packets -p tcp -j bad_tcp_packets
$IPTABLES -A bad_packets -p ALL -j RETURN

### bad_tcp_packets szabályok
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn: "
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j LOG --log-prefix "Stealth scan: "
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A bad_tcp_packets -p tcp -j RETURN

### icmp_packets szabályok
$IPTABLES -A icmp_packets --fragment -p ICMP -j LOG --log-prefix "ICMP Fragment: "
$IPTABLES -A icmp_packets --fragment -p ICMP -j DROP
# $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j LOG --log-prefix "Ping detected: "
# $IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j DROP
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -j RETURN
#
echo "Szerver szolgáltatások engedélyezése:................................[OK]"
#
### udp_inbound szabályok
# NetBIOS Server"
#$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 137 -j DROP
#$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 138 -j DROP

# Network Time Protocol (NTP) Server"
$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 123 -j ACCEPT
$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 123 -j LOG --log-prefix NTP

# DNS Server
# $IPTABLES -A udp_inbound -p UDP -s 0/0 --source-port 53 -j ACCEPT
$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 53 -j ACCEPT
$IPTABLES -A udp_inbound -p UDP -s 0/0 --destination-port 53 -j LOG --log-prefix DNS

# Not matched, so return for logging
$IPTABLES -A udp_inbound -p UDP -j RETURN

### udp_outbound szabályok
# No match, so ACCEPT
$IPTABLES -A udp_outbound -p UDP -s 0/0 -j ACCEPT

### tcp_inbound szabályok
# DNS Server - Allow TCP connections (zone transfers and large requests)
# $IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 53 -j ACCEPT

# HTTP (Web Server)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 80 -j LOG --log-prefix HTTP

# HTTPS (Secure Web Server)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 443 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 443 -j LOG --log-prefix HTTPS

# FTP Server (Control)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 21 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 21 -j LOG --log-prefix FTP

# FTP Client (Data Port for non-PASV transfers)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --source-port 20 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --source-port 20 -j LOG --log-prefix FTP

# Passive FTP
# $IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 62000:64000 -j ACCEPT
# $IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 62000:64000 -j LOG --log-prefix FTP

# Email Server (SMTP)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 25 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 25 -j LOG --log-prefix SMTP

# Email Server (POP3)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 110 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 110 -j LOG --log-prefix POP3

# Email Server (IMAP4)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 143 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 143 -j LOG --log-prefix IMAP4

# SSL Email Server (POP3s)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 995 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 995 -j LOG --log-prefix POP3s

# SSL Email Server (IMAP4)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 993 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 993 -j LOG --log-prefix IMAP4s

# SSH (SSH server)
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 55555 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 55555 -j LOG --log-prefix SSH

# Not matched, so return so it will be logged
$IPTABLES -A tcp_inbound -p TCP -j RETURN

### tcp_outbound szabályok
# No match, so ACCEPT
$IPTABLES -A tcp_outbound -p TCP -s 0/0 -j ACCEPT

echo "INPUT lánc beállítása:...............................................[OK]"

# Allow all on localhost interface
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT

# Drop bad packets
$IPTABLES -A INPUT -p ALL -j bad_packets

# DOCSIS kompatibilis kábelmodem beállítása.
#$IPTABLES -A INPUT -p ALL -d 224.0.0.1 -j DROP
#$IPTABLES -A INPUT -p ALL -d 224.0.0.1 -j ACCEPT

# Accept Established Connections
$IPTABLES -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

# Route the rest to the appropriate user chain
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_inbound
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

# Drop without logging broadcasts that get this far.
$IPTABLES -A INPUT -m pkttype --pkt-type broadcast -j DROP

# Log packets that still don't match
# $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "INPUT packet died: " --log-level 4
$IPTABLES -A INPUT -j LOG --log-prefix "INPUT packet died: " --log-level 4
$IPTABLES -A INPUT -j DROP

echo "FORWARD lánc beállítása:.............................................[OK]"

echo "OUTPUT lánc beállítása:..............................................[OK]"
# However, invalid icmp packets need to be dropped
$IPTABLES -A OUTPUT -m state -p icmp --state INVALID -j DROP

# Localhost
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT

# To internet
$IPTABLES -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT

# Log packets that still don't match
# $IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-prefix "OUTPUT packet died: " --log-level 4
$IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT packet died: " --log-level 4
$IPTABLES -A OUTPUT -j DROP

echo "====================== Tüzfal betöltése kész! ==========================="

véleményt szeretnék kérni erröl a tüzfalszabályról mennyire sikerült összehozni, illetve mi az amit kihagytam vagy rosszul csináltam

Csak igy csipobol: miert veszed fel a iptables-save iptables-restore parancsok helyet, ha nem is hasznalod?
Javaslom a sysctl.conf attanulmanyozasat is.

Ha ez nem a init script, akkor viszont ebbol a szempontbol okes.

Mas: Te arra epitesz, hogy alapvetoen ures rendszerre mesz fel, holott erre sosem epitunk. Ajanlom a iptables -X, -F kapcsoloinak tanulmanyozasat (man iptables).
Aztan: Ne toltsd be a modulokat, a leheto legrosszabb strategia. Ha veletlen nem modulba van a iptables, akkor szopoka. Az iptables van olyan inteligens, hogy betoltse maganak amit kell.

Init script tipp:


stop() {
    ${IPTS} > /var/lib/iptables/rules-save
    ${IPTABLES} -F
    ${IPTABLES} -X
    ${IPTABLES} -P INPUT ACCEPT
    ${IPTABLES} -P OUTPUT ACCEPT
    ${IPTABLES} -P FORWARD ACCEPT
}

start() {
    ${IPTR} < /var/lib/iptables/rules-save
}

A tobbit gondold hozza, ez amugy Bash reszlet.

# This enables source validation by reversed path according to RFC1812.
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

Ez így lassú, nem igazán hatékony megoldás az ip cím hamisítás szűrésére.

Csak azt logold, ami fontos, különben eltömíted a syslogot mindenféle szeméttel.

A -s 0/0 az alapértelmezett, zavaró ha ott van.

$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 55555 -j ACCEPT
$IPTABLES -A tcp_inbound -p TCP -s 0/0 --destination-port 55555 -j LOG --log-prefix SSH

Ez max. fordítva. Ha ACCEPT van, akkor LOG-ra már nem fut rá.