|
|
3 years ago | |
|---|---|---|
| .github | 4 years ago | |
| go | 3 years ago | |
| LICENSE | 4 years ago | |
| README.md | 4 years ago | |
| install_iptables-api-pi.sh | 4 years ago | |
| install_iptables-api.sh | 4 years ago | |
| iptables-api | 3 years ago | |
| iptables-api-arm | 3 years ago | |
Very simple API for managing local iptables chain: APIBANLOCAL
Simple GET actions of add, remove, and flush (see API usage for more).
Please at least look at the script before blindly running it on your system.
curl -sSL https://raw.githubusercontent.com/palner/iptables-api/main/install_iptables-api.sh | bash
(or for a Pi)
curl -sSL https://raw.githubusercontent.com/palner/iptables-api/main/install_iptables-api-pi.sh | bash
It is recommended that you run iptables-api as a service, however you can run it however you like.
To run, simply set exe permissions (such as chmod 755 iptables-api) and run:
./iptables-api
8082/var/log/iptables-api.logREJECTCompiled iptables-api will work for most linux distributions and iptables-api-arm will work for most Raspberry Pi distributions.
You can also compile the program using go build iptables-api.go.
./iptables-api -log=stdout -port=8008 -target=DROP
If executable is in /usr/local/iptables-api/...
cat > /lib/systemd/system/iptables-api.service << EOT
[Unit]
Description=iptables-api
[Service]
Type=simple
Restart=always
RestartSec=5s
ExecStart=/usr/local/iptables-api/iptables-api
[Install]
WantedBy=multi-user.target
EOT
Log rotate...
cat > /etc/logrotate.d/iptables-api << EOF
/var/log/iptables-api.log {
daily
copytruncate
rotate 12
compress
}
EOF
loadmodule "http_client.so"
loadmodule "htable.so"
...
modparam("htable", "htable", "ipban=>size=8;autoexpire=600;")
...
if (!pike_check_req()) {
xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");
$sht(ipban=>$si) = 1;
http_client_query("http://localhost:8082/addip/$si", "$var(apinfo)");
exit;
}
...
event_route[htable:expired:ipban] {
xlog("mytable record expired $shtrecord(key) => $shtrecord(value)\n");
http_client_query("http://localhost:8082/removeip/$shtrecord(key)", "$var(apinfo)");
}
Add an IP to iptables. iptables or ip6tables will be chosen based on the IP.
/addip/[ipaddress] or /blockip/[ipaddress]GETor
/POST/addip/1.2.3.4200 OK{"success":"added"}
/blockip/2001:db8:3333:4444:5555:6666:7777:8888200 OK{"success":"added"}
/ with {"ipaddress":"1.2.3.4"}200 OK{"success":"added"}
/addip/1.2.3400 Bad Request{"error":"only valid ip addresses supported"}
/blockip/2001:db8:3333:4444:5555:6666:8888400 Bad Request{"error":"only valid ip addresses supported"}
/ with {"address":"1.2.3.4"}400 Bad Request{"error":"ipaddress is missing. "}
Remove an IP from iptables. iptables or ip6tables will be chosen based on the IP.
/removeip/[ipaddress] or /unblockip/[ipaddress]GETor
/DELETE/removeip/1.2.3.4200 OK{"success":"deleted"}
/unblockip/2001:db8:3333:4444:5555:6666:7777:8888200 OK{"success":"deleted"}
/ with {"ipaddress":"1.2.3.4"}200 OK{"success":"deleted"}
/removeip/1.2.3400 Bad Request{"error":"only valid ip addresses supported"}
/unblockip/2001:db8:3333:4444:5555:6666:8888400 Bad Request{"error":"only valid ip addresses supported"}
/ with {"address":"1.2.3.4"}400 Bad Request{"error":"ipaddress is missing. "}
Add an IP to the top of iptables. iptables or ip6tables will be chosen based on the IP.
/puship/[ipaddress]GETor
/PUT/puship/1.2.3.4200 OK{"success":"added"}
/ with {"ipaddress":"1.2.3.4"}200 OK{"success":"added"}
/puship/1.2.3400 Bad Request{"error":"ip already exists"}
/puship/2001:db8:3333:4444:5555:6666:8888400 Bad Request{"error":"only valid ip addresses supported"}
Flushes the iptables and ip6tables APIBANLOCAL chain.
/flushchainGET/flushchain200 OK{"result":"ipv4 flushed. ipv6 flushed. "}
/flushchain500 Internal Server Error{"error":"error initializing iptables"}
/flushchain200 OK{"result":"ipv4 error. ipv6 flushed. "}
iptables-api is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version
iptables-api is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.