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
## 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 ]"
## 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
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.
találtam már rengeteg beállitási sablont, igazából nem tudom hogyan kell elhelyezni ezeket a beállitásokat a iptables-ben, irni kell egy scriptet amit le kell futtatni minden inditáskor???
És hova kell helyezni a scriptet? hogyan?
Í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?
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.
Szerintem a iptables-restore, ha a scriptben amúgy is csak iptables parancsok tömkelege lenne. Script, ha nem csak iptables parancsok tömkelege lenne. Ezt egyszerűbben nem tudom elmondani.
mik lehetnek még scriptben amik szükségesek a tüzfalhoz, nekem legföbba tüzfal beállitása lenne, és melyik fut le elöbb, és ha script akkor hová kell tenni? tudom alap kérdések de nem tudom?
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.
A syslog-ng doksiját tanulmányozd, a sysklogd már elavult. De egyébként igen, első verzió.
grep-pel is lehet tkp, csak bonyibb, mert kell illeszkedő sort találni.
De, az előbbit le kell szedni, mert replacement. De ha normális csomagkezelőd van, az úgyis szól, hogy blokkoló csomagok vannak. Debian pl. rögtön uninstallálja is a syslogd-t
## 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 ]"
## 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.
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.
amugy a kettő firehol és shorewall közül melyik a profibb megoldás, vagyis melyik oldja meg jobban a dolgot, és jobban konfigurálható, illetve jobb egy ilyen konfiguráló programot használni mint kézzel megirni?
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.
"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
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!
miért van az hogy amikor van internet akkor a router mögül rögtön tudok kapcsolodni a server-re amikor nincs akkor a 2-3 probálkozásra, vagyis az ssh kliensnél túllépen a várakozási idöt, a server router mögött van és onnan is kapcsolodom rá.
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]"
$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]"
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
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
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.
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.
Shorewall pl. megér egy próbát szerintem.
Makrógyűjtemény-féle, IPTables made easy :)
http://shorewall.net
FireHOL >> http://firehol.sourceforge.net/
-----
IBM R50e > Debian GNU/Linux, Windows XP Home
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.
Peldaul itt eleg jol levan irva minden:
http://iptables-tutorial.frozentux.net/iptables-tutorial.html
találtam már rengeteg beállitási sablont, igazából nem tudom hogyan kell elhelyezni ezeket a beállitásokat a iptables-ben, irni kell egy scriptet amit le kell futtatni minden inditáskor???
És hova kell helyezni a scriptet? hogyan?
Í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.
ok ezt értem csak melyik a jobb tehát ha lefutattok egy scriptet vagy egyböl alakitom a iptable-t?
Szerintem a iptables-restore, ha a scriptben amúgy is csak iptables parancsok tömkelege lenne. Script, ha nem csak iptables parancsok tömkelege lenne. Ezt egyszerűbben nem tudom elmondani.
mik lehetnek még scriptben amik szükségesek a tüzfalhoz, nekem legföbba tüzfal beállitása lenne, és melyik fut le elöbb, és ha script akkor hová kell tenni? tudom alap kérdések de nem tudom?
Ezt a szálat olvasd el mégegyszer, ezek a kérdések meg lettek válaszolva. Ugyan nem ebben a sorrendbe, de...
Ezeket a rendszer müködéséhez szükséges scripteket hová sokás elhelyezni?
/usr/local/sbin/? vagy máshová csak rendszeresség kedvéért kérdem.
Ez is meg lett válaszolva, olvasd át a topicot. Másik lehetőség, hogy google-val rákeresel arra, hogy init script howto. Önállóság, kreativitás.
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??
Mondjuk vagy kiszeded a -j LOG sorokat a scriptből, vagy használsz syslog démont, amit rendesen felkonfigolsz.
Hint: Ha kitörlöd az init-ből, restart után mi fogja a tűzfalat felhúzni? Ezt gondold át még1x.
Tehát ha már egyszer felhúzta a túzfalat es beirta a iptablesbe akkor nem marad benne, hanem minden inditáskor fel kell húznia?
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.
hogyan lehet minden iptables log-ot /var/log/iptables.log-ba iratni?
kern.warning /var/log/iptables.log, vagy grep-el?
A syslog-ng doksiját tanulmányozd, a sysklogd már elavult. De egyébként igen, első verzió.
grep-pel is lehet tkp, csak bonyibb, mert kell illeszkedő sort találni.
és nem ütközik a syslogd és a syslog-ng egymással?
De, az előbbit le kell szedni, mert replacement. De ha normális csomagkezelőd van, az úgyis szól, hogy blokkoló csomagok vannak. Debian pl. rögtön uninstallálja is a syslogd-t
#!/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.
export PATH=/bin:/sbin:usr/bin:/usr/sbin
kiprobáltam és nem huzta fel a tűzfalat igy maradt az eredeti.
Mert egy per lemaradt a harmadik elemnél.
"nincsen olyan, hogy ip_conntrack"
Ezt te honnan veszed ?
git.kernel.org. Vajon honnan.
amugy a kettő firehol és shorewall közül melyik a profibb megoldás, vagyis melyik oldja meg jobban a dolgot, és jobban konfigurálható, illetve jobb egy ilyen konfiguráló programot használni mint kézzel megirni?
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/
Hali
Én még csak itt tartok:
"IFACE=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print }'`"
Ez biztos kiveszi az ip címed? Szerintem
a helyes
Igen, kell a print -nek a $1
--
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.)
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 ...
Jó ötlet!
Kevesebb sorunk lesz a scriptben :)
Szerintem is átláthatóbb.
--
http://laszlo.co.hu/
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.
és első szabályként meg -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT.
+1
működik
miért van az hogy amikor van internet akkor a router mögül rögtön tudok kapcsolodni a server-re amikor nincs akkor a 2-3 probálkozásra, vagyis az ssh kliensnél túllépen a várakozási idöt, a server router mögött van és onnan is kapcsolodom rá.
#!/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:
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á.