Hallo,
anbei ein Codesnipsel von mir um über FHEM z.B. eine Blockliste auf einer OPNsense Firewall zu befüllen. - siehe API Dokumentation https://docs.opnsense.org/development/api.html (https://docs.opnsense.org/development/api.html)
Natürlich ist noch viel mehr möglich, für mich war jetzt mal wichtig die Blockliste über FHEM befüllen zu können.
Vorsicht: Das Befüllen über die API wird sofort auf der Firewall committed - also ohne "Apply" drücken zu müssen.
defmod myBlockCmd cmdalias set myDummy addBlockedIP.* AS {\
my $name = "OPNsense-API";;\
my $postdata = {\
username => "DEIN-KEY",\
password => "DEIN-API-SECRET"\
};;\
\
my $alias = "NAME-DES-ALIAS-oder-BLOCKLISTE";; \
my $ip = $EVTPART2;;\
\
if ($ip =~ /\b(\d{1,3}(?:\.\d{1,3}){3})\b/){\
my $item = {\
address => $ip\
};;\
\
$item = encode_json ($item);;\
\
my $param = {\
url => "https://DEINE-FIREWALL-IP/api/firewall/alias_util/add/$alias",\
timeout => 8,\
method => "POST",\
header => { "User-Agent" => "Mozilla/1.22", "Content-Type" => "application/json"},\
user => $postdata->{username},\
pwd => $postdata->{password},\
data => $item,\
sslargs => { SSL_verify_mode => 0, SSL_version => 'SSLv23' },\
callback => sub(){ \
my ($param, $err, $data) = @_;;\
if($err ne "" || $data eq "") {\
Log3 $name, 3, "API-Call: Error while requesting URL - $err";;;;\
} else {\
# versuche JSON zu parsen\
my $decoded_data = eval { decode_json($data) };;\
if ($@) {\
Log3 $name, 3, "OPNsense decode_json failed, invalid json. error: $@ ";;\
}\
else {\
my $return = $decoded_data->{"status"};;\
\
Log3 $name, 3, "OPNsense-API:add $ip to blocklist $alias - Status: $return";;\
}\
}\
} \
};;\
# send\
HttpUtils_NonblockingGet($param);;\
} else {\
return "$ip - ist keine gültige IP-Adresse\n";;\
}\
}
setstate myBlockCmd defined
Mein Dummy zum Befüllen:
Screenshot 2023-04-03 141409.png