PDA

View Full Version : Finalmente ho finito: Axl's Firewall ScRiPt 2.0


Axl_Mas
07-11-2005, 21:23
Dopo mesi (non scherzo,sono partito da zero!) di continue modifiche ho finito il mio script iptables!!!!!
Esperti di linux datemi dei consigli se c'è qualcosa da correggere/migliorare o aggiungere....mi sto appassionando ai firewall e ne voglio uno davvero potente!


#Making variables
IPTABLES="/usr/local/sbin/iptables"
NETWORK_IP="192.168.0.0/24"
ETH_LAN="eth1"
ETH_NET="eth0"
PPP="ppp0"
DNS1="62.211.69.150"
DNS2="212.48.4.15"
DNS3="85.37.17.12"

#Flushing all rules,chains,tables,policies.

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

#Reset the default policies in the nat table.
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT

#Reset the default policies in the mangle table.
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT

#Flush all the rules in the filter and nat tables.
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

#Erase all chains that's not default in filter and nat table.
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

#Erase all chains and the rules of all tables.
for table in nat mangle filter
do
$IPTABLES -t $table -F
$IPTABLES -t $table -X
done

#-----------------------------------------------------------------------------

#Close all the traffic
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
#-----------------------------------------------------------------------------

#filter bugous ips
$IPTABLES -A INPUT -i $PPP -s 127.0.0.1 -j DROP
$IPTABLES -A INPUT -i $PPP -s 192.168.0.0/16 -j DROP
#------------------------------------------------------------------------------

#kernel's protections
echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
for a in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $a
done
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/tcp_ecn
#Fragmented packets management
echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
echo 25 > /proc/sys/net/ipv4/ipfrag_time
#Permit fpt active mode into clients
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
#-----------------------------------------------------------------------------

#MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_nat
modprobe ipt_MASQUERADE
$IPTABLES -t nat -A POSTROUTING -s $NETWORK_IP -j MASQUERADE
$IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
#-----------------------------------------------------------------------------

#Accept all lan traffic
$IPTABLES -A INPUT -i $ETH_LAN -j ACCEPT
$IPTABLES -A OUTPUT -o $ETH_LAN -j ACCEPT
#-----------------------------------------------------------------------------

#Permit loopback connections
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -d 127.0.0.1 -j ACCEPT
#-----------------------------------------------------------------------------

# Drop Invalid packets
$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -A FORWARD -m state --state INVALID -j DROP
#-----------------------------------------------------------------------------

#Portscanners protections
# Drop (NMAP) scan packets
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# Drop packets with bad tcp flags
$IPTABLES -A INPUT -p tcp --tcp-option 64 -j DROP
$IPTABLES -A INPUT -p tcp --tcp-option 128 -j DROP
$IPTABLES -A INPUT -p tcp --dport 0 -j DROP
$IPTABLES -A INPUT -p udp --dport 0 -j DROP
$IPTABLES -A INPUT -p tcp --sport 0 -j DROP
$IPTABLES -A INPUT -p udp --sport 0 -j DROP


#++++++++++++++++++++++++++++++
#Ports opening +
#++++++++++++++++++++++++++++++

#++++++++
#FORWARD+
#++++++++

#-----------------
#Entering packets-
#-----------------

$IPTABLES -N netlan #ppp0(internet) ------> ethX(lan)
$IPTABLES -A FORWARD -i $PPP -o $ETH_LAN -j netlan

#Dns
$IPTABLES -A netlan -m state --state ESTABLISHED,RELATED -p udp --sport 53 -s $DNS1 -j ACCEPT
$IPTABLES -A netlan -m state --state ESTABLISHED,RELATED -p udp --sport 53 -s $DNS2 -j ACCEPT
$IPTABLES -A netlan -m state --state ESTABLISHED,RELATED -p tcp --sport 53 -s $DNS1 -j ACCEPT
$IPTABLES -A netlan -m state --state ESTABLISHED,RELATED -p tcp --sport 53 -s $DNS2 -j ACCEPT
$IPTABLES -A netlan -m state --state ESTABLISHED,RELATED -p udp --sport 53 -s $DNS3 -j ACCEPT
$IPTABLES -A netlan -m state --state ESTABLISHED,RELATED -p tcp --sport 53 -s $DNS3 -j ACCEPT

# Http,https,8080
$IPTABLES -A netlan -m tcp -p tcp -m multiport --sports 80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT

# POP3
$IPTABLES -A netlan -m tcp -p tcp -m multiport --sports 110,995 -m state --state ESTABLISHED,RELATED -j ACCEPT

# SMTP
$IPTABLES -A netlan -m tcp -p tcp -m multiport --sports 25,587 -m state --state ESTABLISHED,RELATED -j ACCEPT

# FTP
$IPTABLES -A netlan -m tcp -p tcp --sport 20:21 -m state --state ESTABLISHED,RELATED -j ACCEPT

# KAZAA
$IPTABLES -A netlan -p tcp --sport 1214 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Shareaza
$IPTABLES -A netlan -p tcp --dport 6346 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A netlan -p udp --dport 6346 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#Soulseek
$IPTABLES -A netlan -p tcp --sport 2234:2240 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A netlan -p tcp --sport 29093 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A netlan -p tcp --dport 29093 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A netlan -p tcp --dport 2234:2240 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A netlan -p tcp --sport 5534 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A netlan -p tcp --dport 5534 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

#IRC
#$IPTABLES -A netlan -p tcp --sport 6667 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPTABLES -A netlan -p tcp --sport 113 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPTABLES -A netlan -m state --state ESTABLISHED,RELATED -p udp --sport 53 -j ACCEPT
#$IPTABLES -A netlan -m state --state ESTABLISHED,RELATED -p tcp --sport 53 -j ACCEPT


#-----------------
#Outgoing packets-
#-----------------

$IPTABLES -N lannet #ethX(lan) ----> ppp0(internet)
$IPTABLES -A FORWARD -i $ETH_LAN -o $PPP -j lannet
#$IPTABLES -A lannet -j ACCEPT
#Dns
$IPTABLES -A lannet -p udp --dport 53 -d $DNS1 -j ACCEPT
$IPTABLES -A lannet -p udp --dport 53 -d $DNS2 -j ACCEPT
$IPTABLES -A lannet -p udp --dport 53 -d $DNS3 -j ACCEPT
$IPTABLES -A lannet -p tcp --dport 53 -d $DNS1 -j ACCEPT
$IPTABLES -A lannet -p tcp --dport 53 -d $DNS2 -j ACCEPT
$IPTABLES -A lannet -p tcp --dport 53 -d $DNS3 -j ACCEPT

#Http and https
$IPTABLES -A lannet -p tcp -m multiport --dport 80,8080,443 -j ACCEPT

#Pop3
$IPTABLES -A lannet -p tcp -m multiport --dport 110,995 -j ACCEPT

#Smtp
$IPTABLES -A lannet -p tcp -m multiport --dport 587,25 -j ACCEPT

#Shareaza
$IPTABLES -A lannet -p tcp --dport 6346 -j ACCEPT
$IPTABLES -A lannet -p udp --dport 6346 -j ACCEPT
#$IPTABLES -A lannet -p tcp --sport 6346 -j ACCEPT
#$IPTABLES -A lannet -p udp --sport 6346 -j ACCEPT

#Kazaa
$IPTABLES -A lannet -p tcp --dport 1214 -j ACCEPT

#Soulseek
$IPTABLES -A lannet -p tcp --dport 2234:2240 -j ACCEPT

$IPTABLES -A lannet -p tcp --dport 29093 -j ACCEPT
$IPTABLES -A lannet -p tcp --sport 29093 -j ACCEPT

$IPTABLES -A lannet -p tcp --sport 2234:2240 -j ACCEPT
$IPTABLES -A lannet -p tcp --dport 5534 -j ACCEPT
$IPTABLES -A lannet -p tcp --sport 5534 -j ACCEPT

#IRC
#$IPTABLES -A lannet -p tcp --dport 6667 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPTABLES -A lannet -p tcp --dport 113 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPTABLES -A lannet -p udp --dport 53 -j ACCEPT
#$IPTABLES -A lannet -p tcp --dport 53 -j ACCEPT


#++++++++
#INPUT +
#++++++++

#Dns
$IPTABLES -A INPUT -i $PPP -m state --state ESTABLISHED,RELATED -p udp --sport 53 -s $DNS1 -j ACCEPT
$IPTABLES -A INPUT -i $PPP -m state --state ESTABLISHED,RELATED -p udp --sport 53 -s $DNS2 -j ACCEPT
$IPTABLES -A INPUT -i $PPP -m state --state ESTABLISHED,RELATED -p udp --sport 53 -s $DNS3 -j ACCEPT
$IPTABLES -A INPUT -i $PPP -m state --state ESTABLISHED,RELATED -p tcp --sport 53 -s $DNS1 -j ACCEPT
$IPTABLES -A INPUT -i $PPP -m state --state ESTABLISHED,RELATED -p tcp --sport 53 -s $DNS2 -j ACCEPT
$IPTABLES -A INPUT -i $PPP -m state --state ESTABLISHED,RELATED -p tcp --sport 53 -s $DNS3 -j ACCEPT

#http e https
$IPTABLES -A INPUT -i $PPP -p tcp -m multiport --sports 80,443,8080 -m state --state ESTABLISHED,RELATED -j ACCEPT

#pop3
$IPTABLES -A INPUT -i $PPP -p tcp -m multiport --sports 110,995 -m state --state ESTABLISHED,RELATED -m limit --limit 60/min -j ACCEPT


#smtp
$IPTABLES -A INPUT -i $PPP -p tcp -m multiport --sport 25,587 -m state --state ESTABLISHED,RELATED -m limit --limit 50/min -j ACCEPT

#aMule INPUT
$IPTABLES -A INPUT -i $PPP -p tcp --dport 4662 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $PPP -p udp --dport 4672 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $PPP -p udp --dport 4665 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m layer7 --l7proto edonkey -j ACCEPT

#++++++++
#OUTPUT +
#++++++++

#Dns
$IPTABLES -A OUTPUT -p udp --dport 53 -d $DNS1 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 53 -d $DNS2 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 53 -d $DNS3 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 53 -d $DNS1 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 53 -d $DNS2 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 53 -d $DNS3 -j ACCEPT

#Http and https
$IPTABLES -A OUTPUT -p tcp -m multiport --dport 80,8080,443 -j ACCEPT

#aMule OUTPUT
$IPTABLES -A OUTPUT -p tcp --dport 4662 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 4672 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 4665 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 4661 -j ACCEPT
$IPTABLES -A OUTPUT -m layer7 --l7proto edonkey -j ACCEPT

#Pop3
$IPTABLES -A OUTPUT -p tcp -m multiport --dport 110,995 -j ACCEPT

#Smtp
$IPTABLES -A OUTPUT -p tcp -m multiport --dport 587,25 -j ACCEPT

#Rsync (needed by urpmi)
$IPTABLES -A OUTPUT -p tcp --dport 873 -j ACCEPT
$IPTABLES -A OUTPUT -p udp --dport 873 -j ACCEPT


#-----------------------------------------------------------------------------

#Ftp management (Thanks to MonMotha)

$IPTABLES -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -o $PPP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
# The data connection in active mode
$IPTABLES -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o $PPP -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
# The data connection in passive mode
$IPTABLES -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -o $PPP -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT

# Ftp forward
$IPTABLES -A netlan -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A lannet -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
# The data connection in active mode
$IPTABLES -A netlan -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A lannet -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
# The data connection in passive mode
$IPTABLES -A netlan -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A lannet -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
#-----------------------------------------------------------------------------

#Icmp management
#Accet 3 incoming and outcoming icmp packets/min,drop the others (all the ping are blocked at script's begin)
$IPTABLES -A OUTPUT -p icmp -m limit --limit 3/min -j ACCEPT
$IPTABLES -A OUTPUT -p icmp -j DROP
$IPTABLES -A INPUT -p icmp -m limit --limit 3/min -j ACCEPT
$IPTABLES -A INPUT -p icmp -j DROP



#Da http://gentoo-wiki.com/HOWTO_Packet_Shaping
#adattato per regole firewall

# Constants
LOCALNET="192.168.0.0/255.255.255.0"
MARKPRIO1="1"
MARKPRIO2="2"
MARKPRIO3="3"
MARKPRIO4="4"
MARKPRIO5="5"
MARKPRIO6="6"
MARKPRIO7="7"
MARKPRIO8="8"
MARKPRIO9="9"

#Flushing mangle tables
$IPTABLES -t mangle -F OUTPUT
$IPTABLES -t mangle -F FORWARD


# Setting priority marks

# Prio 1
#dns
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 53 -j MARK --set-mark $MARKPRIO1
$IPTABLES -t mangle -A OUTPUT -p udp --dport 53 -j MARK --set-mark $MARKPRIO1
# icmp
$IPTABLES -t mangle -A FORWARD -p icmp -j MARK --set-mark $MARKPRIO1
$IPTABLES -t mangle -A OUTPUT -p icmp -j MARK --set-mark $MARKPRIO1
#skype
$IPTABLES -t mangle -A FORWARD -m layer7 --l7proto skypeout -j MARK --set-mark $MARKPRIO1
$IPTABLES -t mangle -A FORWARD -m layer7 --l7proto skypetoskype -j MARK --set-mark $MARKPRIO1
# http
$IPTABLES -t mangle -A FORWARD -p tcp --dport 80 -j MARK --set-mark $MARKPRIO1
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark $MARKPRIO1
# https
$IPTABLES -t mangle -A FORWARD -p tcp --dport 443 -j MARK --set-mark $MARKPRIO1
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark $MARKPRIO1

# Prio 2
# non tcp
$IPTABLES -t mangle -A FORWARD -p ! tcp -j MARK --set-mark $MARKPRIO2
$IPTABLES -t mangle -A OUTPUT -p ! tcp -j MARK --set-mark $MARKPRIO2

#Prio 3
# ssh
$IPTABLES -t mangle -A FORWARD -p tcp --dport 22 -j MARK --set-mark $MARKPRIO3
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark $MARKPRIO3
# ftp (control)
$IPTABLES -t mangle -A FORWARD -p tcp --dport 21 -j MARK --set-mark $MARKPRIO3
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark $MARKPRIO3
# smtp
$IPTABLES -t mangle -A FORWARD -p tcp --dport 25 -j MARK --set-mark $MARKPRIO3
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark $MARKPRIO3

# Prio 4
# packets > 1024 bytes
$IPTABLES -t mangle -A FORWARD -p tcp -m length --length 1024: -j MARK --set-mark $MARKPRIO4
$IPTABLES -t mangle -A OUTPUT -p tcp -m length --length 1024: -j MARK --set-mark $MARKPRIO4


# Prio 9
#emule
$IPTABLES -t mangle -A OUTPUT -m layer7 --l7proto edonkey -j MARK --set-mark $MARKPRIO9

#-----------------------------------------------------------


#Constants

# Interface you want to do shaping on
# eth2, eth1 for direct connection; ppp0 or so for dsl
# and other dialup connections (check ifconfig)
IFACE=ppp0

# Priority marks
MARKPRIO1="1"
MARKPRIO2="2"
MARKPRIO3="3"
MARKPRIO4="4"
MARKPRIO5="5"
MARKPRIO6="6"
MARKPRIO7="7"
MARKPRIO8="8"
MARKPRIO9="9"


# Rates
UPRATE="240kbit"
#P2PRATE=$UPRATE
#P2PRATE="128kbit"
PRIORATE1="240kbit"
PRIORATE2="80kbit"
PRIORATE3="40kbit"
PRIORATE4="20kbit"
PRIORATE5="10kbit"
PRIORATE6="1kbit"
PRIORATE7="5kbit"
PRIORATE8="5kbit"
PRIORATE9="5kbit"

# Quantum
QUANTUM1="12187"
QUANTUM2="8625"
QUANTUM3="5062"
QUANTUM4="1500"
QUANTUM5="1000"
QUANTUM6="800"
QUANTUM7="500"
QUANTUM8="300"
QUANTUM9="100"

# Burst
BURST1="6k"
BURST2="4k"
BURST3="2k"
BURST4="2k"
BURST5="2k"
BURST6="2k"
BURST7="1k"
BURST8="1k"
BURST9="1k"
CBURST1="3k"
CBURST2="2k"
CBURST3="1k"
CBURST4="128"
CBURST5="128"
CBURST6="128"
CBURST7="64"
CBURST8="64"
CBURST9="64"

#reset queues
tc qdisc del dev ppp0 root

# Set queue length for IFACE
ifconfig $IFACE txqueuelen 16

# Specify queue discipline
tc qdisc add dev $IFACE root handle 1:0 htb default 103 r2q 1

# Set root class
tc class add dev $IFACE parent 1:0 classid 1:1 htb rate $UPRATE burst $BURST1 cburst $CBURST1
# Specify sub classes
tc class add dev $IFACE parent 1:1 classid 1:101 htb rate $PRIORATE1 ceil $UPRATE quantum $QUANTUM1 burst $BURST1 cburst $CBURST1 prio 0
tc class add dev $IFACE parent 1:1 classid 1:102 htb rate $PRIORATE2 ceil $UPRATE quantum $QUANTUM2 burst $BURST2 cburst $CBURST2 prio 1
tc class add dev $IFACE parent 1:1 classid 1:103 htb rate $PRIORATE3 ceil $UPRATE quantum $QUANTUM3 burst $BURST3 cburst $CBURST3 prio 2
tc class add dev $IFACE parent 1:1 classid 1:104 htb rate $PRIORATE4 ceil $UPRATE quantum $QUANTUM4 burst $BURST4 cburst $CBURST4 prio 3
tc class add dev $IFACE parent 1:1 classid 1:105 htb rate $PRIORATE5 ceil $UPRATE quantum $QUANTUM5 burst $BURST5 cburst $CBURST5 prio 4
tc class add dev $IFACE parent 1:1 classid 1:106 htb rate $PRIORATE6 ceil $UPRATE quantum $QUANTUM6 burst $BURST6 cburst $CBURST6 prio 5
tc class add dev $IFACE parent 1:1 classid 1:107 htb rate $PRIORATE7 ceil $UPRATE quantum $QUANTUM7 burst $BURST7 cburst $CBURST7 prio 6
tc class add dev $IFACE parent 1:1 classid 1:108 htb rate $PRIORATE8 ceil $UPRATE quantum $QUANTUM8 burst $BURST8 cburst $CBURST8 prio 7
tc class add dev $IFACE parent 1:1 classid 1:109 htb rate $PRIORATE9 ceil $UPRATE quantum $QUANTUM9 burst $BURST9 cburst $CBURST9 prio 8

# Filter packets
tc filter add dev $IFACE parent 1:0 protocol ip prio 0 handle $MARKPRIO1 fw classid 1:101
tc filter add dev $IFACE parent 1:0 protocol ip prio 1 handle $MARKPRIO2 fw classid 1:102
tc filter add dev $IFACE parent 1:0 protocol ip prio 2 handle $MARKPRIO3 fw classid 1:103
tc filter add dev $IFACE parent 1:0 protocol ip prio 3 handle $MARKPRIO4 fw classid 1:104
tc filter add dev $IFACE parent 1:0 protocol ip prio 4 handle $MARKPRIO5 fw classid 1:105
tc filter add dev $IFACE parent 1:0 protocol ip prio 5 handle $MARKPRIO6 fw classid 1:106
tc filter add dev $IFACE parent 1:0 protocol ip prio 6 handle $MARKPRIO7 fw classid 1:107
tc filter add dev $IFACE parent 1:0 protocol ip prio 7 handle $MARKPRIO8 fw classid 1:108
tc filter add dev $IFACE parent 1:0 protocol ip prio 8 handle $MARKPRIO9 fw classid 1:109

# Add queuing disciplines
tc qdisc add dev $IFACE parent 1:101 sfq perturb 16 quantum $QUANTUM1
tc qdisc add dev $IFACE parent 1:102 sfq perturb 16 quantum $QUANTUM2
tc qdisc add dev $IFACE parent 1:103 sfq perturb 16 quantum $QUANTUM3
tc qdisc add dev $IFACE parent 1:104 sfq perturb 16 quantum $QUANTUM4
tc qdisc add dev $IFACE parent 1:105 sfq perturb 16 quantum $QUANTUM5
tc qdisc add dev $IFACE parent 1:106 sfq perturb 16 quantum $QUANTUM6
tc qdisc add dev $IFACE parent 1:107 sfq perturb 16 quantum $QUANTUM7
tc qdisc add dev $IFACE parent 1:108 sfq perturb 16 quantum $QUANTUM8
tc qdisc add dev $IFACE parent 1:109 sfq perturb 16 quantum $QUANTUM9



#------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------

#Final REJECT rules for non specificated outgoing packets

$IPTABLES -A lannet -j REJECT
$IPTABLES -A OUTPUT -j REJECT



Lo sto testando da parecchio e devo dire che funziona bene,ma sono ansioso di migliorarlo (con il vostro aiuto!!).
Il prossimo passo sarà quello di aprire una alla volta le porte che mi servono in FORWARD!

Attendo commentii!!! :)

EDIT: Script aggiornato con le modiche suggerite dagli utenti intervenuti in questo post!
Aggiornato al 25/12/05 aggiunto il traffic shaping!!!!

_YTS_
08-11-2005, 13:17
bel lavoro!!!
appena posso ti d ho un paio di consigli


ciao

Axl_Mas
08-11-2005, 13:28
bel lavoro!!!
appena posso ti d ho un paio di consigli


ciao
Grazie!
Lo sai che ci tengo ai tuoi consigli.... ;)

_YTS_ mi ha aiutato parecchio per la realizzazione di questo script!

r.
08-11-2005, 19:23
Era da tanto che cercavo un thread cosi'.

Secondo la maggior parte di chi usa linuc nemmeno sa che può aver un firewall meglio del Norton ;)

Comunque se posso farti un appunto stilisticoSarebbe meglio che le interfaccie e i dns fossero $WAN, $LAN $DNS1 e$DNS2, e non "hardcoded" (magari c'è un modo per prendere i dns da /etc/resolv.conf)

Poi non capisco se quelle regole proteggono o no la rete interna, sembra che lasci passare tutto (ma forse mi sbaglio).

Io per vedere certi siti ho dovuto aggiungere:

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

(l'ho presa da qui qui (http://en.tldp.org/HOWTO/IP-Masquerade-HOWTO/mtu-issues.html) )

Io sono riuscito a fare anche traffic shaping e sembra funzionare bene (con p2p a manetta ping google è passato da due secondi a 150ms, considerando che a vuoto è circa 100ms)

Axl_Mas
08-11-2005, 22:40
Era da tanto che cercavo un thread cosi'.

Comunque se posso farti un appunto stilisticoSarebbe meglio che le interfaccie e i dns fossero $WAN, $LAN $DNS1 e$DNS2, e non "hardcoded" (magari c'è un modo per prendere i dns da /etc/resolv.conf)

Poi non capisco se quelle regole proteggono o no la rete interna, sembra che lasci passare tutto (ma forse mi sbaglio).

Io per vedere certi siti ho dovuto aggiungere:

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

(l'ho presa da qui qui (http://en.tldp.org/HOWTO/IP-Masquerade-HOWTO/mtu-issues.html) )

Io sono riuscito a fare anche traffic shaping e sembra funzionare bene (con p2p a manetta ping google è passato da due secondi a 150ms, considerando che a vuoto è circa 100ms)

Approvato l'appunto stilistico, vedrò di sostiuire i nomi delle interfacce e dei dns con

La rete interna ancora non è protetta....sarà il prossimo passo del mio firewall!

Ho letto l'articolo,francamente non ho avuto problemi con nessun sito ma se dovessero capitarmi saprò come risolvere, grazie!!

Questo traffic shaping cosa è????
Sono interessantissimo, odio dover abbassare l'upload di amule ogni volta che devo fare una chiamata su skype (se non abbasso l'upload ho un ritardo mostruoso!!!)

Axl_Mas
08-11-2005, 22:43
Io per vedere certi siti ho dovuto aggiungere:

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

(l'ho presa da qui qui (http://en.tldp.org/HOWTO/IP-Masquerade-HOWTO/mtu-issues.html) )

Ti ricordi quali erano i siti che non andavano?Cosi vedo se ho bisogno o no della stringa!

Axl_Mas
08-11-2005, 23:38
Ho fatto qualche modifica (commentata nello script ad inizio pagina con #***)!
Intanto ho ristretto la subnetmask della mia rete interna a 192.168.0.0/24 (ho solo ip 192.168.0.x)
Poi ho iniziato a proteggere la rete interna permettendo tutte le connessioni in uscita limitando però le connessioni in entrata a quelle gia stabilite o collegate (tramite -m state --state ESTABLISHED,RELATED).

Dai raga construiamo insieme un firewall con i controcaxxi che serva come base per tutti gli appassionati linux di questo forum!!!!
Aspetto consigli!!!

Axl_Mas
09-11-2005, 11:41
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE #***PRIMA AVEVO "-d !"AL POSTO DI "-s" E NON CAPENDO IL SIGNIFICATO HO MODIFICATO COSI CHE MI SEMBRA MOLTO PIù CORRETTO

Ho modificato un altro comando!
Prima sul masquerande avevo:
iptables -t nat -A POSTROUTING -d ! 192.168.0.0/24 -j MASQUERADE
ma non capendo il significato di questa regola nagativa l'ho sostituita con

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

che mi sembra molto più corretta!

r.
09-11-2005, 12:06
Ti ricordi quali erano i siti che non andavano?

No, non mi ricordo. Per fortuna avevo letto da qualche parte di quel problema, e quando c'è stato qualche sito che non andava ho fatto una prova e funzionava.

Il problema dipende anche dal tipo di connessione che uno ha. (il link mi sembra lo spieghi bene).

Per quanto riguarda il traffic shaping ho usato la guide del wiki gentoo (ma credo vada bene per tutte le distro).

Stasera posto i miei script, anche se probabilmente sono da correggere.

Axl_Mas
09-11-2005, 19:31
Stasera posto i miei script, anche se probabilmente sono da correggere.

Ho trovato la pagina wiki, mooooolto interessante!!!
Cmq sono ansioso di vedere i tuoi script,altro che misero firewall qui stiamo scrivendo uno script di gestione di un megaserver!!! :sofico:

Ho aggiornato lo script in prima pagina con le ultime modifiche che ho apportato!!Ho stabilito l'uso di variabili e la funzione di logging penso di inserirla per domani! (prima voglio essere sicuro che funzioni!)

r.
09-11-2005, 20:54
Questo marca i pacchetti con iptables:


#Da http://gentoo-wiki.com/HOWTO_Packet_Shaping
#adattato per regole firewall

# Constants
LOCALNET="192.168.0.0/255.255.255.0"
MARKPRIO1="1"
MARKPRIO2="2"
MARKPRIO3="3"
MARKPRIO4="4"
MARKPRIO5="5"
MARKPRIO6="6"
MARKPRIO7="7"
MARKPRIO8="8"
MARKPRIO9="9"

#Flushing tables
iptables -t mangle -F OUTPUT
iptables -t mangle -F FORWARD


# Setting priority marks

# Prio 1
# icmp
iptables -t mangle -A FORWARD -p icmp -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark $MARKPRIO1
# ssh
iptables -t mangle -A FORWARD -p tcp --dport 22 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A OUTPUT -p tcp --dport 22 -j MARK --set-mark $MARKPRIO1
# ftp (control)
iptables -t mangle -A FORWARD -p tcp --dport 21 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A OUTPUT -p tcp --dport 21 -j MARK --set-mark $MARKPRIO1
# non tcp
iptables -t mangle -A FORWARD -p ! tcp -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A OUTPUT -p ! tcp -j MARK --set-mark $MARKPRIO1

# Prio 2
#Libero

#Prio 3
# http
iptables -t mangle -A FORWARD -p tcp --dport 80 -j MARK --set-mark $MARKPRIO3
iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark $MARKPRIO3
# https
iptables -t mangle -A FORWARD -p tcp --dport 443 -j MARK --set-mark $MARKPRIO3
iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark $MARKPRIO3
# smtp
iptables -t mangle -A FORWARD -p tcp --dport 25 -j MARK --set-mark $MARKPRIO3
iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark $MARKPRIO3

# Prio 4
# packets > 1024 bytes
iptables -t mangle -A FORWARD -p tcp -m length --length 1024: -j MARK --set-mark $MARKPRIO4
# bittorrent (port number)
#iptables -t mangle -A FORWARD -i eth0 -p tcp --sport 6881:6889 -j MARK --set-mark $MARKPRIO3
#iptables -t mangle -A FORWARD -i eth0 -p tcp --dport 6881:6889 -j MARK --set-mark $MARKPRIO3
# bittorrent (layer 7)
iptables -t mangle -A FORWARD -m layer7 --l7proto bittorrent -j MARK --set-mark $MARKPRIO4

# Prio 5
#emule
iptables -t mangle -A FORWARD -m layer7 --l7proto edonkey -j MARK --set-mark $MARKPRIO5

# Prio 6




# Remaining packets are marked according to TOS
iptables -t mangle -A FORWARD -p tcp -m tos --tos Minimize-Delay -m mark --mark 0 -j MARK --set-mark $MARKPRIO1
iptables -t mangle -A FORWARD -p tcp -m tos --tos Maximize-Throughput -m mark --mark 0 -j MARK --set-mark $MARKPRIO3
iptables -t mangle -A FORWARD -p tcp -m tos --tos Minimize-Cost -m mark --mark 0 -j MARK --set-mark $MARKPRIO5


Questo fa il vero è proprio shaping con il comando tc (da iproute2):
Constants

# Interface you want to do shaping on
# eth2, eth1 for direct connection; ppp0 or so for dsl
# and other dialup connections (check ifconfig)
IFACE=ppp0

# Priority marks
MARKPRIO1="1"
MARKPRIO2="2"
MARKPRIO3="3"
MARKPRIO4="4"
MARKPRIO5="5"
MARKPRIO6="6"
MARKPRIO7="7"
MARKPRIO8="8"
MARKPRIO9="9"


# Rates
UPRATE="240kbit"
#P2PRATE=$UPRATE
#P2PRATE="128kbit"
PRIORATE1="120kbit"
PRIORATE2="80kbit"
PRIORATE3="40kbit"
PRIORATE4="20kbit"
PRIORATE5="10kbit"
PRIORATE6="5kbit"
PRIORATE7="5kbit"
PRIORATE8="5kbit"
PRIORATE9="5kbit"

# Quantum
QUANTUM1="12187"
QUANTUM2="8625"
QUANTUM3="5062"
QUANTUM4="1500"
QUANTUM5="1000"
QUANTUM6="800"
QUANTUM7="500"
QUANTUM8="300"
QUANTUM9="100"

# Burst
BURST1="6k"
BURST2="4k"
BURST3="2k"
BURST4="2k"
BURST5="2k"
BURST6="2k"
BURST7="1k"
BURST8="1k"
BURST9="1k"
CBURST1="3k"
CBURST2="2k"
CBURST3="1k"
CBURST4="128"
CBURST5="128"
CBURST6="128"
CBURST7="64"
CBURST8="64"
CBURST9="64"

#reset queues
tc qdisc del dev ppp0 root

# Set queue length for IFACE
ifconfig $IFACE txqueuelen 16

# Specify queue discipline
tc qdisc add dev $IFACE root handle 1:0 htb default 103 r2q 1

# Set root class
tc class add dev $IFACE parent 1:0 classid 1:1 htb rate $UPRATE burst $BURST1 cburst $CBURST1
# Specify sub classes
tc class add dev $IFACE parent 1:1 classid 1:101 htb rate $PRIORATE1 ceil $UPRATE quantum $QUANTUM1 burst $BURST1 cburst $CBURST1 prio 0
tc class add dev $IFACE parent 1:1 classid 1:102 htb rate $PRIORATE2 ceil $UPRATE quantum $QUANTUM2 burst $BURST2 cburst $CBURST2 prio 1
tc class add dev $IFACE parent 1:1 classid 1:103 htb rate $PRIORATE3 ceil $UPRATE quantum $QUANTUM3 burst $BURST3 cburst $CBURST3 prio 2
tc class add dev $IFACE parent 1:1 classid 1:104 htb rate $PRIORATE4 ceil $UPRATE quantum $QUANTUM4 burst $BURST4 cburst $CBURST4 prio 3
tc class add dev $IFACE parent 1:1 classid 1:105 htb rate $PRIORATE5 ceil $UPRATE quantum $QUANTUM5 burst $BURST5 cburst $CBURST5 prio 4
tc class add dev $IFACE parent 1:1 classid 1:106 htb rate $PRIORATE6 ceil $UPRATE quantum $QUANTUM6 burst $BURST6 cburst $CBURST6 prio 5
tc class add dev $IFACE parent 1:1 classid 1:107 htb rate $PRIORATE7 ceil $UPRATE quantum $QUANTUM7 burst $BURST7 cburst $CBURST7 prio 6
tc class add dev $IFACE parent 1:1 classid 1:108 htb rate $PRIORATE8 ceil $UPRATE quantum $QUANTUM8 burst $BURST8 cburst $CBURST8 prio 7
tc class add dev $IFACE parent 1:1 classid 1:109 htb rate $PRIORATE9 ceil $UPRATE quantum $QUANTUM9 burst $BURST9 cburst $CBURST9 prio 8

# Filter packets
tc filter add dev $IFACE parent 1:0 protocol ip prio 0 handle $MARKPRIO1 fw classid 1:101
tc filter add dev $IFACE parent 1:0 protocol ip prio 1 handle $MARKPRIO2 fw classid 1:102
tc filter add dev $IFACE parent 1:0 protocol ip prio 2 handle $MARKPRIO3 fw classid 1:103
tc filter add dev $IFACE parent 1:0 protocol ip prio 3 handle $MARKPRIO4 fw classid 1:104
tc filter add dev $IFACE parent 1:0 protocol ip prio 4 handle $MARKPRIO5 fw classid 1:105
tc filter add dev $IFACE parent 1:0 protocol ip prio 5 handle $MARKPRIO6 fw classid 1:106
tc filter add dev $IFACE parent 1:0 protocol ip prio 6 handle $MARKPRIO7 fw classid 1:107
tc filter add dev $IFACE parent 1:0 protocol ip prio 7 handle $MARKPRIO8 fw classid 1:108
tc filter add dev $IFACE parent 1:0 protocol ip prio 8 handle $MARKPRIO9 fw classid 1:109

# Add queuing disciplines
tc qdisc add dev $IFACE parent 1:101 sfq perturb 16 quantum $QUANTUM1
tc qdisc add dev $IFACE parent 1:102 sfq perturb 16 quantum $QUANTUM2
tc qdisc add dev $IFACE parent 1:103 sfq perturb 16 quantum $QUANTUM3
tc qdisc add dev $IFACE parent 1:104 sfq perturb 16 quantum $QUANTUM4
tc qdisc add dev $IFACE parent 1:105 sfq perturb 16 quantum $QUANTUM5
tc qdisc add dev $IFACE parent 1:106 sfq perturb 16 quantum $QUANTUM6
tc qdisc add dev $IFACE parent 1:107 sfq perturb 16 quantum $QUANTUM7
tc qdisc add dev $IFACE parent 1:108 sfq perturb 16 quantum $QUANTUM8
tc qdisc add dev $IFACE parent 1:109 sfq perturb 16 quantum $QUANTUM9




Spero si riescano a leggere.

Rispetto al wiki ho fatto le seguenti modifiche:
Portato le classi da 5 a 9, molte sono vuote, così è più semplice aggiungere una classe in mezzo ad altro due (esempio bittorrent sopra edonkey).
Purtroppo non c'ho capito abbastanza dei parametri quantum, burst e cburst e li ho messi un po' a [c,n]aso.

Inoltre il file shaper resetta le classi all'inizio, altrimenti eseguendolo due volte la seconda dà errore.

Inoltre ho patchato il kernel con l7-filter per il riconoscimento dei protocolli (piuttosto sono che sulle porte/indirizzi).

Tutto ciò è abbastanza semplice con gentoo (spam-spam).
La prima volta ho provato con il kernel 2.6.12 ma non funzionava. Ne ho approffittato per aggiornare al 2.6.13 ed è andato a posto. Sono abbastanza sicuro che non fosse un problema di configurazione.

Il ping di www.google.it passa da circa 2000 ms senza shaping a 150 ms con shaping.

E' possibile navigare tranquillamente, senza la necessità di limitare amule o simili.

Lo svantaggio è che si deve limitare la banda in uscita a circa il 90% della teorica.

giulianodadalt
09-11-2005, 21:17
Vediamo se riesco a dare il mio contributo sperando di non scrivere fesserie.
tutto questo blocco:#Flushing all rules,chains,tables,policies.

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

#Reset the default policies in the nat table.
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT

#Reset the default policies in the mangle table.
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT

#Flush all the rules in the filter and nat tables.
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

#Erase all chains that's not default in filter and nat table.
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

#Erase all chains and the rules of all tables.
for table in nat mangle filter
do
$IPTABLES -t $table -F
$IPTABLES -t $table -X
donea me sembra riassumibile in:$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
perchè iptables --help mi dice:--flush -F [chain] Delete all rules in chain or all chains
Volendo fare gli sborroni si può mettere un check qui:#MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forwardche diventa:if test `cat /proc/sys/net/ipv4/ip_forward` -ne 1
then
echo 1 > /proc/sys/net/ipv4/ip_forward
if [ $? -ne 0 ] ; then
exit 1
#io ho messo che esca, solo per fare un esempio, ma si può mettere qualcos'altro
fi
fi
PER r.
cosa significa "marca i pacchetti con iptables"?

Giuliano

r.
09-11-2005, 21:34
Significa che ogni pacchetto è "marchiato" (-J MARK --set-mark) da iptables secondo le regole definite.

Poi tc smista i pacchetti nelle classi a seconda di come sono marchiati (parte finale del secondo script, l'iniziale crea le classi). Ovviamente c'è una classe di default per i pacchetti non marchiati.

La "marchiatura" avviene (penso) scrivendo in un'apposita area dell'header del pacchetto.

Al Azif
09-11-2005, 22:06
Interessante discussione :)

CARVASIN
09-11-2005, 22:14
Interessante discussione :)
straquoto

peccato solo che non ci capisco molto, in ogni caso i miei complimenti! :)

HexDEF6
09-11-2005, 22:35
ecco qua lo scriptino del mio server casalingo... nato quando non sapevo nemmeno cos'era iptables e pian pianino e' cresciuto fino a diventare il ce**o.. ehm lo script attuale!


IPT="/sbin/iptables"

INT="eth1"

#cancella tutto!
$IPT -F
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -F -t mangle
$IPT -F -t nat
$IPT -X

#imposta le policy di default (considero la mia rete interna sicura)
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

#abilito l'ip_forward...
echo 1 > /proc/sys/net/ipv4/ip_forward

#...visto che mi serve per nattare
$IPT -t nat -A POSTROUTING -o $INT -j MASQUERADE -s 192.168.1.0/24 -d 0/0

#scarto i pacchetti invalidi
$IPT -A FORWARD -i $INT -m state --state INVALID -j DROP
#redirigo la porta 2000 sulla 22 del mio computer interno alla LAN
$IPT -t nat -A PREROUTING -p tcp --dport 2000 -i eth1 -j DNAT --to 192.168.1.1:22


#creo la catena firewall che logga e poi droppa
$IPT -N firewall
$IPT -A firewall -m limit --limit 5/minute -j LOG --log-prefix Firewall:
$IPT -A firewall -j DROP

#idem per la catena badflags
$IPT -N badflags
$IPT -A badflags -m limit --limit 5/minute -j LOG --log-prefix Badflags:
$IPT -A badflags -j DROP

#infine creo la catena silent che droppa senza loggare
$IPT -N silent
$IPT -A silent -j DROP

#accetto in IMPUT tutto quello che arriva da lo dalla mia rete locale
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i eth0 -s 192.168.1.0/255.255.255.0 -d 192.168.1.254 -p all -j ACCEPT
#loggo e droppo se qualche computer interno vuole attaccarsi ad un smtp server (ho un smtp sul server e quindi bisogna usarlo!)
$IPT -A FORWARD -s 192.168.1.0/255.255.255.0 -d 0/0 -p tcp --dport 25 -j LOG --log-prefix Virus:
$IPT -A FORWARD -s 192.168.1.0/255.255.255.0 -d 0/0 -p tcp --dport 25 -j DROP

@mando alla catena badflags tutti i pacchetti che hanno flag strambe
$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j badflags
$IPT -A INPUT -p tcp --tcp-flags ALL ALL -j badflags
$IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j badflags
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j badflags
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j badflags
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j badflags

#accetto alcuni icmp, anche i ping... ma fino ad un certo punto!
$IPT -A INPUT -p icmp --icmp-type 0 -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type 3 -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type 11 -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT
#gli altri vengono loggati e droppati
$IPT -A INPUT -p icmp -j firewall

#questi sono necessari se usate openvpn!
$IPT -A INPUT -i tun+ -j ACCEPT
$IPT -A FORWARD -i tun+ -j ACCEPT
$IPT -A INPUT -i tap+ -j ACCEPT
$IPT -A FORWARD -i tap+ -j ACCEPT

#accetto traffico su un casino di porte (http, https, pops, imaps, smtp, emule, bittorrent, una per openvpn ecc.)
$IPT -A INPUT -i $INT -s 0/0 -p udp --dport 8767 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p tcp --dport 443 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p tcp --dport 993 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p tcp --dport 995 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p tcp --dport 25 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p tcp --dport 6969 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p tcp --dport 15497 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p tcp --dport 6881 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p udp --dport 6881 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p tcp --dport 7662:7664 -j ACCEPT
$IPT -A INPUT -i $INT -s 0/0 -p udp --dport 7672 -j ACCEPT
#accetto anche le connessioni gia iniziate!
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#mando direttamente nell'oblio i pacchetti sulle porte usate da netbios
$IPT -A INPUT -p udp --sport 137:138 --dport 137:138 -j silent

roxy1974
10-11-2005, 14:53
Ragazzi la discussione e' interessante, veramente, pero' dico un mio parere, non si parla mai di CONNESSIONI.
A volte il problema del mulo oltre a saturare la banda e' che se non configurato bene, genera un sacco di connessioni che a volte bloccano o rallentano di molto le attivita' a qualsiasi livello di internet.
Non si riesce ad implemenatre una gestione delle connessioni? droppaggio delle connessioni, numero connessioni attive ecc., non ne ho mai visto parlare su discussioni di firewall anche se mi sembra di aver letto che il kernel in qualche maniera le supporti come gestione.

Il mio e' uno spunto .......... per migliorare cio' che avete fatto..almeno spero.

Roxy74

r.
10-11-2005, 16:13
Con tutti i client edonkey che ho visto puoi settare il numero massimo di connessioni. Comunque se fai lo shaping del traffico hai comunque una banda garantita per il traffico a più alta priorità.

roxy1974
10-11-2005, 16:33
Con tutti i client edonkey che ho visto puoi settare il numero massimo di connessioni. Comunque se fai lo shaping del traffico hai comunque una banda garantita per il traffico a più alta priorità.

Lo so' ,pero' se la cosa la vedi sotto l' ottica di una rete lan con a monte un firewall, puo' essere comodo dover in qualche caso DROPPARE connessioni o anche controllarle.
E' vero che neghi le porte con IPTABLES, pero' e' sempre un servizio in piu'.

_YTS_
10-11-2005, 18:48
ciao axl!!

allora sono tornato ora da una trasferta sono mezzo disintegrato...
cmq ti d ho un paio di consigli che reputo utili ed uso ovviamente in produzione...

per una migliore intellegibilità del firewall e l'uso delle regole ti consiglio di dividere il piu possibile le catene, es:

iptables -N manif #manutenzione lato remoto
ipt -N lanif #man lato lan
ipt -N p2p
ipt -N ssh
ipt -N ftp
ipt -N quello che vuoi

poi appendi le regole ad ogni catena che ti sei fatto...
la cosa interessante e loggare tutti gli scarti che hai in una catena.. almeno se rejetti qualcosa sai il perche e da dove lo scarti, altrimenti vai a caso...

ipt -A ssh -m state --state RELATED,ESTABLISHED -j ACCEPT
ipt -A ssh regolechevuoi j ACCEPT
ipt -A ssh -j LOG --log-prefix "[scarti ssh]"
ipt -A ssh -j REJECT

cosi diventa molto facile capire cosa c e che non va...

il reject è diverso dal drop... dai una letta in giro e poi capisci il perche..

ti consiglio di usare il -m multiport quando per uno stesso indirizzo devi specificare piu porte... questo migliora il parsing e la velocità di iptables.

ti puoi divertire usando il controllo del TTL per avere pacchetti su misura...

l'uso dei flags mi pare che tu l'abbia imparato.. bene.

il traffic shaping è essenziale per una corretta gestione della banda, gli script che ha postato .r mi sembrano carini.

bhe che altro dire... se non usi tunnel e proto4 e cose strane direi che va bene cosi.. oltre iptables non puo fare, puoi volendo usare dei moduli e catene per droppare virus e worm e stringhe malevole ecc...

puoi fare quello che vuoi..

e senza dubbio inoltre utile integrare nel firewall una gestione start stop status
molto comoda e utile per flushing improvvisi.

ciao!!

r.
10-11-2005, 21:45
@roxy74: Non capisco cosa intendi. Tu vuoi un modo per limitare a priori il numero di connessioni generate dal mulo o solo impedire che vada ad intaccare il resto del traffico?

Perché nel primo caso la cosa credo sia possibile ma molto difficile, nel secondo ti assicuro che gli script che ho postato funzionano bene (anche con client emule sulla rete interna).

Poi con i filtri layer 7 poi distinguere il traffico in base al protocollo invece che in base alle porte, il che potrebbe essere utile a bloccare anche i "virus e worm e stringhe malevole" di cui parlava _YTS_

Axl_Mas
10-11-2005, 23:32
ciao axl!!
la cosa interessante e loggare tutti gli scarti che hai in una catena.. almeno se rejetti qualcosa sai il perche e da dove lo scarti, altrimenti vai a caso...

Ciao!!
Prima di implementare il logging vorrei chiederti una cosa che non ho trovato in rete, come faccio a stabilire la dimensione massima del file log?


il reject è diverso dal drop... dai una letta in giro e poi capisci il perche..

Lo sò che è diverso ed è per questo che uso il drop!
In reject è comunque una risposta,rendo visibile il mio pc e genero traffico in uscita!Lo userò soltanto per bloccare il traffico dalla lan al server!
Perchè mi consigli di usarlo?


ti consiglio di usare il -m multiport quando per uno stesso indirizzo devi specificare piu porte... questo migliora il parsing e la velocità di iptables.

Lo faccio subito, grazie!!!


puoi volendo usare dei moduli e catene per droppare virus e worm e stringhe malevole ecc...

Per droppare virus e worm penso che basti bloccare le porte che usano, per le stringhe malevole cosa sono e cosa mi consigli?


e senza dubbio inoltre utile integrare nel firewall una gestione start stop status
molto comoda e utile per flushing improvvisi.

Come si fa?

Grazie mille per l'intervento _YTS_ ! :)

_YTS_
11-11-2005, 18:41
il reject è diverso perche manda un rst per terminare la connessione stabilita.
può effettivamente essere usato per fare un fingerprintig dell os, tuttavia se limiti con -m limit i vari flags non hai di questi problemi.

te lo consiglio ovviamente nelle catene ove si necessita di un forte logging per avere un riscontro nel syslog o dove vuoi di quello che sta succedendo.

non è sempre male il reject, ti fa consumare un poco di cpu in piu, se non configurato a dovere può essere la causa di attacchi DoS ecc.. tuttavia in certe catene è "quasi" necessario.

ricorda di chiudere ogni catena con un drop o reject o altrimenti settare una policy di default su DROP.

la dimensione dei file di log dipende dalla quantità di scarti che andrai a loggare... di default logga su syslog che viene rotato da logrotate o altro.
ovvio che facendo piu catene avrai una migliore capacità di loggare e/o tralasciare addirittura il log in quanto non necessario.

per i worm e virus e vero quello che tu dici, tuttavia non sempre chiudendo una porta risolvi il problema.
dal kernel 2.6.14 mi pare di aver notato un aumento di moduli all'interno del kernel riguardante la parte di filtering di iptables, tra questi compare il string che fino ad ora era usabile solo su 2.4.
il modulo string permette di controllare all'interno di un pacchetto facendo un match appunto di una stringa, se ad esempio trova un cmd.exe potrai farglielo droppare.
ovvio che per stringa intendo qualsiasi cosa passi in un pacchetto non crittato ovviamente. anche una pass in chiaro.
cmq non te lo consiglio a meno che se non per sperimentare.

per non far prendere virus a macchine windows dietro gateway linux vi sono altri mille modi...

per lo start stop e status e quello che vuoi basta che usi un costrutto in case ed esac programmando in bash... quello che ho detto sembra un casino, in effetti dopo un po di prove diventa molto semplice e di una efficacia inaudita...
mi creo uno script al giorno ormai... ma sono ben lungi dall'essere uno che scrive codice..

cmq qualcuno dei nostri amici ha postato un po di stringhe utili, dai un occhio li.


ciaooo

CARVASIN
14-11-2005, 13:34
chiedo qua che vedo molta esperienza! :p

allora ho problemi di lowid con amule...
ho trovato queste 3 regole:

iptables -A INPUT -p tcp --dport XX -j ACCEPT
iptables -A INPUT -p udp --dport XX+3 -j ACCEPT
iptables -A INPUT -p udp --dport YY -j ACCEPT

che sta a significare quel +3?devo scrivere "nporta+3" o e' una sorta di somma?

e poi dice di mettere questa iptables -P OUTPUT ACCEPT

grazie

ciao

Axl_Mas
14-11-2005, 14:37
chiedo qua che vedo molta esperienza! :p

allora ho problemi di lowid con amule...
ho trovato queste 3 regole:

iptables -A INPUT -p tcp --dport XX -j ACCEPT
iptables -A INPUT -p udp --dport XX+3 -j ACCEPT
iptables -A INPUT -p udp --dport YY -j ACCEPT

che sta a significare quel +3?devo scrivere "nporta+3" o e' una sorta di somma?

e poi dice di mettere questa iptables -P OUTPUT ACCEPT


ciao

su XX e YY devi mettere il numero delle porte che hai scelto di far usare ad amule!Se non le hai modificate dalle impostazioni del programma apri le porte standard:

IPTABLES -A INPUT -p tcp --dport 4662 -j ACCEPT
IPTABLES -A INPUT -p udp --dport 4665 -j ACCEPT
IPTABLES -A INPUT -p udp --dport 4672 -j ACCEPT

XX+3 indica che se hai scelto la porta tcp 4662 devi aprire anche la 4662+3=4665

Per far funzionare amule devi usare anche questi altri comandi:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT

Cosi funzionerà senza problemi in highid! ;)

CARVASIN
14-11-2005, 14:41
su XX e YY devi mettere il numero delle porte che hai scelto di far usare ad amule!Se non le hai modificate dalle impostazioni del programma apri le porte standard:

IPTABLES -A INPUT -p tcp --dport 4662 -j ACCEPT
IPTABLES -A INPUT -p udp --dport 4665 -j ACCEPT
IPTABLES -A INPUT -p udp --dport 4672 -j ACCEPT

XX+3 indica che se hai scelto la porta tcp 4662 devi aprire anche la 4662+3=4665

Per far funzionare amule devi usare anche questi altri comandi:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT

Cosi funzionerà senza problemi in highid! ;)
allora era proprio la somma (nn ci avrei mai scommesso).
le altre due regole lo sapevo ;) (una gia' la uso)

grazie mille!

ciao! (e buon lavoro per il tuo firewall!)

Axl_Mas
16-11-2005, 11:18
Inoltre ho patchato il kernel con l7-filter per il riconoscimento dei protocolli (piuttosto sono che sulle porte/indirizzi).

Tutto ciò è abbastanza semplice con gentoo (spam-spam).
La prima volta ho provato con il kernel 2.6.12 ma non funzionava. Ne ho approffittato per aggiornare al 2.6.13 ed è andato a posto. Sono abbastanza sicuro che non fosse un problema di configurazione.

Il ping di www.google.it passa da circa 2000 ms senza shaping a 150 ms con shaping.

E' possibile navigare tranquillamente, senza la necessità di limitare amule o simili.

Lo svantaggio è che si deve limitare la banda in uscita a circa il 90% della teorica.

Senti un paio di domande...
1)se non avessi l'esigenza di riconoscere i pacchetti ma semplicemente di dare priorità diverse alle diverse porte potrei fare tutto da iptables o dovrei comunque installare il programma e patchare il kernel?

2)si possono settare le priorità anche in output?

r.
16-11-2005, 11:46
Senti un paio di domande...
1)se non avessi l'esigenza di riconoscere i pacchetti ma semplicemente di dare priorità diverse alle diverse porte potrei fare tutto da iptables o dovrei comunque installare il programma e patchare il kernel?

2)si possono settare le priorità anche in output?

1) La patch al kernel serve solo per abilitare il riconoscimento del protocollo, quindi non ti serve se ti basi solo sulle porte. Comunque il kernel deve avere delle opzioni abilitate (QoS and fair queuing). Inoltre lo shaping vero e proprio lo fa il comando "tc",che in gentoo è parte del pacchetto iproute2 (e penso anche in altre distribuzioni).

2) Si possono settare SOLO le priorità in output.

Allora tu mi chiederai: perché il traffic shaping in output migliora la gestione della banda in ingresso?

Perché se saturi la banda in uscita non puoi più mandare le richieste ai server http (per esempio), inoltre per ogni pacchetto ricevuto devi mandare un ACK, altrimenti chi te l'ha mandato non sa se ti è arrivato o meno. Se gli ACK in uscita vengono scartati, i pacchetti corrispondenti ti vengono rispediti e inoltre il server suppone che vi sia una congestione e riduce la velocità di invio.

(se ho detto castronate correggetemi).

CARVASIN
18-11-2005, 09:07
volevo chiedere un'altra cosa riguardo amule...devo anche abilitare il traffico sulla porta del server?! nel mio caso sarebbe la 4661 (razorback 2.0)...mi potreste dire la regola da inserire? grazie!

Axl_Mas
18-11-2005, 10:30
volevo chiedere un'altra cosa riguardo amule...devo anche abilitare il traffico sulla porta del server?! nel mio caso sarebbe la 4661 (razorback 2.0)...mi potreste dire la regola da inserire? grazie!

No tranquillo!Se lasci tutto aperto in output i comandi che hai bastano!Se la policy di output invece fosse su drop la cosa sarebbe problematica e dovresti aprire un sacco di porte...

CARVASIN
18-11-2005, 10:43
No tranquillo!Se lasci tutto aperto in output i comandi che hai bastano!Se la policy di output invece fosse su drop la cosa sarebbe problematica e dovresti aprire un sacco di porte...


queste sono le regole che utilizzo, se vuoi dargli un'occhiata ne sarei felice (sono regole che ho trovato in rete, non c'e' niente di mio...sono ignorante in materia)

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 4662 -j ACCEPT
iptables -A INPUT -p udp --dport 4665 -j ACCEPT
iptables -A INPUT -p udp --dport 4672 -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -j DROP
iptables -I INPUT 7 -i lo -j ACCEPT

preso spunto dal wiki di ubuntu-it e uil wiki di amule...piu' uno script che fa partire il tutto all'avvio...piu' gli immancabili aiuti di tutti voi! :)

un'ultima cosa... e' un po che cerco su internet come settare le regole per bittornado (client bittorrent), ma non ho trovato praticamente nulla, solo alcune regole ma che non credo vadano bene per me (in ogni caso richidevano l'inserimento di indirizzi di porte non specificate, che io non conosco).
quello che credo di aver capito e' creare una regola che abiliti il traffico tcp sul range di porte che va da 6881 a 6999. vado bene se inserisco questa?

iptables -A INPUT -p tcp --dport 6881-6999 -j ACCEPT

non so come si inserisce un range di porte...sto solo ipotizzando, aspetto la vostra parola! :)

grazie mille per l'aiuto!!

ciao

r.
18-11-2005, 11:51
Per il multiport:

iptables -A INPUT -p tcp -m multiport --dports 6881:6999 -j ACCEPT

Axl_Mas
18-11-2005, 12:40
Io per vedere certi siti ho dovuto aggiungere:

iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

(l'ho presa da qui qui (http://en.tldp.org/HOWTO/IP-Masquerade-HOWTO/mtu-issues.html) )

SEI UN GRANDE!!!!!NON TI RENDI CONTO QUANTO TI SONO GRATO!!!!!!!!!

Oggi ho installato mandriva 2006.0, ho installato il mio firewall e....sul client riuscivo a visitare un sito su dieci.Inizio a cambiare dns, fare controlli ecc ecc fino a quando non mi è tornato in mente il tuo consiglio: metto questa stringa e...MAGIA TUTTO TORNA A FUNZIONARE SUL CLIENT!!!!!

Grazie davvero se non mi avessi dato questo suggerimento avrei bestemmiato per settimane prima di riuscire a risolvere il problema!!!

ps: sulla pagina principale ho aggiornato lo script con le ultime modifiche:
-blocco di portscanner avanzati
-policy drop su forward e apertura manuale delle porte necessarie (ancora in testing!)


iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT
iptables -I INPUT 7 -i lo -j ACCEPT

Sarebbe bene iniziare lo script eliminando tutte le regole vecchie, potresti copiare la parte "flushing rules" dallo script in prima pagina!
Le policy di default mettile subito dopo:
"iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT"

il "7" a cosa serve?
usi davvero ssh?Se non lo utilizzi cancella quella riga, non è affato il max per la sicurezza!

CARVASIN
18-11-2005, 15:50
Sarebbe bene iniziare lo script eliminando tutte le regole vecchie, potresti copiare la parte "flushing rules" dallo script in prima pagina!
Le policy di default mettile subito dopo:
"iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT"

il "7" a cosa serve?
usi davvero ssh?Se non lo utilizzi cancella quella riga, non è affato il max per la sicurezza!
allora... mi pare che una volta provai ad eliminare la porta ssh ma credo che senza di quella non mi funzioni la connessione

dal sito di ubuntu-it

"Consentire l'ingresso su porte specifiche

Potete iniziare bloccando il traffico, ma se state lavorando con SSH, avete bisogno di permettere il traffico su SSH prima di bloccare tutto.

Per consentire il traffico in ingresso sulla porta 22 (porta standard per il protocollo SSH), potete dire a iptables di consentire tutto il traffico TCP sulla porta 22 per la vostra scheda di rete.

# iptables -A INPUT -p tcp -i eth0 --dport ssh -j ACCEPT"

il 7 serve ad immettere quella regola (iptables -I INPUT 7 -i lo -j ACCEPT) subito dopo la settima regola, poiche' quella immediatamente successiva e' la regola che blocca tutto il traffico. questo e' sempre per via del wiki di ubuntu-it da cui ho preso le prime regole per il firewall. ti posto cosa c'e' scritto

"Editare le regole di Iptables

L'unico problema con le impostazioni effettuate è che anche la porta loopback è bloccata. Potevamo impostare la regola DROP solo per l'interfaccia eth0 specificando -i eth0, ma possiamo anche aggiungere una regola per l'interfaccia loopback. Aggiungendo ora la regola in append, sarebbe inutile in quanto la regola precedente ha già bloccato tutto il traffico. Abbiamo la necessità di inserire la nuova regola nella quarta linea.

# iptables -I INPUT 4 -i lo -j ACCEPT" (suppongo tu lo sappia, comunque e' la regola per la porta loopback)

poi e' diventato 7 perche' avevo aggiunto le regole per amule

per quanto riguarda la regola postata da r. ancora devo vedere se funziona (ma suppongo di si) :)

grazie per le risposte

PS: se non vi va che disturbo nel 3d ditemelo che non c'e' nessun problema

ciao

edit: ho tolto la regole per ssh e va tutto bene, ho inserito quella per le porte di bittorrent...sembrerebbe tutto ok anche li

grazie!!!

Pirulicchio
19-11-2005, 00:17
Ma sulla porta 53 non basta solo il protocollo UDP o sto tirando una fregnaccia??
Inoltre dato che ci sono se qualcuno sa che porte usa clamav per aggiornarsi e quindi da lasciare aperte glie ne sarei grato...

Saluti...

_YTS_
19-11-2005, 12:20
si basta la 53 udp se il pacchetto non ha dimensioni diverse dallo standard, altrimenti si deve aprire una connessione tcp sempre sulla 53 per lo scambio di dati.
io apro sempre entrambe.

ciao

Axl_Mas
26-11-2005, 15:11
Spero si riescano a leggere.

Rispetto al wiki ho fatto le seguenti modifiche:
Portato le classi da 5 a 9, molte sono vuote, così è più semplice aggiungere una classe in mezzo ad altro due (esempio bittorrent sopra edonkey).
Purtroppo non c'ho capito abbastanza dei parametri quantum, burst e cburst e li ho messi un po' a [c,n]aso.

Inoltre il file shaper resetta le classi all'inizio, altrimenti eseguendolo due volte la seconda dà errore.

Inoltre ho patchato il kernel con l7-filter per il riconoscimento dei protocolli (piuttosto sono che sulle porte/indirizzi).

Tutto ciò è abbastanza semplice con gentoo (spam-spam).
La prima volta ho provato con il kernel 2.6.12 ma non funzionava. Ne ho approffittato per aggiornare al 2.6.13 ed è andato a posto. Sono abbastanza sicuro che non fosse un problema di configurazione.

Il ping di www.google.it passa da circa 2000 ms senza shaping a 150 ms con shaping.

E' possibile navigare tranquillamente, senza la necessità di limitare amule o simili.

Lo svantaggio è che si deve limitare la banda in uscita a circa il 90% della teorica.


Ciao r. ho deciso di patchare il kernel!
Ma dopo averlo fatto devo ricompilarlo immagino?
In questo caso visto che non l'ho mai fatto forse è meglio che la prima volta lo ricompili senza patch in modo di imparare bene come si fa e poi provare a compilarlo con la patch?

r.
26-11-2005, 16:06
Si devi ricompilarlo.
Però se metti il layer7 filter fra i moduli, basta un modules_install e poi modprobe $nomemodulo (non lo ricordo, io ho compilato staticamente).

Per ricompilare il kernel leggiti una guida, specie se specifica per la tua distro. La parte più critica è la configurazione del boot loader: lascia sempre il kernel precedente e aggiungi una voce per quello nuovo, così se si pianta poui sempre tornare al precedente.

Comunque se vuoi usare bene linux ricompilare il kernel è qualcosa che è meglio saper fare.

W.S.
27-11-2005, 12:29
Ciao!
Bel lavoro, non facile aggiungere qualcosa :D

Mi è venuto in mente il controllo sull'utente proprietario del processo che genera il pacchetto, soprattutto per le porte > 1024 se non abbiamo processi di altri utenti. In questo modo evitiamo o quantomeno rallentiamo eventuali "scalate di privilegi" di una compromissione dei nostri servizi.

la MATCH EXTENSIONS in questione è "owner".

Bye

Axl_Mas
27-11-2005, 13:15
Ciao!
Bel lavoro, non facile aggiungere qualcosa :D

Mi è venuto in mente il controllo sull'utente proprietario del processo che genera il pacchetto, soprattutto per le porte > 1024 se non abbiamo processi di altri utenti. In questo modo evitiamo o quantomeno rallentiamo eventuali "scalate di privilegi" di una compromissione dei nostri servizi.

la MATCH EXTENSIONS in questione è "owner".

Bye

Grazie!!!!
Mi leggo qualche how-to e aggiungo subito!

Axl_Mas
27-11-2005, 14:55
r. mi sono addestrato :) a compilare il kernel!Ora xò su netfilter.org non trovo la patch da installare!Me la potresti indicare? grazie!!

Axl_Mas
27-11-2005, 23:13
Patch installata!!!
Stanotte lascio il kernel a compilare e domani.......si iniziano le prove per il traffic shaping!!!! :lamer:

]Rik`[
27-11-2005, 23:19
buon lavoro :D

Axl_Mas
28-11-2005, 09:59
r. ma devo patchare e ricompilare anche iptables???? :cry:

W.S.
28-11-2005, 20:08
Scusa per il ritardo, ma la patch per l'owner? Non l'ho mai usata ma nn credo sia una patch, dovrebbe essere compresa nel kernel tra le opzioni disponibili (ipt_owner), al max c'è da ricompilare se non è già compresa.

Domattina provo (ora non sono sul mio pc).

bye!

Axl_Mas
28-11-2005, 21:12
Ho provato ad utilizzare i tuoi script ma ho questa risposta:


[root@bart axl]# ./axlsfirewall
iptables v1.3.3: Couldn't load match `layer7':/lib/iptables/libipt_layer7.so: cannot open shared object file: No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
iptables v1.3.3: Couldn't load match `layer7':/lib/iptables/libipt_layer7.so: cannot open shared object file: No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
./axlsfirewall: line 307: -----------------------------------------------------------: command not found
./axlsfirewall: line 310: Constants: command not found
RTNETLINK answers: No such file or directory
[root@bart axl]#


Ho sbagliato a ricompilare il kernel o devo patchare e ricompilare anche iptables?

r.
28-11-2005, 21:29
Io quel file ce l'ho. Credo di aver ricompilato iptables dopo aver installato, ma sinceramente non ricordo.

qui http://l7-filter.sourceforge.net/L7-HOWTO-Netfilter dicono di applicare una patch a iptables. Gentoo lo fa in automatico, la tua distro non so.

Axl_Mas
29-11-2005, 10:12
Io quel file ce l'ho. Credo di aver ricompilato iptables dopo aver installato, ma sinceramente non ricordo.

qui http://l7-filter.sourceforge.net/L7-HOWTO-Netfilter dicono di applicare una patch a iptables. Gentoo lo fa in automatico, la tua distro non so.


Ok patcherò e ricompilerò anche iptbales!
Però ho un dubbio....con mandriva ho i pacchetti installati come rpm, prima di ricompilare devo rimuovere l'rpm di iptables?

r.
29-11-2005, 12:01
Ti dico come farei io:


Cercherei che non esista già un iptables con la patch in rpm, che si possa installare sulla Mandriva
Scaricherei il file rpm dei sorgenti (src.rpm) e cercherei di capire se è possibile applicare la patch a quello, per poi ricreare un .src.rpm da usare per l'installazione
Scaricherei il file .src.rpm, facendo attenzione che sia la stessa versione degli iptables che hai già, lo scompatto, applico la patch, compilo e copio solo il file libipt_layer7.so dove lui lo cerca
Come ultima ratio, proverei ad installare i sorgenti con la patch applicata, ma qui secondo me rischi che vada in conflitto con l'istallazione esistente, dipendenze etc.

Axl_Mas
29-11-2005, 15:42
FATTO!!!!!!!!

Ho dovuto patchare e ricompilare il kernel,patchare e ricompilare iptables, installare le librerie e ora funziona!!!!!!!!!

Con il riconoscimento dei protocolli potrò anche migliorare il filtraggio in uscita di skype e amule (che per quanto riguarda l'output sono molto strxxzi da configurare visto che usano un grossissimo range di porte!!!!!

Mi metto al lavoro e poi vi posterò lo script completo!!!!!

Grazi di cuore r.!!!!Senza i tuoi consigli il traffic shaping me lo potevo scordare!!!

Axl_Mas
25-12-2005, 23:28
Nella prima pagina ho postato lo script completo del traffic shaping!
Tutto funziona benissimo ma non riesco a capire una cosa....visto che ora ho la possibilità di riconoscere i pacchetti volevo usare il layer7 per permettere il traffico in uscita di tutti i pacchetti di amule.
Ho usato questa regole:
$IPTABLES -A OUTPUT -m layer7 --l7proto edonkey -j ACCEPT

Ma amule non si connetteva.
Poi guardando la documentazione c'era scritto che che le regole andavano usate sia in entrata che in uscita per funzionare quindi ho inserito

$IPTABLES -A INPUT -m layer7 --l7proto edonkey -j ACCEPT
$IPTABLES -A OUTPUT -m layer7 --l7proto edonkey -j ACCEPT

Ma ancora non va!!!
Lo script si carica senza errori ma il riconoscimento dei pacchetti nella tabella filter non funziona e amule non va!
Nella tabella mangle invece tutto funziona regolare!
r. aiutami tu!!!! :ave:

Bahamut Zero
26-12-2005, 14:45
vedi se questo può esserti d'aiuto http://www.amule.org/wiki/index.php/Firewall

r.
01-01-2006, 09:07
Nella prima pagina ho postato lo script completo del traffic shaping!
Tutto funziona benissimo ma non riesco a capire una cosa....visto che ora ho la possibilità di riconoscere i pacchetti volevo usare il layer7 per permettere il traffico in uscita di tutti i pacchetti di amule.
Ho usato questa regole:
$IPTABLES -A OUTPUT -m layer7 --l7proto edonkey -j ACCEPT

Ma amule non si connetteva.
Poi guardando la documentazione c'era scritto che che le regole andavano usate sia in entrata che in uscita per funzionare quindi ho inserito

$IPTABLES -A INPUT -m layer7 --l7proto edonkey -j ACCEPT
$IPTABLES -A OUTPUT -m layer7 --l7proto edonkey -j ACCEPT

Ma ancora non va!!!
Lo script si carica senza errori ma il riconoscimento dei pacchetti nella tabella filter non funziona e amule non va!
Nella tabella mangle invece tutto funziona regolare!
r. aiutami tu!!!! :ave:


Non credo possa funzionare, perché per riconoscere il protocollo devono passare un certo numero di pacchetti, ma visto che la policy di default è deny non passa nulla.

Axl_Mas
07-01-2006, 23:15
Non credo possa funzionare, perché per riconoscere il protocollo devono passare un certo numero di pacchetti, ma visto che la policy di default è deny non passa nulla.

In mezzo alle faq ho trovato questo:

Q: I want to ACCEPT several protocols, DROPing the rest, but when I try, it drops (almost) everything!

This is similar to the previous answer. If you try do this, you will block all TCP handshakes and thus all TCP connections. In addition, you will block all UDP connections that can't be identified on the first packet.

Praticamente è la stessa cosa che mi hai detto te! :cry:

andrewxx
10-01-2006, 22:53
Scusassero la domanda idotica :p
ho installato ubunto 5.10 e configurato il modem usb ericsson hm120dp quello di alice..... mica poco per un novello :D
ora vorrei il firewall, e quindi chiedo........ :D
se copio la pagina principale del tread, nel terminale poi il firewall funziona???? e se si, parte ad ogni avvio di linux????

linciaggio mode on :D

r.
28-02-2006, 21:24
@andrewxx: al limite dovrai ricompilare il kernel. Fai un tentativo e poi ritorna qui (anche se lo so che è passato tempo)

@axl_mas ho provato il tuo script (in effetti il mio nella parte firewall aveva dei buchi nella protezione della rete...

Ci sono delle cose che non ho capito, anche perché non l'ho letto bene:

a che serve ETH_NET?

Ho notato che usi DNS "statici", io ho modificato lo script in modo che li prenda da /etc/resolv.conf (che in genere è dinamicamente ricreato in genere dagli script di connessione e da dhcpcd).

Se uno ha due DNS (in genere bastano e avanzano):

DNS1=`cut -f 2 -d " " /etc/resolv.conf | tail -n 1`
DNS2=`cut -f 2 -d " " /etc/resolv.conf | head -n 1`

(bisogna ovviamente commentare le righe relative al DNS3).

Poi dà errore quando cerca di fare modprobe, ma io quelli li ho statici nel kernel. Non so se c'è un modo di dire a modprobe di non ritornare errore se la feature è compilata staticamente, non credo, ma magari qualche guru se ne esce con un'idea (ci sarebbe /proc/config.gz, ma non tutti i kernel ce l'hanno).

Axl_Mas
03-03-2006, 23:54
@andrewxx: al limite dovrai ricompilare il kernel. Fai un tentativo e poi ritorna qui (anche se lo so che è passato tempo)

@axl_mas ho provato il tuo script (in effetti il mio nella parte firewall aveva dei buchi nella protezione della rete...

Ci sono delle cose che non ho capito, anche perché non l'ho letto bene:

a che serve ETH_NET?

Ho notato che usi DNS "statici", io ho modificato lo script in modo che li prenda da /etc/resolv.conf (che in genere è dinamicamente ricreato in genere dagli script di connessione e da dhcpcd).

Se uno ha due DNS (in genere bastano e avanzano):

DNS1=`cut -f 2 -d " " /etc/resolv.conf | tail -n 1`
DNS2=`cut -f 2 -d " " /etc/resolv.conf | head -n 1`

(bisogna ovviamente commentare le righe relative al DNS3).

Poi dà errore quando cerca di fare modprobe, ma io quelli li ho statici nel kernel. Non so se c'è un modo di dire a modprobe di non ritornare errore se la feature è compilata staticamente, non credo, ma magari qualche guru se ne esce con un'idea (ci sarebbe /proc/config.gz, ma non tutti i kernel ce l'hanno).

Ciao!!Sono contento che avete riaperto questo thread!!!
ETH_NET hai ragione non serve a niente!!!E' la scheda ethernet a cui è collegato il modem ma non mi serve specificarla quindi cancello subito!

Ho messo i DNS statici specificandoli nello script per una maggiore sicurezza, ora provo il tuo metodo.....se và è molto più flessibile mantenendo la stessa sicurezza!