EDIT 06/08/2015: Articolo aggiornato

Oggi molte persone chiedono se su Android è necessario un software antivirus, beh la risposta è no, noterete consumo maggiore di CPU, RAM e batteria restando in background con un service attivo.
Se scaricate contenuti dal Play Store non dovete preoccuparvi, se invece scaricate da terze parti conviene abilitare lo scanner Google.
Noi andremo a configurare un firewall su Android, nessuno ne parla…

Che cos’è un firewall?
Non è un Antivirus, e serve a “regolare” le connessioni in uscita e in entrata dei nostri devices
Possiamo creare delle regole, ad esempio:
Porta 22: Accetta entrata/uscita
Porta xx: Declina entrata/uscita

(le porte vanno da 1 a 65535)
Condizioni ESTABLISHED o RELATED (Queste condizioni si verificano quando navighiamo nel web, viene stabilita una connessione con il sito web): Accetta entrata/uscita
Se per le altre non è impostata alcuna regola, il firewall rifiuta le connessioni in entrata/uscita quindi altri non saranno in grado di comunicare con noi.

Cosa utilizzeremo?
Innanzi tutto, la guida è compatibile con qualunque dispositivo disponga di kernel Linux >= 2.6, ma ormai credo che è difficile trovare dispositivi con una versione inferiore alla 2.6.x.
Dalla versione 2.6 infatti il kernel Linux dispone nativamente di un tool chiamato iptables che consente di configurare un firewall.
Nel caso di Android utilizziamo un frontend di iptables, se volete configurare su un PC, dovete utilizzare la riga di comando.
Esistono frontend grafici anche per le altre distro ma consiglio sempre la CLI

Per Android: clicca qui

Procedura per PC Desktop con qualunque distro GNU/Linux
Apriamo il nostro terminale (Terminator, gnome-terminal, xfce4-terminal, konsole, urxvt…)
Otteniamo i permessi di root:

$ sudo su

oppure

$ su

Impostiamo le prime due regole:

# iptables -P INPUT DROP
# iptables -P FORWARD DROP

In questo modo stiamo dicendo a iptables di isolarci dal mondo esterno 🙂
-A rappresenta la tabella su cui impostare la regola e DROP indica di rifiutare le richieste

Impostiamo la regola per abilitare le comunicazioni interne tramite l’interfaccia lo

# iptables -A INPUT -i lo -j ACCEPT

-i indica un’interfaccia specifica che può essere wlan0, wlp7s0, enp9s0, eth0 o lo o qualunque altra
-j indica che cosa deve fare il firewall
“traducendo”: sulla tabella input, interfaccia lo, accetta richieste

Poi impostiamo la regola che ci consente di permettere le connessioni che hanno stato ESTABLISHED o RELATED

# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Ora, le connessioni con stato ESTABLISHED O RELATED sono consentite.
Sostanzialmente, la configurazione base è completa, ma è possibile fare molte altre cose, ad esempio accettare richiesta su una determinata porta (se non si specifica la connessione verrà rifiutata all’infinito)
Ad esempio ho un server SSH quindi voglio permettere la connessione sulla 22 tcp

# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Infine, per rendere effettive le modifiche

# iptables-save > /etc/iptables/iptables.rules

Abilitiamo il service all’avvio

# systemctl enable iptables

(systemd)
Se state utilizzando OpenRC

# rc-update add iptables default

(OpenRC)

# reboot

Verificate che tutto sia OK dopo il riavvio:

# iptables -L -n

Passiamo ora ad Android
Apriamo Firewall Rules Builder, se è la prima volta che la utilizzate vi guiderà in un tutorial, completatelo e riavviate l’app

Appena aperta l’app, verrà chiesto se impostare le regole di

  • Iptables
  • Cisco ACL
  • RouterOS

Dal menù a tendina selezioniamo Iptables, poi saremo indirizzati verso la seconda activity
init_input_drop_

Scorriamo in fondo…
init_input_drop_1

Impostiamo le regole:
Chiediamo una nuova POLICY per la tabella INPUT, con regola DROP:

  1. All’inizio, in command, clicchiamo sul menù a tendina (spinner) e selezioniamo Policy
  2. In table, sempre dal menù a tendina selezioniamo INPUT
  3. Alla fine in Target, sempre dal menù a tendina selezioniamo DROP
  4. Tap sul button: Generate Command

Altra Activity…
show_command
Che ci mostra il comando generato, quindi per applicare le modifiche aggiungiamo il comando al database dei comandi clicchiamo su Add to DB

Ripetiamo le operazioni per la tabella FORWARD

Impostiamo le regole per gli stati di connessione ESTABLISHED,RELATED; l’interfaccia lo

Interface lo

    1. Command: Append
    2. Table: INPUT
    3. Protocol: premiamo sulla checkbox “All:”
    4. In-interface: lo
    5. Target: ACCEPT
    6. Genera comando
    7. Aggiungi al database dei comandi

Stati ESTABLISHED,RELATED

      1. Command: Append
      2. Table: INPUT
      3. Protocol: Checkbox: All
      4. State: Checkbox (seleziona) ESTABLISHED, RELATED
      5. Target: Accept
      6. Genera comando
      7. Aggiungi al database

Infine, chiediamo di mostrare il database tappando su Show DB, questo è il risultato finale
final_rules