Project

General

Profile

Fail2ban config

Added by E DD over 7 years ago

Hi, does anyone have fail2ban setup for tvheadend?

Could you help me set it up?

# Create the TVHeadend-filter for fail2ban
    #nano /etc/fail2ban/filter.d/tvheadend.conf
    cat > /etc/fail2ban/filter.d/tvheadend.conf <<EOF
[Definition]
failregex= ???
ignoreregex =
EOF
    #nano /etc/fail2ban/jail.d/tvheadend.conf
    cat > /etc/fail2ban/jail.d/tvheadend.conf <<EOF

[tvheadend]
enabled = true
port = 80,443
protocol = tcp
filter = tvheadend
maxretry = 3
bantime = 180
logpath = ???
EOF
    service fail2ban restart
    fail2ban-client status tvheadend

Replies (4)

RE: Fail2ban config - Added by Josu Lazkano over 7 years ago

Hello,

You should provide a login log line as example to regex it.

I use fail2ban for other services, it will be great to add tvheadend.

Kind regards.

RE: Fail2ban config - Added by E DD over 7 years ago

I couldn't find the log, but I started tvheadend from the command line and tried to log in. I got the following message:
2017-03-22 11:15:42.792 [ ERROR] http: 192.168.1.2: HTTP/1.1 GET /login -- 401

so something like

failregex = .*ERROR.* http: <HOST>: HTTP/1.1 GET /login -- 401

I don't have https setup so I don't know how those error messages would look, but this is a start.
Anyone know where the log is stored?

Edit: The failregex seems to work:

 $ fail2ban-regex '2017-03-22 11:15:42.792 [ ERROR] http: 192.168.1.2: HTTP/1.1 GET /login -- 401' '.*ERROR.* http: <HOST>: HTTP/1.1 GET /login -- 401'

Running tests
=============

Use   failregex line : .*ERROR.* http: <HOST>: HTTP/1.1 GET /login -- 401
Use      single line : 2017-03-22 11:15:42.792 [ ERROR] http: 192.168.1.2...

Results
=======

Failregex: 1 total
|-  #) [# of hits] regular expression
|   1) [1] .*ERROR.* http: <HOST>: HTTP/1.1 GET /login -- 401
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [1] Year-Month-Day Hour:Minute:Second
`-

Lines: 1 lines, 0 ignored, 1 matched, 0 missed

RE: Fail2ban config - Added by Josu Lazkano over 7 years ago

Hello,

You need to store the tvheadend logs in a file.

You could try to configure rsyslog.

Regards.

RE: Fail2ban config - Added by E DD over 7 years ago

I don't think rsyslog is what I'm looking for. I configured TVHeadend to log to a file like this:

mkdir -p /var/log/tvheadend
chmod -R 755 /var/log/tvheadend
chown -R hts /var/log/tvheadend
TVHEADEND_ERROR_LOG_LOC=/var/log/tvheadend/error.log

# modify the startup script so that it will log errors
sed -i "s~^TVH_ARGS=\"~TVH_ARGS=\"-l ${TVHEADEND_ERROR_LOG_LOC} ~" /etc/default/tvheadend
systemctl daemon-reload
service tvheadend restart

and it works, however I would like to set the loglevel somehow. As far as I know this is unsupported.

I set up the jail like this:

PORT_TVHEADEND=9981
TVHEADEND_FAILREGEX=".*ERROR.* http: <HOST>: HTTP/1.1 GET /login -- 401" 

# Create the TVHeadend-filter for fail2ban
#nano /etc/fail2ban/filter.d/tvheadend.conf
cat > /etc/fail2ban/filter.d/tvheadend.conf <<EOF
[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf

[Definition]

_daemon = tvheadend

failregex = ${TVHEADEND_FAILREGEX}
ignoreregex =
EOF
#nano /etc/fail2ban/jail.d/tvheadend.conf
cat > /etc/fail2ban/jail.d/tvheadend.conf <<EOF

[tvheadend]
enabled  = true
port     = $PORT_TVHEADEND
filter   = tvheadend
action   = iptables[name=tvheadend, port=$PORT_TVHEADEND, protocol=tcp]
logpath  = $TVHEADEND_ERROR_LOG_LOC
maxretry = 5
EOF
service fail2ban restart
fail2ban-client status tvheadend

It seems the failregex is not correct:

failregex = .*ERROR.* http: <HOST>: HTTP/1.1 GET /login -- 401

Anyone here who knows their regexes?

    (1-4/4)