Iptables e Vps, messa in sicurezza
Perché proteggere una macchina virtuale? Siamo su una rete pubblica ed aperta ad attacchi di ogni tipo.
Le principali difese da attuare riguardano attacchi di tipo SYN e ping flood. Un attacco di ping flood richiederebbe un’ulteriore protezione di tipo hardware, ma qualora il nostro fornitore di Vps non ne fosse provvisto, il metodo più valido per difendersi è utilizzare Iptables.
Quale tipo di traffico necessita di protezione? Il traffico in entrata necessita di essere regolato per prevenire gli attacchi, il traffico in uscita richiede attenzione per evitare che un’eventuale compromissione della macchina possa replicare i suoi effetti sulla rete adiacente.
Supponendo di avere la necessità di protezione su una macchina dotata di server Web, Mail e Pop/Imap server, possiamo delineare gli obiettivi dello script :
consentire il traffico web sulle porte 80 e 443
consentire il traffico ssh sulla porta 22
consentire il traffico dns sulla porta 53
consentire il traffico mail sulle porte 25, 110, 143, 993 e 995
bloccare i ping e i tentativi di scanning
Ricordiamoci di sostituire XXX.XXX.XXX.XXX di VPS_IP con l’ip address della macchina virtuale e XXX.XXX.XXX.XXX di IPREPO con l’indirizzo ip del repository degli aggiornamenti.
Lo script :
[ad#midarticlequadr-1]##BEGIN
#!/bin/bash
IPTABLES=/sbin/iptables
ALL_SOURCE="1024:65535"
VPS_IP="XXX.XXX.XXX.XXX"
IPREPO="XXX.XXX.XXX.XXX"
LPBCK="127.0.0.1"
## Svuotiamo tutte le catene
$IPTABLES -F
## Consente il traffico di loopback
$IPTABLES -A INPUT -i lo -s $LPBCK -j ACCEPT
## Consente le connessioni stabilite
$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
## Respinge i pacchetti frammentati
$IPTABLES -A INPUT -f -j DROP
## Respinge i pacchetti di tipo XMAS e NULL
$IPTABLES -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
## Blocca tutti i pacchetti provenienti da indirizzi di tipo privato
$IPTABLES -A INPUT -s 0.0.0.0/8 -j DROP
$IPTABLES -A INPUT -s $LPBCK -j DROP
$IPTABLES -A INPUT -s 10.0.0.0/8 -j DROP
$IPTABLES -A INPUT -s 172.16.0.0/12 -j DROP
$IPTABLES -A INPUT -s 224.0.0.0/3 -j DROP
$IPTABLES -A INPUT -s 192.168.0.0/16 -j DROP
## Consente l’uso dei DNS nella VM
$IPTABLES -A INPUT -p udp -s 0/0 --sport $ALL_SOURCE -d $VPS_IP --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p udp -s $VPS_IP --sport $ALL_SOURCE -d 0/0 --dport 53 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
## Permette gli aggiornamenti dai repositori
$IPTABLES -A INPUT -p tcp -s 0/0 --sport IPREPO -d $VPS_IP --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -s $VPS_IP --sport $ALL_SOURCE -d 0/0 --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
## Permette connessioni per il WWW in entrata ed in uscita
$IPTABLES -A INPUT -p tcp --sport $ALL_SOURCE -d $VPS_IP --dport 80 -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport $ALL_SOURCE -d $VPS_IP --dport 443 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -s $VPS_IP --sport 80 -d 0/0 --dport $ALL_SOURCE -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -s $VPS_IP --sport 443 -d 0/0 --dport $ALL_SOURCE -j ACCEPT
## Permette connessioni per SSH in entrata ed in uscita
$IPTABLES -A INPUT -p tcp -s 0/0 --sport $ALL_SOURCE -d $VPS_IP --dport 22 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -s $VPS_IP --sport 22 -d 0/0 --dport $ALL_SOURCE -j ACCEPT
## Permette connessioni DNS in entrata ed in uscita
$IPTABLES -A INPUT -p udp -s 0/0 --sport $ALL_SOURCE -d $VPS_IP --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -s $VPS_IP --sport 53 -d 0/0 --dport $ALL_SOURCE -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 0/0 --sport $ALL_SOURCE -d $VPS_IP --dport 53 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -s $VPS_IP --sport 53 -d 0/0 --dport $ALL_SOURCE -j ACCEPT
## Permette il traffico SMTP, IMAP e POP
$IPTABLES -A INPUT -p tcp --sport $ALL_SOURCE -d $VPS_IP --dport 110 -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport $ALL_SOURCE -d $VPS_IP --dport 143 -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport $ALL_SOURCE -d $VPS_IP --dport 993 -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport $ALL_SOURCE -d $VPS_IP --dport 995 -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport $ALL_SOURCE -d $VPS_IP --dport 25 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -s $VPS_IP --sport 25 -d 0/0 --dport $ALL_SOURCE -j ACCEPT
## Respinge tutto il traffico non diversamente indicato
$IPTABLES -A INPUT -s 0/0 -j DROP
$IPTABLES -A OUTPUT -s 0/0 -j DROP
##END
Lanciamo lo script da root per applicare le regole indicate :
# chmod +x iptables.sh
# ./iptables.sh
Articolo scritto per Valent Blog da Gagliardi Valentino.
Sistemista freelance, si occupa della gestione di piattaforme Unix/Linux su sistemi Red-Hat, Debian, FreeBsd.
Lo trovate su http://www.calabriaunix.org
http://twitter.com/calabriaunix