Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
eterban
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
eterban
Commits
34464994
Commit
34464994
authored
Mar 13, 2020
by
Ruzal Gimazov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update settings.ini, code review in eterban_switcher.py, create ipset dump before exit
parent
e7b95ac5
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
64 additions
and
54 deletions
+64
-54
settings.ini
ban-server/etc/eterban/settings.ini
+5
-0
settings.ini
gateway/etc/eterban/settings.ini
+4
-3
eterban_switcher.py
gateway/usr/share/eterban/eterban_switcher.py
+52
-50
settings.ini
prod-server/etc/eterban/settings.ini
+3
-1
No files found.
ban-server/etc/eterban/settings.ini
0 → 100644
View file @
34464994
[Settings]
#redis_server = 10.20.30.101
#ban-server = 192.168.0.0
#i_interface = brlocal
#hostname = localhost
gateway/etc/eterban/settings.ini
View file @
34464994
[Settings]
redis_server
=
10.20.30.101
hostname
=
#redis_server = 10.20.30.101
#ban-server = 192.168.0.0
#i_interface = brlocal
#hostname = localhost
gateway/usr/share/eterban/eterban_switcher.py
View file @
34464994
...
...
@@ -8,81 +8,81 @@ import os
import
signal
import
socket
path_to_config
=
'/etc/eterban/settings.ini'
path_to_eterban
=
'/usr/share/eterban/'
ipset_eterban_1
=
'eterban_1'
try
:
path_to_log
=
'/var/log/eterban/eterban.log'
log
=
open
(
path_to_log
,
'a'
)
except
:
try
:
path_to_log
=
'/var/log/eterban.log'
log
=
open
(
path_to_log
,
'a'
)
except
:
print
(
"Unknown error with logfile"
)
sys
.
exit
()
def
createConfig
(
path_to_config
,
path_to_log
):
"""
Create a config file
"""
config
=
configparser
.
ConfigParser
()
config
.
add_section
(
"Settings"
)
config
.
set
(
"Settings"
,
"redis_server"
,
"10.20.30.101"
)
config
.
set
(
"Settings"
,
"hostname"
,
socket
.
gethostname
())
with
open
(
path_to_config
,
"w"
)
as
config_file
:
config
.
write
(
config_file
)
info
=
time
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
,
time
.
localtime
())
info
+=
" Created a config file ("
+
path_to_config
+
"). Update him!"
with
open
(
path_to_log
,
"a"
)
as
log_file
:
log_file
.
write
(
info
)
sys
.
exit
()
def
get_ip_redis_server
(
path_to_config
,
path_to_log
):
def
parse_config
(
path_to_config
,
path_to_log
):
if
not
os
.
path
.
exists
(
path_to_config
):
createConfig
(
path_to_config
,
path_to_log
)
info
=
time
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
,
time
.
localtime
())
info
+=
' '
+
'Problem in config file ('
+
path_to_config
+
'). Check him!'
with
open
(
path_to_log
,
"a"
)
as
log_file
:
log_file
.
write
(
info
)
sys
.
exit
()
config
=
configparser
.
ConfigParser
()
config
.
read
(
path_to_config
)
# Читаем некоторые значения из конфиг. файла.
redis_server
=
config
.
get
(
"Settings"
,
"redis_server"
,
fallback
=
"No such things as redis_server"
)
if
redis_server
==
"No such things as redis_server"
:
config
.
set
(
"Settings"
,
"redis_server"
,
"10.20.30.101"
)
with
open
(
path_to_config
,
"w"
)
as
config_file
:
config_file
.
write
(
config
)
redis_server
=
config
.
get
(
"Settings"
,
"redis_server"
,
fallback
=
"redis_server"
)
ban_server
=
config
.
get
(
"Settings"
,
"ban_server"
,
fallback
=
"ban_server"
)
i_interface
=
config
.
get
(
"Settings"
,
"i_interface"
,
fallback
=
"i_interface"
)
if
redis_server
==
"redis_server"
or
ban_server
==
"ban_server"
or
i_interface
==
"i_interface"
:
#config.set("Settings", "redis_server", "10.20.30.101")
#with open(path_to_config, "w") as config_file:
# config_file.write(config)
info
=
time
.
strftime
(
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
,
time
.
localtime
())
info
+=
" "
+
redis_server
+
". Added to config file ("
+
path_to_config
+
") redis_server. Update him!"
info
+=
' '
+
'Problem in config file ('
+
path_to_config
+
'). Check him!'
with
open
(
path_to_log
,
"a"
)
as
log_file
:
log_file
.
write
(
info
)
sys
.
exit
()
else
:
return
(
redis_server
)
return
(
redis_server
,
ban_server
,
i_interface
)
try
:
path_to_log
=
'/var/log/eterban/eterban.log'
log
=
open
(
path_to_log
,
'a'
)
except
:
try
:
path_to_log
=
'/var/log/eterban.log'
log
=
open
(
path_to_log
,
'a'
)
except
:
print
(
"Unknown error with logfile"
)
sys
.
exit
()
def
save_ipset_eterban_1
():
global
ipset_eterban_1
,
path_to_eterban
command
=
'ipset save '
+
ipset_eterban_1
+
' --file '
+
path_to_eterban
+
ipset_eterban_1
subprocess
.
call
(
command
,
shell
=
True
)
def
restore_ipset_eterban_1
():
command
=
'ipset restore --file
/usr/share/eterban/eterban_1'
def
restore_ipset_eterban_1
(
path_to_eterban
,
ipset_eterban_1
):
command
=
'ipset restore --file
'
+
path_to_eterban
+
ipset_eterban_1
subprocess
.
call
(
command
,
shell
=
True
)
def
create_iptables_rules
():
commands
=
[
"ipset --create eterban_1 iphash"
,
'iptables -t nat -I PREROUTING -i brlocal -m set --match-set eterban_1 src -j DNAT --to-destination 91.232.225.67'
,
'iptables -t nat -I PREROUTING -i brlocal -m set ! --match-set eterban_1 src -d 91.232.225.67 -p tcp -m multiport --destination-port 80,443 -j DNAT --to-destination 91.232.225.67:81'
,
'iptables -I FORWARD -i brlocal -p tcp -m multiport ! --dport 80,81,443 -m set --match-set eterban_1 src -j REJECT'
]
global
ban_server
,
ipset_eterban_1
,
i_interface
commands
=
[
'ipset --create '
+
ipset_eterban_1
+
' iphash'
,
'iptables -t nat -I PREROUTING -i '
+
i_interface
+
' -m set --match-set '
+
ipset_eterban_1
+
' src -j DNAT --to-destination '
+
ban_server
,
'iptables -t nat -I PREROUTING -i '
+
i_interface
+
' -m set ! --match-set '
+
ipset_eterban_1
+
' src -d '
+
ban_server
+
' -p tcp -m multiport --destination-port 80,443 -j DNAT --to-destination '
+
ban_server
+
':81'
,
'iptables -I FORWARD -i '
+
i_interface
+
' -p tcp -m multiport ! --dport 80,81,443 -m set --match-set '
+
ipset_eterban_1
+
' src -j REJECT'
]
for
command
in
commands
:
subprocess
.
call
(
command
,
shell
=
True
)
def
destroy_iptables_rules
():
commands
=
[
'iptables -t nat -D PREROUTING -i brlocal -m set --match-set eterban_1 src -j DNAT --to-destination 91.232.225.67'
,
'iptables -t nat -D PREROUTING -i brlocal -m set ! --match-set eterban_1 src -d 91.232.225.67 -p tcp -m multiport --destination-port 80,443 -j DNAT --to-destination 91.232.225.67:81'
,
'iptables -D FORWARD -i brlocal -p tcp -m multiport ! --dport 80,81,443 -m set --match-set eterban_1 src -j REJECT'
,
'ipset destroy eterban_1'
]
global
ban_server
,
ipset_eterban_1
,
i_interface
commands
=
[
'ipset destroy '
+
ipset_eterban_1
,
'iptables -t nat -D PREROUTING -i '
+
i_interface
+
' -m set --match-set '
+
ipset_eterban_1
+
' src -j DNAT --to-destination '
+
ban_server
,
'iptables -t nat -D PREROUTING -i '
+
i_interface
+
' -m set ! --match-set '
+
ipset_eterban_1
+
' src -d '
+
ban_server
+
' -p tcp -m multiport --destination-port 80,443 -j DNAT --to-destination '
+
ban_server
+
':81'
,
'iptables -D FORWARD -i '
+
i_interface
+
' -p tcp -m multiport ! --dport 80,81,443 -m set --match-set '
+
ipset_eterban_1
+
' src -j REJECT'
,]
for
command
in
commands
:
subprocess
.
call
(
command
,
shell
=
True
)
#print (command)
def
exit_gracefully
(
signum
,
frame
):
save_ipset_eterban_1
()
destroy_iptables_rules
()
print
(
"End of the program. I was killed with "
,
signum
,
'
\n
'
)
sys
.
exit
()
...
...
@@ -92,9 +92,10 @@ signal.signal(signal.SIGQUIT, exit_gracefully)
signal
.
signal
(
signal
.
SIGTERM
,
exit_gracefully
)
p
ath_to_config
=
'/etc/eterban/settings.ini'
redis_server
=
get_ip_redis_server
(
path_to_config
,
path_to_log
)
p
rint
(
'1'
)
redis_server
,
ban_server
,
i_interface
=
parse_config
(
path_to_config
,
path_to_log
)
#destroy_iptables_rules ()
print
(
"done!"
)
#print (time.strftime( "%Y-%m-%d %H:%M:%S", time.localtime()))
#subprocess.call ('ipset create blacklist hash:ip', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = True)
...
...
@@ -108,7 +109,7 @@ except:
print
(
"Enable to connect redes"
)
sys
.
exit
()
restore_ipset_eterban_1
()
restore_ipset_eterban_1
(
path_to_eterban
,
ipset_eterban_1
)
create_iptables_rules
()
...
...
@@ -116,7 +117,8 @@ for message in p.listen():
if
message
is
not
None
and
message
[
'type'
]
==
'message'
and
message
[
'channel'
]
==
b
'ban'
:
ip
=
message
[
'data'
]
.
decode
(
'utf-8'
)
ip
=
message
[
'data'
]
.
decode
(
'utf-8'
)
ban
=
'ipset -A eterban_1 '
+
ip
ban
=
'ipset -A '
+
ipset_eterban_1
+
' '
+
ip
print
(
ban
)
print
(
message
)
#ban = 'fail2ban-client set blacklist banip ' + ip
#subprocess.call (ban, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = True)
...
...
@@ -127,7 +129,7 @@ for message in p.listen():
elif
message
is
not
None
and
message
[
'type'
]
==
'message'
and
message
[
'channel'
]
==
b
'unban'
:
print
(
message
)
ip
=
message
[
'data'
]
.
decode
(
'utf-8'
)
unban
=
'ipset -D
eterban_1
'
+
ip
unban
=
'ipset -D
'
+
ipset_eterban_1
+
'
'
+
ip
#unban = 'fail2ban-client set blacklist unbanip ' + ip
subprocess
.
call
(
unban
,
stdout
=
subprocess
.
PIPE
,
stderr
=
subprocess
.
PIPE
,
shell
=
True
)
#subprocess.call (unban, shell = True)
...
...
prod-server/etc/eterban/settings.ini
View file @
34464994
[Settings]
redis_server
=
10.20.30.101
#redis_server = 10.20.30.101
#ban-server = 192.168.0.0
#i_interface = brlocal
#hostname = localhost
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment