Kedves Fórumozók!
A segitségeteket szeretném kérni.
Összeraktam egy gépet kis otthoni fájlszervernek. Igazából csak egy Samba share van rajta, valamint egy OpenSSH. Az sshnak elérhetőnek kellene lennie az Internetről és ezért egyik portját kiforwardolom az routerünkre, egyéb módon nem lehetne elérni a gépet a netről.
A lokális hálózaton van egy gép aminek viszont meg akarom tiltani a géppel való kommunikációt majdnem teljesen.A hálózat sematikusan nagyjából igy néz ki.
http://chaosrider.uw.hu/images/network_sketch.png
Én a kollégiumból sshznék be a szerverre időnént.
Ha esetleg valakinek ötlete, vagy észrevétele akad, hogy hogyan lehetne pl hatékonyabbá vagy biztonságosabbá tenni a tűzfalat, akkor ne rejtse véka alá.
Előre is köszönöm.
Üdv:
János
Az rc.firewall tartalma:
#!/bin/bash
IPTABLES="/usr/local/sbin/iptables"
IP6TABLES="/usr/local/sbin/ip6tables"
IFCONFIG="/sbin/ifconfig"
GREP="/usr/bin/grep"
CUT="/usr/bin/cut"
LO_IF="lo"
MAIN_IF="eth0"
CURRENT_IP=`$IFCONFIG $MAIN_IF | $GREP "inet addr" | $CUT -c 21-32`
PRI_DNS="192.168.1.1"
LOCALNET="192.168.1.0/24"
firewall_start() {
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IP6TABLES -P INPUT DROP
$IP6TABLES -P OUTPUT DROP
$IP6TABLES -P FORWARD DROP
#drop invalid packages
$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -N ssh
$IPTABLES -N csillu
$IPTABLES -N icmp_security
$IPTABLES -N tcp_security
#ban csillu
$IPTABLES -A csillu -p ICMP --icmp-type echo-reply -j ACCEPT
$IPTABLES -A csillu -p ICMP -j DROP
$IPTABLES -A csillu -p TCP --syn -j DROP
$IPTABLES -A csillu -p UDP -j DROP
#ssh chain
$IPTABLES -A ssh -s $LOCALNET -j ACCEPT
$IPTABLES -A ssh -m limit --limit 2/s --limit-burst 5 -j ACCEPT
$IPTABLES -A ssh -p TCP -j REJECT --reject-with tcp-reset
#icmp_security chain
#ping of death
$IPTABLES -A icmp_security -p ICMP --icmp-type echo-request -m limit --limit 3/s --limit-burst 10 -j ACCEPT
$IPTABLES -A icmp_security -p ICMP --icmp-type echo-request -j REJECT
$IPTABLES -A icmp_security -p ICMP --icmp-type timestamp-request -m limit --limit 3/s --limit-burst 10 -j ACCEPT
$IPTABLES -A icmp_security -p ICMP --icmp-type timestamp-request -j REJECT
#tcp_security chain
#tcp portscans
$IPTABLES -A tcp_security -p TCP --tcp-flags ALL NONE -j DROP
$IPTABLES -A tcp_security -p TCP --tcp-flags ALL ALL -j DROP
$IPTABLES -A tcp_security -p TCP --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A tcp_security -p TCP --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A tcp_security -p TCP --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A tcp_security -p TCP --tcp-flags FIN,RST SYN,RST -j DROP
$IPTABLES -A tcp_security -p TCP --tcp-flags ACK,FIN FIN -j DROP
$IPTABLES -A tcp_security -p TCP --tcp-flags ACK,URG URG -j DROP
$IPTABLES -A tcp_security -p TCP --tcp-flags ACK,PSH PSH -j DROP
$IPTABLES -A tcp_security -p TCP --syn -m state --state ! NEW -j DROP
#syn storm
$IPTABLES -A tcp_security -p TCP --syn -m limit --limit 2/s --limit-burst 10 -j RETURN
$IPTABLES -A tcp_security -p TCP -s ! $LOCALNET -j REJECT --reject-with tcp-reset
$IPTABLES -A INPUT -s 192.168.1.101 -j csillu
$IPTABLES -A INPUT -p ICMP -j icmp_security
$IPTABLES -A INPUT -p TCP -j tcp_security
#enable loopback iface
$IPTABLES -A INPUT -i $LO_IF -j ACCEPT
#accept all localnet connections
$IPTABLES -A INPUT -s $LOCALNET -j ACCEPT
#allow established,related with the world
$IPTABLES -A INPUT -s ! $LOCALNET -m state --state ESTABLISHED,RELATED -j ACCEPT
#ssh
$IPTABLES -A INPUT -p TCP --dport 2022 -j ssh
$IPTABLES -A INPUT -p UDP --dport ! 2022 -j ACCEPT
}
firewall_stop() {
$IPTABLES -F
$IPTABLES -X
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IP6TABLES -P INPUT ACCEPT
$IP6TABLES -P OUTPUT ACCEPT
$IP6TABLES -P FORWARD ACCEPT
}
firewall_restart() {
firewall_stop
sleep 2
firewall_start
}
if [ "$1" = "restart" ]; then
echo -n "Restarting firewall... "
firewall_restart
elif [ "$1" = "stop" ]; then
echo -n "Stopping firewall... "
firewall_stop
elif [ "$1" = "start" ]; then
echo -n "Starting firewall... "
firewall_start
else
echo "Usage: rc.firewall start/stop/restart"
fi
echo "Done."
- 2834 megtekintés
Hozzászólások
up
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.
- A hozzászóláshoz be kell jelentkezni
gratulalaok a jolsikerult abrahoz :D
--
The Internet has evolved from smart people in front of dumb terminals to dumb people in front of smart terminals.
- A hozzászóláshoz be kell jelentkezni
Ezt nem tudom mire vélni. Irónia?
Nem szakszerű berakni? Linkelni szokás? Az a baj, hogy OOo-s produktum, vagy mi?
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.
- A hozzászóláshoz be kell jelentkezni
nem, ez egy sima mezei dicséret volt, hogy ilyen átláthatóan vázoltad a problémát :P
--
The Internet has evolved from smart people in front of dumb terminals to dumb people in front of smart terminals.
- A hozzászóláshoz be kell jelentkezni
de tulajdonkeppen van problema, vagy csak meg jobba akarod tenni a scriptet?
mert utobbi esetben nem tudok mit mondani, en ennel joval primitivebb tuzfal szabalyokkal szoktam
operalni :)
- Use the Source Luke ! -
- A hozzászóláshoz be kell jelentkezni
Probléma még nincs, mert még nem engedtem ki a netre, azt majd GrSecurity belövés után (mire kijön a 2.6.20.X-re, pfff...). A belső forgalmat meg nem zavarta, bár a bannolt gépről nem próbáltam.
Igazából az utóbbi a helyzet, néhány iptables-profi véleményére lennék kiváncsi, hogy ők mit csinálnának esetleg máshogy, és konkrétan hogyan.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.
- A hozzászóláshoz be kell jelentkezni
" A belső forgalmat meg nem zavarta, bár a bannolt gépről nem próbáltam."
Hmm!
Akkor hogyan tesztelted a tűzfalad?
Bannolt gépnek:
iptables -A INPUT -S bannoltgép -j REJECT
Aztán azt engedélyezed, amit akarsz onnan.
Ja, a REJECT hasznosabb mint a DROP, mert nem agresszívan(védően)
elutasít hanem olyan látszatot kelt mintha nem létezne az a szolgáltatás
amit védelmezel("tapogatnak")!
Így olyan mintha nem lenne célpontja a támadónak.
Vagyis nem látja értelmét(nem lát kihívást) a "támadásnak"!
Lehet nem pontosan fogalmaztam, de majd a "vérprofik" kijavítanak! :)
----------------------------------------------------------------
"Értem én hogy villanymotor, de mi hajtja!?
- A hozzászóláshoz be kell jelentkezni
Igazából még nem teszteltem.
Igen, majdnem az lett a ban amit irtál csak aztán rájöttem, hogy pingelni azért lehet hogy, jó lenne a bannolt gépet néha.
És tulajdonképpen azért DROPpolok, hogy úgy látsszon, mintha gép se lenne, mert ha nem válaszol semmire, akkor ugye olyan, mintha nem is lenne, mig REJECTtel küld választ.
Ha mondjuk pár portot kellene csak tiltani, akkor tényleg REJECT lenne a jó megoldás, hisz a többi port is REJECTelne, amin nincs szolgáltatás, és igy a védettek nem lennének feltűnőek.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.
- A hozzászóláshoz be kell jelentkezni