Server per il P2P con Debian: differenze tra le versioni
m (→Accesso remoto: aggiunti "a capo") |
|||
(28 versioni intermedie di 4 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{ | {{Versioni compatibili|Squeeze|Wheezy}} | ||
| | __TOC__ | ||
| | {{E-zine | ||
|num=6 | |||
|articoli=http://e-zine.debianizzati.org/stampa/numero_6.pdf | |||
}} | |||
=Introduzione alle reti P2P= | =Introduzione alle reti P2P= | ||
Per questa parte rimando all'articolo originale, non essendovi al momento necessità di aggiornamento | Per questa parte rimando all'articolo originale presente sull'e-zine, non essendovi al momento necessità di aggiornamento. | ||
= Costruiamo il nostro server = | = Costruiamo il nostro server = | ||
Riga 11: | Riga 13: | ||
* ''Rtorrent'' per usare il protocollo ''BitTorrent''. | * ''Rtorrent'' per usare il protocollo ''BitTorrent''. | ||
La rete ''eDonkey'' è basata su una serie di server che permettono la localizzazione delle risorse all'interno della rete; è necessario tenere aggiornata la lista dei server poiché è possibile, in qualunque momento, aggiungere nuovi server o rimuoverne di esistenti. La rete ''Kad'', invece, è priva di server, è una rete decentralizzata peer-to-peer di terza generazione che utilizza il protocollo ''Kademlia'' in cui ad ogni nodo è associato un ID univoco usato non solo per identificare il nodo stesso ma anche per memorizzare l | La rete ''eDonkey'' è basata su una serie di server che permettono la localizzazione delle risorse all'interno della rete; è necessario tenere aggiornata la lista dei server poiché è possibile, in qualunque momento, aggiungere nuovi server o rimuoverne di esistenti. La rete ''Kad'', invece, è priva di server, è una rete decentralizzata peer-to-peer di terza generazione che utilizza il protocollo ''Kademlia'' in cui ad ogni nodo è associato un ID univoco usato non solo per identificare il nodo stesso ma anche per memorizzare l'''hash'' della risorsa che si vuol condividere; ''hash'' ed ''Id'' hanno la stessa lunghezza e l'''hash'' della risorsa condivisa viene memorizzata nei nodi con valore di ''Id'' più prossimi all'''hash'' stesso. | ||
Il protocollo ''BitTorrent'', spezzetta la risorsa in parti di dimensione fissa che sono scambiati attraverso la rete ''peer-to-peer'' per poi ricomporre il file a destinazione. La descrizione delle parti in cui è suddivisa la risorsa è memorizzata in un file indice che ha estensione .torrent, che contiene anche l'indirizzo URL di | Il protocollo ''BitTorrent'', spezzetta la risorsa in parti di dimensione fissa che sono scambiati attraverso la rete ''peer-to-peer'' per poi ricomporre il file a destinazione. La descrizione delle parti in cui è suddivisa la risorsa è memorizzata in un file indice che ha estensione .torrent, che contiene anche l'indirizzo URL di uno o più server traccia detti, ''tracker'', che permettono di localizzare il file o le sue parti. I computer appartenenti alla rete domestica useranno dei ''client web'' (''webUI'') per comunicare col ''server''; in questo modo non vi è la necessità di installare programmi aggiuntivi, ma sarà sufficiente il ''browser''. | ||
''Amule'' è la soluzione più diffusa per connettersi alle reti ''eDonkey/Kad'', mentre per quanto riguarda i ''torrent'' vi sono valide alternative come ''Deluge'' e ''Transmission'', entrambi prevedono la modalità demone con la possibilità di connettersi tramite ''webUI''. | ''Amule'' è la soluzione più diffusa per connettersi alle reti ''eDonkey/Kad'', mentre per quanto riguarda i ''torrent'' vi sono valide alternative come ''Deluge'' e ''Transmission'', entrambi prevedono la modalità demone con la possibilità di connettersi tramite ''webUI''. | ||
Consideriamo una classica rete domestica costituita da un ''router DSL'' al quale si connettono i computer della casa, il nostro ''server'' risiederà su un | Consideriamo una classica rete domestica costituita da un ''router DSL'' al quale si connettono i computer della casa, il nostro ''server'' risiederà su un PC dedicato. Si può usare un vecchio computer ormai in disuso. La potenza di calcolo non è importante per i nostri scopi; basta che abbia un ''hard disk'' capiente ed inoltre dovrà avere un indirizzo ''IP'' pubblico. Nel ''firewall'' presente sul ''router'' occorrerà aprire alcune porte associandole a tale indirizzo per avere un corretto funzionamento del nostro server di ''file sharing''. Per quanto riguarda la sicurezza/riservatezza, trattandosi di una rete domestica non prendiamo '''nessuna misura di protezione'''; al di fuori di una rete domestica è necessario implementare tali meccanismi che non sono però trattati in questa guida. | ||
==Installazione di Debian== | ==Installazione di Debian== | ||
Per iniziare installiamo sul computer una Debian stable (Squeeze) tramite immagine ''business-card'', reperibile dal sito | Per iniziare installiamo sul computer una Debian [[stable]] (Squeeze) tramite immagine ''business-card'', reperibile dal sito http://www.debian.org/CD/netinst/ , e ci limitiamo ad installare solo il ''core'' del sistema. | ||
[[Immagine:Installazione_serverp2p.jpg|center]] | |||
Durante l'installazione si dovrà <u>specificare un utente</u>: negli esempi proposti è stato scelto '''mulo''' siccome mi sembrava essere il nome più adatto. Qualora ne scegliate uno diverso <u>ricordatevi di modificare anche gli ''script'' mostrati di seguito</u>. Ovviamente le password dello user e di root sono a vostra discrezione. | |||
==''Rtorrent''== | ==''Rtorrent''== | ||
Per poter scaricare o condividere file ''torrent'' installiamo il programma ''Rtorrent'', mentre per permettere agli altri computer di connettersi al ''server'' tramite ''webUI'' installiamo anche il programma ''Rtgui''. Tali software sono reperibili da | Per poter scaricare o condividere file ''torrent'' installiamo il programma ''Rtorrent'', mentre per permettere agli altri computer di connettersi al ''server'' tramite ''webUI'' installiamo anche il programma ''Rtgui''. Tali software sono reperibili da http://libtorrent.rakshasa.no/http://code.google.com/p/rtgui/ ed essendo nei [[repository]] di Debian potremmo installarli sfruttando il solito Apt. | ||
===Installazione=== | ===Installazione=== | ||
<pre># aptitude install rtorrent screen rtgui gawk</pre> | <pre># aptitude install rtorrent screen rtgui gawk</pre> | ||
Siccome esistono più versioni del server | Siccome esistono più versioni del server Apache, ci verrà segnalato automaticamente da [[aptitude]] quale installare: | ||
<pre>The following packages have unmet dependencies: | <pre>The following packages have unmet dependencies: | ||
apache2-mpm-worker: Conflicts: apache2-mpm which is a virtual package. | apache2-mpm-worker: Conflicts: apache2-mpm which is a virtual package. | ||
Riga 51: | Riga 57: | ||
====File di config==== | ====File di config==== | ||
Configuriamo ora ''Rtorrent'' creando il file '''< | Configuriamo ora ''Rtorrent'' creando il file '''<code>/home/mulo/.rtorrent.rc</code>''' come il seguente. | ||
Ricordate sempre che per avere consigli sul come crearlo a partire da zero potete utilizzare il comodo esempio presente nella documentazione in ''/usr/share/doc/rtorrent/examples/rtorrent.rc'' sul quale ho basato la mia configurazione (alias < | Ricordate sempre che per avere consigli sul come crearlo a partire da zero potete utilizzare il comodo esempio presente nella documentazione in ''/usr/share/doc/rtorrent/examples/rtorrent.rc'' sul quale ho basato la mia configurazione (alias <code>cp</code>). | ||
=====.rtorrent.rc===== | =====.rtorrent.rc===== | ||
(modifiche principali in | (modifiche principali in <font style="color:red;">rosso</font>) | ||
< | |||
# Maximum and minimum number of peers to connect to per torrent. | # This is an example resource file for rTorrent. Copy to | ||
min_peers = 40 | # ~/.rtorrent.rc and enable/modify the options as needed. Remember to | ||
max_peers = 100 | # uncomment the options you wish to enable. | ||
# Maximum and minimum number of peers to connect to per torrent. | |||
<span style="color:red">min_peers = 40 | |||
max_peers = 100</span> | |||
# Same as above but for seeding completed torrents (-1 = same as downloading) | |||
<span style="color:red">min_peers_seed = 5 | |||
max_peers_seed = 10</span> | |||
# Maximum number of simultanious uploads per torrent. | |||
<span style="color:red">max_uploads = 5</span> | |||
# Global upload and download rate in KiB. "0" for unlimited. | |||
<span style="color:red">download_rate = 75 | |||
upload_rate = 5</span> | |||
# Default directory to save the downloaded torrents. | |||
#directory = ./complete | |||
<span style="color:red">directory = /home/mulo/torrent/</span> | |||
# Default session directory. Make sure you don't run multiple instance | |||
# of rtorrent using the same session directory. Perhaps using a | |||
# relative path? | |||
<span style="color:red">session = /home/mulo/torrent/session</span> | |||
# Watch a directory for new torrents, and stop those that have been | |||
# deleted. | |||
<span style="color:red">schedule = watch_directory,10,10,load_start=/home/mulo/watch/*.torrent | |||
schedule = tied_directory,10,10,start_tied= | |||
schedule = untied_directory,10,10,close_untied=</span> | |||
# */ | |||
# Close torrents when diskspace is low. | |||
<span style="color:red">#schedule = low_diskspace,5,60,close_low_diskspace=100M</span> | |||
# Stop torrents when reaching upload ratio in percent, | |||
# when also reaching total upload in bytes, or when | |||
# reaching final upload ratio in percent. | |||
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0 | |||
<span style="color:red">schedule = ratio,60,60,"stop_on_ratio=250,250M,2500"</span> | |||
# Move completed torrents | |||
system.method.set_key = event.download.finished,move_complete,"execute=mv,-u,$d.get_base_path=,/home/mulo/complete;d.set_directory=/home/mulo/complete" | |||
# The ip address reported to the tracker. | |||
#ip = 127.0.0.1 | |||
#ip = rakshasa.no | |||
# The ip address the listening socket and outgoing connections is | |||
# bound to. | |||
#bind = 127.0.0.1 | |||
#bind = rakshasa.no | |||
# Port range to use for listening. | |||
<span style="color:red">port_range = 6881-6999</span> | |||
# Start opening ports at a random position within the port range. | |||
#port_random = no | |||
# Check hash for finished torrents. Might be usefull until the bug is | |||
# fixed that causes lack of diskspace not to be properly reported. | |||
#check_hash = no | |||
check_hash = yes | |||
# Set whetever the client should try to connect to UDP trackers. | |||
<span style="color:red">use_udp_trackers = yes</span> | |||
# Alternative calls to bind and ip that should handle dynamic ip's. | |||
#schedule = ip_tick,0,1800,ip=rakshasa | |||
#schedule = bind_tick,0,1800,bind=rakshasa | |||
# Encryption options, set to none (default) or any combination of the following: | |||
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext | |||
# | |||
# The example value allows incoming encrypted connections, starts unencrypted | |||
# outgoing connections but retries with encryption if they fail, preferring | |||
# plaintext to RC4 encryption after the encrypted handshake | |||
# | |||
# encryption = allow_incoming,enable_retry,prefer_plaintext | |||
<span style="color:red">encryption = allow_incoming,try_outgoing,enable_retry</span> | |||
# Enable DHT support for trackerless torrents or when all trackers are down. | |||
# May be set to "disable" (completely disable DHT), "off" (do not start DHT), | |||
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately). | |||
# The default is "off". For DHT to work, a session directory must be defined. | |||
# | |||
<span style="color:red">dht = auto</span> | |||
# UDP port to use for DHT. | |||
# | |||
dht_port = 6881 | |||
# Enable peer exchange (for torrents not marked private) | |||
# | |||
peer_exchange = yes | |||
# | |||
# Do not modify the following parameters unless you know what you're doing. | |||
# | |||
# Hash read-ahead controls how many MB to request the kernel to read | |||
# ahead. If the value is too low the disk may not be fully utilized, | |||
# while if too high the kernel might not be able to keep the read | |||
# pages in memory thus end up trashing. | |||
#hash_read_ahead = 10 | |||
# Interval between attempts to check the hash, in milliseconds. | |||
#hash_interval = 100 | |||
# Number of attempts to check the hash while using the mincore status, | |||
# before forcing. Overworked systems might need lower values to get a | |||
# decent hash checking rate. | |||
#hash_max_tries = 10 | |||
# This will set rtorrent/scgi to listen on localhost, port 5000 | |||
scgi_port = localhost:5000 | |||
# Force rtorrent to use the UTF-8 encoding. The XMLRPC standard requires UTF-8 replies | |||
encoding_list=UTF-8 | |||
La maggior parte di queste opzioni sono esplicite, altre un po' ermetiche; è possibile consultare il [http://libtorrent.rakshasa.no/rtorrent/rtorrent.1.html manuale] per avere maggiori informazioni.<br/> | |||
Inoltre a questa [http://libtorrent.rakshasa.no/wiki/RTorrentCommonTasks pagina] è possibile avere informazioni avanzate in merito ai possibili comandi utilizzabili. | |||
=====rtgui===== | |||
Infine impostiamo alcuni parametri della webGui. Del file ''/etc/rtgui/config.php'' è sufficiente modificare i seguenti sulla base delle proprie impostazioni appena assegnate: | |||
<pre> | |||
$watchdir="/home/mulo/torrent/watch/"; | |||
$downloaddir="/home/mulo/torrent"; | |||
</pre> | |||
===Script di avvio=== | |||
''Rtorrent'' dovrà partire all'avvio del ''server''; dobbiamo, dunque, "demonizzarlo" creando il file <code>/etc/init.d/rtorrent</code>: | |||
<pre> | |||
#!/bin/sh | |||
### BEGIN INIT INFO | |||
# Provides: rtorrent | |||
# Required-Start: $network | |||
# Required-Stop: $network | |||
# Default-Start: 2 3 4 5 | |||
# Default-Stop: 0 1 6 | |||
# Short-Description: Start rtorrent as a daemon | |||
### END INIT INFO | |||
# | ############# | ||
###<Notes>### | |||
############# | |||
# This script depends on screen. | |||
# For the stop function to work, you must set an | |||
# explicit session directory using ABSOLUTE paths (no, ~ is not absolute) in your rtorrent.rc. | |||
# If you typically just start rtorrent with just "rtorrent" on the | |||
# command line, all you need to change is the "user" option. | |||
# Attach to the screen session as your user with | |||
# "screen -dr rtorrent". Change "rtorrent" with srnname option. | |||
# Licensed under the GPLv2 by lostnihilist: lostnihilist _at_ gmail _dot_ com | |||
############## | |||
###</Notes>### | |||
############## | |||
####################### | |||
##Start Configuration## | |||
####################### | |||
# You can specify your configuration in a different file | |||
# (so that it is saved with upgrades, saved in your home directory, | |||
# or whateve reason you want to) | |||
# by commenting out/deleting the configuration lines and placing them | |||
# in a text file (say /home/user/.rtorrent.init.conf) exactly as you would | |||
# have written them here (you can leave the comments if you desire | |||
# and then uncommenting the following line correcting the path/filename | |||
# for the one you used. note the space after the ".". | |||
# . /etc/rtorrent.init.conf | |||
#Do not put a space on either side of the equal signs e.g. | |||
# user = user | |||
# will not work | |||
# system user to run as | |||
user="mulo" | |||
# the system group to run as, not implemented, see d_start for beginning implementation | |||
# group=`id -ng "$user"` | |||
# the full path to the filename where you store your rtorrent configuration | |||
config="/home/mulo/.rtorrent.rc" | |||
# set of options to run with | |||
options="" | |||
# default directory for screen, needs to be an absolute path | |||
#base="/home/${user}" | |||
base="/home/mulo" | |||
# name of screen session | |||
srnname="rtorrent" | |||
# file to log to (makes for easier debugging if something goes wrong) | |||
logfile="/var/log/rtorrentInit.log" | |||
####################### | |||
###END CONFIGURATION### | |||
####################### | |||
# | PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin | ||
# | DESC="rtorrent" | ||
NAME=rtorrent | |||
DAEMON=$NAME | |||
SCRIPTNAME=/etc/init.d/$NAME | |||
checkcnfg() { | |||
exists=0 | |||
for i in `echo "$PATH" | tr ':' '\n'` ; do | |||
if [ -f $i/$NAME ] ; then | |||
exists=1 | |||
break | |||
fi | |||
done | |||
if [ $exists -eq 0 ] ; then | |||
echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2 | |||
exit 3 | |||
fi | |||
if ! [ -r "${config}" ] ; then | |||
echo "cannot find readable config ${config}. Check that it is there and permissions are appropriate." | tee -a "$logfile" >&2 | |||
exit 3 | |||
fi | |||
session=`getsession "$config"` | |||
if ! [ -d "${session}" ] ; then | |||
echo "cannot find readable session directory ${session} from config ${config}. Check permissions." | tee -a "$logfile" >&2 | |||
exit 3 | |||
fi | |||
} | |||
d_start() { | |||
[ -d "${base}" ] && cd "${base}" | |||
stty stop undef && stty start undef | |||
# robert 20080807 su -c "screen -ls | grep -sq "\.${srnname}:space:" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2 | |||
su -c "screen -ls | grep -sq "\.${srnname}:space:" " ${user} || su -c "screen -dm -S ${srnname} " ${user} | |||
# this works for the screen command, but starting rtorrent below adopts screen session gid | |||
# even if it is not the screen session we started (e.g. running under an undesirable gid | |||
#su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "sg \"$group\" -c \"screen -fn -dm -S ${srnname} 2>&1 1>/dev/null\"" ${user} | tee -a "$logfile" >&2 | |||
# robert 20080807 su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2 | |||
su -c "screen -S "${srnname}" -X screen rtorrent ${options}" ${user} | |||
} | |||
d_stop() { | |||
session=`getsession "$config"` | |||
if ! [ -s ${session}/rtorrent.lock ] ; then | |||
return | |||
fi | |||
pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"` | |||
pid2=`su $user -c 'screen -ls' | awk -F [.] '/[[:digit:]].rtorrent/{print($1)}' | sed "s/[^0-9]//g"` | |||
if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process | |||
kill -s INT ${pid}; kill -s KILL ${pid2} | |||
fi | |||
su $user -c 'screen -wipe' | |||
} | |||
getsession() { | |||
session=`awk '/^[[:space:]]?session[[:space:]]?=[[:space:]]?/{print($3)}' "$config"` | |||
echo $session | |||
} | |||
checkcnfg | |||
case "$1" in | |||
start) | |||
echo -n "Starting $DESC: $NAME" | |||
d_start | |||
echo "." | |||
;; | |||
stop) | |||
echo -n "Stopping $DESC: $NAME" | |||
d_stop | |||
echo "." | |||
;; | |||
restart|force-reload) | |||
echo -n "Restarting $DESC: $NAME" | |||
d_stop | |||
sleep 1 | |||
d_start | |||
echo "." | |||
;; | |||
*) | |||
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 | |||
exit 1 | |||
;; | |||
esac | |||
exit 0 | |||
</pre> | |||
Quindi impostiamo il nostro servizio affinché parta all'avvio: | |||
<pre> | |||
# | # chmod +x /etc/init.d/rtorrent | ||
# update-rc.d rtorrent defaults | |||
</pre> | |||
# | |||
Per testare che tutto funzioni proviamo ad avviare il [[demone]]: | |||
# | <pre># /etc/init.d/rtorrent start</pre> | ||
e a collegarci all'interfaccia grafica all'URL ''<nowiki>http://<IpAddressMulo>/rtgui</nowiki>'' | |||
===Specifiche=== | |||
*Porte da aprire | |||
** 6881-6999 (TCP) | |||
** 6881 (UDP) | |||
* Limiti banda | |||
** download 75 KiB | |||
** upload 5 KiB | |||
* Connessione tramite webUI all'indirizzo ''<nowiki>http://<IpAddressMulo>/rtgui</nowiki>'' | |||
[[Immagine:rtgui.jpg|center]] | |||
===Conclusioni=== | |||
Le maggiori implicazioni riguardo alla '''sicurezza''' sono in merito all'accesso all'interfaccia di controllo. Si consiglia pertanto di rendere accessibile la stessa esclusivamente all'interno della propria LAN o tutt'al più proteggere la pagina di controllo con una password. Inoltre non sarebbe male anche l'idea di utilizzare un buon filtro IP come blockcontrol. Infine si ricorda che per quanto concerne l'uso di rtorrent è pur sempre possibile, oltre alla comoda interfaccia web appena illustrata, utilizzare il programma via '''ssh''' per poi accedere alla sessione di screen dove è in esecuzione rtorrent. | |||
# | ==''Amule''== | ||
Adesso occupiamoci di installare ''Amuled'' per accedere alle reti ''eD2k'' e ''Kademlia''. Utilizzando la versione daemon avremo il vantaggio di poter fare a meno dell'ambiente grafico sul server. Per quanto riguarda l'accesso sarà invece possibile adottare, come per rtorrent, una interfaccia web (si avrà quindi il vantaggio di un accesso universale senza l'installazione di software aggiuntivo, oppure utilizzare il programma <code>amulegui</code>, il quale permette di accedere ad una interfaccia avanzata e molto più funzionale. A voi la scelta! | |||
===Installazione=== | |||
Installiamo il pacchetto ''amule-daemon'', il quale comprende oltre al demone anche il modulo ''Amuleweb'' che permette la connessione tramite ''webUI'' al server di ''Amule'': | |||
<pre># aptitude install amule-daemon</pre> | |||
===Configurazione=== | |||
Dovremo configurare per prima cosa il demone di ''Amule'', quindi potremo scegliere se configurare anche la WebGUI (''AmuleWEB''), la GUI ''Amule-GUI'' o entrambi. | |||
====Avvio autoconfigurazione==== | |||
Per configurare opportunamente il demone è possibile far sì che sia ''amule'' stesso a creare il file di configurazione di default nonché le cartelle necessarie. Infatti se avviamo da shell il demone, come da esempio: | |||
<pre>$ amuled</pre> | |||
verrà restituito errore ma sarà anche creata la ''directory'' <code>.aMule/</code> con tutti i vari file di configurazione che quindi potremo ora modificare a nostro gradimento.Tra questi saranno presenti anche le principali directory utilizzate da aMule per il download: | |||
* ~/.aMule/''tmp'': cartella dei file temporanei | |||
* ~/.aMule/''incoming'': cartella file scaricati e condivisi. Tutto quello che sta dentro questa cartella può essere scaricato dagli altri ''peer''. | |||
====Personalizzazione delle opzioni di configurazione==== | |||
A questo punto possiamo ora aprire con un editor di testo il file <code>.aMule/amule.conf</code> e modificare il valore dei parametri di default (per approfondire si consiglia il wiki di [http://wiki.amule.org/index.php/Main_Page ''amuled''] oppure del wiki [http://wiki.debian.org/aMule di debian.org]; [http://www.linksysinfo.org/forums/showthread.php?p=367263 qui] invece per maggiori dettagli). Ovviamente per avere fin da subito una configurazione completa e funzionante senza scendere nei dettagli, potrete utilizzare il file come di seguito riportato (con i commenti ''###'' sono evidenziate lo opzioni modificate): | |||
<pre> | |||
[eMule] | |||
AppVersion=2.2.6 | |||
Nick=http://www.aMule.org | |||
QueueSizePref=50 | |||
### limita il carico del server in upload | |||
MaxUpload=15 | |||
###limita il carico del server in download | |||
MaxDownload=75 | |||
###quota banda che ciascun peer ciuccia | |||
SlotAllocation=5 | |||
Port=4662 | |||
UDPPort=4672 | |||
UDPDisable=0 | |||
Address= | |||
Autoconnect=1 | |||
### limitare per ridurre carico al NAT del router | |||
MaxSourcesPerFile=100 | |||
### limitare per ridurre carico al NAT del router | |||
MaxConnections=200 | |||
MaxConnectionsPerFiveSeconds=20 | |||
RemoveDeadServer=1 | |||
DeadServerRetry=3 | |||
ServerKeepAliveTimeout=0 | |||
Reconnect=1 | |||
Scoresystem=1 | |||
### Serverlist=0 auto update the server list from the supplied url | |||
Serverlist=1 | |||
### AddServerListFromServer=0 | |||
AddServerListFromServer=1 | |||
AddServerListFromClient=0 | |||
SafeServerConnect=0 | |||
AutoConnectStaticOnly=0 | |||
UPnPEnabled=0 | |||
UPnPTCPPort=50000 | |||
SmartIdCheck=1 | |||
ConnectToKad=1 | |||
ConnectToED2K=1 | |||
TempDir=/home/mulo/.aMule/Temp | |||
IncomingDir=/home/mulo/.aMule/Incoming | |||
ICH=1 | |||
AICHTrust=0 | |||
CheckDiskspace=1 | |||
MinFreeDiskSpace=1 | |||
AddNewFilesPaused=0 | |||
PreviewPrio=0 | |||
ManualHighPrio=0 | |||
FullChunkTransfers=1 | |||
StartNextFile=0 | |||
StartNextFileSameCat=0 | |||
FileBufferSizePref=16 | |||
DAPPref=1 | |||
UAPPref=1 | |||
AllocateFullFile=0 | |||
OSDirectory=/home/mulo/.aMule/ | |||
OnlineSignature=0 | |||
OnlineSignatureUpdate=5 | |||
EnableTrayIcon=0 | |||
MinToTray=0 | |||
ConfirmExit=1 | |||
StartupMinimized=0 | |||
3DDepth=10 | |||
ToolTipDelay=1 | |||
ShowOverhead=0 | |||
ShowInfoOnCatTabs=1 | |||
ShowRatesOnTitle=0 | |||
VerticalToolbar=0 | |||
ShowPartFileNumber=0 | |||
VideoPlayer= | |||
VideoPreviewBackupped=1 | |||
StatGraphsInterval=3 | |||
statsInterval=30 | |||
### limita banda occupata in download | |||
DownloadCapacity=100 | |||
### limita banda occupata in upload | |||
UploadCapacity=20 | |||
StatsAverageMinutes=5 | |||
VariousStatisticsMaxValue=100 | |||
SeeShare=2 | |||
FilterLanIPs=1 | |||
ParanoidFiltering=1 | |||
IPFilterAutoLoad=1 | |||
IPFilterURL= | |||
FilterLevel=127 | |||
IPFilterSystem=0 | |||
FilterMessages=1 | |||
FilterAllMessages=0 | |||
MessagesFromFriendsOnly=0 | |||
MessageFromValidSourcesOnly=1 | |||
FilterWordMessages=0 | |||
MessageFilter= | |||
FilterComments=0 | |||
CommentFilter= | |||
ShareHiddenFiles=0 | |||
AutoSortDownloads=0 | |||
NewVersionCheck=1 | |||
Language= | |||
SplitterbarPosition=75 | |||
YourHostname= | |||
DateTimeFormat=%A, %x, %X | |||
AllcatType=0 | |||
ShowAllNotCats=0 | |||
SmartIdState=0 | |||
DropSlowSources=0 | |||
KadNodesUrl=http://emule-inside.net/nodes.dat | |||
Ed2kServersUrl=http://gruk.org/server.met.gz | |||
[Browser] | |||
DefaultBrowser=0 | |||
OpenPageInTab=1 | |||
CustomBrowserString= | |||
[Proxy] | |||
ProxyEnableProxy=0 | |||
ProxyType=0 | |||
ProxyName= | |||
ProxyPort=1080 | |||
ProxyEnablePassword=0 | |||
ProxyUser= | |||
ProxyPassword= | |||
[ExternalConnect] | |||
UseSrcSeeds=0 | |||
### Abilita l'uso delle interfacce web e GUI | |||
AcceptExternalConnections=1 | |||
ECAddress= | |||
ECPort=4712 | |||
ECPassword=637b9adadf7acce5c70e5d327a725b13 | |||
UPnPECEnabled=0 | |||
ShowProgressBar=1 | |||
ShowPercent=1 | |||
UseSecIdent=1 | |||
IpFilterClients=1 | |||
IpFilterServers=1 | |||
[WebServer] | |||
#Enabled=0 | |||
Enabled=1 | |||
Password=637b9adadf7acce5c70e5d327a725b13 | |||
PasswordLow= | |||
Port=4711 | |||
WebUPnPTCPPort=50001 | |||
UPnPWebServerEnabled=0 | |||
UseGzip=1 | |||
UseLowRightsUser=0 | |||
PageRefreshTime=120 | |||
Template= | |||
[Razor_Preferences] | |||
FastED2KLinksHandler=1 | |||
[SkinGUIOptions] | |||
UseSkinFiles=0 | |||
Skin= | |||
[Statistics] | |||
MaxClientVersions=0 | |||
TotalDownloadedBytes=0 | |||
TotalUploadedBytes=34633 | |||
[Obfuscation] | |||
IsClientCryptLayerSupported=1 | |||
IsCryptLayerRequested=1 | |||
IsClientCryptLayerRequired=0 | |||
CryptoPaddingLenght=254 | |||
CryptoKadUDPKey=271264387 | |||
[UserEvents] | |||
[UserEvents/DownloadCompleted] | |||
CoreEnabled=0 | |||
CoreCommand= | |||
GUIEnabled=0 | |||
GUICommand= | |||
[UserEvents/NewChatSession] | |||
CoreEnabled=0 | |||
CoreCommand= | |||
GUIEnabled=0 | |||
GUICommand= | |||
[UserEvents/OutOfDiskSpace] | |||
CoreEnabled=0 | |||
CoreCommand= | |||
GUIEnabled=0 | |||
GUICommand= | |||
[UserEvents/ErrorOnCompletion] | |||
CoreEnabled=0 | |||
CoreCommand= | |||
GUIEnabled=0 | |||
GUICommand= | |||
</pre> | |||
L'esempio appena proposto permette sia l'accesso tramite la webGUI, sia tramite la GUI grafica. L'abilitazione di questi è configurata tramite l'istanza ''[ExternalConnect]'' e ''[WebServer]''. La spiegazione in dettaglio è fornita nei paragrafi successivi. A questo punto non rimane che modificare con un editor di testo il file ''/etc/default/amule-daemon'' definendo lo user con il quale verrà eseguito ''amuled'', ossia modificando il seguente parametro:<pre>AMULED_USER="mulo"</pre> | |||
# | ====Avvio di Amuled==== | ||
Ora sarà possibile avviare il demone: | |||
<pre># /etc/init.d/amule-daemon start</pre> | |||
Si osserva che, per poter eseguire ''amuled'' (ossia il demone di amule), è necessario - come già modificato nel file di esempio precedente - abilitare la modalità di connessione remota del client. In dettaglio è necessario indicare al demone di accettare le connessioni esterne del client (''AcceptExternalConnections=1'') e di indicare l'hash della password di autenticazione alla connessione (''ECPassword=637b9adadf7acce5c70e5d327a725b13''). L'hash della password può essere ottenuta utilizzando il seguente comando (e inserendo la chiave desiderata al posto di ''yourpassword''): | |||
<pre>echo -n yourpassword | md5sum | cut -d ' ' -f 1637b9adadf7acce5c70e5d327a725b13</pre> | |||
====Aggiungere liste server==== | |||
Aggiungiamo quindi le liste dei ''server eDonkey'': | |||
<pre> | |||
$ echo "http://www.gruk.org/server.met.gz" > ~/.aMule/addresses.dat | |||
$ echo "http://www.peerates.net/servers.php" >> ~/.aMule/addresses.dat | |||
</pre> | |||
Per la rete ''Kad'' scarichiamo una lista ulteriore prelevandola da http://www.nodes-dat.com/: | |||
<pre> | |||
$ cd /home/mulo/.aMule | |||
$ mv nodes.dat node.dat.bak | |||
$ wget http://www.alldivx.de/nodes/nodes.dat | |||
</pre> | |||
====AmuleWEB==== | |||
''Amuleweb'' è l'interfaccia web che permette di gestire da remoto Amule. Seppure non sia comoda come la GUI grafica fornita da ''amule-utils-gui'', offre il grande vantaggio di essere accessibile a qualsiasi computer tramite web browser. Per attivarla è sufficiente modificare i parametri di ''~/.aMule/amule.conf'' sotto la stanza ''[WebServer]''. Per un esempio di configurazione guardate il file precedentemente postato sotto la configurazione di ''amuled''. Tra i parametri, molto intuitivi, si consiglia di prestare attenzione alla variabile ''Password'' che deve essere uguale a quella indicata nella stanza ''[ExternalConnect]'' al parametro ''ECPassword''. Invece sotto l'opzione ''PasswordLow='' è possibile indicare una password alternativa per chi utilizza la WebGUI. Infine, per il debug, si segnala che a volte potrebbe essere comodo avviare l'interfaccia web non tramite il demone e i parametri impostati nel file ''amule.conf'' ma tramite il comando <code>amuleweb</code>. | |||
====AmuleGUI==== | |||
Per avere la comodissima ''gui'' remota (in tutto e per tutto uguale a quella di default del programma Amule) è necessario installare sulla macchina client dalla quale si vuole controllare il demone il seguente pacchetto: | |||
# | <pre># aptitude install amule-utils-gui</pre> | ||
A questo punto, se non avete modificato le impostazioni di default (o utilizzate quelle da me riportate) potrete connettervi al demone Amule se, lanciato sul client il programma ''amulegui'', indicate l'IP (oppure l'URL) del server e la password corrispondente all'hash inserito nel file di configurazione di amule (ad esempio nel file di configurazione da me indicato come ''yourpassword''). Adesso avrete a disposizione la ben nota interfaccia grafica! | |||
{{Box | Nota |per poter avviare ''amuled'' è necessario in ogni caso configurare l'accesso remoto. Se non abilitato, il demone non potrà essere avviato né potrà essere possibile utilizzare l'interfaccia web di amministrazione.}} | |||
La sezione per configurare l'accesso remoto è presente in ''~/.aMule/amule.conf'' sotto la stanza ''[ExternalConnect]''. | |||
===Specifiche=== | |||
* Porte da aprire (trattasi delle porte di default, è possibile cambiarle) | |||
*# in ingresso: | |||
*#* 4662 tpc: trasferimento client to client | |||
*#* 4665 udp: per ricerche su server e ricerche globali | |||
*#* 4672 udp: gestione code e protocollo eMule | |||
*# in uscita: | |||
*#* 4661 tcp: porta su cui i server ascoltano per connessioni | |||
*#* 4662 tcp: trasferimento client to client | |||
*#* 4665 udp: per ricerche su server e ricerche globali | |||
*#* 4672 udp: gestione code e protocollo eMule | |||
*Limiti banda | |||
** download 75 KiB | |||
** upload 10 KiB | |||
* Connessione tramite webUI all'indirizzo ''<nowiki>http://<IpAddressMulo>:4711</nowiki>'' | |||
* Connessione tramite GUI alla porta 4712 (è sufficiente installare ''amule-utils-gui'' sul computer client) | |||
[[Immagine:Amuleweb.jpg|center]] | |||
{{Box | Nota |La ricerca di un file con rtgui può richiedere un po' di tempo, motivo per cui si può presentare la necessità di dover aggiornare la pagina con i risultati della ricerca; a tal fine è presente sulla parte destra della pagina un apposito comando. È possibile inoltre impostare il refresh automatico delle pagine tramite le opzioni di rtgui.}} | |||
===Conclusioni=== | |||
Anche in questo caso valgono le considerazioni sulla '''sicurezza''' già esposte per rtorrent, ovvero sarebbe opportuno proteggere l'accesso allo strumento di controllo di amule tramite password o mantenerlo accessibile soltanto all'interno della propria LAN. Inoltre, anche per amuled, è possibile controllare il demone tramite '''ssh''' utilizzando il comando <code>amulecmd</code>. | |||
# | ==Condivisione file== | ||
Oltre a scaricare il file è necessario rendere lo stesso comodamente accessibile da tutti i client della LAN. Tra le possibili soluzioni ho optato per [[samba]] vista la sua semplicità ed universalità con tutti gli OS. Procediamo installando il ''server samba'': | |||
<pre> | |||
# aptitude install samba | |||
# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak | |||
</pre> | |||
Per configurare ''samba'' creiamo il file <code>/etc/samba/smb.conf</code> | |||
<pre> | |||
[global] | |||
server string = MULO | |||
workgroup=workgroup | |||
security=shareguest | |||
account = nobody | |||
map to guest = bad user | |||
[mulo] | |||
comment = Mulo | |||
path = /home/mulo/torrent | |||
read only = No | |||
guest ok = Yes | |||
guest only = yes | |||
browseable = Yes | |||
public = yes | |||
writable = yes | |||
</pre> | |||
Tutti gli utenti della rete domestica potranno così accedere con diritti di lettura/scrittura, senza doversi autenticare; il server condivide l'intera ''home'' dell'utente mulo, nella quale si troveranno le ''directory'' con i file scaricati. | |||
==Accesso remoto== | |||
Possiamo eseguire il ''login'' nel ''server'' da ogni computer appartenente alla rete domestica tramite ''ssh'': | |||
# | <pre> | ||
# aptitude install ssh | |||
</pre> | </pre> | ||
Generiamo, quindi, la coppia di chiavi per l'utente mulo. | |||
<pre> | |||
$ ssh-keygen -t rsa | |||
$ cp /home/mulo/.ssh/id_rsa.pub /home/mulo/.ssh/autorized_key | |||
</pre> | |||
Useremo l'autenticazione ''Host-based'', per la quale non verrà richiesta una chiave. | |||
<pre> | |||
# echo "HostbasedAuthentication yes" >> /etc/ssh/ssh_config | |||
<pre> | </pre> | ||
Ci connetteremo al ''server'' con: | |||
<pre> | |||
$ ssh mulo@<IpAddressMulo> | |||
password: YourPassword | |||
</pre> | |||
==Conclusioni== | ==Conclusioni== | ||
Installiamo alcuni programmi d'utilità come ''iptraf'' e ''yacpi'' per il monitoraggio del traffico e delle temperature:<pre># aptitude install htop mc iptraf yacpi elinks deborphan</pre>Possiamo rimuovere software/librerie/documentazioni inutili:<pre># aptitude purge doc-linux-it doc-linux-it-text debian-reference-en | Installiamo alcuni programmi d'utilità come ''iptraf'' e ''yacpi'' per il monitoraggio del traffico e delle temperature: | ||
<pre># aptitude install htop mc iptraf yacpi elinks deborphan</pre> | |||
Possiamo rimuovere software/librerie/documentazioni inutili: | |||
<pre> | |||
# aptitude purge doc-linux-it doc-linux-it-text debian-reference-en debian-reference-it maint-guide-it fortunes-it exim4 exim4-daemon-light postfix | |||
# apt-get autoremove --purge $(deborphan --libdevel) | |||
# aptitude update | |||
# aptitude -f install | |||
# aptitude clean | |||
</pre> | |||
Analogamente, in base alle nostre necessità, possiamo rimuovere altri programmi e documenti per ottenere un sistema che occupi il minimo spazio.<br/> | |||
'''Caratteristiche del server''' | |||
* Ram < 30 MB (carico minimo) | |||
* Dimensione ~ 550 MB | |||
==Ringraziamenti== | ==Ringraziamenti== | ||
Il primo ringraziamento è da parte di Risca nei confronti di Fr4nc3sco per avere impostato questa guida con ricchi suggerimenti sul come procedere. Infatti da parte mia il lavoro è stato principalmente di revisione e solo in piccola parte di scrittura. Pertanto grazie ancora Fr4nc3sco!Infine un saluto a tutta la redazione dell'e-zine, alla comunità di Debianizzati.org e tutti i nostri lettori e, last but not least, a tutti i ragazzi dell'Accademia.[[Utente:Fr4nc3sco|Fr4nc3sco]] 07:39, 9 lug 2010 (CEST) | Il primo ringraziamento è da parte di Risca nei confronti di Fr4nc3sco per avere impostato questa guida con ricchi suggerimenti sul come procedere. Infatti da parte mia il lavoro è stato principalmente di revisione e solo in piccola parte di scrittura. Pertanto grazie ancora Fr4nc3sco! Infine un saluto a tutta la redazione dell'e-zine, alla comunità di Debianizzati.org e tutti i nostri lettori e, last but not least, a tutti i ragazzi dell'Accademia. | ||
{{Autori | |||
|Autore = [[Utente:Fr4nc3sco|Fr4nc3sco]] 07:39, 9 lug 2010 (CEST) | |||
|Estesa_da = | |||
:[[Utente:Risca|Risca]] 11:25, 3 mag 2011 (CEST) | |||
}} | |||
[[Categoria:E-zine]][[Categoria: Peer to Peer]][[Categoria: File sharing]] |
Versione attuale delle 11:45, 24 ott 2015
Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.
Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione. |
Versioni Compatibili Debian 6 "squeeze" Debian 7 "wheezy" |
Questa guida è basata sui seguenti articoli presenti all'interno del numero 6 dell'e-zine di Debianizzati.org : |
Introduzione alle reti P2P
Per questa parte rimando all'articolo originale presente sull'e-zine, non essendovi al momento necessità di aggiornamento.
Costruiamo il nostro server
Con la seguente guida descriviamo il modo con cui implementare un server domestico dedicato per il file sharing attraverso reti peer-to-peer. Useremo le seguenti applicazioni:
- Amule per connettersi alle reti eDonkey e Kad.
- Rtorrent per usare il protocollo BitTorrent.
La rete eDonkey è basata su una serie di server che permettono la localizzazione delle risorse all'interno della rete; è necessario tenere aggiornata la lista dei server poiché è possibile, in qualunque momento, aggiungere nuovi server o rimuoverne di esistenti. La rete Kad, invece, è priva di server, è una rete decentralizzata peer-to-peer di terza generazione che utilizza il protocollo Kademlia in cui ad ogni nodo è associato un ID univoco usato non solo per identificare il nodo stesso ma anche per memorizzare l'hash della risorsa che si vuol condividere; hash ed Id hanno la stessa lunghezza e lhash della risorsa condivisa viene memorizzata nei nodi con valore di Id più prossimi allhash stesso.
Il protocollo BitTorrent, spezzetta la risorsa in parti di dimensione fissa che sono scambiati attraverso la rete peer-to-peer per poi ricomporre il file a destinazione. La descrizione delle parti in cui è suddivisa la risorsa è memorizzata in un file indice che ha estensione .torrent, che contiene anche l'indirizzo URL di uno o più server traccia detti, tracker, che permettono di localizzare il file o le sue parti. I computer appartenenti alla rete domestica useranno dei client web (webUI) per comunicare col server; in questo modo non vi è la necessità di installare programmi aggiuntivi, ma sarà sufficiente il browser.
Amule è la soluzione più diffusa per connettersi alle reti eDonkey/Kad, mentre per quanto riguarda i torrent vi sono valide alternative come Deluge e Transmission, entrambi prevedono la modalità demone con la possibilità di connettersi tramite webUI.
Consideriamo una classica rete domestica costituita da un router DSL al quale si connettono i computer della casa, il nostro server risiederà su un PC dedicato. Si può usare un vecchio computer ormai in disuso. La potenza di calcolo non è importante per i nostri scopi; basta che abbia un hard disk capiente ed inoltre dovrà avere un indirizzo IP pubblico. Nel firewall presente sul router occorrerà aprire alcune porte associandole a tale indirizzo per avere un corretto funzionamento del nostro server di file sharing. Per quanto riguarda la sicurezza/riservatezza, trattandosi di una rete domestica non prendiamo nessuna misura di protezione; al di fuori di una rete domestica è necessario implementare tali meccanismi che non sono però trattati in questa guida.
Installazione di Debian
Per iniziare installiamo sul computer una Debian stable (Squeeze) tramite immagine business-card, reperibile dal sito http://www.debian.org/CD/netinst/ , e ci limitiamo ad installare solo il core del sistema.
Durante l'installazione si dovrà specificare un utente: negli esempi proposti è stato scelto mulo siccome mi sembrava essere il nome più adatto. Qualora ne scegliate uno diverso ricordatevi di modificare anche gli script mostrati di seguito. Ovviamente le password dello user e di root sono a vostra discrezione.
Rtorrent
Per poter scaricare o condividere file torrent installiamo il programma Rtorrent, mentre per permettere agli altri computer di connettersi al server tramite webUI installiamo anche il programma Rtgui. Tali software sono reperibili da http://libtorrent.rakshasa.no/http://code.google.com/p/rtgui/ ed essendo nei repository di Debian potremmo installarli sfruttando il solito Apt.
Installazione
# aptitude install rtorrent screen rtgui gawk
Siccome esistono più versioni del server Apache, ci verrà segnalato automaticamente da aptitude quale installare:
The following packages have unmet dependencies: apache2-mpm-worker: Conflicts: apache2-mpm which is a virtual package. apache2-mpm-prefork: Conflicts: apache2-mpm which is a virtual package. The following actions will resolve these dependencies: Keep the following packages at their current version: 1) apache2-mpm-worker [Not Installed] Accept this solution? [Y/n/q/?] y
Diamo pure l'ok.
Configurazione
Directory
Creiamo le directory di lavoro:
$ mkdir -p /home/mulo/torrent/{session,incomplete,watch,complete}
Il loro utilizzo sarà il seguente
- session: cartella contenente i torrent attualmente in download/upload.
- watch: cartella dove inserire i file torrent (.torrent) che si desidera scaricare; tale operazione potrà essere gestita direttamente da Rtgui.
- incomplete: cartella dei file incompleti.
- complete: cartella dei file scaricati.
File di config
Configuriamo ora Rtorrent creando il file /home/mulo/.rtorrent.rc
come il seguente.
Ricordate sempre che per avere consigli sul come crearlo a partire da zero potete utilizzare il comodo esempio presente nella documentazione in /usr/share/doc/rtorrent/examples/rtorrent.rc sul quale ho basato la mia configurazione (alias cp
).
.rtorrent.rc
(modifiche principali in rosso)
# This is an example resource file for rTorrent. Copy to # ~/.rtorrent.rc and enable/modify the options as needed. Remember to # uncomment the options you wish to enable. # Maximum and minimum number of peers to connect to per torrent. min_peers = 40 max_peers = 100 # Same as above but for seeding completed torrents (-1 = same as downloading) min_peers_seed = 5 max_peers_seed = 10 # Maximum number of simultanious uploads per torrent. max_uploads = 5 # Global upload and download rate in KiB. "0" for unlimited. download_rate = 75 upload_rate = 5 # Default directory to save the downloaded torrents. #directory = ./complete directory = /home/mulo/torrent/ # Default session directory. Make sure you don't run multiple instance # of rtorrent using the same session directory. Perhaps using a # relative path? session = /home/mulo/torrent/session # Watch a directory for new torrents, and stop those that have been # deleted. schedule = watch_directory,10,10,load_start=/home/mulo/watch/*.torrent schedule = tied_directory,10,10,start_tied= schedule = untied_directory,10,10,close_untied= # */ # Close torrents when diskspace is low. #schedule = low_diskspace,5,60,close_low_diskspace=100M # Stop torrents when reaching upload ratio in percent, # when also reaching total upload in bytes, or when # reaching final upload ratio in percent. # example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0 schedule = ratio,60,60,"stop_on_ratio=250,250M,2500" # Move completed torrents system.method.set_key = event.download.finished,move_complete,"execute=mv,-u,$d.get_base_path=,/home/mulo/complete;d.set_directory=/home/mulo/complete" # The ip address reported to the tracker. #ip = 127.0.0.1 #ip = rakshasa.no # The ip address the listening socket and outgoing connections is # bound to. #bind = 127.0.0.1 #bind = rakshasa.no # Port range to use for listening. port_range = 6881-6999 # Start opening ports at a random position within the port range. #port_random = no # Check hash for finished torrents. Might be usefull until the bug is # fixed that causes lack of diskspace not to be properly reported. #check_hash = no check_hash = yes # Set whetever the client should try to connect to UDP trackers. use_udp_trackers = yes # Alternative calls to bind and ip that should handle dynamic ip's. #schedule = ip_tick,0,1800,ip=rakshasa #schedule = bind_tick,0,1800,bind=rakshasa # Encryption options, set to none (default) or any combination of the following: # allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext # # The example value allows incoming encrypted connections, starts unencrypted # outgoing connections but retries with encryption if they fail, preferring # plaintext to RC4 encryption after the encrypted handshake # # encryption = allow_incoming,enable_retry,prefer_plaintext encryption = allow_incoming,try_outgoing,enable_retry # Enable DHT support for trackerless torrents or when all trackers are down. # May be set to "disable" (completely disable DHT), "off" (do not start DHT), # "auto" (start and stop DHT as needed), or "on" (start DHT immediately). # The default is "off". For DHT to work, a session directory must be defined. # dht = auto # UDP port to use for DHT. # dht_port = 6881 # Enable peer exchange (for torrents not marked private) # peer_exchange = yes # # Do not modify the following parameters unless you know what you're doing. # # Hash read-ahead controls how many MB to request the kernel to read # ahead. If the value is too low the disk may not be fully utilized, # while if too high the kernel might not be able to keep the read # pages in memory thus end up trashing. #hash_read_ahead = 10 # Interval between attempts to check the hash, in milliseconds. #hash_interval = 100 # Number of attempts to check the hash while using the mincore status, # before forcing. Overworked systems might need lower values to get a # decent hash checking rate. #hash_max_tries = 10 # This will set rtorrent/scgi to listen on localhost, port 5000 scgi_port = localhost:5000 # Force rtorrent to use the UTF-8 encoding. The XMLRPC standard requires UTF-8 replies encoding_list=UTF-8
La maggior parte di queste opzioni sono esplicite, altre un po' ermetiche; è possibile consultare il manuale per avere maggiori informazioni.
Inoltre a questa pagina è possibile avere informazioni avanzate in merito ai possibili comandi utilizzabili.
rtgui
Infine impostiamo alcuni parametri della webGui. Del file /etc/rtgui/config.php è sufficiente modificare i seguenti sulla base delle proprie impostazioni appena assegnate:
$watchdir="/home/mulo/torrent/watch/"; $downloaddir="/home/mulo/torrent";
Script di avvio
Rtorrent dovrà partire all'avvio del server; dobbiamo, dunque, "demonizzarlo" creando il file /etc/init.d/rtorrent
:
#!/bin/sh ### BEGIN INIT INFO # Provides: rtorrent # Required-Start: $network # Required-Stop: $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start rtorrent as a daemon ### END INIT INFO ############# ###<Notes>### ############# # This script depends on screen. # For the stop function to work, you must set an # explicit session directory using ABSOLUTE paths (no, ~ is not absolute) in your rtorrent.rc. # If you typically just start rtorrent with just "rtorrent" on the # command line, all you need to change is the "user" option. # Attach to the screen session as your user with # "screen -dr rtorrent". Change "rtorrent" with srnname option. # Licensed under the GPLv2 by lostnihilist: lostnihilist _at_ gmail _dot_ com ############## ###</Notes>### ############## ####################### ##Start Configuration## ####################### # You can specify your configuration in a different file # (so that it is saved with upgrades, saved in your home directory, # or whateve reason you want to) # by commenting out/deleting the configuration lines and placing them # in a text file (say /home/user/.rtorrent.init.conf) exactly as you would # have written them here (you can leave the comments if you desire # and then uncommenting the following line correcting the path/filename # for the one you used. note the space after the ".". # . /etc/rtorrent.init.conf #Do not put a space on either side of the equal signs e.g. # user = user # will not work # system user to run as user="mulo" # the system group to run as, not implemented, see d_start for beginning implementation # group=`id -ng "$user"` # the full path to the filename where you store your rtorrent configuration config="/home/mulo/.rtorrent.rc" # set of options to run with options="" # default directory for screen, needs to be an absolute path #base="/home/${user}" base="/home/mulo" # name of screen session srnname="rtorrent" # file to log to (makes for easier debugging if something goes wrong) logfile="/var/log/rtorrentInit.log" ####################### ###END CONFIGURATION### ####################### PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin DESC="rtorrent" NAME=rtorrent DAEMON=$NAME SCRIPTNAME=/etc/init.d/$NAME checkcnfg() { exists=0 for i in `echo "$PATH" | tr ':' '\n'` ; do if [ -f $i/$NAME ] ; then exists=1 break fi done if [ $exists -eq 0 ] ; then echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2 exit 3 fi if ! [ -r "${config}" ] ; then echo "cannot find readable config ${config}. Check that it is there and permissions are appropriate." | tee -a "$logfile" >&2 exit 3 fi session=`getsession "$config"` if ! [ -d "${session}" ] ; then echo "cannot find readable session directory ${session} from config ${config}. Check permissions." | tee -a "$logfile" >&2 exit 3 fi } d_start() { [ -d "${base}" ] && cd "${base}" stty stop undef && stty start undef # robert 20080807 su -c "screen -ls | grep -sq "\.${srnname}:space:" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2 su -c "screen -ls | grep -sq "\.${srnname}:space:" " ${user} || su -c "screen -dm -S ${srnname} " ${user} # this works for the screen command, but starting rtorrent below adopts screen session gid # even if it is not the screen session we started (e.g. running under an undesirable gid #su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "sg \"$group\" -c \"screen -fn -dm -S ${srnname} 2>&1 1>/dev/null\"" ${user} | tee -a "$logfile" >&2 # robert 20080807 su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2 su -c "screen -S "${srnname}" -X screen rtorrent ${options}" ${user} } d_stop() { session=`getsession "$config"` if ! [ -s ${session}/rtorrent.lock ] ; then return fi pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"` pid2=`su $user -c 'screen -ls' | awk -F [.] '/[[:digit:]].rtorrent/{print($1)}' | sed "s/[^0-9]//g"` if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process kill -s INT ${pid}; kill -s KILL ${pid2} fi su $user -c 'screen -wipe' } getsession() { session=`awk '/^[[:space:]]?session[[:space:]]?=[[:space:]]?/{print($3)}' "$config"` echo $session } checkcnfg case "$1" in start) echo -n "Starting $DESC: $NAME" d_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" d_stop echo "." ;; restart|force-reload) echo -n "Restarting $DESC: $NAME" d_stop sleep 1 d_start echo "." ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0
Quindi impostiamo il nostro servizio affinché parta all'avvio:
# chmod +x /etc/init.d/rtorrent # update-rc.d rtorrent defaults
Per testare che tutto funzioni proviamo ad avviare il demone:
# /etc/init.d/rtorrent start
e a collegarci all'interfaccia grafica all'URL http://<IpAddressMulo>/rtgui
Specifiche
- Porte da aprire
- 6881-6999 (TCP)
- 6881 (UDP)
- Limiti banda
- download 75 KiB
- upload 5 KiB
- Connessione tramite webUI all'indirizzo http://<IpAddressMulo>/rtgui
Conclusioni
Le maggiori implicazioni riguardo alla sicurezza sono in merito all'accesso all'interfaccia di controllo. Si consiglia pertanto di rendere accessibile la stessa esclusivamente all'interno della propria LAN o tutt'al più proteggere la pagina di controllo con una password. Inoltre non sarebbe male anche l'idea di utilizzare un buon filtro IP come blockcontrol. Infine si ricorda che per quanto concerne l'uso di rtorrent è pur sempre possibile, oltre alla comoda interfaccia web appena illustrata, utilizzare il programma via ssh per poi accedere alla sessione di screen dove è in esecuzione rtorrent.
Amule
Adesso occupiamoci di installare Amuled per accedere alle reti eD2k e Kademlia. Utilizzando la versione daemon avremo il vantaggio di poter fare a meno dell'ambiente grafico sul server. Per quanto riguarda l'accesso sarà invece possibile adottare, come per rtorrent, una interfaccia web (si avrà quindi il vantaggio di un accesso universale senza l'installazione di software aggiuntivo, oppure utilizzare il programma amulegui
, il quale permette di accedere ad una interfaccia avanzata e molto più funzionale. A voi la scelta!
Installazione
Installiamo il pacchetto amule-daemon, il quale comprende oltre al demone anche il modulo Amuleweb che permette la connessione tramite webUI al server di Amule:
# aptitude install amule-daemon
Configurazione
Dovremo configurare per prima cosa il demone di Amule, quindi potremo scegliere se configurare anche la WebGUI (AmuleWEB), la GUI Amule-GUI o entrambi.
Avvio autoconfigurazione
Per configurare opportunamente il demone è possibile far sì che sia amule stesso a creare il file di configurazione di default nonché le cartelle necessarie. Infatti se avviamo da shell il demone, come da esempio:
$ amuled
verrà restituito errore ma sarà anche creata la directory .aMule/
con tutti i vari file di configurazione che quindi potremo ora modificare a nostro gradimento.Tra questi saranno presenti anche le principali directory utilizzate da aMule per il download:
- ~/.aMule/tmp: cartella dei file temporanei
- ~/.aMule/incoming: cartella file scaricati e condivisi. Tutto quello che sta dentro questa cartella può essere scaricato dagli altri peer.
Personalizzazione delle opzioni di configurazione
A questo punto possiamo ora aprire con un editor di testo il file .aMule/amule.conf
e modificare il valore dei parametri di default (per approfondire si consiglia il wiki di amuled oppure del wiki di debian.org; qui invece per maggiori dettagli). Ovviamente per avere fin da subito una configurazione completa e funzionante senza scendere nei dettagli, potrete utilizzare il file come di seguito riportato (con i commenti ### sono evidenziate lo opzioni modificate):
[eMule] AppVersion=2.2.6 Nick=http://www.aMule.org QueueSizePref=50 ### limita il carico del server in upload MaxUpload=15 ###limita il carico del server in download MaxDownload=75 ###quota banda che ciascun peer ciuccia SlotAllocation=5 Port=4662 UDPPort=4672 UDPDisable=0 Address= Autoconnect=1 ### limitare per ridurre carico al NAT del router MaxSourcesPerFile=100 ### limitare per ridurre carico al NAT del router MaxConnections=200 MaxConnectionsPerFiveSeconds=20 RemoveDeadServer=1 DeadServerRetry=3 ServerKeepAliveTimeout=0 Reconnect=1 Scoresystem=1 ### Serverlist=0 auto update the server list from the supplied url Serverlist=1 ### AddServerListFromServer=0 AddServerListFromServer=1 AddServerListFromClient=0 SafeServerConnect=0 AutoConnectStaticOnly=0 UPnPEnabled=0 UPnPTCPPort=50000 SmartIdCheck=1 ConnectToKad=1 ConnectToED2K=1 TempDir=/home/mulo/.aMule/Temp IncomingDir=/home/mulo/.aMule/Incoming ICH=1 AICHTrust=0 CheckDiskspace=1 MinFreeDiskSpace=1 AddNewFilesPaused=0 PreviewPrio=0 ManualHighPrio=0 FullChunkTransfers=1 StartNextFile=0 StartNextFileSameCat=0 FileBufferSizePref=16 DAPPref=1 UAPPref=1 AllocateFullFile=0 OSDirectory=/home/mulo/.aMule/ OnlineSignature=0 OnlineSignatureUpdate=5 EnableTrayIcon=0 MinToTray=0 ConfirmExit=1 StartupMinimized=0 3DDepth=10 ToolTipDelay=1 ShowOverhead=0 ShowInfoOnCatTabs=1 ShowRatesOnTitle=0 VerticalToolbar=0 ShowPartFileNumber=0 VideoPlayer= VideoPreviewBackupped=1 StatGraphsInterval=3 statsInterval=30 ### limita banda occupata in download DownloadCapacity=100 ### limita banda occupata in upload UploadCapacity=20 StatsAverageMinutes=5 VariousStatisticsMaxValue=100 SeeShare=2 FilterLanIPs=1 ParanoidFiltering=1 IPFilterAutoLoad=1 IPFilterURL= FilterLevel=127 IPFilterSystem=0 FilterMessages=1 FilterAllMessages=0 MessagesFromFriendsOnly=0 MessageFromValidSourcesOnly=1 FilterWordMessages=0 MessageFilter= FilterComments=0 CommentFilter= ShareHiddenFiles=0 AutoSortDownloads=0 NewVersionCheck=1 Language= SplitterbarPosition=75 YourHostname= DateTimeFormat=%A, %x, %X AllcatType=0 ShowAllNotCats=0 SmartIdState=0 DropSlowSources=0 KadNodesUrl=http://emule-inside.net/nodes.dat Ed2kServersUrl=http://gruk.org/server.met.gz [Browser] DefaultBrowser=0 OpenPageInTab=1 CustomBrowserString= [Proxy] ProxyEnableProxy=0 ProxyType=0 ProxyName= ProxyPort=1080 ProxyEnablePassword=0 ProxyUser= ProxyPassword= [ExternalConnect] UseSrcSeeds=0 ### Abilita l'uso delle interfacce web e GUI AcceptExternalConnections=1 ECAddress= ECPort=4712 ECPassword=637b9adadf7acce5c70e5d327a725b13 UPnPECEnabled=0 ShowProgressBar=1 ShowPercent=1 UseSecIdent=1 IpFilterClients=1 IpFilterServers=1 [WebServer] #Enabled=0 Enabled=1 Password=637b9adadf7acce5c70e5d327a725b13 PasswordLow= Port=4711 WebUPnPTCPPort=50001 UPnPWebServerEnabled=0 UseGzip=1 UseLowRightsUser=0 PageRefreshTime=120 Template= [Razor_Preferences] FastED2KLinksHandler=1 [SkinGUIOptions] UseSkinFiles=0 Skin= [Statistics] MaxClientVersions=0 TotalDownloadedBytes=0 TotalUploadedBytes=34633 [Obfuscation] IsClientCryptLayerSupported=1 IsCryptLayerRequested=1 IsClientCryptLayerRequired=0 CryptoPaddingLenght=254 CryptoKadUDPKey=271264387 [UserEvents] [UserEvents/DownloadCompleted] CoreEnabled=0 CoreCommand= GUIEnabled=0 GUICommand= [UserEvents/NewChatSession] CoreEnabled=0 CoreCommand= GUIEnabled=0 GUICommand= [UserEvents/OutOfDiskSpace] CoreEnabled=0 CoreCommand= GUIEnabled=0 GUICommand= [UserEvents/ErrorOnCompletion] CoreEnabled=0 CoreCommand= GUIEnabled=0 GUICommand=
L'esempio appena proposto permette sia l'accesso tramite la webGUI, sia tramite la GUI grafica. L'abilitazione di questi è configurata tramite l'istanza [ExternalConnect] e [WebServer]. La spiegazione in dettaglio è fornita nei paragrafi successivi. A questo punto non rimane che modificare con un editor di testo il file /etc/default/amule-daemon definendo lo user con il quale verrà eseguito amuled, ossia modificando il seguente parametro:
AMULED_USER="mulo"
Avvio di Amuled
Ora sarà possibile avviare il demone:
# /etc/init.d/amule-daemon start
Si osserva che, per poter eseguire amuled (ossia il demone di amule), è necessario - come già modificato nel file di esempio precedente - abilitare la modalità di connessione remota del client. In dettaglio è necessario indicare al demone di accettare le connessioni esterne del client (AcceptExternalConnections=1) e di indicare l'hash della password di autenticazione alla connessione (ECPassword=637b9adadf7acce5c70e5d327a725b13). L'hash della password può essere ottenuta utilizzando il seguente comando (e inserendo la chiave desiderata al posto di yourpassword):
echo -n yourpassword | md5sum | cut -d ' ' -f 1637b9adadf7acce5c70e5d327a725b13
Aggiungere liste server
Aggiungiamo quindi le liste dei server eDonkey:
$ echo "http://www.gruk.org/server.met.gz" > ~/.aMule/addresses.dat $ echo "http://www.peerates.net/servers.php" >> ~/.aMule/addresses.dat
Per la rete Kad scarichiamo una lista ulteriore prelevandola da http://www.nodes-dat.com/:
$ cd /home/mulo/.aMule $ mv nodes.dat node.dat.bak $ wget http://www.alldivx.de/nodes/nodes.dat
AmuleWEB
Amuleweb è l'interfaccia web che permette di gestire da remoto Amule. Seppure non sia comoda come la GUI grafica fornita da amule-utils-gui, offre il grande vantaggio di essere accessibile a qualsiasi computer tramite web browser. Per attivarla è sufficiente modificare i parametri di ~/.aMule/amule.conf sotto la stanza [WebServer]. Per un esempio di configurazione guardate il file precedentemente postato sotto la configurazione di amuled. Tra i parametri, molto intuitivi, si consiglia di prestare attenzione alla variabile Password che deve essere uguale a quella indicata nella stanza [ExternalConnect] al parametro ECPassword. Invece sotto l'opzione PasswordLow= è possibile indicare una password alternativa per chi utilizza la WebGUI. Infine, per il debug, si segnala che a volte potrebbe essere comodo avviare l'interfaccia web non tramite il demone e i parametri impostati nel file amule.conf ma tramite il comando amuleweb
.
AmuleGUI
Per avere la comodissima gui remota (in tutto e per tutto uguale a quella di default del programma Amule) è necessario installare sulla macchina client dalla quale si vuole controllare il demone il seguente pacchetto:
# aptitude install amule-utils-gui
A questo punto, se non avete modificato le impostazioni di default (o utilizzate quelle da me riportate) potrete connettervi al demone Amule se, lanciato sul client il programma amulegui, indicate l'IP (oppure l'URL) del server e la password corrispondente all'hash inserito nel file di configurazione di amule (ad esempio nel file di configurazione da me indicato come yourpassword). Adesso avrete a disposizione la ben nota interfaccia grafica!
La sezione per configurare l'accesso remoto è presente in ~/.aMule/amule.conf sotto la stanza [ExternalConnect].
Specifiche
- Porte da aprire (trattasi delle porte di default, è possibile cambiarle)
- in ingresso:
- 4662 tpc: trasferimento client to client
- 4665 udp: per ricerche su server e ricerche globali
- 4672 udp: gestione code e protocollo eMule
- in uscita:
- 4661 tcp: porta su cui i server ascoltano per connessioni
- 4662 tcp: trasferimento client to client
- 4665 udp: per ricerche su server e ricerche globali
- 4672 udp: gestione code e protocollo eMule
- in ingresso:
- Limiti banda
- download 75 KiB
- upload 10 KiB
- Connessione tramite webUI all'indirizzo http://<IpAddressMulo>:4711
- Connessione tramite GUI alla porta 4712 (è sufficiente installare amule-utils-gui sul computer client)
Conclusioni
Anche in questo caso valgono le considerazioni sulla sicurezza già esposte per rtorrent, ovvero sarebbe opportuno proteggere l'accesso allo strumento di controllo di amule tramite password o mantenerlo accessibile soltanto all'interno della propria LAN. Inoltre, anche per amuled, è possibile controllare il demone tramite ssh utilizzando il comando amulecmd
.
Condivisione file
Oltre a scaricare il file è necessario rendere lo stesso comodamente accessibile da tutti i client della LAN. Tra le possibili soluzioni ho optato per samba vista la sua semplicità ed universalità con tutti gli OS. Procediamo installando il server samba:
# aptitude install samba # mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
Per configurare samba creiamo il file /etc/samba/smb.conf
[global] server string = MULO workgroup=workgroup security=shareguest account = nobody map to guest = bad user [mulo] comment = Mulo path = /home/mulo/torrent read only = No guest ok = Yes guest only = yes browseable = Yes public = yes writable = yes
Tutti gli utenti della rete domestica potranno così accedere con diritti di lettura/scrittura, senza doversi autenticare; il server condivide l'intera home dell'utente mulo, nella quale si troveranno le directory con i file scaricati.
Accesso remoto
Possiamo eseguire il login nel server da ogni computer appartenente alla rete domestica tramite ssh:
# aptitude install ssh
Generiamo, quindi, la coppia di chiavi per l'utente mulo.
$ ssh-keygen -t rsa $ cp /home/mulo/.ssh/id_rsa.pub /home/mulo/.ssh/autorized_key
Useremo l'autenticazione Host-based, per la quale non verrà richiesta una chiave.
# echo "HostbasedAuthentication yes" >> /etc/ssh/ssh_config
Ci connetteremo al server con:
$ ssh mulo@<IpAddressMulo> password: YourPassword
Conclusioni
Installiamo alcuni programmi d'utilità come iptraf e yacpi per il monitoraggio del traffico e delle temperature:
# aptitude install htop mc iptraf yacpi elinks deborphan
Possiamo rimuovere software/librerie/documentazioni inutili:
# aptitude purge doc-linux-it doc-linux-it-text debian-reference-en debian-reference-it maint-guide-it fortunes-it exim4 exim4-daemon-light postfix # apt-get autoremove --purge $(deborphan --libdevel) # aptitude update # aptitude -f install # aptitude clean
Analogamente, in base alle nostre necessità, possiamo rimuovere altri programmi e documenti per ottenere un sistema che occupi il minimo spazio.
Caratteristiche del server
- Ram < 30 MB (carico minimo)
- Dimensione ~ 550 MB
Ringraziamenti
Il primo ringraziamento è da parte di Risca nei confronti di Fr4nc3sco per avere impostato questa guida con ricchi suggerimenti sul come procedere. Infatti da parte mia il lavoro è stato principalmente di revisione e solo in piccola parte di scrittura. Pertanto grazie ancora Fr4nc3sco! Infine un saluto a tutta la redazione dell'e-zine, alla comunità di Debianizzati.org e tutti i nostri lettori e, last but not least, a tutti i ragazzi dell'Accademia.
Guida scritta da: Fr4nc3sco 07:39, 9 lug 2010 (CEST) | Debianized 20% |
Estesa da:
| |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |