| verzia 2.125, 2026/02/26 18:34:33 |
verzia 2.126, 2026/08/31 23:19:35 |
|
|
| # Licensed under terms of GNU General Public License. |
# Licensed under terms of GNU General Public License. |
| # All rights reserved. |
# All rights reserved. |
| # |
# |
| # $Platon: scripts/shell/firewall/fw-universal.sh,v 2.124 2026/01/06 16:41:45 nepto Exp $ |
# $Platon: scripts/shell/firewall/fw-universal.sh,v 2.125 2026/02/26 18:34:33 nepto Exp $ |
| # |
# |
| # Changelog: |
# Changelog: |
| # 2003-10-24 - created |
# 2003-10-24 - created |
| Riadok 118 IPTABLES_RESTORE="${IPTABLES_RESTORE:=$D |
|
| Riadok 118 IPTABLES_RESTORE="${IPTABLES_RESTORE:=$D |
|
| |
|
| IPTABLES_TABLES="${IPTABLES_TABLES:=filter nat mangle}" |
IPTABLES_TABLES="${IPTABLES_TABLES:=filter nat mangle}" |
| |
|
| |
DOCKER_MODE="${DOCKER_MODE:=off}" |
| |
if [ "X$DOCKER_MODE" = "Xon" -a -z "${DOCKER_IFACE_ACCEPT_ALL+x}" ]; then |
| |
DOCKER_IFACE_ACCEPT_ALL="docker+ br-+" |
| |
fi |
| |
|
| |
|
| if [ "x$LOGGING" = "xoff" ]; then |
if [ "x$LOGGING" = "xoff" ]; then |
| IPTABLES_LOG=": log turned off" |
IPTABLES_LOG=": log turned off" |
| Riadok 310 load_modules() |
|
| Riadok 315 load_modules() |
|
| fi |
fi |
| } # }}} |
} # }}} |
| |
|
| |
docker_mode_on() |
| |
{ # {{{ |
| |
[ "X$DOCKER_MODE" = "Xon" ] |
| |
} # }}} |
| |
|
| |
forward_chain_managed() |
| |
{ # {{{ |
| |
[ "X$XEN_MODE" != "Xon" -a "X$DOCKER_MODE" != "Xon" ] |
| |
} # }}} |
| |
|
| |
iptables_rule_once() |
| |
{ # {{{ |
| |
$IPTABLES -C "$@" 2>/dev/null || $IPTABLES -A "$@" |
| |
} # }}} |
| |
|
| load_cache() |
load_cache() |
| { # {{{ |
{ # {{{ |
| |
|
| |
if docker_mode_on; then |
| |
print_info "DOCKER_MODE enabled: skipping rules cache restore" |
| |
return; |
| |
fi |
| |
|
| if [ ! -d "$DEFAULT_CACHE_DIR" ]; then |
if [ ! -d "$DEFAULT_CACHE_DIR" ]; then |
| mkdir -p "$DEFAULT_CACHE_DIR"; |
mkdir -p "$DEFAULT_CACHE_DIR"; |
| Riadok 412 antispoof_on() |
|
| Riadok 437 antispoof_on() |
|
| # Turn on IP packets forwarding |
# Turn on IP packets forwarding |
| forward_on() |
forward_on() |
| { # {{{ |
{ # {{{ |
| # NAT requires turn on IP forwarding |
# NAT and Docker bridge networks require turn on IP forwarding |
| if [ ! -z "$NAT_LAN_IFACE" ]; then |
if [ ! -z "$NAT_LAN_IFACE" -o "X$DOCKER_MODE" = "Xon" ]; then |
| print_info -en "NAT: Enabling packet forwarding..." |
print_info -en "NAT: Enabling packet forwarding..." |
| echo 1 > /proc/sys/net/ipv4/ip_forward |
echo 1 > /proc/sys/net/ipv4/ip_forward |
| print_info " done." |
print_info " done." |
|
|
| |
|
| forward_off() |
forward_off() |
| { # {{{ |
{ # {{{ |
| |
if docker_mode_on; then |
| |
print_info "DOCKER_MODE enabled: keeping packet forwarding enabled" |
| |
return; |
| |
fi |
| |
|
| print_info -en "NAT: Disabling packet forwarding..." |
print_info -en "NAT: Disabling packet forwarding..." |
| echo 0 > /proc/sys/net/ipv4/ip_forward |
echo 0 > /proc/sys/net/ipv4/ip_forward |
| print_info " done." |
print_info " done." |
|
|
| remove_chains() |
remove_chains() |
| { # {{{ |
{ # {{{ |
| |
|
| if [ "X$XEN_MODE" = "Xon" ]; then |
if docker_mode_on; then |
| print_info "XEN_MODE enabled: not clearing FORWARD chain"; |
print_info "DOCKER_MODE enabled: preserving FORWARD and nat chains"; |
| |
$IPTABLES --flush INPUT |
| |
$IPTABLES --flush OUTPUT |
| |
$IPTABLES --flush spoof 2>/dev/null |
| |
$IPTABLES -t mangle -F |
| |
$IPTABLES -t mangle -X |
| |
$IPTABLES -t mangle -Z |
| |
return; |
| |
fi |
| |
|
| |
if ! forward_chain_managed; then |
| |
print_info "FORWARD chain preservation enabled: not clearing FORWARD chain"; |
| $IPTABLES --flush INPUT |
$IPTABLES --flush INPUT |
| $IPTABLES --flush OUTPUT |
$IPTABLES --flush OUTPUT |
| $IPTABLES --flush spoof |
$IPTABLES --flush spoof |
| Riadok 454 nmap_scan_filter() |
|
| Riadok 495 nmap_scan_filter() |
|
| print_info -en "Turning on nmap scan filter " |
print_info -en "Turning on nmap scan filter " |
| |
|
| for chain in INPUT FORWARD; do |
for chain in INPUT FORWARD; do |
| if [ "X$XEN_MODE" = "Xon" -a "$chain" = "FORWARD" ]; then |
if ! forward_chain_managed && [ "$chain" = "FORWARD" ]; then |
| print_info -ne " XEN_MODE "; |
print_info -ne " FORWARD_PRESERVE "; |
| continue; |
continue; |
| fi |
fi |
| |
|
| Riadok 496 invalid_packet_filter() |
|
| Riadok 537 invalid_packet_filter() |
|
| print_info -en "Turning on INVALID packet filter " |
print_info -en "Turning on INVALID packet filter " |
| |
|
| for chain in INPUT OUTPUT FORWARD; do |
for chain in INPUT OUTPUT FORWARD; do |
| if [ "X$XEN_MODE" = "Xon" -a "$chain" = "FORWARD" ]; then |
if ! forward_chain_managed && [ "$chain" = "FORWARD" ]; then |
| print_info -ne " XEN_MODE "; |
print_info -ne " FORWARD_PRESERVE "; |
| continue; |
continue; |
| fi |
fi |
| $IPTABLES_LOG -A $chain -m conntrack --ctstate INVALID $LOG_LIMIT "INVALID $chain: " |
$IPTABLES_LOG -A $chain -m conntrack --ctstate INVALID $LOG_LIMIT "INVALID $chain: " |
| Riadok 557 anti_spoof_filter() |
|
| Riadok 598 anti_spoof_filter() |
|
| for iface in $ANTISPOOF_IFACE; do |
for iface in $ANTISPOOF_IFACE; do |
| print_info -en " $iface" |
print_info -en " $iface" |
| |
|
| if [ "X$XEN_MODE" = "Xon" ]; then |
if ! forward_chain_managed; then |
| print_info -ne " XEN_MODE "; |
print_info -ne " FORWARD_PRESERVE "; |
| else |
else |
| $IPTABLES -A FORWARD -i $iface -j spoof |
$IPTABLES -A FORWARD -i $iface -j spoof |
| fi |
fi |
|
|
| normalize_portspec_var port || exit 1; |
normalize_portspec_var port || exit 1; |
| print_info -en " $port" |
print_info -en " $port" |
| |
|
| if [ "X$XEN_MODE" = "Xon" ]; then |
if ! forward_chain_managed; then |
| print_info -ne " XEN_MODE "; |
print_info -ne " FORWARD_PRESERVE "; |
| else |
else |
| $IPTABLES -A FORWARD -p TCP --sport $port -o $riface -j DROP |
$IPTABLES -A FORWARD -p TCP --sport $port -o $riface -j DROP |
| fi |
fi |
|
|
| normalize_portspec_var port || exit 1; |
normalize_portspec_var port || exit 1; |
| print_info -en " $port" |
print_info -en " $port" |
| |
|
| if [ "X$XEN_MODE" = "Xon" ]; then |
if ! forward_chain_managed; then |
| print_info -ne " XEN_MODE "; |
print_info -ne " FORWARD_PRESERVE "; |
| else |
else |
| $IPTABLES -A FORWARD -p UDP --sport $port -o $riface -j DROP |
$IPTABLES -A FORWARD -p UDP --sport $port -o $riface -j DROP |
| fi |
fi |
| Riadok 934 allow_accept_all() |
|
| Riadok 975 allow_accept_all() |
|
| print_info -en " $iface" |
print_info -en " $iface" |
| $IPTABLES -A INPUT -i $iface -j ACCEPT |
$IPTABLES -A INPUT -i $iface -j ACCEPT |
| $IPTABLES -A OUTPUT -o $iface -j ACCEPT |
$IPTABLES -A OUTPUT -o $iface -j ACCEPT |
| if [ "X$XEN_MODE" = "Xon" ]; then |
if ! forward_chain_managed; then |
| print_info -ne " XEN_MODE "; |
print_info -ne " FORWARD_PRESERVE "; |
| else |
else |
| $IPTABLES -A FORWARD -i $iface -j ACCEPT |
$IPTABLES -A FORWARD -i $iface -j ACCEPT |
| fi |
fi |
| Riadok 944 allow_accept_all() |
|
| Riadok 985 allow_accept_all() |
|
| fi |
fi |
| } # }}} |
} # }}} |
| |
|
| |
allow_docker_accept_all() |
| |
{ # {{{ |
| |
if docker_mode_on && [ ! -z "$DOCKER_IFACE_ACCEPT_ALL" ]; then |
| |
print_info -en "DOCKER_MODE: Accepting ALL packets on Docker interfaces:" |
| |
for iface in $DOCKER_IFACE_ACCEPT_ALL; do |
| |
print_info -en " $iface" |
| |
iptables_rule_once INPUT -i $iface -j ACCEPT |
| |
iptables_rule_once OUTPUT -o $iface -j ACCEPT |
| |
iptables_rule_once FORWARD -i $iface -j ACCEPT |
| |
iptables_rule_once FORWARD -o $iface -j ACCEPT |
| |
done |
| |
print_info " done." |
| |
fi |
| |
} # }}} |
| |
|
| allow_accept_vrrp() |
allow_accept_vrrp() |
| { # {{{ |
{ # {{{ |
| if [ ! -z "$IFACE_ACCEPT_VRRP" ]; then |
if [ ! -z "$IFACE_ACCEPT_VRRP" ]; then |
| Riadok 1460 allow_input() |
|
| Riadok 1516 allow_input() |
|
| ip="`get_first_ip_addr IP_$ANTISPOOF_IFACE`"; |
ip="`get_first_ip_addr IP_$ANTISPOOF_IFACE`"; |
| print_info -en "Accepting traceroute:" |
print_info -en "Accepting traceroute:" |
| |
|
| if [ "X$XEN_MODE" = "Xon" ]; then |
if ! forward_chain_managed; then |
| print_info -ne " XEN_MODE "; |
print_info -ne " FORWARD_PRESERVE "; |
| else |
else |
| traceroute_src_ports="$(normalize_portspec "$TRACEROUTE_SRC_PORTS")" || exit 1 |
traceroute_src_ports="$(normalize_portspec "$TRACEROUTE_SRC_PORTS")" || exit 1 |
| traceroute_dest_ports="$(normalize_portspec "$TRACEROUTE_DEST_PORTS")" || exit 1 |
traceroute_dest_ports="$(normalize_portspec "$TRACEROUTE_DEST_PORTS")" || exit 1 |
| Riadok 1674 log_forward_drop() |
|
| Riadok 1730 log_forward_drop() |
|
| { # {{{ |
{ # {{{ |
| |
|
| if [ ! "x$LOGGING" = "xoff" ]; then |
if [ ! "x$LOGGING" = "xoff" ]; then |
| |
if ! forward_chain_managed; then |
| |
print_info "FORWARD chain preservation enabled: forward drop logging skipped" |
| |
return; |
| |
fi |
| prefix="forward drop: " |
prefix="forward drop: " |
| print_info "Forward drop is logged with prefix '$prefix'" |
print_info "Forward drop is logged with prefix '$prefix'" |
| $IPTABLES_LOG -A FORWARD $LOG_LIMIT "$prefix" |
$IPTABLES_LOG -A FORWARD $LOG_LIMIT "$prefix" |
| Riadok 1743 do_ip_accounting() |
|
| Riadok 1803 do_ip_accounting() |
|
| $IPTABLES -I INPUT -i $NAT_LAN_IFACE -j $IPACCT_IN_NAME |
$IPTABLES -I INPUT -i $NAT_LAN_IFACE -j $IPACCT_IN_NAME |
| $IPTABLES -I OUTPUT -o $NAT_LAN_IFACE -j $IPACCT_OUT_NAME |
$IPTABLES -I OUTPUT -o $NAT_LAN_IFACE -j $IPACCT_OUT_NAME |
| |
|
| if [ "X$XEN_MODE" = "Xon" ]; then |
if ! forward_chain_managed; then |
| print_info -ne " XEN_MODE "; |
print_info -ne " FORWARD_PRESERVE "; |
| else |
else |
| $IPTABLES -I FORWARD -s $localnet -o $NAT_LAN_IFACE -j $IPACCT_NAME |
$IPTABLES -I FORWARD -s $localnet -o $NAT_LAN_IFACE -j $IPACCT_NAME |
| $IPTABLES -I FORWARD -d $localnet -i $NAT_LAN_IFACE -j $IPACCT_NAME |
$IPTABLES -I FORWARD -d $localnet -i $NAT_LAN_IFACE -j $IPACCT_NAME |
|
|
| # (un)commnet next lines as needed |
# (un)commnet next lines as needed |
| # |
# |
| allow_accept_all |
allow_accept_all |
| |
allow_docker_accept_all |
| allow_accept_vrrp |
allow_accept_vrrp |
| nmap_scan_filter |
nmap_scan_filter |
| invalid_packet_filter |
invalid_packet_filter |
|
|
| configure_special_rules |
configure_special_rules |
| custom_rules |
custom_rules |
| bann_ip_adresses |
bann_ip_adresses |
| $IPTABLES_SAVE -c > $CACHE_FILE |
if docker_mode_on; then |
| |
print_info "DOCKER_MODE enabled: skipping rules cache save" |
| |
else |
| |
$IPTABLES_SAVE -c > $CACHE_FILE |
| |
fi |
| ;; |
;; |
| |
|
| stop) |
stop) |