# [Tip] Uno script di init per iptables

## Cazzantonio

A giro per la rete (e per le guide gentoo) ho raccattato un po' di script di init per iptables e ne ho fatto un copia&incolla ragionato...

Siccome tanta gente spesso posta topic in cerca di una configurazione per il loro firewall casalingo, questo penso possa fare al caso loro... 

[AGGIORNATO 01/05/2007]

Changelog:

- Lo script di init non contiene più regole preimpostate ma si appoggia esclusivamente ad uno script esterno per le regole da caricare

- Lo script di esempio per le regole è ora un po' più interattivo e contiene alcuni parametri da riga di comando con cui chiamare più set di regole. Date un'occhiata allo script ma è abbastanza intuitivo.

- La directory di default per lo script è ora /etc/firewall e non più /etc/conf.d in quanto ritengo sia più appropriata

Va copiato il /etc/init.d/ con il nome che preferite (io l'ho chiamato "muro_di_fuoco") e aggiunto al runlevel che volete

poi dategli i permessi giusti con 

```
chmod 755 /etc/init.d/muro_di_fuoco

chown root:root /etc/init.d/muro_di_fuoco
```

Ha delle opzioni che sono molto intuitive e che sono descritte in fondo allo script  :Wink: 

In ogni caso basta lanciare 

```
/etc/init.d/muro_di_fuoco showoptions
```

 per vedere le opzioni

Create anche una cartella /etc/firewall

```
mkdir /etc/firewall

chmod 700 /etc/firewall
```

per lo script contenente le regole da caricare. Se preferite potete specificare una directory diversa nello script di init.

in /etc/firewall/muro_di_fuoco potete scrivere le vostre regole personalizzate (sotto forma di script eseguibile... ) che verranno caricate all'avvio dello script

In questo stesso post trovate un esempio di file di configurazione.

In pratica in questo modo avete un modo veloce e "user friendly" per caricare le vostre regole del firewall (con la possibilità di fare start, stop, restart, block_all, status etc... )

```

#!/sbin/runscript

#Defininco la posizione degli eseguibili di iptables

IPTABLES=/sbin/iptables

IPTABLESSAVE=/sbin/iptables-save

IPTABLESRESTORE=/sbin/iptables-restore

#file di configurazione del firewall

#deve essere uno script eseguibile con una sintassi bash

FIREWALL=/etc/firewall/muro_di_fuoco

FIREWALL_SAVE=/etc/firewall/firewall.rules

#Interfacce

IFACE=eth0 #Interfaccia esterna (internet)

LFACE=eth1 #Interfaccia interna (lan)

opts="${opts} showstatus block_all save restore showoptions"

depend() {

  need net

}

start() {

  ebegin "Caricamento regole del firewall"

  if [ -e "${FIREWALL}" ]; then

    $FIREWALL

    eend $?

  else

    eend 1 "${FIREWALL} non esiste"

    return 1

  fi

}

stop() {

  ebegin "Arresto del firewall (tutte le regole su ACCEPT)"

  

  #Clear all chains in all tables

  $IPTABLES -F

  $IPTABLES -F -t mangle

  $IPTABLES -F -t nat

  $IPTABLES -X

  $IPTABLES -X -t mangle

  $IPTABLES -X -t nat

  

  #Set Defaults to ACCEPT

  $IPTABLES -P INPUT ACCEPT

  $IPTABLES -P OUTPUT ACCEPT

  $IPTABLES -P FORWARD ACCEPT

  eend $?

}

showstatus() {

  ebegin "Status"

  $IPTABLES -L -n -v --line-numbers

  einfo "NAT status"

  $IPTABLES -L -n -v --line-numbers -t nat

  eend $?

}

block_all() {

  ebegin "Impostazione delle regole di BLOCCO TOTALE in entrata e in uscita"

  

  #Clear all chains and accept packets only from localhost

  $IPTABLES -F

  $IPTABLES -F -t mangle

  $IPTABLES -F -t nat

  $IPTABLES -X

  $IPTABLES -X -t mangle

  $IPTABLES -X -t nat

  $IPTABLES -P FORWARD DROP

  $IPTABLES -P INPUT   DROP

  $IPTABLES -P OUTPUT  DROP

  $IPTABLES -A INPUT -i lo -j ACCEPT

  $IPTABLES -A OUTPUT -o lo -j ACCEPT

  eend $?

}

save() {

  ebegin "Salvataggio delle regole del firewall"

  $IPTABLESSAVE > $FIREWALL_SAVE

  eend $?

}

restore() {

  ebegin "Ripristino delle regole del firewall"

  $IPTABLESRESTORE < $FIREWALL_SAVE

  eend $?

}

restart() {

  svc_stop; svc_start

}

showoptions() {

  echo "Usage: $0 {start|save|restore|block_all|stop|restart|showstatus}"

  echo "start)      Avvia le regole impostate in ${FIREWALL}"

  echo "stop)       Cancella le regole e imposta tutto su ACCEPT"

  echo "restart)    Arresta e riavia il firewall"

  echo "save)       Salva le regole in ${FIREWALL_SAVE}"

  echo "restore)    Ripristina le regole da ${FIREWALL_SAVE}"

  echo "showstatus) Mostra lo status del firewall" 

  echo "block_all)  Blocca tutti i pacchetti (accetta solo pacchetti da localhost)"

}

```

Siccome è casalingo e copiato-incollato potrebbe avere dentro degli errori di cui non mi sono accorto... a occhio mi sembra di no, ma suggerimenti sono bene accetti  :Wink: 

Questo che segue è un esempio di regole personalizzate da aggiungere in /etc/firewall/muro_di_fuoco (ricordatevi di rendelo eseguibile con un chmod 700)

Se volete potete anche aggiungerlo al $PATH e chiamarlo da terminale come un qualsiasi programma. In questo caso la cosa migliore è aggiungere questo link

```
ln -s /etc/firewall/muro_di_fuoco /usr/local/sbin/muro_di_fuoco
```

in modo da non dover inserire il path completo ogni volta che viene lanciato.

Vengono definite diverse catene sia in entrata che in uscita (potete applicarle o meno a vostro piacimento... di default ne sono applicate ben poche) e vengono lasciati uscire anche i pacchetti INVALID (in modo da consentirvi di effettuare dei portscan   :Wink:  ).

Vi consiglio di cambiare la porta di ssh e di spostarla da quella di default (22) verso una più alta (che so.... > 1024 e < 65535 sicuramente) che è molto più sicuro...

Per aggiungere le catene al firewall modificate o aggiungete le funzioni nella sezione #FUNZIONI. In alternativa potete direttamente modificare la parte finale dello script ma non ve lo consiglio

Se avete bisogno di aiuto per definire le regole contattatemi pure via pm (non ne abusate però!  :Wink:  )

[EDIT]AGGIORNAMENTO 01/05/2007: 

Ho Modificato leggermente questo script in modo da renderlo un po' più interattivo. Adesso accetta paramentri da riga di comando (se non specificati carica un set di regole di default). E' possibile creare, nell'apposita sezione, delle funzioni contenenti le chiamate alle catene opportune da abilitare; in questo modo si può ignorare quanto riportato nella parte finale dello script e leggere solamente le prime cento righe.

E' solo un aggiornamento estetico; le funzionalità rimangono inalterate.

[/EDIT]

```
#!/bin/sh

#Defininco la posizione degli eseguibili di iptables

IPTABLES=/sbin/iptables

#Interfacce

IFACE=eth1 #Interfaccia esterna

LFACE=eth0 #Interfaccia interna

#Nameservers

NAMESERVER_1=208.67.222.222

NAMESERVER_2=208.67.220.220

#Default gateway

GATEWAY=192.168.0.1

#Definizioni delle porte

SSH_PORT=22

P_PORTS=0:1023

UP_PORTS=1024:65535

ML_BITTORRENT=6882

BITTORRENT_PORTS=6881:6889 

BITTORRENT_TRACKER_PORT=6969 

MLDONKEY_PORT_tcp=4662

MLDONKEY_PORT_udp=4666

KAD_PORT=20299

OVERNET_PORT=14006

GNUTELLA_PORT=6346

GNUTELLA2_PORT=6347

FASTTRACK_PORTS=1214

AMULE_PORT=4672

ICQ_PORT=5190

JABBER_PORT=5222 

GNUNET_PORT=2086

FREENET_PORT=19577 

SKYPE_PORT=2424 

EKIGA_PORTS=5000:5100

##########################################################################

#FUNZIONI

#Definisco i set di regole da caricare

##########################################################################

#Queste regole sono definite come funzioni da chiamare al momento di 

#applicare le catene. Ogni funzione definisce le funzioni input, output e

#forward da applicare rispettivamente a INPUT, OUTPUT e FORWARD.

#A seconda dei parametri passati da riga di comando posso chiamare diversi 

#set di regole. Se non specifico niente chiama il set di default.

#Ricordarsi sempre di aggiornare la lista dei parametri accettati.

#Le funzioni devono avere lo stesso nome dei parametri corrispondenti.

LISTA_PARAMETRI="default block server forward"

#Lista catene (solo per comodita'): 

# bittorrent_in connessioni_avviate dns_query fasttrack_in ftp_in gnutella2_in

# http_out icmp_in icmp_out ml_bittorrent_in mldonkey_gui mldonkey_in portscan

# rsync_in samba_in smtp_in ssh_in ssh_out syn_flood telnet_in

default() {

  input() {

    $IPTABLES -A INPUT -j ssh_in

  }

  output() {

  sleep 0

  }

  forward() {

  sleep 0

  }

}

server() {

  input() {

    echo "Carico set di regole 'server'"

    $IPTABLES -A INPUT -j ssh_in

    $IPTABLES -A INPUT -j rsync_in

    $IPTABLES -A INPUT -j samba_in 

    $IPTABLES -A INPUT -j mldonkey_in

    $IPTABLES -A INPUT -j mldonkey_gui

  }

  output() {

  sleep 0

  }

  forward() {

  sleep 0

  }

}

forward() {

  input() {

    $IPTABLES -A INPUT -j ssh_in

  }

  output() {

  sleep 0

  }

  forward() {

    echo "Forwarding dalla porta $LFACE a $GATEWAY"

    echo 1 > /proc/sys/net/ipv4/ip_forward

    iptables -t nat -A POSTROUTING -o $LFACE -j SNAT --to $GATEWAY

  }

}

#Definisco quanto specificato da parametro.

if [ ${#@} -gt 0 ]; then

  for i in $@; do

    if [ `echo $LISTA_PARAMETRI|grep -e $i|wc -l` -gt 0 ]; then

     [ $i != block ] && $i

    else

      echo "parametro '$i' sconosciuto"

      echo "Lista dei parametri accettati:"

      echo $LISTA_PARAMETRI

      exit 0

    fi

  done

else

  default

fi

##########################################################################

#Pulisco tutte le regole e ripristino quelle di default (ACCEPT)

##########################################################################

$IPTABLES -F

$IPTABLES -F -t mangle

$IPTABLES -F -t nat

$IPTABLES -X

$IPTABLES -X -t mangle

$IPTABLES -X -t nat

#Se ho specificato il parametro "block" blocca tutto il traffico in e out

BLOCK=`echo $@|grep block |wc -l`

if [ $BLOCK -gt 0 ]; then

  echo "blocking all network trafic 'in' and 'out'"

  $IPTABLES -P FORWARD DROP

  $IPTABLES -P INPUT   DROP

  $IPTABLES -P OUTPUT  DROP

  $IPTABLES -A INPUT -i lo -j ACCEPT

  $IPTABLES -A OUTPUT -o lo -j ACCEPT

  exit 0

fi

#Set Defaults to ACCEPT

$IPTABLES -P INPUT ACCEPT

$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -P FORWARD ACCEPT

##########################################################################

#Definisco la policy di default

##########################################################################

$IPTABLES -P INPUT DROP

$IPTABLES -P FORWARD DROP

$IPTABLES -P OUTPUT ACCEPT

##########################################################################

#Definisco le catene per i vari tipi di paccehtti

##########################################################################

#Catena per le connessioni già avviate (da mettere in fondo alle regole)

 $IPTABLES -N connessioni_avviate

 $IPTABLES -F connessioni_avviate

 $IPTABLES -A connessioni_avviate -m state --state ESTABLISHED,RELATED -j ACCEPT

 $IPTABLES -A connessioni_avviate -i $IFACE -m limit -j LOG --log-prefix "FW:Bad packet from ${IFACE}:"

 $IPTABLES -A connessioni_avviate -j DROP

#Catena per il traffico ICMP in entrata

#ICMP (in entrata) Solo se fanno parte di connessioni preesistenti, cioè si tratta di una risposta ad un 

#pacchetto inviato dalla nostra rete

 $IPTABLES -N icmp_in

 $IPTABLES -F icmp_in

 $IPTABLES -A icmp_in -p icmp --icmp-type time-exceeded -j ACCEPT

 $IPTABLES -A icmp_in -p icmp --icmp-type destination-unreachable -j ACCEPT

#protezione dai PING-FLOOD

 $IPTABLES -A icmp_in -p icmp --icmp-type ping -m limit --limit 1/s -j ACCEPT

 $IPTABLES -A icmp_in -p icmp -j LOG --log-prefix "FW:Bad ICMP traffic:"

#Protezione dai SYN-FLOOD

# $IPTABLES -N syn_flood

# $IPTABLES -F syn_flood

# $IPTABLES -A syn_flood -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT

# $IPTABLES -A syn_flood -p tcp --syn -j DROP

#Catena per il traffico ICMP in uscita

#ICMP (in uscita) Tutti gli icmp

 $IPTABLES -N icmp_out

 $IPTABLES -F icmp_out

 $IPTABLES -A icmp_out -o $IFACE -p icmp -j ACCEPT

#Catena per il DNS query

#DNS (client -> server) Vengono abilitate le query in uscita ai DNS servers

 $IPTABLES -N dns_query

 $IPTABLES -F dns_query

 $IPTABLES -A dns_query -o $IFACE -p udp -s $NAMESERVER_1 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A dns_query -o $IFACE -p udp -s $NAMESERVER_2 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per SSH in entrata

#SSH (in entrata) In entrata abilitato il traffico per la porta $SSH_PORT

#Limtati i pacchetti RST FIN e SYN a 1/second

 $IPTABLES -N ssh_in

 $IPTABLES -F ssh_in

 $IPTABLES -A ssh_in -i $IFACE -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport $SSH_PORT -j ACCEPT

 $IPTABLES -A ssh_in -i $IFACE -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport $SSH_PORT -j ACCEPT

 $IPTABLES -A ssh_in -i $IFACE -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport $SSH_PORT -j ACCEPT

 $IPTABLES -A ssh_in -i $IFACE -p tcp --dport $SSH_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per SSH in uscita abilita le connessioni ssh alla porta $SSH_PORT e a quella di default (22)

 $IPTABLES -N ssh_out

 $IPTABLES -F ssh_out

 $IPTABLES -A ssh_out -o $IFACE -p tcp --dport $SSH_PORT -m state --state NEW,ESTABLISHED -j ACCEPT  

 $IPTABLES -A ssh_out -o $IFACE -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per il traffico HTTP e HTTPS in uscita

 $IPTABLES -N http_out

 $IPTABLES -F http_out

 $IPTABLES -A http_out -o $IFACE -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A http_out -o $IFACE -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per SAMBA in entrata

 $IPTABLES -N samba_in

 $IPTABLES -F samba_in

 $IPTABLES -A samba_in -i $IFACE -p udp --dport 137 -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A samba_in -i $IFACE -p udp --dport 138 -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A samba_in -i $IFACE -p tcp --dport 139 -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A samba_in -i $IFACE -p tcp --dport 445 -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per FTP in entrata

#FTP (in uscita)

 $IPTABLES -N ftp_in

 $IPTABLES -F ftp_in

 $IPTABLES -A ftp_in -i $IFACE -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per RSYNC in entrata

 $IPTABLES -N rsync_in

 $IPTABLES -F rsync_in

 $IPTABLES -A rsync_in -i $IFACE -p tcp --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT

 

#Catena per TELNET in entrata

 $IPTABLES -N telnet_in

 $IPTABLES -F telnet_in

 $IPTABLES -A telnet_in -i $IFACE -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per SMTP in entrata

 $IPTABLES -N smtp_in

 $IPTABLES -F smtp_in

 $IPTABLES -A smtp_in -i $IFACE -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per BITTORRENT in entrata

 $IPTABLES -N bittorrent_in

 $IPTABLES -F bittorrent_in

 $IPTABLES -A bittorrent_in -i $IFACE -p tcp --dport $BITTORRENT_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per il bittorrent integrato in mldonkey in entrata:

 $IPTABLES -N ml_bittorrent_in

 $IPTABLES -F ml_bittorrent_in

 $IPTABLES -A ml_bittorrent_in -i $IFACE -p tcp --dport $ML_BITTORRENT -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per MLDONKEY in entrata

 $IPTABLES -N mldonkey_in

 $IPTABLES -F mldonkey_in

 $IPTABLES -A mldonkey_in -i $IFACE -p tcp --dport $MLDONKEY_PORT_tcp -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A mldonkey_in -i $IFACE -p udp --dport $MLDONKEY_PORT_udp -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A mldonkey_in -i $IFACE -p tcp --dport $KAD_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A mldonkey_in -i $IFACE -p udp --dport $KAD_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A mldonkey_in -i $IFACE -p tcp --dport $OVERNET_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A mldonkey_in -i $IFACE -p udp --dport $OVERNET_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

 

#Catena per la GUI di MLDONKEY in entrata

 $IPTABLES -N mldonkey_gui

 $IPTABLES -F mldonkey_gui

 $IPTABLES -A mldonkey_gui -i $IFACE -p tcp --dport 4080 -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A mldonkey_gui -i $IFACE -p tcp --dport 4001 -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per GNUTELLA2 in entrata

 $IPTABLES -N gnutella2_in

 $IPTABLES -F gnutella2_in

 $IPTABLES -A gnutella2_in -i $IFACE -p tcp --dport $GNUTELLA2_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

 $IPTABLES -A gnutella2_in -i $IFACE -p udp --dport $GNUTELLA2_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per FASTTRACK in entrata

 $IPTABLES -N fasttrack_in

 $IPTABLES -F fasttrack_in

 $IPTABLES -A fasttrack_in -i $IFACE -p tcp --dport $FASTTRACK_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT

#Catena per bloccare ACROREAD in uscita

# $IPTABLES -N no_acroread

# $IPTABLES -F no_acroread

# $IPTABLES -A no_acroread -m owner --cmd-owner acroread -j DROP

##########################################################################

#Definisco la catene per intercettare i portscan

##########################################################################

#Catena per loggare i portscan

 $IPTABLES -N portscan

 $IPTABLES -F portscan

 

 #NMAP-XMAS

 $IPTABLES -A portscan -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-level alert --log-prefix "FW:SCAN:NMAP-XMAS:"

 $IPTABLES -A portscan -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

 

 #XMAS

 $IPTABLES -A portscan -p tcp --tcp-flags ALL ALL -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "FW:SCAN:XMAS:"

 $IPTABLES -A portscan -p tcp --tcp-flags ALL ALL -j DROP

 #XMAS-PSH

 $IPTABLES -A portscan -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "FW:SCAN:XMAS-PSH:"

 $IPTABLES -A portscan -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

 #NULL_SCAN 

 $IPTABLES -A portscan -p tcp --tcp-flags ALL NONE -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "FW:SCAN:NULL_SCAN:"

 $IPTABLES -A portscan -p tcp --tcp-flags ALL NONE -j DROP

 #SYN/RST

 $IPTABLES -A portscan -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "FW:SCAN:SYN/RST:"

 $IPTABLES -A portscan -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

 #SYN/FIN

 $IPTABLES -A portscan -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "FW:SCAN:SYN/FIN:"

 $IPTABLES -A portscan -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

##########################################################################

#Variabili SYS-CTL 

##########################################################################

#Abilita o disabilita l'IP FORWARDING

#echo "1" > /proc/sys/net/ipv4/ip_forward

/bin/echo "0" > /proc/sys/net/ipv4/ip_forward

#DYNAMIC ADDRESSING (utile per il forwarding)

#/bin/echo "1" > /proc/sys/net/ipv4/ip_dynaddr

#Disabilita l'IP Spoofing

/bin/echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

#Non rispondere ai PING

#/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

#Non rispondere agli ICMP BROADCAST (attacchi smurf)

/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#Disabilita l'accettazione dei REDIRECT

/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

/bin/echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects

#Protezione verso i messaggi di errore ICMP malformati

/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

#Disabilita i pacchetti source routed (previene dal guardare attraverso il NAT)

/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

#Abilita LOG_MARTIANS (effettua il log dei pacchetti strani)

/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

#Abilita il  REVERSE PATH FILTERING

for i in /proc/sys/net/ipv4/conf/*; do

  /bin/echo "1" > $i/rp_filter

done

##########################################################################

#Applico le catene a INPUT, OUTPUT e FORWARD

#Scarto i pacchetti INVALID

##########################################################################

#Applico le catene a INPUT

  $IPTABLES -A INPUT -j portscan

  $IPTABLES -A INPUT -m state --state INVALID -j DROP

  $IPTABLES -A INPUT -j icmp_in

  $IPTABLES -A INPUT -i lo -j ACCEPT

  input

  $IPTABLES -A INPUT -j connessioni_avviate

#Applico le catene a OUTPUT

#  $IPTABLES -A OUTPUT -m state --state INVALID -j DROP 

#  $IPTABLES -A OUTPUT -j no_acroread

  output

#Applico le catene a FORWARD

  $IPTABLES -A FORWARD -m state --state INVALID -j DROP

  $IPTABLES -A FORWARD -o lo -j ACCEPT

  forward

  $IPTABLES -A FORWARD -j connessioni_avviate

```

Per poter loggare meglio gli eventi del vostro firewall (specialmente i portscan) potete impostare dei filtri in modo da catturare gli eventi del kernel relativi a queste stringhe:

```
FW:

FW:SCAN:
```

Se usate syslog-ng e avete in /etc/syslog-ng/syslog-ng.conf questa riga:

```
source kernsrc { file("/proc/kmsg"); };
```

allora aggiungete anche queste:

```
destination firewall { file("/var/log/firewall.log"); };

filter f_firewall { match ("FW:"); };

log { source(kernsrc); filter(f_firewall); destination(firewall); };
```

in modo da destinare tutti gli eventi del firewall nel file /var/log/firewall.log

Per trovare i portscan basta cercare con grep la stringa "SCAN"

Se avete definito diversamente la sorgente degli eventi del kernel (la prima riga) allora aggiorate le righe che vi ho posto per puntare alla giusta source (in realtà dovete cambiare solo l'ultima riga)

----------

## neryo

ottimo..  :Wink: 

----------

## gutter

Aggiunto ai post utilissimi sezione Tips.

----------

## Cazzantonio

 *gutter wrote:*   

> Aggiunto ai post utilissimi sezione Tips.

 

Esagerato... guarda che è davvero poco più di un copia&incolla  :Very Happy: 

----------

## gutter

 *Cazzantonio wrote:*   

> 
> 
> Esagerato... guarda che è davvero poco più di un copia&incolla 

 

Ma fatto con criterio  :Wink: 

Almeno così vediamo se riusciamo a diminuire i post della serie: "Consigli sul mio firewall"  :Wink: 

----------

## X-Drum

 *gutter wrote:*   

>  *Cazzantonio wrote:*   
> 
> Esagerato... guarda che è davvero poco più di un copia&incolla  
> 
> Ma fatto con criterio 
> ...

 

seeeeeeeeeei morirai di speranza asd  :Wink: 

----------

## fedeliallalinea

Grazie Cazzantonio per l'ottimo tip

----------

## codadilupo

giusto per completezza, cambierei muro_di_fuoco con porta_tagliafuoco... che sarebbe la traduzione piu' corretta per firewall*.

P.S.: si', lo so... sono un gran rompiballe  :Wink: 

* le porte tagliafuoco, ovvero firewall, sono costruzioni utilizzate nei dispositivi antincendio, quando si costruiscono gl'edifici

Coda

----------

## Xet

:O spettacolo!!!

piccolo? ... come diceva Yoda il valore di qualunque cosa non deve essere valutata secondo le dimensioni...

io di solito risolvo mettendo in local la chiamata allo script bash...ma questa soluzione è molto più elegante...

e sopratutto comforme agli "standard" di configrazione e gestione dei serviz...AEHM...DEMONI di Gentoo

veramente GJ e grazie

----------

## Xet

posso essere puntiglioso anche io?

```

...

IPTABLESRESTORE=/sbin/iptables-restore 

ECHO=/bin/echo

...

```

non penso che tanti abbiano echo in directory diverse da /bin

è solo per puntigliosità ed eleganza di programmazione...

----------

## gutter

Dal momento che si tratta di uno script bash credo che prima si faccia riferimento ai built-in  :Wink:  e quindi è poco probabile che la tua costante sia utile  :Wink: 

----------

## gionag

```

 * OUTPUT su ACCEPT, INPUT e FORWARD su DROP

iptables v1.2.11: invalid TCP port/service `-m' specified

Try `iptables -h' or 'iptables --help' for more information.

iptables v1.2.11: invalid TCP port/service `-m' specified

Try `iptables -h' or 'iptables --help' for more information.

 * Impostate regole per intercettare i portscan

```

come mai ? questo quando lancio il demone.

ottimo lavoro ragazzo  :Very Happy: 

----------

## Cazzantonio

 *gionag wrote:*   

> come mai ? questo quando lancio il demone.

 

Potrebbe essere un errore da qualche parte visto che nel postarlo ho modificato un paio di voci (per adattarlo ad una configurazione più generica...)

Tuttavia lo script sopra postato a me non da errore...

```
star_platinum root # /etc/init.d/pippo start

 * Re-caching dependency info (mtimes differ)...

 * Caricamento regole del firewall...                                             [ ok ]

star_platinum root # /etc/init.d/pippo stop 

 * Arresto del firewall (tutte le regole su ACCEPT)...                            [ ok ]
```

Potrebbe essere che ti manca qualche modulo di iptables nella conf dl kernel?

 *Quote:*   

> ottimo lavoro ragazzo 

 

Grazie  :Very Happy: 

----------

## Cazzantonio

Visto che stamattina ho più tempo (e che mi pare vi sia piaciuto lo script) vi posto un esempio di regole personalizzate (in realtà sono le mie regole  :Wink:  ) da mettere in /etc/conf.d/muro_di_fuoco (liberissimi di chiamarlo porta_tagliafuoco  :Laughing:  .... basta modificare le voci all'inizio del primo script  :Wink:  )

Cambiatele a vostro piacimento  :Smile: 

```
EDIT

Aggiunto in coda al primo post 

```

----------

## codadilupo

 *Cazzantonio wrote:*   

> 
> 
> ```
> #######protezione dai PING-FLOOD... da non confondersi con i pink-floyd
> 
> ...

 

ma LOL  :Laughing:   :Laughing:   :Laughing: 

Coda

----------

## Cazzantonio

 *codadilupo wrote:*   

> 
> 
> ma LOL    

 

Si  :Wink:  ma non è lì evidenziata per fare la battuta idiota... è perché ancora non so se tenerla o eliminarla  :Wink: 

----------

## neryo

Io aggiungerei anche la possibilita' di loggarsi da ssh sulla interfaccia interna alla rete.. 

```
$IPTABLES -A ssh_in -i $EFACE -p tcp --dport $SSH_PORT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
```

----------

## GhePeU

perchè uno script a parte?

bastava lanciare uno script bash con le sole impostazioni di iptables, quindi /etc/init.d/iptables save e rc-update add iptables boot

----------

## Cazzantonio

 *neryo wrote:*   

> Io aggiungerei anche la possibilita' di loggarsi da ssh sulla interfaccia interna alla rete.. 

 

Più che giusto  :Wink: 

Non ci avevo pensato perché sono dietro uno switch quindi in realtà la $EFACE non la uso  :Smile: 

Thanks  :Very Happy: 

@GhePeU

Uno script di init ti permette anche di dargli dei comandi, tipo star, stop, restart, block_all, save, restore, showstatus .... è più interattivo...  :Smile:  Inoltre stampa quei simpatici asterischi verdi e quegli "[OK]" che ci piacciono tanto  :Very Happy: 

In ogni caso è questione di gusti  :Wink: 

----------

## neryo

 *Cazzantonio wrote:*   

> 
> 
> Più che giusto 
> 
> Non ci avevo pensato perché sono dietro uno switch quindi in realtà la $EFACE non la uso 
> ...

 

Ora che ci penso forse e' un settaggio troppo personale che solitamente non fa parte della necessita' della maggior parte degli utenti.. io ho un serverino di front-end e quindi mi serve!!  :Wink: 

Fai tu se tenerla o meno.. magari mettigli qualche commento in modo che per i meno esperti capiscano che non serve se sono collegati a uno switch sulla etho e non hanno una eth1..  :Wink: 

Ciao

----------

## Cazzantonio

 *neryo wrote:*   

> Fai tu se tenerla o meno.. magari mettigli qualche commento in modo che per i meno esperti capiscano che non serve se sono collegati a uno switch sulla etho e non hanno una eth1..  

 

In generale lo script deve fornire solo delle regole generiche... per chi vuole regole ad-hoc c'è /etc/conf.d/muro_di_fuoco  :Wink: 

In teroria quelle regole ci sono per le persone che non conoscono iptables ma che comunque vorrebbero mettere un firewall minimo sul loro pc

----------

## hellraiser

Penso c sia un piccolo errore...

```
#Disabilita l'IP Spoofing

/bin/echo "2" > /proc/sys/net/ipv4/conf/all/rp_filter 
```

da sostituire con

```
#Disabilita l'IP Spoofing

/bin/echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter 
```

Comunque ottimo lavoro...

----------

## Cazzantonio

@hellraiser

Corretto! Del resto lo dicevo che c'erano sicuramente degli errori  :Rolling Eyes:   :Very Happy: 

----------

## iridium103

ragazzi, scusate se faccio ri-emergere questo topic... (aprirne un'altro mi sembrava troppo brutto  :Razz:  )

ma avrei un paio di dubbi.. riguardo alla mia configurazione di rete.. 

visto che ho due intefacce virtuali .. come posso impostare il firewall per filtrare anche loro?

vi posto la mia configurazione di rete 

```

eth0      Link encap:Ethernet  HWaddr 00:0C:76:A0:9F:9B  

          inet addr:193.109.45.xxx  Bcast:193.109.45.223  Mask:255.255.255.0

          inet6 addr: fe80::20c:76ff:fea0:9f9b/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:6176395 errors:0 dropped:0 overruns:0 frame:0

          TX packets:5315145 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:1158118753 (1104.4 Mb)  TX bytes:1652664772 (1576.1 Mb)

          Interrupt:21 

eth0:1    Link encap:Ethernet  HWaddr 00:0C:76:A0:9F:9B  

          inet addr:193.109.45.xxx  Bcast:193.109.45.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

          Interrupt:21 

eth0:2    Link encap:Ethernet  HWaddr 00:0C:76:A0:9F:9B  

          inet addr:193.109.45.xxx  Bcast:193.109.45.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

          Interrupt:21 

eth1      Link encap:Ethernet  HWaddr 00:E0:4C:39:0B:46  

          inet addr:192.168.0.250  Bcast:192.169.0.255  Mask:255.255.255.0

          inet6 addr: fe80::2e0:4cff:fe39:b46/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:1531528 errors:0 dropped:0 overruns:0 frame:0

          TX packets:1101109 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:670031802 (638.9 Mb)  TX bytes:1031268363 (983.4 Mb)

          Interrupt:18 Base address:0x6f00 

lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:8021647 errors:0 dropped:0 overruns:0 frame:0

          TX packets:8021647 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:2250184343 (2145.9 Mb)  TX bytes:2250184343 (2145.9 Mb)

```

qualcuno saprebbe mica dove/come indirizzarmi? ho proprio bisogno di una manina  :Smile: 

grazie in anticipo!!  :Smile: 

----------

## Cazzantonio

che cosa ci passa da quelle interfacce?

Il modo corretto è scrivere regole per ogni interfaccia... (penso... non ho mai messo un firewall su più di un interfaccia esterna....), altrimenti se non specifichi l'interfaccia da filtrare iptables te le filtra tutte (nel caso dello script sopra devi settare IFACE="")

----------

## iridium103

 *Cazzantonio wrote:*   

> che cosa ci passa da quelle interfacce?
> 
> Il modo corretto è scrivere regole per ogni interfaccia... (penso... non ho mai messo un firewall su più di un interfaccia esterna....), altrimenti se non specifichi l'interfaccia da filtrare iptables te le filtra tutte (nel caso dello script sopra devi settare IFACE="")

 

allora, su due ip passa un dns +mail server (nel senso che qmail è configurato per ascoltare su tutte le if.. e il dns smista un pò di qua un pò di là (direttiva A secondo il dominio)), sulla seconda un webserver+mailserver backup e sull'altra, quella locale, passa tutto..ovviamente per la rete locale.. 

comunque poi, appena ho un pò di tempo libero provo la storia dell' IFACE=""... 

ti saprò dire.. 

grazie per la risposta.. sai non ci speravo, è che da un paio di mesi che lurko qua è la.. mi aspettavo un RTFM.. gh.

----------

## .:chrome:.

ho quasi paura a fare questa domanda: non vorrei si scatenasse un flame...

ma mi dite che senso ha fare uno script di avvio per il firewall?

non si possono scrivere le regole in /var/lib/iptables/rules-save? sarebbe un enorme risparmio di tempo, e mette al sicuro dai potenziali errori di scrittura del firewall

----------

## randomaze

 *k.gothmog wrote:*   

> ma mi dite che senso ha fare uno script di avvio per il firewall?

 

E' sicuramente più comodo per chi non mastica benissimo IPT.

 *Quote:*   

> non si possono scrivere le regole in /var/lib/iptables/rules-save? sarebbe un enorme risparmio di tempo, e mette al sicuro dai potenziali errori di scrittura del firewall

 

Il risparmio di tempo ci sarebbe sicuramente, se enorme o lieve dipende dalla complessità dello script.

In quanto ai potenziali errori... beh, spero che chi fa uno script (per il firewall ma anche per rinominare .mp3) normalmente lo testi prima di usarlo!

----------

## .:chrome:.

 *randomaze wrote:*   

>  *k.gothmog wrote:*   ma mi dite che senso ha fare uno script di avvio per il firewall? 
> 
> E' sicuramente più comodo per chi non mastica benissimo IPT.

 

ma alla fine, nello script andrebbero le stesse regole che si mettono nel file.

non so... forse è un'idea mia, ma in quel file ci va l'output di iptables-save... è la cosa più intuitiva che ci sia, credo.

ovvio che se uno non sa la sintassi di iptables non ci capisce niente, però di certo non sarebbe nemmneo in grado di creare uno script.

non sei d'accordo?

----------

## Cazzantonio

 *k.gothmog wrote:*   

> ovvio che se uno non sa la sintassi di iptables non ci capisce niente, però di certo non sarebbe nemmneo in grado di creare uno script.non sei d'accordo?

 

Infatti questo script è stato scritto come esempio (per chi ha intenzione di avvicinarsi ad iptables, di scrivere regole sue oppure di utilizzare un firewall minimale con delle regole ragionevoli... se ne fai uso professionale ovvio che magari ci metti le mani da solo)

Inoltre, come già detto, secondo me lo script di init è più interattivo (possibilità di passagli opzioni varie...)

----------

## Simbul

Ho preso ampiamente ispirazione da questo script per realizzare il mio iptables. Ora però mi logga continuamente messaggi del genere:

```
Jul 17 15:24:30 tux FW: Dropped:IN=eth0 OUT= MAC=*** SRC=1.255.*** DST=1.255.*** LEN=48 TOS=0x00 PREC=0x00 TTL=119 ID=56278 DF PROTO=TCP SPT=4497 DPT=139 WINDOW=16384 RES=0x00 SYN URGP=0 

Jul 17 15:24:36 tux FW: Dropped:IN=eth0 OUT= MAC=*** SRC=1.255.*** DST=1.255.*** LEN=48 TOS=0x00 PREC=0x00 TTL=119 ID=57363 DF PROTO=TCP SPT=4497 DPT=139 WINDOW=16384 RES=0x00 SYN URGP=0
```

Altre volte mi logga messaggi come questo:

```
Jul 17 15:31:27 tux FW: Bad packet:IN=eth0 OUT= MAC=*** SRC=0.0.0.0 DST=224.0.0.1 LEN=32 TOS=0x00 PREC=0xC0 TTL=1 ID=0 PROTO=2 
```

Si tratta di attacchi oppure sono cose che andrebbero lasciate passare? Sono nella rete Fastweb: non vorrei bloccare qualche pacchetto che l'HAG usa per i suoi comodi  :Wink: 

PS nel primo caso il pacchetto è droppato perchè ho chiuso la porta 139. Nel secondo caso è "colpa" della regola che nello script si chiama connessioni_avviate.

----------

## power83

e per fare il FORWARD?

Mi spiego: ho un computer con connessione ad Internet che voglio condividere con un altro nella mia rete locale.

Penso che iptables dovrebbe bastare se impostato correttamente, senza un proxy, giusto?

come impostarlo?

Stavo pensando di dare un ACCEPT alla FORWARD sul computer con connessione, e l'altro come lo potrei configurare?

----------

## shev

 *power83 wrote:*   

> Mi spiego: ho un computer con connessione ad Internet che voglio condividere con un altro nella mia rete locale.
> 
> Penso che iptables dovrebbe bastare se impostato correttamente, senza un proxy, giusto?
> 
> come impostarlo?

 

Cerca "IP MASQUERADING" sul forum o su google, il tutto si riduce a una/due regole di iptables. Non sto a scrivertela perchè esistono davvero validi howto in rete e sicuramente una loro lettura può risutarti più utile che un passivo copia e incolla della regoletta.

----------

## power83

ok grazie

----------

## power83

risolto, consiglio questa guida veloce e semplice:

http://www.faqs.org/docs/linux_network/x-087-2-masq.configuration.html

----------

## power83

Domanda: ma che senso ha controllare il traffico in uscita (vedi ad esempio HTTP/HTTPS) se tanto prima abbiamo dettoche facciamo uscire tutto?

Tra l'altro le catene syn_flood e http_out non sono applicate a nulla!!!!!!!!!!!!!!!!!!!!!

Non capisco.......

----------

## Cazzantonio

Beh... quello era il mio esempio di script personalizzato... 

C'erano regole e catene definite e poi non applicate perché non mi servivano, del resto l'avevo scritto un'ora prima e anche poco testato... 

Del resto avevo detto all'inizio del post che era solo un esempio  :Wink: 

Crea le regole che preferisci e applicale pure come ti pare  :Wink: 

P.S. 

delle catene in uscita nessuna era applicata...

la protezione dai syn-flood mi crea più problemi che altro per cui solitamente non la metto... del resto chi se ne frega dei syn-flood...

----------

## power83

ok, vero.

MA che senso ha applicare delle restrinzioni sul traffico in uscita?

----------

## Cazzantonio

Se vuoi filtrare il traffico in uscita evidentemente devi mettere delle restrizioni in uscita... se non lo vuoi filtrare non mettere...

E poi ripeto: "erano delle regole di esempio scritte abbastanza velocemente"

Posso quindi rigirarti la questione e chiederti "che senso ha la tua domanda?"

----------

## power83

La mia domanda ha senso xke' nel tuo esempio ci sono catene x traffico in uscita che non vengono applicate, quindi non capivo se avevi dimenticato qualcosa o no..

cmq ora ne sto facendo uno mio (molto cpiato dal tuo) ma con alcuni miglioramenti di applicazione, cioe' di funzionamento.

Appena pronto lo posto cosi' mi dici che ne pensi ed eventuali correzioni/miglioramenti.

----------

## Cazzantonio

ok  :Very Happy: 

Nelle mie intenzioni iniziali c'era proprio la volontà di riunire in un solo post tutti i vari esempi, tip e consigli vari per la creazione di un firewall casalingo personalizzato  :Wink: 

----------

## GiRa

Con le regole postate sopra non riesco ad ottenere il logging dei port scan.

E' una questione di linea? Devo giocare sul packet flow rate?

@Cazzantonio: ti ricordi dove hai trovato quel codice? Se mi leggo la teoria che c'è dietro probabilmente risolvo per conto mio.

----------

## Cazzantonio

la teoria dietro è "man iptables"  :Wink: 

potrebbe essere un problema del tuo logger? cosa usi?

----------

## comio

 *GiRa wrote:*   

> Con le regole postate sopra non riesco ad ottenere il logging dei port scan.

 

questo è lavoro più per snort che per iptables. Ricordo solo una cosa... il compito principale di iptables è filtrare (netfilter non per nulla)... l'individuazione di attacchi è un compito più da IDS (quindi snort).

Iptables è comunque abbastanza flessibile da permettere funzioni basilari di ids... ma sottolineo il "basilari".

ciao

----------

## neryo

 *comio wrote:*   

>  *GiRa wrote:*   Con le regole postate sopra non riesco ad ottenere il logging dei port scan. 
> 
> questo è lavoro più per snort che per iptables. Ricordo solo una cosa... il compito principale di iptables è filtrare (netfilter non per nulla)... l'individuazione di attacchi è un compito più da IDS (quindi snort).
> 
> Iptables è comunque abbastanza flessibile da permettere funzioni basilari di ids... ma sottolineo il "basilari".
> ...

 

se vuoi un ids eveluto che comprende non solo sensori di rete potresti provare prelude ids è un ids ibrido, si interfaccia anche a snort volendo e puo essere anche usato in sistemi distribuiti.. io durante un esame di lab. di reti l avevo provato ed è molto efficiente.. poi esiste anche una buona documentazione per gentoo http://www.gentoo.org/proj/en/hardened/prelude-ids.xml  :Wink: 

Ma sicuramente ti basta meno..  :Rolling Eyes: 

----------

## GiRa

E' un lavoro che faccio per degli esterni che non sanno nulla di Linux (però sanno quanto costa una licenza di MS ISA Server) quindi meno roba metto da amministrare e meglio è.

Se riesco a fornire un minimo di rilevazione di scansione con iptables + syslog + logwatch bene altrimenti non è una cosa necessaria.

Non credo che la teoria sia in man iptables perchè non mi pare un posto dove mettere i flag del segmento TCP utilizzati dai vari tipi di portscannig.

----------

## Cazzantonio

beh... non ricordo dove ho trovato le indicazioni su quali flag guardare per intercettare determinati tipi di portscan... penso su google... oppure tra la documentazione gentoo... non ricordo di preciso...

----------

## power83

Se metto queste regole:

```

          $IPTABLES -A syn_flood -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT

          $IPTABLES -A syn_flood -p tcp --syn -j DROP

          $IPTABLES -A syn_flood -p tcp ! --syn -j ACCEPT         

```

e poi faccio 

```
  $IPTABLES -A INPUT -j syn_flood

$IPTABLES -A INPUT -j altra_catena

```

i pacchetti su altra_catena non ci arrivano mai xke' sono automaticamente accettati considerando l'ultima regola delal catena syn_flood???

EDIT:  altra domanda.

Se definisco uan regola per un'interfaccia in ingresso (opzione -i) su una porta xxx, e una regola per la stessa interfaccia sulla stessa porta, ma in uscita (opzione -o), posso in questo caso decidere di accettare solo il traffico in entrata da quella interfaccia su quella porta, senza permettere che esse stessa - sulla stessa porta - faccai uscire traffico???

----------

## Cazzantonio

O bella.... si hai ragione...

Non me ne ero mai accorto perché non l'avevo mai usata.... prendete con le pinze lo script personalizzato perché è stato fatto parecchio a cazzo  :Wink: 

per la seconda domanda direi proprio di si

----------

## pistodj

scusate stavo ora analizzando l'ottimo tip dato che mi trovo ad averne bisogno e mi stavo chiedendo se è corretto lashiare la policy in OUTPUT settata su ACCEPT.

Non sarebbe meglio fare una verifica per chiudere cmq le porte e correre cmq meno rischi? O basta solitamente vare il chek su l'imput?

Grazie Ciao!!

----------

## Cazzantonio

L'output è quello che ti esce dal pc... l'input quello che ti entra...

Se ha intenzione di limitare gli utenti della tua macchina allora è buona cosa mettere delle regole su OUTPUT, altrimenti per chiudere le porte in entrata (e quindi evitare che determinati demoni possano stare in ascolto sulla rete anche se attivi) basta chiudere quelle in INPUT  :Rolling Eyes: 

Dipende quello che vuoi fare...

Mi ricordo che sotto windows il firewall serviva effettivamente più a bloccare tutti i programmini del cazzo che tentavano di conntettersi ad internet che per bloccare il traffico in entrata... se sei appena arrivato da windows capisco questa tua perplessita...  :Very Happy: 

Sotto linux per fortuna i vari programmi (essendo opensource) non dovrebbero contenere backdoor o bachi strani per cui non hai il controllo delle informazioni che il tuo pc trasmette su internet...   :Rolling Eyes:   :Very Happy: 

Se però usi programmi closed-source e vuoi garantirti un discreto livello di paranoia allora puoi bloccare il traffico in uscita di questi programmi (di cui evidentemente non ti fidi) con una riga tipo questa:

```
#Per bloccare ACROREAD in uscita

 $IPTABLES -A OUTPUT -m owner --cmd-owner acroread -j DROP 
```

----------

## power83

grazie, ora direi che posso procedere!

Sto facendo anche io un mega script usando il tuo come esempio, appena pronto lo posto

----------

## pistodj

diciamo che solitamente preferisco chiudere le porte che non mi servono in quanto il firewol che sto progettando sarà da bariera ad un quarantinadi pc winzoz e sicuramente avranno di quelle schifezze installate che nemmebno immagino!!

in'oltre sorreggimi se sbaglio chiudendo le porte sopra la 1024 impedisco il p2p  :Very Happy: 

----------

## Cazzantonio

beh si... anche se ti consiglio vivamente di mettere le porte di ssh, telnet o qualsiasi altro servizio che ti dia una accesso ad una console sopra la 1024.... in una alta a caso in modo da evitare tutti gli attacchi automatici dai vari bot sparsi per la rete  :Wink: 

Se devi bloccare una rete windows ti consiglio di sbarrare tutte le porte tranne quelle che usi te (anche sotto la 1024...), e comunque io il controllo lo effettuerei sulle policy "FORWARD", "POSTROUTING" e "PREROUTING" visto che il tuo server farà da gateway....

Siccome lo script era concepito principalmente come firewall casalingo ti toccherà smanettarlo un minimo cambiando le regole ed inserendo eventualmente quello che ti serve... se poi lo posti si può cercare di ampliare quello iniziale in modo da renderlo usabile anche su un gateway (senza complicarlo eccessivamente però  :Wink:  )

----------

## pistodj

Ci puoi contare, la mettero non appena ultimata!! 

così magari se m'è sfuggito qualcosa la correggo!! :Wink: 

----------

## Ciccio Bueo

Scusatemi se sono fuori luogo... non sto usando lo script di Cazzantonio... ma non se se sia o meno il caso di postare qui la domanda... (posto qui perchè vorrei appunto usarlo ma con alcune modifiche)

allora se digito:

```
 iptables -L -x -v -n --line-numbers 
```

mi trovo:

```
Chain INPUT (policy ACCEPT 2577173 packets, 3652312711 bytes)

num      pkts      bytes target     prot opt in     out     source               destination

1           0        0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0

2         294    42723 ACCEPT     all  --  eth0   *       0.0.0.0/0            0.0.0.0/0

3           0        0 REJECT     udp  --  !eth0  *       0.0.0.0/0            0.0.0.0/0           udp dpt:67 reject-with icmp-port-unreachable

4           0        0 REJECT     udp  --  !eth0  *       0.0.0.0/0            0.0.0.0/0           udp dpt:53 reject-with icmp-port-unreachable

5           1       60 ACCEPT     tcp  --  ppp0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:22

6        1020    49884 DROP       tcp  --  !eth0  *       0.0.0.0/0            0.0.0.0/0           tcp dpts:0:1023

7           2      156 DROP       udp  --  !eth0  *       0.0.0.0/0            0.0.0.0/0           udp dpts:0:1023

Chain FORWARD (policy DROP 0 packets, 0 bytes)

num      pkts      bytes target     prot opt in     out     source               destination

1           0        0 DROP       all  --  eth0   *       0.0.0.0/0            192.168.0.0/16

2      272774 127291597 ACCEPT     all  --  eth0   *       192.168.0.0/16       0.0.0.0/0

3      230920 26946954 ACCEPT     all  --  ppp0   *       0.0.0.0/0            192.168.0.0/16

4           0        0 ACCEPT     all  --  pan0   *       0.0.0.0/0            0.0.0.0/0

5           0        0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 4541296 packets, 3551966863 bytes)

num      pkts      bytes target     prot opt in     out     source               destination

```

questo vuol dire che il mio firewall è finto? cioè non sta facendo nulla?

allora... al momento il firewall è sul server router, a cui si collegano i client win/linux, sto impazzando per fare anche un NAP Bluetooth  (https://forums.gentoo.org/viewtopic-t-368375.html), e non riesco a collegarmi forse perchè sbaglio la conf di iptables...

insomma... cosa devo modificare sullo script di Cazzantonio per perchè funzioni l'interfaccia pan/bnep del bluetooth?   :Rolling Eyes: 

graziel

----------

## Cazzantonio

Mi sa che fai prima ad aprire un altro topic dove posti tutte le tue regole di iptables....   :Confused: 

----------

## Ciccio Bueo

ok. grazie.... una cosa sola, con quella configurazione blocco o non blocco nulla?

----------

## Cazzantonio

UP:

Aggiornato lo script per ovviare ad una falla che impediva il corretto logging dei portscan 

Che nessuno se ne sia accorto conferma che nessuno li legge i log...   :Evil or Very Mad:  potete anche togliere quella regola che tanto è inutile se poi non andate a verificare i log    :Twisted Evil: 

In ogni caso visto che finora nemmeno io me ne ero accorto sono anch'io nel gruppo dei "disattenti"  :Wink: 

Aggiunto inoltre un piccolo suggerimento su come modificare syslog-ng per loggare in maniera pulita e precisa gli eventi del firewall

----------

## MonsterMord

Partendo dal lavoro di Cazzantonio ho effettuato delle modifiche per il mio PC casalingo che funge da router tra internet e la lan casalinga.

Metto qui' il mio file di configurazione, nel caso possa essere di utilita' ad altri.

Preciso che l'ho costruito per imparare ad usare net_filter, non per creare un firewall a regola d'arte, i puristi della sicurezza mi perdonino.

Problemi noti:

1)la regola per il syn-flood invalida tutte le regole seguenti, tutto cio' che non e' syn-flood viene accettato metre bisognerebbe farla proseguire nella lista delle catene.

2) Nella guida http://www.gentoo.org/doc/en/security/security-handbook.xml?part=1&chap=12 la regola per il postscan e' applicata anche per le catene OUTPUT e FORWARD, non ne capisco il motivo.

3) Per il traffico FTP ricordarsi di caricare il modulo "ip_conntrack_ftp"

```

#!/bin/bash

# Autore originale: Cazzantonio from gentoo italian forum

# Modifiche e personalizzazioni di MonsterMord from gentoo italian forum

# catene in USCITA:

#    EFACE : servizi forniti dal server locale verso l'esterno (internet), esempio connessione SSH

#    IFACE : servizi forniti dal server locale verso l'interno (lan), esempio HTTPD

# catene di ENTRATA:

#    EFACE : servizi forniti dall'esterno (internet) e richiesti dal server

#    IFACE : servizi forniti dall'interno (lan) e richiesti dal server

# dove c'e' una entrata ci deve essere una uscita su una porta non privilegiata,

# da cui la catena CONNESSIONI AVVIATE sulle porte non privilegiate.

# Defininco la posizione degli eseguibili di iptables

IPTABLES=/sbin/iptables

IPTABLESSAVE=/sbin/iptables-save

IPTABLESRESTORE=/sbin/iptables-restore

# Interfacce

IFACE=eth0 # Interfaccia interna LAN

EFACE=ppp+ # Interfaccia esterna INTERNET

LAN=192.168.0.0/24

# Nameservers

NAMESERVER_1=85.37.17.47

NAMESERVER_2=151.99.125.1

# Definizioni delle porte

FTP_PORT=21

SSH_PORT=22

SMTP_PORT=25

TIMESERVER_PORT=37

DNS_PORT=53

POP3_PORT=110

HTTP_PORT=80

NETBIOS_PORTS=137:139

HTTPS_PORT=443

MICROSOFT_DS_PORT=445

REALTIME_PORT=554

IPP_PORT=631

RSYNC_PORT=873

POP3S_PORT=995

MS_STREAMING_PORT=1755

MSN_MESSANGER_PORT=1863

    # tcp 14300

    # udp 7790 12352

GNUNET_PORT=2086

SKYPE_PORT=2424

ED2K_PORTS=4662:4666

AMULE_PORT=4672

ICQ_PORT=5190

JABBER_PORT=5222

BITTORRENT_PORTS=6881:6889

BITTORRENT_TRACKER_PORT=6969

MSN_FILE_VOICE_PORTS=6891:6901

FREENET_PORT=19577

P_PORTS=0:1023

UP_PORTS=1024:65535

##########################################################################

# Pulisco tutte le regole e ripristino quelle di default (ACCEPT)

##########################################################################

  $IPTABLES -F

  $IPTABLES -F -t mangle

  $IPTABLES -F -t nat

  $IPTABLES -X

  $IPTABLES -X -t mangle

  $IPTABLES -X -t nat

# Set Defaults to ACCEPT

  $IPTABLES -P INPUT ACCEPT

  $IPTABLES -P OUTPUT ACCEPT

  $IPTABLES -P FORWARD ACCEPT

##########################################################################

# Definisco la policy di default

##########################################################################

  $IPTABLES -P INPUT DROP

  $IPTABLES -P OUTPUT DROP

  $IPTABLES -P FORWARD DROP

##########################################################################

# Definisco le catene per i vari tipi di paccehtti

##########################################################################

# Catena per il traffico ICMP in uscita verso rete esterna ed interna, abilito tutto

  $IPTABLES -N icmp_out

  $IPTABLES -F icmp_out

  $IPTABLES -A icmp_out -o $EFACE -p icmp -j ACCEPT

  $IPTABLES -A icmp_out -o $IFACE -p icmp -j ACCEPT

# Catena per il traffico ICMP in entrata

# ICMP (in entrata) Solo se fanno parte di connessioni preesistenti, cioè si

# tratta di una risposta ad un pacchetto inviato dalla nostra rete

  $IPTABLES -N icmp_in

  $IPTABLES -F icmp_in

  $IPTABLES -A icmp_in -p icmp --icmp-type time-exceeded -j ACCEPT

  $IPTABLES -A icmp_in -p icmp --icmp-type destination-unreachable -j ACCEPT

  $IPTABLES -A icmp_in -p icmp --icmp-type ping -m limit --limit 1/s -j ACCEPT

  $IPTABLES -A icmp_in -p icmp -j LOG --log-prefix "FW:Bad ICMP traffic:"

# Protezione dai SYN-FLOOD

# ATTENZIONE: NON ATTIVARE QUESTA REGOLA !!!

  $IPTABLES -N syn_flood

  $IPTABLES -F syn_flood

  $IPTABLES -A syn_flood -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT

  $IPTABLES -A syn_flood -p tcp --syn -j DROP

# Catena per FTP in uscita, abilita le connessioni FTP verso esterno ed interno

# FTP (in uscita)

  $IPTABLES -N ftp_out

  $IPTABLES -F ftp_out

  $IPTABLES -A ftp_out -o $EFACE -p tcp --dport $FTP_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A ftp_out -o $IFACE -p tcp --dport $FTP_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per FTP in entrata, solo per l'interno

  $IPTABLES -N ftp_in

  $IPTABLES -F ftp_in

  $IPTABLES -A ftp_in -i $IFACE -p tcp --dport $FTP_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per SSH in uscita, abilita le connessioni SSH verso esterno e interno

  $IPTABLES -N ssh_out

  $IPTABLES -F ssh_out

  $IPTABLES -A ssh_out -o $EFACE -p tcp --dport $SSH_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A ssh_out -o $IFACE -p tcp --dport $SSH_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per SSH in entrata dall'esterno e dall'interno

# SSH (in entrata) In entrata abilitato il traffico per la porta $SSH_PORT

# Limtati i pacchetti RST FIN e SYN a 1/seondo

  $IPTABLES -N ssh_in

  $IPTABLES -F ssh_in

  $IPTABLES -A ssh_in -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport $SSH_PORT -j ACCEPT

  $IPTABLES -A ssh_in -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport $SSH_PORT -j ACCEPT

  $IPTABLES -A ssh_in -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport $SSH_PORT -j ACCEPT

  $IPTABLES -A ssh_in -i $EFACE -p tcp --dport $SSH_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT

  $IPTABLES -A ssh_in -i $IFACE -p tcp --dport $SSH_PORT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Catena per SMTP in uscita, abilita le connessioni SMTP verso server esterni

  $IPTABLES -N smtp_out

  $IPTABLES -F smtp_out

  $IPTABLES -A smtp_out -o $EFACE -p tcp --dport $SMTP_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per TIMESERVER in uscita, abilita le connessioni TIMESERVER verso server esterni

  $IPTABLES -N timeserver_out

  $IPTABLES -F timeserver_out

  $IPTABLES -A timeserver_out -o $EFACE -p tcp --dport $TIMESERVER_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A timeserver_out -o $EFACE -p udp --dport $TIMESERVER_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per il DNS query in uscita

# DNS (client -> server) Vengono abilitate le query in uscita ai DNS servers

  $IPTABLES -N dns_out

  $IPTABLES -F dns_out

  $IPTABLES -A dns_out -o $EFACE -p udp -d $NAMESERVER_1 --dport $DNS_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A dns_out -o $EFACE -p udp -d $NAMESERVER_2 --dport $DNS_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per POP3 in uscita, abilita le connessioni POP3 verso server esterni

  $IPTABLES -N pop3_out

  $IPTABLES -F pop3_out

  $IPTABLES -A pop3_out -o $EFACE -p tcp --dport $POP3_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per il traffico NETBIOS in uscita sulla rete interna

  $IPTABLES -N netbios_out

  $IPTABLES -F netbios_out

  $IPTABLES -A netbios_out -o $IFACE -p tcp --dport $NETBIOS_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A netbios_out -o $IFACE -p udp --dport $NETBIOS_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per il traffico HTTP in uscita

  $IPTABLES -N http_out

  $IPTABLES -F http_out

  $IPTABLES -A http_out -o $IFACE -p tcp --dport $HTTP_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A http_out -o $EFACE -p tcp --dport $HTTP_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per il traffico HTTP in entrata solo per l'interno

  $IPTABLES -N http_in

  $IPTABLES -F http_in

  $IPTABLES -A http_in -i $IFACE -p tcp --dport $HTTP_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per il traffico HTTPS in uscita

  $IPTABLES -N https_out

  $IPTABLES -F https_out

  $IPTABLES -A https_out -o $EFACE -p tcp --dport $HTTPS_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per il traffico MICROSOFT_DS in uscita sulla rete interna

  $IPTABLES -N microsoft_ds_out

  $IPTABLES -F microsoft_ds_out

  $IPTABLES -A microsoft_ds_out -o $IFACE -p tcp --dport $MICROSOFT_DS_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A microsoft_ds_out -o $IFACE -p udp --dport $MICROSOFT_DS_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per il traffico REALTIME in uscita

  $IPTABLES -N realtime_out

  $IPTABLES -F realtime_out

  $IPTABLES -A realtime_out -o $EFACE -p tcp --dport $REALTIME_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A realtime_out -o $EFACE -p udp --dport $REALTIME_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per il traffico IPP in uscita sulla rete interna

  $IPTABLES -N ipp_out

  $IPTABLES -F ipp_out

  $IPTABLES -A ipp_out -o $IFACE -p tcp --dport $IPP_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per il traffico IPP in entrata solo per l'interno

  $IPTABLES -N ipp_in

  $IPTABLES -F ipp_in

  $IPTABLES -A ipp_in -i $IFACE -p tcp --dport $IPP_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per RSYNC in uscita

  $IPTABLES -N rsync_out

  $IPTABLES -F rsync_out

  $IPTABLES -A rsync_out -o $EFACE -p tcp --dport $RSYNC_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A rsync_out -o $IFACE -p tcp --dport $RSYNC_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per RSYNC in entrata solo per l'interno

  $IPTABLES -N rsync_in

  $IPTABLES -F rsync_in

  $IPTABLES -A rsync_in -i $IFACE -p tcp --dport $RSYNC_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per POP3S in uscita, abilita le connessioni POP3S verso server esterni

  $IPTABLES -N pop3s_out

  $IPTABLES -F pop3s_out

  $IPTABLES -A pop3s_out -o $EFACE -p tcp --dport $POP3S_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per MS_STREAMING in uscita, abilita le connessioni MMS

  $IPTABLES -N ms_streaming_out

  $IPTABLES -F ms_streaming_out

  $IPTABLES -A ms_streaming_out -o $EFACE -p tcp --dport $MS_STREAMING_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A ms_streaming_out -o $EFACE -p udp --dport $MS_STREAMING_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per MSN_MESSANGER in uscita, abilita le connessioni MSN_MESSANGER verso server esterni

  $IPTABLES -N msn_messanger_out

  $IPTABLES -F msn_messanger_out

  $IPTABLES -A msn_messanger_out -o $EFACE -p tcp --dport $MSN_MESSANGER_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per SKYPE in uscita, abilita le connessioni SKYPE

  $IPTABLES -N skype_out

  $IPTABLES -F skype_out

  $IPTABLES -A skype_out -o $EFACE -p udp --dport $SKYPE_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per ED2K in uscita

  $IPTABLES -N ed2k_out

  $IPTABLES -F ed2k_out

  $IPTABLES -A ed2k_out -p tcp --dport $ED2K_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A ed2k_out -p udp --dport $ED2K_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per ED2K in entrata

  $IPTABLES -N ed2k_in

  $IPTABLES -F ed2k_in

  $IPTABLES -A ed2k_in -p tcp --dport $ED2K_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A ed2k_in -p udp --dport $ED2K_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per AMULE in uscita

  $IPTABLES -N amule_out

  $IPTABLES -F amule_out

  $IPTABLES -A amule_out -p udp --dport $AMULE_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per AMULE in entrata

  $IPTABLES -N amule_in

  $IPTABLES -F amule_in

  $IPTABLES -A amule_in -p udp --dport $AMULE_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per GNUNET in uscita

  $IPTABLES -N gnunet_out

  $IPTABLES -F gnunet_out

  $IPTABLES -A gnunet_out -p tcp --dport $GNUNET_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A gnunet_out -p udp --dport $GNUNET_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per GNUNET in entrata

  $IPTABLES -N gnunet_in

  $IPTABLES -F gnunet_in

  $IPTABLES -A gnunet_in -p tcp --dport $GNUNET_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

  $IPTABLES -A gnunet_in -p udp --dport $GNUNET_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per ICQ in uscita, abilita le connessioni ICQ verso server esterni

  $IPTABLES -N icq_out

  $IPTABLES -F icq_out

  $IPTABLES -A icq_out -o $EFACE -p tcp --dport $ICQ_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per JABBER in uscita, abilita le connessioni JABBER verso server esterni

  $IPTABLES -N jabber_out

  $IPTABLES -F jabber_out

  $IPTABLES -A jabber_out -o $EFACE -p tcp --dport $JABBER_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per BITTORRENT in uscita

  $IPTABLES -N bittorrent_out

  $IPTABLES -F bittorrent_out

  $IPTABLES -A bittorrent_out -p tcp --dport $BITTORRENT_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per BITTORRENT in entrata

  $IPTABLES -N bittorrent_in

  $IPTABLES -F bittorrent_in

  $IPTABLES -A bittorrent_in -p tcp --dport $BITTORRENT_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per BITTORRENT TRACKER in uscita

  $IPTABLES -N bittorrent_tracker_out

  $IPTABLES -F bittorrent_tracker_out

  $IPTABLES -A bittorrent_tracker_out -p tcp --dport $BITTORRENT_TRACKER_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per FREENET in uscita

  $IPTABLES -N freenet_out

  $IPTABLES -F freenet_out

  $IPTABLES -A freenet_out -p tcp --dport $FREENET_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per FREENET in entrata

  $IPTABLES -N freenet_in

  $IPTABLES -F freenet_in

  $IPTABLES -A freenet_in -p tcp --dport $FREENET_PORT -m state --state NEW,ESTABLISHED -j ACCEPT

# Catena per le connessioni già avviate (da mettere in fondo alle regole)

  $IPTABLES -N connessioni_avviate

  $IPTABLES -F connessioni_avviate

  $IPTABLES -A connessioni_avviate -m state --state ESTABLISHED,RELATED -j ACCEPT

  #$IPTABLES -A connessioni_avviate -i $EFACE -m limit -j LOG --log-prefix "FW:Bad packet from ${EFACE}:"

  #$IPTABLES -A connessioni_avviate -i $IFACE -m limit -j LOG --log-prefix "FW:Bad packet from ${IFACE}:"

  $IPTABLES -A connessioni_avviate -i $EFACE -j LOG --log-prefix "FW:Bad packet from ${EFACE}:"

  $IPTABLES -A connessioni_avviate -i $IFACE -j LOG --log-prefix "FW:Bad packet from ${IFACE}:"

  $IPTABLES -A connessioni_avviate -j DROP

##########################################################################

# Definisco la catene per intercettare i portscan

##########################################################################

# Catena per loggare i portscan

  $IPTABLES -N portscan

  $IPTABLES -F portscan

 # NMAP-XMAS

  $IPTABLES -A portscan -p tcp --tcp-flags ALL FIN,URG,PSH -m limit \

            --limit 5/minute -j LOG --log-level alert --log-prefix "FW:SCAN:NMAP-XMAS:"

  $IPTABLES -A portscan -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP

 # XMAS

  $IPTABLES -A portscan -p tcp --tcp-flags ALL ALL -m limit \

            --limit 5/minute -j LOG --log-level 1 --log-prefix "FW:SCAN:XMAS:"

  $IPTABLES -A portscan -p tcp --tcp-flags ALL ALL -j DROP

 # XMAS-PSH

  $IPTABLES -A portscan -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit \

            --limit 5/minute -j LOG --log-level 1 --log-prefix "FW:SCAN:XMAS-PSH:"

  $IPTABLES -A portscan -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

 # NULL_SCAN

  $IPTABLES -A portscan -p tcp --tcp-flags ALL NONE -m limit \

            --limit 5/minute -j LOG --log-level 1 --log-prefix "FW:SCAN:NULL_SCAN:"

  $IPTABLES -A portscan -p tcp --tcp-flags ALL NONE -j DROP

 # SYN/RST

  $IPTABLES -A portscan -p tcp --tcp-flags SYN,RST SYN,RST -m limit \

            --limit 5/minute -j LOG --log-level 5 --log-prefix "FW:SCAN:SYN/RST:"

  $IPTABLES -A portscan -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

 # SYN/FIN

  $IPTABLES -A portscan -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit \

            --limit 5/minute -j LOG --log-level 5 --log-prefix "FW:SCAN:SYN/FIN:"

  $IPTABLES -A portscan -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

##########################################################################

# Applico le catene a INPUT, OUTPUT e FORWARD

# Scarto i pacchetti INVALID

##########################################################################

# Applico le catene a INPUT

  $IPTABLES -A INPUT -j portscan

  $IPTABLES -A INPUT -m state --state INVALID -j DROP

  $IPTABLES -A INPUT -j icmp_in

  #$IPTABLES -A INPUT -j syn_flood # NON ATTIVARE, invalida tutte le successive regole!

  $IPTABLES -A INPUT -i lo -j ACCEPT

  $IPTABLES -A INPUT -j ftp_in

  $IPTABLES -A INPUT -j ssh_in

  $IPTABLES -A INPUT -j http_in

  $IPTABLES -A INPUT -j ipp_in

  $IPTABLES -A INPUT -j rsync_in

  $IPTABLES -A INPUT -j ed2k_in

  $IPTABLES -A INPUT -j amule_in

  #$IPTABLES -A INPUT -j gnunet_in

  $IPTABLES -A INPUT -j bittorrent_in

  #$IPTABLES -A INPUT -i freenet_in

  $IPTABLES -A INPUT -j connessioni_avviate

# Applico le catene a OUTPUT

  $IPTABLES -A OUTPUT -m state --state INVALID -j DROP

  $IPTABLES -A OUTPUT -j icmp_out

  #$IPTABLES -A OUTPUT -j portscan

  $IPTABLES -A OUTPUT -o lo -j ACCEPT

  $IPTABLES -A OUTPUT -j ftp_out

  $IPTABLES -A OUTPUT -j ssh_out

  $IPTABLES -A OUTPUT -j smtp_out

  $IPTABLES -A OUTPUT -j timeserver_out

  $IPTABLES -A OUTPUT -j dns_out

  $IPTABLES -A OUTPUT -j pop3_out

  $IPTABLES -A OUTPUT -j netbios_out

  $IPTABLES -A OUTPUT -j http_out

  $IPTABLES -A OUTPUT -j microsoft_ds_out

  $IPTABLES -A OUTPUT -j https_out

  $IPTABLES -A OUTPUT -j realtime_out

  $IPTABLES -A OUTPUT -j ipp_out

  $IPTABLES -A OUTPUT -j rsync_out

  $IPTABLES -A OUTPUT -j pop3s_out

  $IPTABLES -A OUTPUT -j ms_streaming_out

  $IPTABLES -A OUTPUT -j msn_messanger_out

  #$IPTABLES -A OUTPUT -j gnunet_out

  $IPTABLES -A OUTPUT -j skype_out

  $IPTABLES -A OUTPUT -j ed2k_out

  $IPTABLES -A OUTPUT -j amule_out

  $IPTABLES -A OUTPUT -j icq_out

  $IPTABLES -A OUTPUT -j jabber_out

  $IPTABLES -A OUTPUT -j bittorrent_out

  $IPTABLES -A OUTPUT -j bittorrent_tracker_out

  #$IPTABLES -A OUTPUT -j freenet_out

  $IPTABLES -A OUTPUT -j connessioni_avviate

# Applico le catene a FORWARD

  $IPTABLES -A FORWARD -m state --state INVALID -j DROP

  $IPTABLES -A FORWARD -j icmp_out

  #$IPTABLES -A FORWARD -j portscan

  $IPTABLES -A FORWARD -o lo -j ACCEPT

  $IPTABLES -A FORWARD -j ftp_out

  $IPTABLES -A FORWARD -j smtp_out

  $IPTABLES -A FORWARD -j timeserver_out

  $IPTABLES -A FORWARD -j dns_out

  $IPTABLES -A FORWARD -j pop3_out

  $IPTABLES -A FORWARD -j http_out

  $IPTABLES -A FORWARD -j https_out

  $IPTABLES -A FORWARD -j realtime_out

  $IPTABLES -A FORWARD -j rsync_out

  $IPTABLES -A FORWARD -j pop3s_out

  $IPTABLES -A FORWARD -j ms_streaming_out

  $IPTABLES -A FORWARD -j msn_messanger_out

  #$IPTABLES -A FORWARD -j gnunet_out

  $IPTABLES -A FORWARD -j skype_out

  $IPTABLES -A FORWARD -j ed2k_out

  $IPTABLES -A FORWARD -j amule_out

  $IPTABLES -A FORWARD -j icq_out

  $IPTABLES -A FORWARD -j jabber_out

  #$IPTABLES -A FORWARD -j bittorrent_out

  #$IPTABLES -A FORWARD -j bittorrent_tracker_out

  #$IPTABLES -A FORWARD -j freenet_out

  $IPTABLES -A FORWARD -j connessioni_avviate

##########################################################################

# NAT CHAIN

##########################################################################

  #$IPTABLES -I FORWARD -i $IFACE -d 192.168.0.0/255.255.0.0 -j DROP

  #$IPTABLES -A FORWARD -i $IFACE -s 192.168.0.0/255.255.0.0 -j ACCEPT

  #$IPTABLES -A FORWARD -i $EFACE -d 192.168.0.0/255.255.0.0 -j ACCEPT

  $IPTABLES -t nat -A POSTROUTING -o $EFACE -j MASQUERADE

##########################################################################

# Variabili SYS-CTL

##########################################################################

# Abilita o disabilita l'IP FORWARDING

# echo "1" > /proc/sys/net/ipv4/ip_forward

/bin/echo "1" > /proc/sys/net/ipv4/ip_forward

# DYNAMIC ADDRESSING (utile per il forwarding)

# /bin/echo "1" > /proc/sys/net/ipv4/ip_dynaddr

# Disabilita l'IP Spoofing

/bin/echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

# Non rispondere ai PING

# /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

# Non rispondere agli ICMP BROADCAST (attacchi smurf)

# /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Disabilita l'accettazione dei REDIRECT

/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

/bin/echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects

# Protezione verso i messaggi di errore ICMP malformati

/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Disabilita i pacchetti source routed (previene dal guardare attraverso il NAT)

/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

# Abilita LOG_MARTIANS (effettua il log dei pacchetti strani)

/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

# Abilita il  REVERSE PATH FILTERING

for i in /proc/sys/net/ipv4/conf/*; do

  /bin/echo "1" > $i/rp_filter

done

```

----------

## Cazzantonio

 *MonsterMord wrote:*   

> 2) Nella guida http://www.gentoo.org/doc/en/security/security-handbook.xml?part=1&chap=12 la regola per il postscan e' applicata anche per le catene OUTPUT e FORWARD, non ne capisco il motivo.

 

Se la regola per i portscan viene messa dopo quella che droppa i pacchetti "INVALID" allora non prende niente... La maggior parte dei pacchetti usati per i portscan sono appunto INVALID quindi vengono droppati prima di essere loggati   :Wink: 

P.S. hai delle particolari ragioni per autorizzare solo determinate porte in uscita? Altrimenti che senso ha mettere delle regole in uscita? Serve solo a limitare gli utenti...

Non ho mai usato la regola per i syn-flood ma penso che si posa togliere semplicemente l'ultima riga (quella del drop)

Mi pare inoltre che i syn-flood non funzionino nemmeno con i kernel recenti (ma non confermo)... mi sa che tolgo proprio la regola dallo script iniziale   :Wink: 

----------

## MonsterMord

 *Cazzantonio wrote:*   

> 
> 
> P.S. hai delle particolari ragioni per autorizzare solo determinate porte in uscita? Altrimenti che senso ha mettere delle regole in uscita? Serve solo a limitare gli utenti...

 

Serve a chiudermi fuori dalla rete  :Very Happy: 

A parte gli scherzi, nella pratica non serve a niente (come del resto l'uso del mio firewall, con il tcpwrapper avrei avuto lo stesso grado di sicurezza).

L'ho abilitato per puro scopo didattico; ho client win98 e winnt, se qualcuno volesse accedere all'esterno senza autorizzazione ne sarei informato. Per quello ho abilitato il LOG di tutto il traffico Bad.

----------

## Dr.Dran

 *k.gothmog wrote:*   

> ho quasi paura a fare questa domanda: non vorrei si scatenasse un flame...
> 
> ma mi dite che senso ha fare uno script di avvio per il firewall?
> 
> non si possono scrivere le regole in /var/lib/iptables/rules-save? sarebbe un enorme risparmio di tempo, e mette al sicuro dai potenziali errori di scrittura del firewall

 

Scusate se arrivo in ampio ritardo... comunque gli script che avete presentato sono molto carini... però sono della medesima opinione di k.gothmog di cui cito integralmente il post... dal mio punto di vista è inutile preparare script per le varie configurazioni, nel senso che uno scritp di questo tipo non è flessibile e non è riutilizzabile in qualsiasi situazione... sarebbe molto + interessante sviluppare una piccola interfaccia semplice ed intuitiva per creare regole di firewalling con iptables... lo so che esistono programmai che faano già questo... ma secondo voi sono veramente usabili? Cosa manca? Beh per quello che riguarda la mia esperienza che viene dalla shell (quindi un ambiente non definibile come usabile) le interfaccie che sono in giro fanno schifo... (citando Icaza direi un bel "sucks")   :Very Happy:   :Very Happy:   :Very Happy: 

Scusate se sono andato un pochino Off-Topic... ma mi sembrava una cosa + sensata...

Ciauz   :Very Happy:   :Very Happy:   :Very Happy: 

----------

## Cazzantonio

 *DranXXX wrote:*   

> dal mio punto di vista è inutile preparare script per le varie configurazioni, nel senso che uno scritp di questo tipo non è flessibile e non è riutilizzabile in qualsiasi situazione... 

 

Beh lo script serve solo per lanciare iptables (che è discretamente flessibile)... sei liberissimo di scrivere regole personalizzate e di lanciare mettendo una riga in /etc/conf.d/local.start... io continuo a preferire lo script di init per via dei simpatici ok verdi che mi stampa a destra dello schermo   :Wink: 

 *DranXXX wrote:*   

> Scusate se sono andato un pochino Off-Topic... ma mi sembrava una cosa + sensata...

 

Scrivere una gui per iptables richiede due balle grosse come una casa e tanto tempo da perderci... il mio script mi ha preso al massimo un'oretta... questo mi pare sensato   :Wink: 

Le balle grosse come una casa servono perché una gui per iptables che contenesse tutte le opzioni che puoi dare da terminale dovrebbe essere fatta troppo bene e troppo complicata imho (ma non ho mai usato delle gui per iptables quindi...)

In ogni caso scusa ma non capisco l'affermazione "a me non piace usare script di init" dentro questo thread... liberissimo... tuttavia mica ti costringo ad usarlo...

----------

## Dr.Dran

 *Cazzantonio wrote:*   

> In ogni caso scusa ma non capisco l'affermazione "a me non piace usare script di init" dentro questo thread... liberissimo... tuttavia mica ti costringo ad usarlo...

 

Ma chi l'ha detto?   :Wink:  Io non ho scritto questo   :Wink: 

Il concetto è che esiste già lo script di iptables e che basta editare come diceva k.gothmog il file var/lib/iptables/rules-save... perchè scrivere uno script ex novo? Tutto qui...   :Wink: 

[OT]Mah, la mia è solo una provocazione, il problema è che quando devi dare in mano un servizio come un server o un router con sopra installato linux a un CED esterno... di solito è sempre un macello... il + delle volte quando si parla di modificare file di conf a manina ti storcono il naso... anche perchè la competenza è abbastanza limitata...   :Wink:  [/OT]

EDIT: scusate, ma ogni tanto sclero un pochino... sapete fare 2 lavori massacra un pochino! (contorsione linguistica)  :Very Happy: 

----------

## Ilvalle

Ciao, ho provato il firewall 

l'ho modificato un po a mio piacimento, e cercando un po in giro non mi sembra

di aver fatto delle castronerie.

ora il problema sono i portscan

questo è la mia config

http://www.cs.unibo.it/~valleri/files/fw

Se faccio anche solo 

```

valleri@prosecco:~$ nmap -P0 masia5.homelinux.org -p 22 

Starting Nmap 4.00 ( http://www.insecure.org/nmap/ ) at 2006-03-13 22:10 CET

Interesting ports on adsl-ull-186-3.41-151.net24.it (151.41.3.186):

PORT   STATE SERVICE

22/tcp open  ssh

Nmap finished: 1 IP address (1 host up) scanned in 1.205 seconds

```

cosa sbaglio??

Paolo

----------

## neryo

@Ilvalle in che senso hai problemi con i port scan? non vuoi vedere la porta ssh aperta?

----------

## Ilvalle

Si,

il problema è che non vorrei che con i portscan si possa sapere 

quali servizi offre il mio server...

Infatti nelle impostazioni del fw, i portscan dovrebbere essere droppati.

Paolo

----------

## neryo

 *Ilvalle wrote:*   

> Si,
> 
> il problema è che non vorrei che con i portscan si possa sapere 
> 
> quali servizi offre il mio server...
> ...

 

potresti usare il port knocking... 

http://www.portknocking.org/

oppure usare per ssh una porta diversa, tanto sicuramente se usi una  buon user e password e hai disabilitato il login da root e' piu che sicuro.. non trovi?

----------

## Ilvalle

Ciao, 

Ho già qualche livello di sicurezza, il motivo del post era la non presenza

dei log quando faccio i portscan, vedi il caso che ho postato prima i log 

non ne sanno nulla...

Cmq, da root non ti puoi collegare via ssh

l'unico che fa parte del gruppo wheel è il mio.

utilizzo un demone

denyhosts, che evita gli ssh automatici.

Qualche altro consiglio?

Per i portnocking, per ora non credo di averne bisogno

Sicuri non si è mai,

andando un po in OT,per esempio il chroot, è una delle syscall di sistema + bacata che ci sia...

Paolo

----------

## Cazzantonio

il fatto è che se la porta è aperta puoi farci poco... i portscan vengono loggati ma solo se usano pacchetti malformati...

una richiesta legittima di connessione su una porta aperta viene vista e ovviamente passa... ti consiglio di chiudere la porta o spostarla su una >1024 (anzi >10000 già che ci sei)

----------

## Ilvalle

Cosa cambierebbe spostare la porta ssh su porte cosi alte?

Dunque tutti i portscan con relativi log e drop, fanno poco cmq.

droppano pacchetti strani, ma se la porta e' aperta lo possono

capire.

La situazione di sicurezza e' "tranquilla" a livello dell'ssh,

prodotto bsd, se non erro.

Mi allarmo, quando la macchina in questione ha dei demoni in ascolto

"deboli", vedi cvs per esempio.

Paolo

----------

## Cazzantonio

 *Ilvalle wrote:*   

> Cosa cambierebbe spostare la porta ssh su porte cosi alte?

 

Minori tentativi di accesso da parte di programmini automatici che tentano utente+password a caso sulla porta standard 22.... io da quando ho spostato la porta non ricevo più alcun tentativo di connessione.

L'unico problema è scrivere ogni volta "-p <porta>" davanti al comando ssh che se lo fai spesso può diventare una seccatura... puoi aiutarti creando qualche alias   :Wink: 

----------

## Ilvalle

Per quel problema, uso denyhosts, dopo tot tentaviti viene negato 

all'ip di collegarsi alla macchina.

cambiare la porta e' facile se solo tu accedi, al contrario non e' 

possibile. E' per questo che si sono gli standard!

E' un -p nel caso dell'ssh, un -P per l' scp ecc ecc

Ogni programma ha le sue opzioni : (

Paolo

----------

## quantumwire

 *Cazzantonio wrote:*   

> A giro per la rete (e per le guide gentoo) ho raccattato un po' di script di init per iptables e ne ho fatto un copia&incolla ragionato...

 

Sai se e' possibile introdurre pure la possibilita' di montare sul PC che runna il tuo firewall un fs via nfs presente su eth0

ovvero esportato da un pc presente su quella interfaccia?

Ho provato a rendere non dinamiche le porte relative al servizio rpc/nfs sul pc firewall:

```
[matteo@hydrogen ~]$ cat /etc/conf.d/nfs

# /etc/conf.d/nfs

# If you wish to set the port numbers for lockd,

# please see /etc/sysctl.conf

# Number of servers to be started up by default

RPCNFSDCOUNT=8

# Options to pass to rpc.mountd

# ex. RPCMOUNTDOPTS="-p 32767"

RPCMOUNTDOPTS="-p 32767"

# Options to pass to rpc.statd

# ex. RPCSTATDOPTS="-p 32765 -o 32766"

RPCSTATDOPTS="-p 32765 -o 32766"

# OPTIONS to pass to rpc.rquotad

# ex. RPCRQUOTADOPTS="-p 32764"

RPCRQUOTADOPTS="-p 32764" 

# Options to pass to rpc.idmapd

RPCIDMAPDOPTS=""

# Options to pass to rpc.gssd

RPCGSSDOPTS=""

# Options to pass to rpc.svcgssd

RPCSVCGSSDOPTS=""

# Timeout (in seconds) for exportfs

EXPORTFSTIMEOUT=30
```

ma non so se devono essere aggiunte delle opportune regole regole al tuo script.

Grazie.

----------

## Cazzantonio

basta aprire le porte usate dal servizio richiesto...

----------

## quantumwire

 *Cazzantonio wrote:*   

> basta aprire le porte usate dal servizio richiesto...

 

Scusa la mia ignoranza in materia ma delle regole cosi vanno bene?

```
iptables -A INPUT -p tcp -s 0/0 -d 0/0 -i eth0 --dport 111 -j ACCEPT

iptables -A INPUT -p udp -s 0/0 -d 0/0 -i eth0 --dport 111 -j ACCEPT

iptables -A INPUT -p tcp -s 0/0 -d 0/0 -i eth0 --dport 2049 -j ACCEPT

iptables -A INPUT -p udp -s 0/0 -d 0/0 -i eth0 --dport 2049 -j ACCEPT

iptables -A INPUT -p tcp -s 0/0 -d 0/0 -i eth0 --dport 4001 -j ACCEPT

iptables -A INPUT -p udp -s 0/0 -d 0/0 -i eth0 --dport 4001 -j ACCEPT

iptables -A INPUT -p tcp -s 0/0 -d 0/0 -i eth0 --dport 32764:32767 -j ACCEPT

iptables -A INPUT -p udp -s 0/0 -d 0/0 -i eth0 --dport 32764:32767 -j ACCEPT
```

pero' non so dove metterle nel tuo script.

PS: in realta' i due teraserver che esportano i fs hanno indirizzi rispettivamente 128.178.54.117 e 128.178.54.119.

Dovrei dunque cambiare la regola in questo modo?

iptables -A INPUT -p tcp -s  128.178.54.117 -d 0/0 -i eth0 --dport 2049 -j ACCEPT

Grazie.

----------

## Cazzantonio

beh il modo corretto è creare delle catene come quelle del mio script e poi caricarle nella sezione apposita... comunque il modo migliore per vedere se funzionano è provare e vedere   :Wink: 

----------

## mack1

Ciao ragazzi mi sono accorto solo adesso che collegandomi ad internet (pppoe-start) vengono modificate alcune regole dello script di Cazzantonio:premessa uso integralmente lo script di Cazzantonio avendo però modificato(decommentato) i servizi che non uso tipo ssh o bittorrent; non faccio partire la connessione al boot ma manualmente.

Dopo il boot (eseguito senza che lo script dia errori) digitando iptables -L ho queste regole:

```
Chain INPUT (policy DROP)

target     prot opt source               destination

portscan   all  --  anywhere             anywhere

DROP       all  --  anywhere             anywhere            state INVALID

icmp_in    all  --  anywhere             anywhere

ACCEPT     all  --  anywhere             anywhere

connessioni_avviate  all  --  anywhere             anywhere

Chain FORWARD (policy DROP)

target     prot opt source               destination

DROP       all  --  anywhere             anywhere            state INVALID

ACCEPT     all  --  anywhere             anywhere

connessioni_avviate  all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

Chain connessioni_avviate (2 references)

target     prot opt source               destination

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

LOG        all  --  anywhere             anywhere            limit: avg 3/hour burst 5 LOG level warning prefix `FW:Bad packet from eth0:'

DROP       all  --  anywhere             anywhere

Chain icmp_in (1 references)

target     prot opt source               destination

ACCEPT     icmp --  anywhere             anywhere            icmp time-exceeded

ACCEPT     icmp --  anywhere             anywhere            icmp destination-unreachable

Chain portscan (1 references)

target     prot opt source               destination

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,PSH,URG limit: avg 5/min burst 5 LOG level alert prefix `FW:SCAN:NMAP-XMAS:'

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,PSH,URG

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG limit: avg 5/min burst 5 LOG level alert prefix `FW:SCAN:XMAS:'

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,ACK,URG limit: avg 5/min burst 5 LOG level alert prefix `FW:SCAN:XMAS-PSH:'

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,ACK,URG

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE limit: avg 5/min burst 5 LOG level alert prefix `FW:SCAN:NULL_SCAN:'

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE

LOG        tcp  --  anywhere             anywhere            tcp flags:SYN,RST/SYN,RST limit: avg 5/min burst 5 LOG level notice prefix `FW:SCAN:SYN/RST:'

DROP       tcp  --  anywhere             anywhere            tcp flags:SYN,RST/SYN,RST

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN/FIN,SYN limit: avg 5/min burst 5 LOG level notice prefix `FW:SCAN:SYN/FIN:'

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN/FIN,SYN

```

Mentre dopo la connessione le catene input e forward vengono modificate:

```
iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

LOG        udp  --  anywhere             anywhere            udp dpts:0:1023 LOG level warning

LOG        tcp  --  anywhere             anywhere            tcp dpts:0:1023 LOG level warning

DROP       udp  --  anywhere             anywhere            udp dpts:0:1023

DROP       tcp  --  anywhere             anywhere            tcp dpts:0:1023

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN LOG level warning

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN

DROP       icmp --  anywhere             anywhere            icmp echo-request

Chain FORWARD (policy DROP)

target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

Chain connessioni_avviate (0 references)

target     prot opt source               destination

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

LOG        all  --  anywhere             anywhere            limit: avg 3/hour burst 5 LOG level warning prefix `FW:Bad packet from eth0:'

DROP       all  --  anywhere             anywhere

Chain icmp_in (0 references)

target     prot opt source               destination

ACCEPT     icmp --  anywhere             anywhere            icmp time-exceeded

ACCEPT     icmp --  anywhere             anywhere            icmp destination-unreachable

Chain portscan (0 references)

target     prot opt source               destination

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,PSH,URG limit: avg 5/min burst 5 LOG level alert prefix `FW:SCAN:NMAP-XMAS:'

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,PSH,URG

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG limit: avg 5/min burst 5 LOG level alert prefix `FW:SCAN:XMAS:'

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,ACK,URG limit: avg 5/min burst 5 LOG level alert prefix `FW:SCAN:XMAS-PSH:'

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,ACK,URG

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE limit: avg 5/min burst 5 LOG level alert prefix `FW:SCAN:NULL_SCAN:'

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE

LOG        tcp  --  anywhere             anywhere            tcp flags:SYN,RST/SYN,RST limit: avg 5/min burst 5 LOG level notice prefix `FW:SCAN:SYN/RST:'

DROP       tcp  --  anywhere             anywhere            tcp flags:SYN,RST/SYN,RST

LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN/FIN,SYN limit: avg 5/min burst 5 LOG level notice prefix `FW:SCAN:SYN/FIN:'

DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN/FIN,SYN

```

Facendo ripartire il servizio "muro-di-fuoco" le regole dello script vengono ricaricate senza errori!La cosa per un niubbo come me è un mistero... come posso risolvere l'inconveniente?

Ciao  Mack1

----------

## mack1

Risolto: stupidamente   :Embarassed:   avevo lasciato attivo lo script che viene caricato eseguendo pppoe-start (stanalone invece di none) così caricava quelle regole.

Scusate   :Crying or Very sad: 

Ciao

----------

## lucapost

Questo è il mio kernel:

```
jarod iptables # uname -a

Linux jarod 2.6.18-gentoo-r1 #7 SMP Wed Oct 18 21:19:13 CEST 2006 x86_64 AMD Turion(tm) 64 X2 Mobile Technology TL-50 AuthenticAMD GNU/Linux
```

Inoltre nel make.conf:

```
jarod iptables # cat /etc/make.conf | grep KEYWORDS

ACCEPT_KEYWORDS="~amd64"
```

Sto cercando di imparare ad utilizzare iptables, come punto di partenza uso lo script di cazzantonio.

Preferisco comunque creare un nuovo script (non init), che ho scopiazzato dall'/etc/conf.d/muro_di_fuoco, e poi gestire il firewall con /etc/init.d/iptables e le sue opzioni.

Ora avrei qualche domanda.

Riferendomi all'inizio di questo thread:

 *Cazzantonio wrote:*   

> 
> 
> [b]Di default setta INPUT e FORWARD su DROP e OUTPUT su ACCEPT

 

Ho mantenuto queste opzioni pure io,infatti il mio script inizia con:

```
$IPTABLES -F

$IPTABLES -F -t mangle

$IPTABLES -F -t nat

$IPTABLES -X

$IPTABLES -X -t mangle

$IPTABLES -X -t nat

$IPTABLES -P INPUT DROP

$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -P FORWARD DROP
```

 ma allora è necessario definire le catene di out, come icmp in uscita, ssh in uscita, ftp in uscita, rsync in uscita, ecc?

 *Cazzantonio wrote:*   

> 
> 
> Per poter loggare meglio gli eventi del vostro firewall (specialmente i portscan) potete impostare dei filtri in modo da catturare gli eventi del kernel relativi a queste stringhe:
> 
> ```
> ...

 

Nel mio syslog-ng.conf c'è questa riga:

```
jarod iptables # cat /etc/syslog-ng/syslog-ng.conf | grep /proc/kmsg

source src { unix-stream("/dev/log"); internal(); pipe("/proc/kmsg"); };
```

Non è che me ne intendo molto, anzi, aggiungo anche io le righe consigliate?

Luca.

----------

## Cazzantonio

 *lucapost wrote:*   

>  ma allora è necessario definire le catene di out, come icmp in uscita, ssh in uscita, ftp in uscita, rsync in uscita, ecc?

 

Perché scusa? se metti out in accept?

 *Quote:*   

> Nel mio syslog-ng.conf c'è questa riga:
> 
> ```
> jarod iptables # cat /etc/syslog-ng/syslog-ng.conf | grep /proc/kmsg
> 
> ...

 

beh in quel modo definisci una sorgente "src"... io avevo fatto una cosa un pochino più specifica...

E' semplice: definisci un source, un filter, una destination e con log unisci queste tre cose   :Wink: 

comunque non mi sembra questo il posto per mettersi a discutere in dettaglio di syslog   :Wink: 

----------

## lucapost

non capisco, quindi nel tuo /etc/conf.d/muro_di_fuoco non è necessario definite le catene icmp_out, ssh_out, http_out, ftp_out,...

in fondo non le applichi nemmeno alla catena di OUTPUT, giusto?

Luca

----------

## Cazzantonio

no sono lì solo come esempio

----------

## Cazzantonio

[AGGIORNAMENTO IMPORTANTE]

Ho modificato sia lo script di init che quello per il caricamento delle regole. nel primo post trovate tutti i dettagli

----------

## Luca89

 *Cazzantonio wrote:*   

> [AGGIORNAMENTO IMPORTANTE]
> 
> Ho modificato sia lo script di init che quello per il caricamento delle regole. nel primo post trovate tutti i dettagli

 

Tanto vale allora utilizzare lo script in /etc/firewall per creare le regole e poi lo script di avvio di iptables per caricarle, salvarle, ricaricarle all'avvio etc.

----------

## Cazzantonio

Ah si... anche se non mi pare che lo script di iptables possa fare molto a parte "save" e "restore" delle regole impostate. Sarò diffidente io ma non mi piace usare "save" e "restore".

In realtà basterebbe mettere in local.start lo script del firewall...

Questo script era nato in un epoca in cui lo script di iptables non esisteva. L'aggiornamento attuale infatti è nell'ottica che lo script di init ha una utilità relativa...

----------

## alegioit

Ciao ragazzi, ho un piccolo problema: sono un noob assurdo di linux, ma sono deciso a cercare di imparare il più possibile!

Ho installato gentoo su vari computer ed è andato tutto bene, ma quando tento di configurare iptables sul mio serverino-gateway non riesco a farlo partire!

Vi spiego la situazione: ho 3 computer collegati su una lan interna con ip fissi 192.168.0.2-3-4 netmask 255.255.255.0 e un server che natta la lan interna sulla rete esterna ( ho fastweb 2.244.x.x ).

Ho aperto un topic a riguardo, ma cazzantonio mi ha suggerito di scrivere in questo perchè accorpa tutti i messaggi su iptables!

Dunque ho provato lo script di inizializzazione sia di cazzantonio sia di MonsterMord, ma non mi funzionano: li faccio partire e non rieso a pingare ne la rete interna, ne l'esterna, ne andare su internet con il server, la connessione ssh salta e non posso più connettermi ( ne passando dalla rete esterna ne da quella interna ); per poter nuovamente connettermi devo stoppare iptables.

Lo script che sto usando adesso è quello di MonsterMord con alcune variazioni che spero siano giuste!

```

# Interfacce

IFACE=eth1 # Interfaccia interna LAN

EFACE=eth0 # Interfaccia esterna INTERNET

LAN=192.168.0.0/24

# Nameservers

NAMESERVER_1=213.140.2.12

NAMESERVER_2=213.140.2.21

```

Non so cosa possa essere, ma è come se quando faccio partire iptables e gli faccio caricare queste regole chiuda tutto e non possa passare più nulla!!

Non può essere qualche errore di compilazione del kernel ( come ho letto su una guida ho compilato tutto quello che c'era in netfilter come modulo quando possibile e built-in quando non lo era! Magari devo compilare solo alcune cose o le devo compilare come built-in? )

Di sicuro avrò fatto qualche errore, quindi ringrazio in anticipo chiunque mi risponda per la sua disponibilità!

NB: mi sono dimenticato di dirvi che ogni volta che la scheda di rete collegata all'hag parte mi dice che il valora di mtu ( 64 ) che trova è troppo basso e allora lo mette a default 512 ( o 536, nn mi ricordo ! ) può essere questo?Last edited by alegioit on Wed Sep 19, 2007 10:22 am; edited 1 time in total

----------

## Cazzantonio

 *alegioit wrote:*   

> Ciao ragazzi, ho un piccolo problema: sono un noob assurdo di linux, ma sono deciso a cercare di imparare il più possibile!

  Benissimo però forse l'argomento firewall necessiterebbe un'attimo di studio sopra...

Intanto i firewall, come concetto funzionano allo stesso modo su tutti i S.O.

In pratica devi domandarti "a che mi serve?" e "cosa ci voglio fare?". Devi capire quali servizi di rete vuoi offrire dal tuo pc, qual'è l'utilizzo del tuo pc (server, server con assolute necessità di sicurezza, desktop) e infine quali sono le porte utilizzate dai tuoi servizi.

Intanto risponditi a questo e poi ti do una mano con lo script.

Contattami via pm per non intasare questo thread.

P.S. potresti editare il tuo post, rimuovere lo script e postare solo le parti che hai modificato? E' molto lungo e intasa un po' il thread.

Solo se non è indispensabile (dici che hai modificato solo poche cose).

----------

## mack1

Ciao, syslog-ng è stato aggiornato alla versione 3 e c'è stata una modifica all'uso di "match":

```

destination firewall { file("/var/log/firewall.log"); };

filter f_firewall { match ("FW:"); };

log { source(kernsrc); filter(f_firewall); destination(firewall); };

```

Riavviando syslog-ng ottengo il seguente messaggio:

```

WARNING: the match() filter without the use of the value() option is deprecated and hinders performance, please update your configuration;

```

Allora "match()" cerca, non solo nel testo del messaggio d'errore, ma anche nel payload (es. il programma/demone che ha generato l'errore), mentre "message()" controlla solo il testo del messaggio.

http://www.balabit.com/dl/html/syslog-ng-v3.0-guide-admin-en.html/ch08s04.html

Anche qui si discute del "problema":

https://bugs.gentoo.org/show_bug.cgi?id=291259

Seguendo la guida va modificato il file di configurazione di syslog-ng:

```

filter f_firewall { message("FW"); };

```

O usando match():

```

match("<some regexp>" value("<a macro name>"))

```

Sono ancora in fase di test perchè i log del firewall vengono scritti sempre in /var/log/debug, ma a singhiozzo in firewall.log, non riesco a capire se sia un problema di sintassi si syslog-ng, o di caratteri speciali all'interno della stringa di ricerca  :Embarassed:  .

Edit 1:

Ok adesso logga correttamente(mi mancava una sorgente all'interno del file di syslog-ng  :Very Happy:  ), usate "message()" che appesantisce meno l'attività di logging.

Ciao

----------

