http://support.mozilla.com/hu/kb/Firefox+Help?style_mode=inproduct kicsi világ: Netfilter tűzfal desktopra

kedd, február 12, 2008

Netfilter tűzfal desktopra

#!/bin/bash
#
SYSCTL="/sbin/sysctl -w"
IPT=`which iptables`

INET_IFACE="eth0"
MYIP=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1 }'`
input_tcp_services=(21 22)
#input_udp_services=(0)
#465:smtps(gmail), 995:pops, 1863:msn, 36013:skype msn es a skype elvileg eleg a 80-as port is de hatha...
output_tcp_services=(20 21 22 25 53 80 110 443 465 995 1863 22222 36013)
kimeno_tcp=20,21,22,25,53,80,110,443,465,995,1863,22222,36013
output_udp_services=(20 21 25 53 443 36013)
kimeno_udp=20,21,25,53,443,36013
icmp_types=(0 3 4 8 11)

# modulok betoltese
modprobe ip-tables
modprobe ip_conntrack_ftp

# kernel parameterek
# SYN-flood vedelem
$SYSCTL net.ipv4.tcp_syncookies="1"
#minden ICMP csomag eldobasa (ez nem biztos h a legjobb megoldas)
#$SYSCTL net.ipv4.icmp_echo_ignore_all="1"
# smurf vedelem broadcast ping
$SYSCTL net.ipv4.icmp_echo_ignore_broadcasts="1"
# forras-routolt csomagok eldobasa
$SYSCTL net.ipv4.conf.all.accept_source_route="0"
# atiranyitasok tiltasa
$SYSCTL net.ipv4.conf.all.accept_redirects="0"
$SYSCTL net.ipv4.conf.all.secure_redirects="0"
# rossz hibuznetek elleni vedelem
$SYSCTL net.ipv4.icmp_ignore_bogus_error_responses="1"
# minden atejtett, forras-routolt, es atiranyitott csomag naplozasa
$SYSCTL net.ipv4.conf.all.log_martians="1"

# Kitoroljuk az elozo szabalyokat (-F = Flush -X = Delete change)
$IPT -F
$IPT -X

# Az alapartelmezett viselkedes (-t tabla -P = Policy)
$IPT -t filter -P INPUT DROP
$IPT -t filter -P OUTPUT DROP
$IPT -t filter -P FORWARD DROP


# loopback
$IPT -A INPUT -p all -i lo -j ACCEPT -s 127.0.0.0/8 -d 127.0.0.0/8
$IPT -A OUTPUT -p all -o lo -j ACCEPT -s 127.0.0.0/8 -d 127.0.0.0/8
$IPT -A INPUT -s 127.0.0.0/8 -i ! lo -j LOG --log-prefix "INPUT lo DROP"
$IPT -A INPUT -s 127.0.0.0/8 -i ! lo -j DROP

# a mar felepult kapcsolatokat maradhatnak
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT



# Durvan hamisitott forras IP-k szurese (RFC 1918 alapjan)
# Ezek az IP-k csak belso hasznalaton hasznalhatok
# Minden jol beallitott routernek el kell dobni az ilyen forras IP-vel
# rendelkezo csomagokat
#$IPT -A INPUT -s 255.0.0.0/8 -j LOG -log-prefix "Hamisitott forras IP!"
#$IPT -A INPUT -s 255.0.0.0/8 -j DROP
#$IPT -A INPUT -s 0.0.0.0/8 -j LOG -log-prefix "Hamisitott forras IP!"
#$IPT -A INPUT -s 0.0.0.0/8 -j DROP
#$IPT -A INPUT -s 127.0.0.0/8 -j LOG -log-prefix "Hamisitott forras IP!"
#$IPT -A INPUT -s 127.0.0.0/8 -j DROP
#$IPT -A INPUT -s 192.168.0.0/16 -j LOG -log-prefix "Hamisitott forras IP!"
#$IPT -A INPUT -s 192.168.0.0/16 -j DROP
#$IPT -A INPUT -s 172.16.0.0/12 -j LOG -log-prefix "Hamisitott forras IP!"
#$IPT -A INPUT -s 172.16.0.0/12 -j DROP
#$IPT -A INPUT -s 10.0.0.0/8 -j LOG -log-prefix "Hamisitott forras IP!"
#$IPT -A INPUT -s 10.0.0.0/8 -j DROP
$IPT -A INPUT -s $MYIP -j LOG --log-prefix "Hamisitott forras IP!"
$IPT -A INPUT -j LOG --log-prefix "INPUT policy eldobta: "
$IPT -A INPUT -j DROP

#########
# INPUT #
#########
# ping

#$IPT -A INPUT -p icmp --icmp-type echo-reply -m state --state ESTABLISHED,RELATED -j ACCEPT
#$IPT -A INPUT -p icmp --icmp-type echo-request -m state --state NEW -j ACCEPT

#$IPT -A INPUT -d 255.255.255.255 -j REJECT
#$IPT -A INPUT -d 224.0.0.0/8 -j REJECT

# Befele jovo keresek (-A = Add, -p procotol, -i interface, -s source, -d destination)
# Ezeken a portokon lehet kerni szolgaltatast
#$IPT -A INPUT -p tcp -i $INET_IFACE -j ACCEPT -s 0.0.0.0/0 -d $MYIP 80
# a tobbihez nem irom oda a -s 0.0.0.0/0 (barhonnan)-t mert ez az alapertelmezes

#$IPT -A INPUT -p tcp -i $INET_IFACE -j ACCEPT -d $MYIP 443
# ssh kapcsolat kezdemenyezo csomagok elfogadasa
i="0"
# bejovo kapcsolodasi kerelmek engedelyezese de csak $input_tcp_services tömb elemeire
for i in ${input_tcp_services[@]}
do
$IPT -A INPUT -p tcp -i $INET_IFACE -d $MYIP --dport $i -j ACCEPT
done



# Ahhoz, hogy a belso geprol is tudjunk kapcsolodni kifele, szukseg van egy
# befele jovo kapcsolati portra is. Mivel ez tetszoleges lehet, ezert tiltsunk
# le minden olyan csomagot, mely kapcsolodni probalna a portjainkra (-y = SYN flag)
$IPT -A INPUT -p tcp -i $INET_IFACE -d $MYIP -m state --state NEW -j LOG --log-prefix "uj syn nelkuli: "
#$IPT -A INPUT -p tcp -i $INET_IFACE -d $MYIP -m state --state NEW -j REJECT
# itt viszont megnyitunk minden portot (ACK, FIN, ACK+SYN flag-es csomagok johetnek)
$IPT -A INPUT -p tcp -i $INET_IFACE -s 0.0.0.0/0 -d $MYIP -j ACCEPT

#Megendedunk nehany ICMP tipust a helyes mukodes erdekeben
# A "nagyok" javaslata alapjan ezeket szabad beengedni:
# echo-reply (echo-request) time-exceeded destination-unreachable source-quench
# (a kovetkezoket egyenkent egy sorba kell irni)
# ICMP johet
for i in ${icmp_types[@]}
do
echo "icmp=$i"
$IPT -A INPUT -p icmp --icmp-type $i -j ACCEPT
#$IPT -A INPUT -p icmp -i $INET_IFACE -d $MYIP --icmp-type $i -j ACCEPT
done

# minden mas elutasitasa
$IPT -A INPUT -j LOG --log-prefix "DROP by INPUT:"
$IPT -A INPUT -j DROP

##########
# OUTPUT #
##########

$IPT -A OUTPUT -p all -o lo -j ACCEPT -s 127.0.0.0/8 -d 127.0.0.0/8
$IPT -A OUTPUT -o $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
# tcp-k OUTPUT-on
j=0
for j in ${output_tcp_services[@]}
do
$IPT -A OUTPUT -p tcp -o $INET_IFACE --dport $j -m state --state NEW -j ACCEPT
done
#$IPT -A OUTPUT -p tcp -o $INET_IFACE -m multiport --dport $kimeno_tcp -m state --state NEW -j ACCEPT
# udp-k OUTPUT-on
for k in ${output_udp_services[@]}
do
$IPT -A OUTPUT -p udp -o $INET_IFACE --dport $k -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
done
#$IPT -A OUTPUT -p tcp -o $INET_IFACE -m multiport --dport $kimeno_udp -m state --state NEW -j ACCEPT
# a kifele mehet minden, tcp, udp, icmp, stb.
# (ezt azze megse...)
#$IPT -A OUTPUT -p all -o $INET_IFACE -j ACCEPT -s $MYIP -d 0.0.0.0/0

$IPT -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

# minden mas naplozasa
$IPT -A OUTPUT -j LOG --log-prefix "DROP by policy (OUTPUT):"
$IPT -A OUTPUT -j DROP
###########
# FORWARD #
###########
# minden mas naplozasa
$IPT -A FORWARD -j LOG --log-prefix "TOVABBÍTASI kiserlet? DROP"

$IPT -A FORWARD -j DROP

Nincsenek megjegyzések: