I was having problems with the solution above, so I made an updated version (operating system: ubuntu 16.04.02 with systemd) .
more information can be found here:
http://dev.deluge-torrent.org/wiki/User ... ce/systemd
install deluge web ui
Code: Select all
sudo apt-get install deluged deluge-web
create Deluge Daemon (deluged) Service
Code: Select all
nano /etc/systemd/system/deluged.service
content
Code: Select all
[Unit]
Description=Deluge Bittorrent Client Daemon
After=network-online.target
[Service]
Type=simple
User=ubuntu
Group=ubuntu
UMask=007
ExecStart=/usr/bin/deluged -d
Restart=on-failure
# Configures the time to wait before service is stopped forcefully.
TimeoutStopSec=300
[Install]
WantedBy=multi-user.target
Now enable it to start up on boot, start the service and verify it is running
Code: Select all
systemctl enable /etc/systemd/system/deluged.service
systemctl start deluged
systemctl status deluged
create Deluge Web UI (deluge-web) Service
Code: Select all
nano /etc/systemd/system/deluge-web.service
content
Code: Select all
[Unit]
Description=Deluge Bittorrent Client Web Interface
After=network-online.target
[Service]
Type=simple
User=ubuntu
Group=ubuntu
UMask=027
ExecStart=/usr/bin/deluge-web -l /var/log/deluge/web/error.log -L error
Restart=on-failure
[Install]
WantedBy=multi-user.target
Now enable it to start up on boot, start the service and verify it is running
Code: Select all
systemctl enable /etc/systemd/system/deluge-web.service
systemctl start deluge-web
systemctl status deluge-web
modify deluge so that it logs errors
Code: Select all
nano /usr/lib/python2.7/dist-packages/deluge/ui/web/auth.py
content
Code: Select all
@export(AUTH_LEVEL_NONE)
def login(self, password):
"""
Test a password to see if it's valid.
:param password: the password to test
:type password: string
:returns: a session id or False
:rtype: string or False
"""
if self.check_password(password):
log.info('Login success (ClientIP %s)', __request__.getClientIP())
return self._create_session(__request__)
else:
log.error('Login failed (ClientIP %s)', __request__.getClientIP())
return False
change format of error log entries so that time appears first
Code: Select all
nano /usr/lib/python2.7/dist-packages/deluge/log.py
content
Code: Select all
def setupLogger(level="error", filename=None, filemode="w"):
"""
Sets up the basic logger and if `:param:filename` is set, then it will log
to that file instead of stdout.
:param level: str, the level to log
:param filename: str, the file to log to
"""
if not level or level not in levels:
level = "error"
logging.basicConfig(
level=levels[level],
format="%(asctime)s %(levelname)-8s %(module)s:%(lineno)d %(message)s",
datefmt="%H:%M:%S",
filename=filename,
filemode=filemode
)
test that logging works
sample output
Code: Select all
21:47:53 ERROR auth:330 Login failed (ClientIP 192.168.1.15)
install fail2ban
create new fail2ban jail in jails section
content
Code: Select all
[deluge-web]
enabled = true
port = 8112
filter = deluge-web
action = iptables[name=deluge-web, port=8112, protocol=tcp]
logpath = /var/log/deluge/web/error.log
maxretry = 2
create filter configuration for deluge jail
Code: Select all
nano /etc/fail2ban/filter.d/deluge-web.conf
content
Code: Select all
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf
[Definition]
_daemon = deluge-web
failregex = .*ERROR.* Login failed .*ClientIP <HOST>.*
restart fail2ban
Code: Select all
sudo service fail2ban stop
sudo service fail2ban start
check if it works
Code: Select all
cat /var/log/fail2ban.log
sudo fail2ban-client status deluge-web