Iptables: "Policy DROP" Firewall

Postate qui per tutte le discussioni legate alla sicurezza di Linux/Slackware

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
wally
Linux 3.x
Linux 3.x
Messaggi: 519
Iscritto il: sab 30 ott 2004, 0:00
Località: Genova

Iptables: "Policy DROP" Firewall

Messaggio da wally »

Ciao a tutti,
e' quasi una settimana che mi sto cimentando nella realizzazione di un firewall con policy DROP.
Avendo a che fare spesso con reti (e tipi) poco affidabili mi piacerebbe fare in modo di poter avere tutte le porte che non mi servono chiuse.

NOTA: a parte "lo" non specifico ulteriori interfacce di rete, perche' ne utilizzo alternativamente due (eth0 e wlan0) e le regole devono valere per entrambe

Nel campo della sicurezza sono molto niubbo, quindi si accetta qualsiasi consiglio.

Ho cominciato cosi':

Codice: Seleziona tutto

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
Qui spunta la prima incertezza: devo dare come policy DROP anche a FORWARD? E' necessario?

Apro la strada al lo

Codice: Seleziona tutto

# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
Ora permetto l'ingresso alle connesioni che abbiano come stato RELATED ed ESTABLISHED

Codice: Seleziona tutto

# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
Fin qui piu' o meno tutto ok.

Decido poi di sbloccare l'uscita per il l'utilizzo di http

Codice: Seleziona tutto

# iptables -A OUTPUT -p tcp -m multiport --dports 80,8080 -j ACCEPT
# iptables -A OUTPUT -p udp -m multiport --dports 80,8080 -j ACCEPT
A questo punto tento di visitare un qualsiasi sito con firefox, ma non vado da nessuna parte.
Il firewall ferma tutto in uscita. Non lascia passare neanche http. 8O

Non cambia nulla neanche se alle due istruzioni precedenti aggiungo: -m state --state NEW,RELATED,ESTABLISHED

Avete suggerimenti in proposito?

Grazie
The Wally


P.S.: Se mi date una mano a realizzare 'sto benedetto firewall mi sfogo con un HOWTO :D :D

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

prima di tutto sappi che http non usa udp, quindi aprire l'80 x tcp è sufficiente.

il problema credo sia il fatto che blocchi le richieste dns :). dns usa udp sulla porta 53, aprila in uscita.

Avatar utente
Sawk
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: dom 6 feb 2005, 0:00
Località: Pordenone, Italy
Contatta:

Messaggio da Sawk »

io penserei ai tipi di pacchetti...tempo fa avevo scritto un firewall sul modello di quello di mike per postarlo, alla fine non l'ho più fatto. Te lo pasto per darti una mano ;-)

#!/bin/bash
# Firewall by OhiOhiOhi
# AVVIATE QUESTO FIREWALL DA ROOT


# Settare i seguenti valori in base alle proprie esigenze
INT=eth0
LOCALHOST="127.0.0.1"
DNS1="130.244.127.161" # In questi due punti inserite i DNS del vostro
DNS2="130.244.127.169" # provider. In default ho messo quelli tele2
ETH="192.168.1.1"

IPT=iptables

echo "Firewall by OhiOhiOhi"
echo " "

case $1 in

## START

start)
echo "Sto attivando il firewall..."

# Politiche

input=DROP
output=ACCEPT
fw=DROP

## Inizio bash scripting per iptables
## Opzioni kernel

echo "Carico i moduli del kernel"
modprobe iptable_filter
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_tables
modprobe ipt_mac
modprobe ipt_limit
modprobe ip_queue
modprobe ipt_state
modprobe ipt_owner
modprobe ipt_REJECT
modprobe ipt_unclean
modprobe ipt_multiport

echo "Setto contromisure contro attacchi"
## Contromisure contro attacchi DoS: da usare solo sotto attacco
# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
# echo "100" > /proc/sys/net/ipv4/vs/timeout_synack
# echo "10" > /proc/sys/net/ipv4/vs/timeout_synrecv
# echo "128" > /proc/sys/net/ipv4/tcp_max_syn_backlog

# Questo comando ignora tutti i ping alla vostra macchina, abilitandolo
# potreste avere problemi di rete
# echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

# Riduce il numero di SYN-FLOOD
echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog

# Protezione contro SYS-FLOOD attack
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

# Ignora i pacchetti indirizzati a broadcast
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# serve per abilitare il trasferimento di pacchetti tra interfacce
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Protezione contro spoofing e sourcerouting
echo "1" > /proc/sys/net/ipv4/tcp_rfc1337

# Una protezione in più anche se utilizzata in combinazione con router
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

# Da disabilitare solo se non si usa un Router
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

# non logga i pacchetti con difetti
echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects

# Effettua controlli sui pacchetti ICMP
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects

# Protezione da proxy ARP
echo "0" > /proc/sys/net/ipv4/conf/all/proxy_arp

# Controlla il routing: Serve per prevenire in piccola parte un
# ip_spoofing al computer
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

# Questo comando logga i pacchetti martirians ovvero i pacchetti senza
# tragitto certo
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

# Abilita il dynamic socket address rewriting
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

# Setta le porte locali
echo "56000:65096" > /proc/sys/net/ipv4/ip_local_port_range

# Disabilita il Forwarding
echo "0" > /proc/sys/net/ipv4/ip_forward

# Torsmo :D usare execi per fare un cat sul file
# echo "Firewall ON" > "vostro_file_torsmo"

## IPTABLES

echo "Setto iptables"
# Preparo le chain

$IPT -F
$IPT -P INPUT $input
$IPT -P OUTPUT $output
$IPT -P FORWARD $fw
$IPT -N CHAIN-SCAN
$IPT -N SYN-FLOOD

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Utile comando per accettare solo alcuni tipi di icmp
for ic in 0 3 11 ; do
$IPT -A INPUT -i $INT -p icmp --icmp-type $ic -j ACCEPT
done

# Abilita i DNS replays
$IPT -A INPUT -i $INT -p udp -s $DNS1 --dport 53 -j ACCEPT
$IPT -A INPUT -i $INT -p udp -s $DNS2 --dport 53 -j ACCEPT
$IPT -A INPUT -i $INT -p udp -s $ETH --dport 53 -j ACCEPT
$IPT -A INPUT -i $INT -p udp -s $DNS1 --sport 53 -j ACCEPT
$IPT -A INPUT -i $INT -p udp -s $DNS2 --sport 53 -j ACCEPT

# Blocca pacchetti broadcast
$IPT -A INPUT -p ALL -d 255.255.255.255 -j $input
$IPT -A INPUT -s 10.128.0.0/255.255.0.0 -j $input

# Crea catene SYN-FLOOD
$IPT -A INPUT -p tcp --syn -j SYN-FLOOD
$IPT -t filter -A SYN-FLOOD -m limit --limit 1/s --limit-burst 4 -j CHAIN-SCAN

# Protezione contro Xmas scan
$IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j CHAIN-SCAN
$IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK -j CHAIN-SCAN

# Blocccare scansioni senza flag
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j CHAIN-SCAN
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j CHAIN-SCAN

# Bloccare pacchetti SYN+RST e SYN+FIN
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j CHAIN-SCAN

# Bloccare scansioni FIN
$IPT -A INPUT -p tcp --tcp-flags FIN FIN -j CHAIN-SCAN

# Sicurezze alternative
$IPT -A INPUT -p udp --dport 135:139 -j DROP
$IPT -A INPUT -p tcp --dport 6000 -j DROP

# Abilito localhost
$IPT -A INPUT -s $LOCALHOST -j ACCEPT

# Usare questi parametri per abilitare aMule
$IPT -A INPUT -p tcp --sport 4661:4662 -j ACCEPT
$IPT -A INPUT -p udp --sport 4661:4666 -j ACCEPT
$IPT -A INPUT -p tcp --dport 4662 -j ACCEPT
$IPT -A INPUT -p udp --dport 4665 -j ACCEPT

# Usare per abilitare scambio file in aMsn
$IPT -A INPUT -p tcp --dport 6891:6895 -j ACCEPT

# Usare per abilitare DCC
$IPT -A INPUT -p tcp --dport 3333 -j ACCEPT


echo " "
echo "Firewall attivato "

;;

## STOP

stop)
echo "Risistemo tutto come era prima"

# Politiche

input=ACCEPT
output=ACCEPT
fw=ACCEPT

# Risetto i valori di kernel
echo "0" > /proc/sys/net/ipv4/tcp_syncookies
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "0" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "0" > /proc/sys/net/ipv4/tcp_rfc1337
echo "1" > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "1" > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects
echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/proxy_arp
echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/all/log_martians
echo "0" > /proc/sys/net/ipv4/ip_dynaddr
echo "1" > /proc/sys/net/ipv4/ip_forward
# echo "Firewall OFF" > "vostro_tordsmo_filez"

# Risetto le politiche di default

$IPT -F
$IPT -X CHAIN-SCAN
$IPT -X SYN-FLOOD
$IPT -P INPUT $input
$IPT -P OUTPUT $output
$IPT -P FORWARD $fw

echo " "
echo "Firewall disattivato...ora prova a pararti your butt :P"

;;

*)
echo "firez [start|stop]"
echo "Nel caso attiviate il firewall due volte consecutive"
echo "potrebbero esserci degli errori di esistenza di chain"
echo "Ignorateli pure :)"
echo "Eventualmente se riscontrate errori di altro tipo"
echo "verificate la correttezza dei parametri..."
echo " "
echo "Mi raccomando leggete con attenzione il firewall e"
echo "settate i parametri prima di dare start ... ENJOY!"

;;

esac

echo " "

Avatar utente
wally
Linux 3.x
Linux 3.x
Messaggi: 519
Iscritto il: sab 30 ott 2004, 0:00
Località: Genova

Messaggio da wally »

useless ha scritto:prima di tutto sappi che http non usa udp, quindi aprire l'80 x tcp è sufficiente.
Grazie per le dritte...

Ho dato un'occhiata a /etc/servicese e per http trovo:
http 80/tcp www www-http === INCLUSA NEL FIREWALL
http 80/udp www www-http === NON INCLUSA NEL FIREWALL, FUNZIONA ANCHE SENZA ==
https 443/tcp == NECESSARIA ??? PER ORA LA INCLUDO :D
https 443/udp == DATO CHE http SU udp NON SERVE PENSO NON SERVA NEANCHE QUESTO... GIUSTO?
gss-http 488/tcp == INUTILE IN UNA CONFIGURAZIONE GENERICA?
gss-http 488/udp == INUTILE IN UNA CONFIGURAZIONE GENERICA?
http-alt 591/tcp == VA INCLUSA ??
http-alt 591/udp == VA INCLUSA ??
sgi-esphttp 5554/tcp == INUTILE IN UNA CONFIGURAZIONE GENERICA?
sgi-esphttp 5554/udp == INUTILE IN UNA CONFIGURAZIONE GENERICA?
http-alt 8008/tcp == VA INCLUSA ??
http-alt 8008/udp == STESSO DISCORSO DI HTTP SULLA PORTA 80...
http-alt 8080/tcp == VA INCLUSA ??
http-alt 8080/udp == STESSO DISCORSO DI HTTP SULLA PORTA 80...


Devo includere anche la 8080, la 8008 e la 443 per https?
useless ha scritto: il problema credo sia il fatto che blocchi le richieste dns :). dns usa udp sulla porta 53, aprila in uscita.
Inutile dire che ancora una volta hai ragione :D

Grazie di tutto :D

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

443 è la porta https, quindi direi di sì se vuoi usare https. 8080 e 8008 dovrebbero essere le porte dei proxy, quindi se non ne usi credo che puoi farne a meno.

domanda: sicuro che valga la pena di avere addirittura la policy drop in uscita?

Avatar utente
wally
Linux 3.x
Linux 3.x
Messaggi: 519
Iscritto il: sab 30 ott 2004, 0:00
Località: Genova

Messaggio da wally »

useless ha scritto:443 è la porta https, quindi direi di sì se vuoi usare https. 8080 e 8008 dovrebbero essere le porte dei proxy, quindi se non ne usi credo che puoi farne a meno.
Nel caso in cui utilizzi i proxy sarebbe meglio che io dessi anche l'indirizzo del proxy, non solo la porta, così sarei sicuro che passi solamente su quel proxy ( che maniaco, eh? :roll: )
useless ha scritto: domanda: sicuro che valga la pena di avere addirittura la policy drop in uscita?


Fidati.. "poco affidabili" e' un eufemismo per certe persone :D

Grazie mille dell'aiuto :D

Avatar utente
wally
Linux 3.x
Linux 3.x
Messaggi: 519
Iscritto il: sab 30 ott 2004, 0:00
Località: Genova

Messaggio da wally »

Il prossimo problema e' configurare il firewall per l'utilizzo di samba.

Dando un'occhiata a questo link ho visto che per la gestione di un server samba bisognerebbe aprire molte porte in entrata.

Se e' realmente cosi', in teoria mi basterebbe permettere il passaggio di pacchetti verso le stesse porte (sempre con l'utilizzo del modulo multiport). Giusto?

MDS
Linux 1.x
Linux 1.x
Messaggi: 178
Iscritto il: gio 20 mag 2004, 0:00

Messaggio da MDS »

Io farei uno script così:

Codice: Seleziona tutto

#! /bin/bash

INT_RETE_ESTERNA=ppp0

echo 1 > /proc/sys/net/ipv4/tcp_syncookies #contro il syn flood
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter #contro Ip spoofing


iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP


iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
iptables -A INPUT -i $INT_RETE_ESTERNA -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A INPUT -p icmp  -j ACCEPT

echo FIREWALL ATTIVO 

Ho supposto che tu abbia un modem, se ti colleghi con ethernet sostituisci ppp0 con eth0.

In output, a mio avviso, è + conveniente fidarsi di se stessi... poi de gustibus...
Questo è un firewall base...
Poi sarebbe da aggiungere una regola sulla selezione del filtraggio degli ICMP... magari droppare solo i Ping e i traceroute (infatti ti ho messo commentata la riga che li accetta tutti).
Poi dopo ciò aggiungere Servizi a tuo piacimento....

In tutti i modi, io direi che prima di firewallare, chiudi i serviziche a te non servono....

Ciao :wink:

MDS
Linux 1.x
Linux 1.x
Messaggi: 178
Iscritto il: gio 20 mag 2004, 0:00

Messaggio da MDS »

Per samba direi che basta così

Codice: Seleziona tutto

#!/bin/bash 

INT_RETE_ESTERNA=eth0 

echo 1 > /proc/sys/net/ipv4/tcp_syncookies #contro il syn flood 
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter #contro Ip spoofing 


iptables -F 
iptables -P INPUT DROP 
iptables -P OUTPUT ACCEPT 
iptables -P FORWARD DROP 


########## INPUT ##############

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT 
iptables -A INPUT -i $INT_RETE_ESTERNA -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i $INT_RETE_ESTERNA -p tcp --dport 137:139 -j ACCEPT  
#iptables -A INPUT -p icmp  -j ACCEPT 

echo FIREWALL ATTIVO 


Comunque.... puoi descrivere la topologia della tua rete...
Tu fai parte di una Lan vero? Perchè se no così stai esponendo a tutta internet il tuo share Samba...
quindi potresti aggiungere info?

Ciao :wink:

Avatar utente
-Shark-
Linux 2.x
Linux 2.x
Messaggi: 238
Iscritto il: ven 24 giu 2005, 0:00
Località: Grumento Nova (Pz)
Contatta:

Messaggio da -Shark- »

Il topic sembra vecchiotto, comunque samba utilizza anche udp come protocollo, e non solo le porte 135:139 ma anche la 445 se non ricordo male, se non è 445 è qualcosa di simile... (a volte sembra sia solo quella... è un sistema alla caxxum)!
Una volta bloccai le porte 135:139 sulla connessione esterna perchè mi sparavano schifezze dalla rete su samba (con connessione gprs, pensa te...) sia in tcp che in udp, ma riuscivo comunque ad entrare nelle samba share, e firewallando anche quella porta ho risolto il problema! :)

Rispondi