forked from extern/shorewall_code
Compare commits
234 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
c02b71b530 | ||
|
78269d57bc | ||
|
fc91648315 | ||
|
067f435ac5 | ||
|
2039f38faf | ||
|
07654d8f8d | ||
|
b5e8f9bd50 | ||
|
9c950082f6 | ||
|
fc44eb7516 | ||
|
bb89d509ea | ||
|
6822803802 | ||
|
66edd76b10 | ||
|
99be0ce970 | ||
|
98d5bf8f55 | ||
|
370901e873 | ||
|
c59ff50de4 | ||
|
3df5c032da | ||
|
b997bfcd97 | ||
|
7630d3cdb1 | ||
|
90df607d79 | ||
|
f012244acd | ||
|
5e2f1f573d | ||
|
011322992e | ||
|
16bb41db15 | ||
|
47a96e9ff9 | ||
|
4a1d8ba0f9 | ||
|
7c99059a66 | ||
|
609ee8dea2 | ||
|
299ea2b41f | ||
|
224400833a | ||
|
32f1ae1992 | ||
|
9b5468cd4a | ||
|
47a59cdd7c | ||
|
676ca872d6 | ||
|
ef28208c0e | ||
|
cdeb82bdab | ||
|
3be071ca3d | ||
|
6f6abfc8cd | ||
|
f99f3539d1 | ||
|
e08e239c00 | ||
|
02ed6f26a9 | ||
|
9e002a7689 | ||
|
34c5441768 | ||
|
c3d8cba042 | ||
|
8bc97bcd35 | ||
|
c1a74b54fc | ||
|
88547f5140 | ||
|
4a714b3ab9 | ||
|
7ad7598d5b | ||
|
4dfc6d90b9 | ||
|
0cb4a5c202 | ||
|
9a83365986 | ||
|
bc65d29650 | ||
|
9d3e8d6f6c | ||
|
8056b6fd85 | ||
|
db4a26cfa9 | ||
|
95e956c913 | ||
|
5e3795b5a4 | ||
|
3402b1efb6 | ||
|
24e21e730e | ||
|
421edccd3f | ||
|
cf8a48f110 | ||
|
12bbbbfa2a | ||
|
422911f06b | ||
|
2a12e0950a | ||
|
9869dd25d7 | ||
|
e47b57fd4a | ||
|
3cbe0e7a1c | ||
|
221753c3c0 | ||
|
b14924bd64 | ||
|
c0a608ef84 | ||
|
c518e85215 | ||
|
34fd10df41 | ||
|
e7004da47c | ||
|
1fc97c50f1 | ||
|
440d404780 | ||
|
91c76f7559 | ||
|
eb224e653f | ||
|
73b39abd62 | ||
|
3903fe5fd9 | ||
|
a3e10157de | ||
|
2e4af68b98 | ||
|
de9f29d7d4 | ||
|
99ddb17c9e | ||
|
8ea9d0bbef | ||
|
ebe09a95b8 | ||
|
f32b304eb6 | ||
|
7bdd69d151 | ||
|
a08f0cfe10 | ||
|
09a81ae574 | ||
|
7042d586b2 | ||
|
e17c4ac8af | ||
|
a6000ee963 | ||
|
0ab1464f51 | ||
|
789854adce | ||
|
37101a2031 | ||
|
40bcfd15e5 | ||
|
230ab06e5d | ||
|
09cda21dd4 | ||
|
9253f90ac5 | ||
|
f4cae55c1e | ||
|
fbee4a91fd | ||
|
cb7071a213 | ||
|
cdf5ad45d5 | ||
|
070a67d665 | ||
|
9796c58eb2 | ||
|
cabc20957f | ||
|
a9a379c5a5 | ||
|
3bf5066f82 | ||
|
b2c33a0f9a | ||
|
64f704a964 | ||
|
416224ee05 | ||
|
92ce1beddc | ||
|
4d6bf8564e | ||
|
fb4b362724 | ||
|
97de2be778 | ||
|
85cae3c7f8 | ||
|
acd425a3c2 | ||
|
4e6949f996 | ||
|
5d7dcc3122 | ||
|
23d498146b | ||
|
422d0b216a | ||
|
37ecbff23a | ||
|
491309a78a | ||
|
bc993c384c | ||
|
0e4c1cdac1 | ||
|
27a0f0f7a0 | ||
|
9ac075fd56 | ||
|
b2604583af | ||
|
62c6411cb0 | ||
|
6badf3ce1a | ||
|
1bc90beb01 | ||
|
eaccf033c6 | ||
|
056711d304 | ||
|
0aa0bebe07 | ||
|
1a68d87c94 | ||
|
c518cfaa4a | ||
|
196a56ea3c | ||
|
2c3f121835 | ||
|
18ba5c7311 | ||
|
c8774110c6 | ||
|
1479e955d4 | ||
|
09980cc75e | ||
|
e0a757ea03 | ||
|
550003f0f4 | ||
|
4f50303318 | ||
|
5053999442 | ||
|
6b5889177b | ||
|
71f8bad300 | ||
|
377c9f5708 | ||
|
45a164733b | ||
|
6f82bfe7d1 | ||
|
4e5b98d3d9 | ||
|
078c781dfa | ||
|
46f68c6dcb | ||
|
b42678269c | ||
|
9bd10c0c00 | ||
|
f861f8da35 | ||
|
9e3cb27d0a | ||
|
5b97800901 | ||
|
d8a22d13dd | ||
|
675e41e6a6 | ||
|
28f6379956 | ||
|
c9b58e203b | ||
|
9afe8daae0 | ||
|
43adcd26a1 | ||
|
65371437b5 | ||
|
cc2022e172 | ||
|
f2a565729f | ||
|
ea8b2a803a | ||
|
16832149ca | ||
|
7edf4918d7 | ||
|
d3a1dc1e2a | ||
|
f68f47d01b | ||
|
b1d1fa862a | ||
|
24acf25451 | ||
|
229c47ac6c | ||
|
38de9c1732 | ||
|
17f4fd7cd2 | ||
|
cfd02c1bb6 | ||
|
02caeb5aa0 | ||
|
19b7601c72 | ||
|
5a8e9cd0a3 | ||
|
b5a6067588 | ||
|
45468af2d2 | ||
|
6c018f478c | ||
|
dec3cacb2a | ||
|
4ab8e1f0a2 | ||
|
821d72093a | ||
|
42d5d13780 | ||
|
7121a0f1b1 | ||
|
ab12d63a4f | ||
|
6ba1d5413b | ||
|
4fc572f664 | ||
|
138e64c54a | ||
|
b04b65cac8 | ||
|
c907748b52 | ||
|
7f3414e3d8 | ||
|
c75fe2ea8d | ||
|
5dcb684efc | ||
|
3e87e5004a | ||
|
c89b113a61 | ||
|
7289175070 | ||
|
5aaf1e53de | ||
|
a9373d727b | ||
|
528b473f6b | ||
|
d22210c074 | ||
|
89d6009200 | ||
|
f411f7dd31 | ||
|
502e98eb9f | ||
|
f73bad440d | ||
|
f0cb3f50e4 | ||
|
23bc019a82 | ||
|
9d299ef866 | ||
|
2a9272ccd1 | ||
|
130ddff9de | ||
|
9cf298482d | ||
|
c5a586aa37 | ||
|
0670ecaf5e | ||
|
605f61fb3c | ||
|
824f4ca570 | ||
|
9acdbb5acf | ||
|
8dfa0be611 | ||
|
ef8b85fc3e | ||
|
2b5613026a | ||
|
6b4905c2c0 | ||
|
774b707352 | ||
|
c3bd58827f | ||
|
b35f1112f4 | ||
|
a0eb91cb90 | ||
|
105e6a3d01 | ||
|
77d9eeb915 | ||
|
17838c1443 | ||
|
5867ce6c3b |
2
Shorewall-core/configure
vendored
2
Shorewall-core/configure
vendored
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# Shorewall Packet Filtering Firewall RPM configuration program - V4.6
|
# Shorewall Packet Filtering Firewall RPM configuration program - V4.6
|
||||||
#
|
#
|
||||||
# (c) 2012,2014 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2012,2014,2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Shorewall documentation is available at http://www.shorewall.net
|
# Shorewall documentation is available at http://www.shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# Script to install Shoreline Firewall Core Modules
|
# Script to install Shoreline Firewall Core Modules
|
||||||
#
|
#
|
||||||
# (c) 2000-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2000-2018 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Shorewall documentation is available at http://shorewall.net
|
# Shorewall documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -335,9 +335,8 @@ for f in lib.* ; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
if [ $SHAREDIR != /usr/share ]; then
|
if [ $SHAREDIR != /usr/share ]; then
|
||||||
eval sed -i \'s\|/usr/share/\|${SHAREDIR}/\|\' ${DESTDIR}${SHAREDIR}/${PRODUCT}/lib.base
|
eval sed -i \'s\|/usr/share/\|${SHAREDIR}/\|\' ${DESTDIR}${SHAREDIR}/shorewall/lib.base
|
||||||
eval sed -i \'s\|/usr/share/\|${SHAREDIR}/\|\' ${DESTDIR}${SHAREDIR}/${PRODUCT}/lib.core
|
eval sed -i \'s\|/usr/share/\|${SHAREDIR}/\|\' ${DESTDIR}${SHAREDIR}/shorewall/lib.cli
|
||||||
eval sed -i \'s\|/usr/share/\|${SHAREDIR}/\|\' ${DESTDIR}${SHAREDIR}/${PRODUCT}/lib.cli
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.1 -- /usr/share/shorewall/lib.base
|
# Shorewall 5.2 -- /usr/share/shorewall/lib.base
|
||||||
#
|
#
|
||||||
# (c) 1999-2017 - Tom Eastep (teastep@shorewall.net)
|
# (c) 1999-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/lib.cli.
|
# Shorewall 5.2 -- /usr/share/shorewall/lib.cli
|
||||||
#
|
#
|
||||||
# (c) 1999-2015 - Tom Eastep (teastep@shorewall.net)
|
# (c) 1999-2018 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
# loaded after this one and replaces some of the functions declared here.
|
# loaded after this one and replaces some of the functions declared here.
|
||||||
#
|
#
|
||||||
|
|
||||||
SHOREWALL_CAPVERSION=50106
|
SHOREWALL_CAPVERSION=50200
|
||||||
|
|
||||||
if [ -z "$g_basedir" ]; then
|
if [ -z "$g_basedir" ]; then
|
||||||
#
|
#
|
||||||
@@ -47,6 +47,10 @@ startup_error() {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
only_root() {
|
||||||
|
[ "$(id -u)" != 0 ] && fatal_error "The '$COMMAND' command may only be run by root"
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Display a chain if it exists
|
# Display a chain if it exists
|
||||||
#
|
#
|
||||||
@@ -83,6 +87,8 @@ showchain() # $1 = name of chain
|
|||||||
#
|
#
|
||||||
validate_restorefile() # $* = label
|
validate_restorefile() # $* = label
|
||||||
{
|
{
|
||||||
|
[ -n "$RESTOREFILE" ] || RESTOREFILE=restore
|
||||||
|
|
||||||
case $RESTOREFILE in
|
case $RESTOREFILE in
|
||||||
*/*)
|
*/*)
|
||||||
error_message "ERROR: $@ must specify a simple file name: $RESTOREFILE"
|
error_message "ERROR: $@ must specify a simple file name: $RESTOREFILE"
|
||||||
@@ -411,9 +417,9 @@ resolve_arptables() {
|
|||||||
savesets() {
|
savesets() {
|
||||||
local supported
|
local supported
|
||||||
|
|
||||||
supported=$(run_it ${VARDIR}/firewall help | fgrep savesets )
|
supported=$(run_it $g_firewall help | fgrep savesets )
|
||||||
|
|
||||||
[ -n "$supported" ] && run_it ${VARDIR}/firewall savesets ${g_restorepath}-ipsets
|
[ -n "$supported" ] && run_it $g_firewall savesets ${g_restorepath}-ipsets
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -422,9 +428,9 @@ savesets() {
|
|||||||
savesets1() {
|
savesets1() {
|
||||||
local supported
|
local supported
|
||||||
|
|
||||||
supported=$(run_it ${VARDIR}/firewall help | fgrep savesets )
|
supported=$(run_it $g_firewall help | fgrep savesets )
|
||||||
|
|
||||||
[ -n "$supported" ] && run_it ${VARDIR}/firewall savesets ${VARDIR}/ipsets.save && progress_message3 "The ipsets have been saved to ${VARDIR}/ipsets.save"
|
[ -n "$supported" ] && run_it $g_firewall savesets ${VARDIR}/ipsets.save && progress_message3 "The ipsets have been saved to ${VARDIR}/ipsets.save"
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -435,9 +441,9 @@ do_save() {
|
|||||||
local arptables
|
local arptables
|
||||||
status=0
|
status=0
|
||||||
|
|
||||||
if [ -f ${VARDIR}/firewall ]; then
|
if [ -f $g_firewall ]; then
|
||||||
if $iptables_save | grep -v -- '-A dynamic.* -j ACCEPT' > ${VARDIR}/restore-$$; then
|
if $iptables_save | grep -v -- '-A dynamic.* -j ACCEPT' > ${VARDIR}/restore-$$; then
|
||||||
cp -f ${VARDIR}/firewall $g_restorepath
|
cp -f $g_firewall $g_restorepath
|
||||||
mv -f ${VARDIR}/restore-$$ ${g_restorepath}-iptables
|
mv -f ${VARDIR}/restore-$$ ${g_restorepath}-iptables
|
||||||
chmod 700 $g_restorepath
|
chmod 700 $g_restorepath
|
||||||
chmod 600 ${g_restorepath}-iptables
|
chmod 600 ${g_restorepath}-iptables
|
||||||
@@ -449,7 +455,7 @@ do_save() {
|
|||||||
status=1
|
status=1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo " ERROR: ${VARDIR}/firewall does not exist" >&2
|
echo " ERROR: $g_firewall does not exist" >&2
|
||||||
status=1
|
status=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -634,7 +640,7 @@ show_routing() {
|
|||||||
ip -$g_family rule list | find_tables | sort -u | while read table; do
|
ip -$g_family rule list | find_tables | sort -u | while read table; do
|
||||||
heading "Table $table:"
|
heading "Table $table:"
|
||||||
if [ $g_family -eq 6 ]; then
|
if [ $g_family -eq 6 ]; then
|
||||||
ip -$g_family -o route list table $table | grep -vF cache | sort_routes
|
ip -6 -o route list table $table | grep -vF cache | sort_routes
|
||||||
else
|
else
|
||||||
ip -4 -o route list table $table | sort_routes
|
ip -4 -o route list table $table | sort_routes
|
||||||
fi
|
fi
|
||||||
@@ -647,7 +653,7 @@ show_routing() {
|
|||||||
else
|
else
|
||||||
heading "Routing Table"
|
heading "Routing Table"
|
||||||
if [ $g_family -eq 6 ]; then
|
if [ $g_family -eq 6 ]; then
|
||||||
ip -$g_family -o route list | grep -vF cache | sort_routes
|
ip -6 -o route list | grep -vF cache | sort_routes
|
||||||
else
|
else
|
||||||
ip -4 -o route list table $table | sort_routes
|
ip -4 -o route list table $table | sort_routes
|
||||||
fi
|
fi
|
||||||
@@ -1185,6 +1191,32 @@ show_ipsec_command() {
|
|||||||
show_ipsec
|
show_ipsec
|
||||||
}
|
}
|
||||||
|
|
||||||
|
show_saves_command() {
|
||||||
|
local f
|
||||||
|
local fn
|
||||||
|
local mtime
|
||||||
|
|
||||||
|
echo "$g_product $SHOREWALL_VERSION Saves at $g_hostname - $(date)"
|
||||||
|
echo "Saved snapshots are:"
|
||||||
|
echo
|
||||||
|
|
||||||
|
for f in ${VARDIR}/*-iptables; do
|
||||||
|
case $f in
|
||||||
|
*\**)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
fn=$(basename $f)
|
||||||
|
fn=${fn%-iptables}
|
||||||
|
mtime=$(ls -lt $f | tail -n 1 | cut -d ' ' -f '6 7 8' )
|
||||||
|
[ $fn = "$RESTOREFILE" ] && fn="$fn (default)"
|
||||||
|
echo " $mtime ${fn%-iptables}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Show Command Executor
|
# Show Command Executor
|
||||||
#
|
#
|
||||||
@@ -1203,6 +1235,7 @@ show_command() {
|
|||||||
show_macro() {
|
show_macro() {
|
||||||
foo=`grep 'This macro' $macro | sed 's/This macro //'`
|
foo=`grep 'This macro' $macro | sed 's/This macro //'`
|
||||||
if [ -n "$foo" ]; then
|
if [ -n "$foo" ]; then
|
||||||
|
macro=$(basename $macro)
|
||||||
macro=${macro#*.}
|
macro=${macro#*.}
|
||||||
foo=${foo%.*}
|
foo=${foo%.*}
|
||||||
if [ ${#macro} -gt 5 ]; then
|
if [ ${#macro} -gt 5 ]; then
|
||||||
@@ -1297,37 +1330,47 @@ show_command() {
|
|||||||
|
|
||||||
[ -n "$g_debugging" ] && set -x
|
[ -n "$g_debugging" ] && set -x
|
||||||
|
|
||||||
|
COMMAND="$COMMAND $1"
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
connections)
|
connections)
|
||||||
|
only_root
|
||||||
eval show_connections $@ $g_pager
|
eval show_connections $@ $g_pager
|
||||||
;;
|
;;
|
||||||
nat)
|
nat)
|
||||||
|
only_root
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
eval show_nat $g_pager
|
eval show_nat $g_pager
|
||||||
;;
|
;;
|
||||||
raw)
|
raw)
|
||||||
|
only_root
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
eval show_raw $g_pager
|
eval show_raw $g_pager
|
||||||
;;
|
;;
|
||||||
tos|mangle)
|
tos|mangle)
|
||||||
|
only_root
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
eval show_mangle $g_pager
|
eval show_mangle $g_pager
|
||||||
;;
|
;;
|
||||||
log)
|
log)
|
||||||
[ $# -gt 2 ] && too_many_arguments $2
|
[ $# -gt 2 ] && too_many_arguments $2
|
||||||
|
|
||||||
|
only_root
|
||||||
setup_logread
|
setup_logread
|
||||||
eval show_log $g_pager
|
eval show_log $g_pager
|
||||||
;;
|
;;
|
||||||
tc)
|
tc)
|
||||||
|
only_root
|
||||||
[ $# -gt 2 ] && too_many_arguments $2
|
[ $# -gt 2 ] && too_many_arguments $2
|
||||||
eval show_tc $@ $g_pager
|
eval show_tc $@ $g_pager
|
||||||
;;
|
;;
|
||||||
classifiers|filters)
|
classifiers|filters)
|
||||||
|
only_root
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
eval show_classifiers_command $g_pager
|
eval show_classifiers_command $g_pager
|
||||||
;;
|
;;
|
||||||
zones)
|
zones)
|
||||||
|
only_root
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
if [ -f ${VARDIR}/zones ]; then
|
if [ -f ${VARDIR}/zones ]; then
|
||||||
echo "$g_product $SHOREWALL_VERSION Zones at $g_hostname - $(date)"
|
echo "$g_product $SHOREWALL_VERSION Zones at $g_hostname - $(date)"
|
||||||
@@ -1351,6 +1394,7 @@ show_command() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
capabilities)
|
capabilities)
|
||||||
|
only_root
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
determine_capabilities
|
determine_capabilities
|
||||||
VERBOSITY=2
|
VERBOSITY=2
|
||||||
@@ -1387,33 +1431,50 @@ show_command() {
|
|||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
chain)
|
chain)
|
||||||
|
only_root
|
||||||
shift
|
shift
|
||||||
eval show_chain $@ $g_pager
|
eval show_chain $@ $g_pager
|
||||||
;;
|
;;
|
||||||
vardir)
|
vardir)
|
||||||
echo $VARDIR;
|
echo $VARDIR;
|
||||||
;;
|
;;
|
||||||
|
rc)
|
||||||
|
shift
|
||||||
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
|
if [ -n "$1" -a -d "$1" ]; then
|
||||||
|
cat $1/shorewallrc
|
||||||
|
elif [ -n "$g_basedir" -a -d "$g_basedir" ]; then
|
||||||
|
cat $g_basedir/shorewallrc
|
||||||
|
else
|
||||||
|
fatal_error "Can not determine the location of the shorewallrc file."
|
||||||
|
fi
|
||||||
|
;;
|
||||||
policies)
|
policies)
|
||||||
|
only_root
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
eval show_policies $g_pager
|
eval show_policies $g_pager
|
||||||
;;
|
;;
|
||||||
ipa)
|
ipa)
|
||||||
|
only_root
|
||||||
[ $g_family -eq 4 ] || fatal_error "'show ipa' is now available in $g_product"
|
[ $g_family -eq 4 ] || fatal_error "'show ipa' is now available in $g_product"
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
eval show_ipa $g_pager
|
eval show_ipa $g_pager
|
||||||
;;
|
;;
|
||||||
marks)
|
marks)
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
|
only_root
|
||||||
echo "$g_product $SHOREWALL_VERSION Mark Layout at $g_hostname - $(date)"
|
echo "$g_product $SHOREWALL_VERSION Mark Layout at $g_hostname - $(date)"
|
||||||
echo
|
echo
|
||||||
[ -f ${VARDIR}/marks ] && cat ${VARDIR}/marks;
|
[ -f ${VARDIR}/marks ] && cat ${VARDIR}/marks;
|
||||||
;;
|
;;
|
||||||
nfacct)
|
nfacct)
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
|
only_root
|
||||||
eval show_nfacct_command $g_pager
|
eval show_nfacct_command $g_pager
|
||||||
;;
|
;;
|
||||||
arptables)
|
arptables)
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
|
only_root
|
||||||
resolve_arptables
|
resolve_arptables
|
||||||
if [ -n "$arptables" -a -x $arptables ]; then
|
if [ -n "$arptables" -a -x $arptables ]; then
|
||||||
eval show_arptables $g_pager
|
eval show_arptables $g_pager
|
||||||
@@ -1423,6 +1484,7 @@ show_command() {
|
|||||||
;;
|
;;
|
||||||
event)
|
event)
|
||||||
[ $# -gt 1 ] || too_many_arguments $2
|
[ $# -gt 1 ] || too_many_arguments $2
|
||||||
|
only_root
|
||||||
echo "$g_product $SHOREWALL_VERSION events at $g_hostname - $(date)"
|
echo "$g_product $SHOREWALL_VERSION events at $g_hostname - $(date)"
|
||||||
echo
|
echo
|
||||||
shift
|
shift
|
||||||
@@ -1430,14 +1492,18 @@ show_command() {
|
|||||||
;;
|
;;
|
||||||
events)
|
events)
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
|
only_root
|
||||||
eval show_events_command $g_pager
|
eval show_events_command $g_pager
|
||||||
;;
|
;;
|
||||||
bl|blacklists)
|
bl|blacklists)
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
|
only_root
|
||||||
|
setup_dbl
|
||||||
eval show_blacklists $g_pager
|
eval show_blacklists $g_pager
|
||||||
;;
|
;;
|
||||||
opens)
|
opens)
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
|
only_root
|
||||||
echo "$g_product $SHOREWALL_VERSION Temporarily opened connections at $g_hostname - $(date)"
|
echo "$g_product $SHOREWALL_VERSION Temporarily opened connections at $g_hostname - $(date)"
|
||||||
|
|
||||||
if chain_exists dynamic; then
|
if chain_exists dynamic; then
|
||||||
@@ -1448,8 +1514,13 @@ show_command() {
|
|||||||
;;
|
;;
|
||||||
ipsec)
|
ipsec)
|
||||||
[ $# -gt 1 ] && too_many_arguments $2
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
|
only_root
|
||||||
eval show_ipsec_command $g_pager
|
eval show_ipsec_command $g_pager
|
||||||
;;
|
;;
|
||||||
|
saves)
|
||||||
|
[ $# -gt 1 ] && too_many_arguments $2
|
||||||
|
show_saves_command
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
case "$PRODUCT" in
|
case "$PRODUCT" in
|
||||||
*-lite)
|
*-lite)
|
||||||
@@ -1496,6 +1567,8 @@ show_command() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
only_root
|
||||||
|
|
||||||
if [ $# -gt 0 ]; then
|
if [ $# -gt 0 ]; then
|
||||||
if [ $1 = dynamic -a $# -gt 1 ]; then
|
if [ $1 = dynamic -a $# -gt 1 ]; then
|
||||||
shift
|
shift
|
||||||
@@ -1813,7 +1886,7 @@ do_dump_command() {
|
|||||||
|
|
||||||
echo
|
echo
|
||||||
|
|
||||||
qt mywhich ss && ss -${g_family}tunap || { qt mywhich netstat && netatat -tunap; }
|
qt mywhich ss && ss -${g_family}tunap || { qt mywhich netstat && netstat -tunap; }
|
||||||
|
|
||||||
if [ -n "$TC_ENABLED" ]; then
|
if [ -n "$TC_ENABLED" ]; then
|
||||||
heading "Traffic Control"
|
heading "Traffic Control"
|
||||||
@@ -1927,41 +2000,6 @@ show_proc() # $1 = name of a file
|
|||||||
[ -f $1 ] && echo " $1 = $(cat $1)"
|
[ -f $1 ] && echo " $1 = $(cat $1)"
|
||||||
}
|
}
|
||||||
|
|
||||||
read_yesno_with_timeout() {
|
|
||||||
local timeout
|
|
||||||
timeout=${1:-60}
|
|
||||||
|
|
||||||
case $timeout in
|
|
||||||
*s)
|
|
||||||
;;
|
|
||||||
*m)
|
|
||||||
timeout=$((${timeout%m} * 60))
|
|
||||||
;;
|
|
||||||
*h)
|
|
||||||
timeout=$((${timeout%h} * 3600))
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
read -t $timeout yn 2> /dev/null
|
|
||||||
if [ $? -eq 2 ]
|
|
||||||
then
|
|
||||||
# read doesn't support timeout
|
|
||||||
test -x /bin/bash || return 2 # bash is not installed so the feature is not available
|
|
||||||
/bin/bash -c "read -t $timeout yn ; if [ \"\$yn\" == \"y\" ] ; then exit 0 ; else exit 1 ; fi" # invoke bash and use its version of read
|
|
||||||
return $?
|
|
||||||
else
|
|
||||||
# read supports timeout
|
|
||||||
case "$yn" in
|
|
||||||
y|Y)
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Create the appropriate -q option to pass onward
|
# Create the appropriate -q option to pass onward
|
||||||
#
|
#
|
||||||
@@ -2545,15 +2583,21 @@ hits_command() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Issue an error message and terminate if the firewall isn't started
|
||||||
|
#
|
||||||
|
require_started() {
|
||||||
|
if ! product_is_started; then
|
||||||
|
error_message "ERROR: $g_product is not started"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# 'allow' command executor
|
# 'allow' command executor
|
||||||
#
|
#
|
||||||
allow_command() {
|
allow_command() {
|
||||||
|
|
||||||
[ -n "$g_debugging" ] && set -x
|
|
||||||
[ $# -eq 1 ] && missing_argument
|
|
||||||
|
|
||||||
if product_is_started ; then
|
|
||||||
local allowed
|
local allowed
|
||||||
local which
|
local which
|
||||||
which='-s'
|
which='-s'
|
||||||
@@ -2561,8 +2605,10 @@ allow_command() {
|
|||||||
range='--src-range'
|
range='--src-range'
|
||||||
local dynexists
|
local dynexists
|
||||||
|
|
||||||
if [ -n "$g_blacklistipset" ]; then
|
[ -n "$g_debugging" ] && set -x
|
||||||
|
[ $# -eq 1 ] && missing_argument
|
||||||
|
|
||||||
|
if [ -n "$g_blacklistipset" ]; then
|
||||||
case ${IPSET:=ipset} in
|
case ${IPSET:=ipset} in
|
||||||
*/*)
|
*/*)
|
||||||
if [ ! -x "$IPSET" ]; then
|
if [ ! -x "$IPSET" ]; then
|
||||||
@@ -2579,6 +2625,7 @@ allow_command() {
|
|||||||
if chain_exists dynamic; then
|
if chain_exists dynamic; then
|
||||||
dynexists=Yes
|
dynexists=Yes
|
||||||
elif [ -z "$g_blacklistipset" ]; then
|
elif [ -z "$g_blacklistipset" ]; then
|
||||||
|
require_started
|
||||||
fatal_error "Dynamic blacklisting is not enabled in the current $g_product configuration"
|
fatal_error "Dynamic blacklisting is not enabled in the current $g_product configuration"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -2644,10 +2691,6 @@ allow_command() {
|
|||||||
done
|
done
|
||||||
|
|
||||||
[ -n "$g_nolock" ] || mutex_off
|
[ -n "$g_nolock" ] || mutex_off
|
||||||
else
|
|
||||||
error_message "ERROR: $g_product is not started"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -2767,7 +2810,6 @@ determine_capabilities() {
|
|||||||
LENGTH_MATCH=
|
LENGTH_MATCH=
|
||||||
CLASSIFY_TARGET=
|
CLASSIFY_TARGET=
|
||||||
ENHANCED_REJECT=
|
ENHANCED_REJECT=
|
||||||
USEPKTTYPE=
|
|
||||||
KLUDGEFREE=
|
KLUDGEFREE=
|
||||||
MARK=
|
MARK=
|
||||||
XMARK=
|
XMARK=
|
||||||
@@ -2863,6 +2905,7 @@ determine_capabilities() {
|
|||||||
qt $g_tool -t nat -A $chain -j NETMAP --to 2001:470:B:227::/64 && NETMAP_TARGET=Yes
|
qt $g_tool -t nat -A $chain -j NETMAP --to 2001:470:B:227::/64 && NETMAP_TARGET=Yes
|
||||||
fi
|
fi
|
||||||
qt $g_tool -t nat -A $chain -j MASQUERADE && MASQUERADE_TGT=Yes
|
qt $g_tool -t nat -A $chain -j MASQUERADE && MASQUERADE_TGT=Yes
|
||||||
|
qt $g_tool -t nat -L INPUT -n && NAT_INPUT_CHAIN=Yes
|
||||||
qt $g_tool -t nat -A $chain -p udplite -m multiport --dport 33 -j REDIRECT --to-port 22 && UDPREDIRECT=Yes
|
qt $g_tool -t nat -A $chain -p udplite -m multiport --dport 33 -j REDIRECT --to-port 22 && UDPREDIRECT=Yes
|
||||||
qt $g_tool -t nat -F $chain
|
qt $g_tool -t nat -F $chain
|
||||||
qt $g_tool -t nat -X $chain
|
qt $g_tool -t nat -X $chain
|
||||||
@@ -3113,7 +3156,6 @@ determine_capabilities() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
qt $g_tool -A $chain -m pkttype --pkt-type broadcast -j ACCEPT && USEPKTTYPE=Yes
|
|
||||||
qt $g_tool -A $chain -m addrtype --src-type BROADCAST -j ACCEPT && ADDRTYPE=Yes
|
qt $g_tool -A $chain -m addrtype --src-type BROADCAST -j ACCEPT && ADDRTYPE=Yes
|
||||||
qt $g_tool -A $chain -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1000:1500 -j ACCEPT && TCPMSS_MATCH=Yes
|
qt $g_tool -A $chain -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1000:1500 -j ACCEPT && TCPMSS_MATCH=Yes
|
||||||
qt $g_tool -A $chain -m hashlimit --hashlimit-upto 4 --hashlimit-burst 5 --hashlimit-name $chain --hashlimit-mode dstip -j ACCEPT && HASHLIMIT_MATCH=Yes
|
qt $g_tool -A $chain -m hashlimit --hashlimit-upto 4 --hashlimit-burst 5 --hashlimit-name $chain --hashlimit-mode dstip -j ACCEPT && HASHLIMIT_MATCH=Yes
|
||||||
@@ -3227,7 +3269,6 @@ report_capabilities_unsorted() {
|
|||||||
report_capability "Extended Connection Tracking Match Support (NEW_CONNTRACK_MATCH)" $NEW_CONNTRACK_MATCH
|
report_capability "Extended Connection Tracking Match Support (NEW_CONNTRACK_MATCH)" $NEW_CONNTRACK_MATCH
|
||||||
[ -n "$OLD_CONNTRACK_MATCH" ] && report_capability "Old Connection Tracking Match Syntax (OLD_CONNTRACK_MATCH)" $OLD_CONNTRACK_MATCH
|
[ -n "$OLD_CONNTRACK_MATCH" ] && report_capability "Old Connection Tracking Match Syntax (OLD_CONNTRACK_MATCH)" $OLD_CONNTRACK_MATCH
|
||||||
fi
|
fi
|
||||||
report_capability "Packet Type Match (USEPKTTYPE)" $USEPKTTYPE
|
|
||||||
report_capability "Policy Match (POLICY_MATCH)" $POLICY_MATCH
|
report_capability "Policy Match (POLICY_MATCH)" $POLICY_MATCH
|
||||||
report_capability "Physdev Match (PHYSDEV_MATCH)" $PHYSDEV_MATCH
|
report_capability "Physdev Match (PHYSDEV_MATCH)" $PHYSDEV_MATCH
|
||||||
report_capability "Physdev-is-bridged Support (PHYSDEV_BRIDGE)" $PHYSDEV_BRIDGE
|
report_capability "Physdev-is-bridged Support (PHYSDEV_BRIDGE)" $PHYSDEV_BRIDGE
|
||||||
@@ -3237,8 +3278,8 @@ report_capabilities_unsorted() {
|
|||||||
[ -n "$RECENT_MATCH" ] && report_capability 'Recent Match "--reap" option (REAP_OPTION)' $REAP_OPTION
|
[ -n "$RECENT_MATCH" ] && report_capability 'Recent Match "--reap" option (REAP_OPTION)' $REAP_OPTION
|
||||||
report_capability "Owner Match (OWNER_MATCH)" $OWNER_MATCH
|
report_capability "Owner Match (OWNER_MATCH)" $OWNER_MATCH
|
||||||
report_capability "Owner Name Match (OWNER_NAME_MATCH)" $OWNER_NAME_MATCH
|
report_capability "Owner Name Match (OWNER_NAME_MATCH)" $OWNER_NAME_MATCH
|
||||||
if [ -n "$IPSET_MATCH" ]; then
|
|
||||||
report_capability "Ipset Match (IPSET_MATCH)" $IPSET_MATCH
|
report_capability "Ipset Match (IPSET_MATCH)" $IPSET_MATCH
|
||||||
|
if [ -n "$IPSET_MATCH" ]; then
|
||||||
[ -n "$OLD_IPSET_MATCH" ] && report_capability "OLD_Ipset Match (OLD_IPSET_MATCH)" $OLD_IPSET_MATCH
|
[ -n "$OLD_IPSET_MATCH" ] && report_capability "OLD_Ipset Match (OLD_IPSET_MATCH)" $OLD_IPSET_MATCH
|
||||||
[ -n "$IPSET_MATCH_NOMATCH" ] && report_capability "Ipset Match Nomatch (IPSET_MATCH_NOMATCH)" $IPSET_MATCH_NOMATCH
|
[ -n "$IPSET_MATCH_NOMATCH" ] && report_capability "Ipset Match Nomatch (IPSET_MATCH_NOMATCH)" $IPSET_MATCH_NOMATCH
|
||||||
[ -n "$IPSET_MATCH_NOMATCH" ] && report_capability "Ipset Match Counters (IPSET_MATCH_COUNTERS)" $IPSET_MATCH_COUNTERS
|
[ -n "$IPSET_MATCH_NOMATCH" ] && report_capability "Ipset Match Counters (IPSET_MATCH_COUNTERS)" $IPSET_MATCH_COUNTERS
|
||||||
@@ -3331,6 +3372,7 @@ report_capabilities_unsorted() {
|
|||||||
report_capability "NFQUEUE CPU Fanout (CPU_FANOUT)" $CPU_FANOUT
|
report_capability "NFQUEUE CPU Fanout (CPU_FANOUT)" $CPU_FANOUT
|
||||||
report_capability "NETMAP Target (NETMAP_TARGET)" $NETMAP_TARGET
|
report_capability "NETMAP Target (NETMAP_TARGET)" $NETMAP_TARGET
|
||||||
report_capability "--nflog-size support (NFLOG_SIZE)" $NFLOG_SIZE
|
report_capability "--nflog-size support (NFLOG_SIZE)" $NFLOG_SIZE
|
||||||
|
report_capability "INPUT chain in nat table (NAT_INPUT_CHAIN)" $NAT_INPUT_CHAIN
|
||||||
|
|
||||||
echo " Kernel Version (KERNELVERSION): $KERNELVERSION"
|
echo " Kernel Version (KERNELVERSION): $KERNELVERSION"
|
||||||
echo " Capabilities Version (CAPVERSION): $CAPVERSION"
|
echo " Capabilities Version (CAPVERSION): $CAPVERSION"
|
||||||
@@ -3343,8 +3385,6 @@ report_capabilities() {
|
|||||||
report_capabilities_unsorted | sort
|
report_capabilities_unsorted | sort
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -n "$PKTTYPE" ] || USEPKTTYPE=
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
report_capabilities_unsorted1() {
|
report_capabilities_unsorted1() {
|
||||||
@@ -3361,7 +3401,6 @@ report_capabilities_unsorted1() {
|
|||||||
report_capability1 CONNTRACK_MATCH
|
report_capability1 CONNTRACK_MATCH
|
||||||
report_capability1 NEW_CONNTRACK_MATCH
|
report_capability1 NEW_CONNTRACK_MATCH
|
||||||
report_capability1 OLD_CONNTRACK_MATCH
|
report_capability1 OLD_CONNTRACK_MATCH
|
||||||
report_capability1 USEPKTTYPE
|
|
||||||
report_capability1 POLICY_MATCH
|
report_capability1 POLICY_MATCH
|
||||||
report_capability1 PHYSDEV_MATCH
|
report_capability1 PHYSDEV_MATCH
|
||||||
report_capability1 PHYSDEV_BRIDGE
|
report_capability1 PHYSDEV_BRIDGE
|
||||||
@@ -3439,6 +3478,7 @@ report_capabilities_unsorted1() {
|
|||||||
report_capability1 NETMAP_TARGET
|
report_capability1 NETMAP_TARGET
|
||||||
report_capability1 NFLOG_SIZE
|
report_capability1 NFLOG_SIZE
|
||||||
report_capability1 RESTORE_WAIT_OPTION
|
report_capability1 RESTORE_WAIT_OPTION
|
||||||
|
report_capability1 NAT_INPUT_CHAIN
|
||||||
|
|
||||||
report_capability1 AMANDA_HELPER
|
report_capability1 AMANDA_HELPER
|
||||||
report_capability1 FTP_HELPER
|
report_capability1 FTP_HELPER
|
||||||
@@ -3781,7 +3821,7 @@ iprange_command() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ipdecimal_command() {
|
ipdecimal_command() {
|
||||||
if [ $# eq 1 ]; then
|
if [ $# -eq 1 ]; then
|
||||||
missing_argument
|
missing_argument
|
||||||
else
|
else
|
||||||
[ $# -eq 2 ] || too_many_arguments $3
|
[ $# -eq 2 ] || too_many_arguments $3
|
||||||
@@ -3924,7 +3964,7 @@ get_config() {
|
|||||||
|
|
||||||
ensure_config_path
|
ensure_config_path
|
||||||
|
|
||||||
[ -f ${VARDIR}/firewall.conf ] && . ${VARDIR}/firewall.conf
|
[ -f $g_firewall.conf ] && . ${VARDIR}/firewall.conf
|
||||||
|
|
||||||
[ -n "$PATH" ] || PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
|
[ -n "$PATH" ] || PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
|
||||||
|
|
||||||
@@ -4078,15 +4118,15 @@ start_command() {
|
|||||||
rc=0
|
rc=0
|
||||||
[ -n "$g_nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
|
|
||||||
if [ -x ${VARDIR}/firewall ]; then
|
if [ -x $g_firewall ]; then
|
||||||
if [ -n "$g_fast" -a -x ${VARDIR}/${RESTOREFILE} -a ! ${VARDIR}/firewall -nt ${VARDIR}/${RESTOREFILE} ]; then
|
if [ -n "$g_fast" -a -x ${VARDIR}/${RESTOREFILE} -a ! $g_firewall -nt ${VARDIR}/${RESTOREFILE} ]; then
|
||||||
run_it ${VARDIR}/${RESTOREFILE} $g_debugging restore
|
run_it ${VARDIR}/${RESTOREFILE} $g_debugging restore
|
||||||
else
|
else
|
||||||
run_it ${VARDIR}/firewall $g_debugging start
|
run_it $g_firewall $g_debugging start
|
||||||
fi
|
fi
|
||||||
rc=$?
|
rc=$?
|
||||||
else
|
else
|
||||||
error_message "${VARDIR}/firewall is missing or is not executable"
|
error_message "$g_firewall is missing or is not executable"
|
||||||
mylogger kern.err "ERROR:$g_product start failed"
|
mylogger kern.err "ERROR:$g_product start failed"
|
||||||
rc=6
|
rc=6
|
||||||
fi
|
fi
|
||||||
@@ -4215,11 +4255,11 @@ restart_command() {
|
|||||||
|
|
||||||
[ -n "$g_nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
|
|
||||||
if [ -x ${VARDIR}/firewall ]; then
|
if [ -x $g_firewall ]; then
|
||||||
run_it ${VARDIR}/firewall $g_debugging $COMMAND
|
run_it $g_firewall $g_debugging $COMMAND
|
||||||
rc=$?
|
rc=$?
|
||||||
else
|
else
|
||||||
error_message "${VARDIR}/firewall is missing or is not executable"
|
error_message "$g_firewall is missing or is not executable"
|
||||||
mylogger kern.err "ERROR:$g_product $COMMAND failed"
|
mylogger kern.err "ERROR:$g_product $COMMAND failed"
|
||||||
rc=6
|
rc=6
|
||||||
fi
|
fi
|
||||||
@@ -4229,10 +4269,10 @@ restart_command() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
run_command() {
|
run_command() {
|
||||||
if [ -x ${VARDIR}/firewall ] ; then
|
if [ -x $g_firewall ] ; then
|
||||||
run_it ${VARDIR}/firewall $g_debugging $@
|
run_it $g_firewall $g_debugging $@
|
||||||
else
|
else
|
||||||
fatal_error "${VARDIR}/firewall does not exist or is not executable"
|
fatal_error "$g_firewall does not exist or is not executable"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4290,7 +4330,6 @@ usage() # $1 = exit status
|
|||||||
|
|
||||||
echo " open <source> <dest> [ <protocol> [ <port> ] ]"
|
echo " open <source> <dest> [ <protocol> [ <port> ] ]"
|
||||||
echo " reenable <interface>"
|
echo " reenable <interface>"
|
||||||
ecko " refresh [ -d ] [ -n ] [ -T ] [ -D <directory> ] [ <chain>... ]"
|
|
||||||
echo " reject <address> ..."
|
echo " reject <address> ..."
|
||||||
|
|
||||||
if [ -n "$g_lite" ]; then
|
if [ -n "$g_lite" ]; then
|
||||||
@@ -4300,9 +4339,11 @@ usage() # $1 = exit status
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$g_lite" ]; then
|
if [ -z "$g_lite" ]; then
|
||||||
echo " remote-reload [ -n ] [ -s ] [ -c ] [ -r <root-name> ] [ -T ] [ -i ] [ <directory> ] <system>"
|
echo " remote-getrc [ -T ] [ -c ] [ -r <root-name> ] [ [ -D ] <directory> ] [ <system> ]"
|
||||||
echo " remote-restart [ -n ] [ -s ] [ -c ] [ -r <root-name> ] [ -T ] [ -i ] [ <directory> ] <system>"
|
echo " remote-getcaps [ -T ] [ -R ] [ -r <root-name> ] [ [ -D ] <directory> ] [ <system> ]"
|
||||||
echo " remote-start [ -n ] [ -s ] [ -c ] [ -r <root-name> ] [ -T ] [ -i ] [ <directory> ] <system>"
|
echo " remote-reload [ -n ] [ -s ] [ -c ] [ -r <root-name> ] [ -T ] [ -i ] [ <directory> ] [ <system> ]"
|
||||||
|
echo " remote-restart [ -n ] [ -s ] [ -c ] [ -r <root-name> ] [ -T ] [ -i ] [ <directory> ] [ <system> ]"
|
||||||
|
echo " remote-start [ -n ] [ -s ] [ -c ] [ -r <root-name> ] [ -T ] [ -i ] [ <directory> ] [ <system> ]"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo " reset [ <chain> ... ]"
|
echo " reset [ <chain> ... ]"
|
||||||
@@ -4345,7 +4386,9 @@ usage() # $1 = exit status
|
|||||||
echo " [ show | list | ls ] nfacct"
|
echo " [ show | list | ls ] nfacct"
|
||||||
echo " [ show | list | ls ] opens"
|
echo " [ show | list | ls ] opens"
|
||||||
echo " [ show | list | ls ] policies"
|
echo " [ show | list | ls ] policies"
|
||||||
|
echo " [ show | list | ls ] rc"
|
||||||
echo " [ show | list | ls ] routing"
|
echo " [ show | list | ls ] routing"
|
||||||
|
echo " [ show | list | ls ] saves"
|
||||||
echo " [ show | list | ls ] tc [ device ]"
|
echo " [ show | list | ls ] tc [ device ]"
|
||||||
echo " [ show | list | ls ] vardir"
|
echo " [ show | list | ls ] vardir"
|
||||||
echo " [ show | list | ls ] zones"
|
echo " [ show | list | ls ] zones"
|
||||||
@@ -4394,7 +4437,6 @@ shorewall_cli() {
|
|||||||
g_use_verbosity=
|
g_use_verbosity=
|
||||||
g_debug=
|
g_debug=
|
||||||
g_export=
|
g_export=
|
||||||
g_refreshchains=:none:
|
|
||||||
g_confess=
|
g_confess=
|
||||||
g_update=
|
g_update=
|
||||||
g_annotate=
|
g_annotate=
|
||||||
@@ -4413,6 +4455,7 @@ shorewall_cli() {
|
|||||||
g_nopager=
|
g_nopager=
|
||||||
g_blacklistipset=
|
g_blacklistipset=
|
||||||
g_disconnect=
|
g_disconnect=
|
||||||
|
g_havemutex=
|
||||||
|
|
||||||
VERBOSE=
|
VERBOSE=
|
||||||
VERBOSITY=1
|
VERBOSITY=1
|
||||||
@@ -4585,12 +4628,14 @@ shorewall_cli() {
|
|||||||
|
|
||||||
case "$COMMAND" in
|
case "$COMMAND" in
|
||||||
start)
|
start)
|
||||||
|
only_root
|
||||||
get_config Yes Yes
|
get_config Yes Yes
|
||||||
shift
|
shift
|
||||||
start_command $@
|
start_command $@
|
||||||
;;
|
;;
|
||||||
stop|clear)
|
stop|clear)
|
||||||
[ $# -ne 1 ] && too_many_arguments $2
|
[ $# -ne 1 ] && too_many_arguments $2
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
[ -x $g_firewall ] || fatal_error "$g_product has never been started"
|
[ -x $g_firewall ] || fatal_error "$g_product has never been started"
|
||||||
[ -n "$g_nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
@@ -4598,6 +4643,7 @@ shorewall_cli() {
|
|||||||
[ -n "$g_nolock" ] || mutex_off
|
[ -n "$g_nolock" ] || mutex_off
|
||||||
;;
|
;;
|
||||||
reset)
|
reset)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
shift
|
shift
|
||||||
[ -n "$g_nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
@@ -4606,19 +4652,22 @@ shorewall_cli() {
|
|||||||
[ -n "$g_nolock" ] || mutex_off
|
[ -n "$g_nolock" ] || mutex_off
|
||||||
;;
|
;;
|
||||||
reload|restart)
|
reload|restart)
|
||||||
|
only_root
|
||||||
get_config Yes Yes
|
get_config Yes Yes
|
||||||
shift
|
shift
|
||||||
restart_command $@
|
restart_command $@
|
||||||
;;
|
;;
|
||||||
disable|enable|reenable)
|
disable|enable|reenable)
|
||||||
|
only_root
|
||||||
get_config Yes
|
get_config Yes
|
||||||
if product_is_started; then
|
if product_is_started; then
|
||||||
run_it ${VARDIR}/firewall $g_debugging $@
|
run_it $g_firewall $g_debugging $@
|
||||||
else
|
else
|
||||||
fatal_error "$g_product is not running"
|
fatal_error "$g_product is not running"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
blacklist)
|
blacklist)
|
||||||
|
only_root
|
||||||
get_config Yes
|
get_config Yes
|
||||||
shift
|
shift
|
||||||
[ -n "$g_nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
@@ -4627,6 +4676,7 @@ shorewall_cli() {
|
|||||||
;;
|
;;
|
||||||
run)
|
run)
|
||||||
[ $# -gt 1 ] || fatal_error "Missing function name"
|
[ $# -gt 1 ] || fatal_error "Missing function name"
|
||||||
|
only_root
|
||||||
get_config Yes
|
get_config Yes
|
||||||
run_command $@
|
run_command $@
|
||||||
;;
|
;;
|
||||||
@@ -4636,18 +4686,20 @@ shorewall_cli() {
|
|||||||
show_command $@
|
show_command $@
|
||||||
;;
|
;;
|
||||||
status)
|
status)
|
||||||
[ "$(id -u)" != 0 ] && fatal_error "The status command may only be run by root"
|
only_root
|
||||||
get_config
|
get_config
|
||||||
shift
|
shift
|
||||||
status_command $@
|
status_command $@
|
||||||
;;
|
;;
|
||||||
dump)
|
dump)
|
||||||
|
only_root
|
||||||
get_config Yes No Yes
|
get_config Yes No Yes
|
||||||
shift
|
shift
|
||||||
dump_command $@
|
dump_command $@
|
||||||
;;
|
;;
|
||||||
hits)
|
hits)
|
||||||
[ $g_family -eq 6 ] && fatal_error "$g_product does not support the hits command"
|
[ $g_family -eq 6 ] && fatal_error "$g_product does not support the hits command"
|
||||||
|
only_root
|
||||||
get_config Yes No Yes
|
get_config Yes No Yes
|
||||||
[ -n "$g_debugging" ] && set -x
|
[ -n "$g_debugging" ] && set -x
|
||||||
shift
|
shift
|
||||||
@@ -4658,53 +4710,63 @@ shorewall_cli() {
|
|||||||
version_command $@
|
version_command $@
|
||||||
;;
|
;;
|
||||||
logwatch)
|
logwatch)
|
||||||
|
only_root
|
||||||
get_config Yes Yes Yes
|
get_config Yes Yes Yes
|
||||||
banner="${g_product}-$SHOREWALL_VERSION Logwatch at $g_hostname -"
|
banner="${g_product}-$SHOREWALL_VERSION Logwatch at $g_hostname -"
|
||||||
logwatch_command $@
|
logwatch_command $@
|
||||||
;;
|
;;
|
||||||
drop)
|
drop)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
[ -n "$g_debugging" ] && set -x
|
[ -n "$g_debugging" ] && set -x
|
||||||
[ $# -eq 1 ] && missing_argument
|
[ $# -eq 1 ] && missing_argument
|
||||||
drop_command $@
|
drop_command $@
|
||||||
;;
|
;;
|
||||||
logdrop)
|
logdrop)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
[ -n "$g_debugging" ] && set -x
|
[ -n "$g_debugging" ] && set -x
|
||||||
[ $# -eq 1 ] && missing_argument
|
[ $# -eq 1 ] && missing_argument
|
||||||
logdrop_command $@
|
logdrop_command $@
|
||||||
;;
|
;;
|
||||||
reject|logreject)
|
reject|logreject)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
[ -n "$g_debugging" ] && set -x
|
[ -n "$g_debugging" ] && set -x
|
||||||
[ $# -eq 1 ] && missing_argument
|
[ $# -eq 1 ] && missing_argument
|
||||||
reject_command $@
|
reject_command $@
|
||||||
;;
|
;;
|
||||||
open|close)
|
open|close)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
shift
|
shift
|
||||||
open_close_command $@
|
open_close_command $@
|
||||||
;;
|
;;
|
||||||
allow)
|
allow)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
allow_command $@
|
allow_command $@
|
||||||
;;
|
;;
|
||||||
add)
|
add)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
shift
|
shift
|
||||||
add_command $@
|
add_command $@
|
||||||
;;
|
;;
|
||||||
delete)
|
delete)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
shift
|
shift
|
||||||
delete_command $@
|
delete_command $@
|
||||||
;;
|
;;
|
||||||
save)
|
save)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
[ -n "$g_debugging" ] && set -x
|
[ -n "$g_debugging" ] && set -x
|
||||||
save_command $@
|
save_command $@
|
||||||
;;
|
;;
|
||||||
forget)
|
forget)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
forget_command $@
|
forget_command $@
|
||||||
;;
|
;;
|
||||||
@@ -4721,11 +4783,13 @@ shorewall_cli() {
|
|||||||
ipdecimal_command $@
|
ipdecimal_command $@
|
||||||
;;
|
;;
|
||||||
restore)
|
restore)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
shift
|
shift
|
||||||
restore_command $@
|
restore_command $@
|
||||||
;;
|
;;
|
||||||
call)
|
call)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
[ -n "$g_debugging" ] && set -x
|
[ -n "$g_debugging" ] && set -x
|
||||||
#
|
#
|
||||||
@@ -4763,17 +4827,20 @@ shorewall_cli() {
|
|||||||
usage
|
usage
|
||||||
;;
|
;;
|
||||||
iptrace)
|
iptrace)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
shift
|
shift
|
||||||
iptrace_command $@
|
iptrace_command $@
|
||||||
;;
|
;;
|
||||||
noiptrace)
|
noiptrace)
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
shift
|
shift
|
||||||
noiptrace_command $@
|
noiptrace_command $@
|
||||||
;;
|
;;
|
||||||
savesets)
|
savesets)
|
||||||
[ $# -eq 1 ] || too_many_arguments $2
|
[ $# -eq 1 ] || too_many_arguments $2
|
||||||
|
only_root
|
||||||
get_config
|
get_config
|
||||||
[ -n "$g_debugging" ] && set -x
|
[ -n "$g_debugging" ] && set -x
|
||||||
savesets1
|
savesets1
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.1 -- /usr/share/shorewall/lib.common.
|
# Shorewall 5.2 -- /usr/share/shorewall/lib.common
|
||||||
#
|
#
|
||||||
# (c) 2010-2017 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2010-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
@@ -754,7 +754,7 @@ mutex_on()
|
|||||||
|
|
||||||
MUTEX_TIMEOUT=${MUTEX_TIMEOUT:-60}
|
MUTEX_TIMEOUT=${MUTEX_TIMEOUT:-60}
|
||||||
|
|
||||||
if [ $MUTEX_TIMEOUT -gt 0 ]; then
|
if [ -z "$g_havemutex" -a $MUTEX_TIMEOUT -gt 0 ]; then
|
||||||
|
|
||||||
lockd=$(dirname $LOCKFILE)
|
lockd=$(dirname $LOCKFILE)
|
||||||
|
|
||||||
@@ -762,7 +762,7 @@ mutex_on()
|
|||||||
|
|
||||||
if [ -f $lockf ]; then
|
if [ -f $lockf ]; then
|
||||||
lockpid=`cat ${lockf} 2> /dev/null`
|
lockpid=`cat ${lockf} 2> /dev/null`
|
||||||
if [ -z "$lockpid" -o $lockpid = 0 ]; then
|
if [ -z "$lockpid" ] || [ $lockpid = 0 ]; then
|
||||||
rm -f ${lockf}
|
rm -f ${lockf}
|
||||||
error_message "WARNING: Stale lockfile ${lockf} removed"
|
error_message "WARNING: Stale lockfile ${lockf} removed"
|
||||||
elif [ $lockpid -eq $$ ]; then
|
elif [ $lockpid -eq $$ ]; then
|
||||||
@@ -775,11 +775,13 @@ mutex_on()
|
|||||||
|
|
||||||
if qt mywhich lockfile; then
|
if qt mywhich lockfile; then
|
||||||
lockfile -${MUTEX_TIMEOUT} -r1 ${lockf}
|
lockfile -${MUTEX_TIMEOUT} -r1 ${lockf}
|
||||||
|
g_havemutex="rm -f ${lockf}"
|
||||||
chmod u+w ${lockf}
|
chmod u+w ${lockf}
|
||||||
echo $$ > ${lockf}
|
echo $$ > ${lockf}
|
||||||
chmod u-w ${lockf}
|
chmod u-w ${lockf}
|
||||||
elif qt mywhich lock; then
|
elif qt mywhich lock; then
|
||||||
lock ${lockf}
|
lock ${lockf}
|
||||||
|
g_havemutex="lock -u ${lockf} && rm -f ${lockf}"
|
||||||
chmod u=r ${lockf}
|
chmod u=r ${lockf}
|
||||||
else
|
else
|
||||||
while [ -f ${lockf} -a ${try} -lt ${MUTEX_TIMEOUT} ] ; do
|
while [ -f ${lockf} -a ${try} -lt ${MUTEX_TIMEOUT} ] ; do
|
||||||
@@ -790,10 +792,15 @@ mutex_on()
|
|||||||
if [ ${try} -lt ${MUTEX_TIMEOUT} ] ; then
|
if [ ${try} -lt ${MUTEX_TIMEOUT} ] ; then
|
||||||
# Create the lockfile
|
# Create the lockfile
|
||||||
echo $$ > ${lockf}
|
echo $$ > ${lockf}
|
||||||
|
g_havemutex="rm -f ${lockf}"
|
||||||
else
|
else
|
||||||
echo "Giving up on lock file ${lockf}" >&2
|
echo "Giving up on lock file ${lockf}" >&2
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -n "$g_havemutex" ]; then
|
||||||
|
trap mutex_off EXIT
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -802,7 +809,10 @@ mutex_on()
|
|||||||
#
|
#
|
||||||
mutex_off()
|
mutex_off()
|
||||||
{
|
{
|
||||||
[ -f ${CONFDIR}/rc.common ] && lock -u ${LOCKFILE:=${VARDIR}/lock}
|
if [ -n "$g_havemutex" ]; then
|
||||||
rm -f ${LOCKFILE:=${VARDIR}/lock}
|
eval $g_havemutex
|
||||||
|
g_havemutex=
|
||||||
|
trap '' exit
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.1 -- /usr/share/shorewall/lib.core
|
# Shorewall 5.2 -- /usr/share/shorewall/lib.core
|
||||||
#
|
#
|
||||||
# (c) 1999-2017 - Tom Eastep (teastep@shorewall.net)
|
# (c) 1999-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
#
|
#
|
||||||
#
|
# Shorewall 5.2 -- /usr/share/shorewall/lib.installer
|
||||||
# Shorewall 5.1 -- /usr/share/shorewall/lib.installer.
|
|
||||||
#
|
#
|
||||||
# (c) 2017 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
# (c) 2017 - Matt Darfeuille (matdarf@gmail.com)
|
# (c) 2017 - Matt Darfeuille (matdarf@gmail.com)
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
#
|
#
|
||||||
#
|
# Shorewall 5.2 -- /usr/share/shorewall/lib.installer
|
||||||
# Shorewall 5.1 -- /usr/share/shorewall/lib.installer.
|
|
||||||
#
|
#
|
||||||
# (c) 2017 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
# (c) 2017 - Matt Darfeuille (matdarf@gmail.com)
|
# (c) 2017 - Matt Darfeuille (matdarf@gmail.com)
|
||||||
|
@@ -405,20 +405,6 @@
|
|||||||
<replaceable>provider</replaceable> }</arg>
|
<replaceable>provider</replaceable> }</arg>
|
||||||
</cmdsynopsis>
|
</cmdsynopsis>
|
||||||
|
|
||||||
<cmdsynopsis>
|
|
||||||
<command>shorewall[6]</command>
|
|
||||||
|
|
||||||
<arg
|
|
||||||
choice="opt"><option>trace</option>|<option>debug</option><arg><option>nolock</option></arg></arg>
|
|
||||||
|
|
||||||
<arg>options</arg>
|
|
||||||
|
|
||||||
<arg
|
|
||||||
choice="plain"><option>refresh</option><arg><option>-n</option></arg><arg><option>-d</option></arg><arg><option>-T</option></arg><arg><option>-i</option></arg><arg>-<option>D</option>
|
|
||||||
<replaceable>directory</replaceable> </arg><arg
|
|
||||||
rep="repeat"><replaceable>chain</replaceable></arg></arg>
|
|
||||||
</cmdsynopsis>
|
|
||||||
|
|
||||||
<cmdsynopsis>
|
<cmdsynopsis>
|
||||||
<command>shorewall[6][-lite]</command>
|
<command>shorewall[6][-lite]</command>
|
||||||
|
|
||||||
@@ -459,6 +445,54 @@
|
|||||||
<arg><replaceable>directory</replaceable></arg>
|
<arg><replaceable>directory</replaceable></arg>
|
||||||
</cmdsynopsis>
|
</cmdsynopsis>
|
||||||
|
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>shorewall[6]</command>
|
||||||
|
|
||||||
|
<arg choice="opt"><option>trace</option>|<option>debug</option></arg>
|
||||||
|
|
||||||
|
<arg>options</arg>
|
||||||
|
|
||||||
|
<arg choice="plain"><option>remote-getcaps</option></arg>
|
||||||
|
|
||||||
|
<arg><option>-s</option></arg>
|
||||||
|
|
||||||
|
<arg><option>-R</option></arg>
|
||||||
|
|
||||||
|
<arg><option>-r</option> <replaceable>root-user-name</replaceable></arg>
|
||||||
|
|
||||||
|
<arg><option>-T</option></arg>
|
||||||
|
|
||||||
|
<arg><option>-i</option></arg>
|
||||||
|
|
||||||
|
<arg><arg><option>-D</option></arg><replaceable>directory</replaceable></arg>
|
||||||
|
|
||||||
|
<arg choice="plain"><arg><replaceable>system</replaceable></arg></arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
|
||||||
|
<cmdsynopsis>
|
||||||
|
<command>shorewall[6]</command>
|
||||||
|
|
||||||
|
<arg choice="opt"><option>trace</option>|<option>debug</option></arg>
|
||||||
|
|
||||||
|
<arg>options</arg>
|
||||||
|
|
||||||
|
<arg choice="plain"><option>remote-getrc</option></arg>
|
||||||
|
|
||||||
|
<arg><option>-s</option></arg>
|
||||||
|
|
||||||
|
<arg><option>-c</option></arg>
|
||||||
|
|
||||||
|
<arg><option>-r</option> <replaceable>root-user-name</replaceable></arg>
|
||||||
|
|
||||||
|
<arg><option>-T</option></arg>
|
||||||
|
|
||||||
|
<arg><option>-i</option></arg>
|
||||||
|
|
||||||
|
<arg><arg><option>-D</option></arg><replaceable>directory</replaceable></arg>
|
||||||
|
|
||||||
|
<arg choice="plain"><arg><replaceable>system</replaceable></arg></arg>
|
||||||
|
</cmdsynopsis>
|
||||||
|
|
||||||
<cmdsynopsis>
|
<cmdsynopsis>
|
||||||
<command>shorewall[6]</command>
|
<command>shorewall[6]</command>
|
||||||
|
|
||||||
@@ -813,7 +847,7 @@
|
|||||||
|
|
||||||
<arg choice="req"><option>show | list | ls </option></arg>
|
<arg choice="req"><option>show | list | ls </option></arg>
|
||||||
|
|
||||||
<arg choice="plain"><option>tc</option></arg>
|
<arg choice="plain"><option>saves</option></arg>
|
||||||
</cmdsynopsis>
|
</cmdsynopsis>
|
||||||
|
|
||||||
<cmdsynopsis>
|
<cmdsynopsis>
|
||||||
@@ -1316,7 +1350,7 @@
|
|||||||
by the compiled script that executed the last successful <emphasis
|
by the compiled script that executed the last successful <emphasis
|
||||||
role="bold">start</emphasis>, <emphasis
|
role="bold">start</emphasis>, <emphasis
|
||||||
role="bold">restart</emphasis> or <emphasis
|
role="bold">restart</emphasis> or <emphasis
|
||||||
role="bold">refresh</emphasis> command if that script exists.</para>
|
role="bold">reload</emphasis> command if that script exists.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@@ -1773,63 +1807,6 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><emphasis role="bold">refresh </emphasis> [-<option>n</option>]
|
|
||||||
[-<option>d</option>] [-<option>T</option>] [-i] [-<option>D
|
|
||||||
</option><replaceable>directory</replaceable> ] [
|
|
||||||
<replaceable>chain</replaceable>... ]</term>
|
|
||||||
|
|
||||||
<listitem>
|
|
||||||
<para>Not available with Shorewall[6]-lite.</para>
|
|
||||||
|
|
||||||
<para>All steps performed by <command>restart</command> are
|
|
||||||
performed by <command>refresh</command> with the exception that
|
|
||||||
<command>refresh</command> only recreates the chains specified in
|
|
||||||
the command while <command>restart</command> recreates the entire
|
|
||||||
Netfilter ruleset. If no <replaceable>chain</replaceable> is given,
|
|
||||||
the static blacklisting chain <emphasis
|
|
||||||
role="bold">blacklst</emphasis> is assumed.</para>
|
|
||||||
|
|
||||||
<para>The listed chains are assumed to be in the filter table. You
|
|
||||||
can refresh chains in other tables by prefixing the chain name with
|
|
||||||
the table name followed by ":" (e.g., nat:net_dnat). Chain names
|
|
||||||
which follow are assumed to be in that table until the end of the
|
|
||||||
list or until an entry in the list names another table. Built-in
|
|
||||||
chains such as FORWARD may not be refreshed.</para>
|
|
||||||
|
|
||||||
<para>The <option>-n</option> option was added in Shorewall 4.5.3
|
|
||||||
causes Shorewall to avoid updating the routing table(s).</para>
|
|
||||||
|
|
||||||
<para>The <option>-d</option> option was added in Shorewall 4.5.3
|
|
||||||
causes the compiler to run under the Perl debugger.</para>
|
|
||||||
|
|
||||||
<para>The <option>-T</option> option was added in Shorewall 4.5.3
|
|
||||||
and causes a Perl stack trace to be included with each
|
|
||||||
compiler-generated error and warning message.</para>
|
|
||||||
|
|
||||||
<para>The <option>-i</option> option was added in Shorewall 4.6.0
|
|
||||||
and causes a warning message to be issued if the current line
|
|
||||||
contains alternative input specifications following a semicolon
|
|
||||||
(";"). Such lines will be handled incorrectly if INLINE_MATCHES is
|
|
||||||
set to Yes in <ulink
|
|
||||||
url="/manpages/shorewall.conf.html">shorewall.conf</ulink>(5).</para>
|
|
||||||
|
|
||||||
<para>The <option>-D</option> option was added in Shorewall 4.5.3
|
|
||||||
and causes Shorewall to look in the given
|
|
||||||
<emphasis>directory</emphasis> first for configuration files.</para>
|
|
||||||
|
|
||||||
<para>Example:<programlisting><command>shorewall refresh net2fw nat:net_dnat</command> #Refresh the 'net2loc' chain in the filter table and the 'net_dnat' chain in the nat table</programlisting></para>
|
|
||||||
|
|
||||||
<para>The <emphasis role="bold">refresh</emphasis> command has
|
|
||||||
slightly different behavior. When no chain name is given to the
|
|
||||||
<emphasis role="bold">refresh</emphasis> command, the mangle table
|
|
||||||
is refreshed along with the blacklist chain (if any). This allows
|
|
||||||
you to modify <filename>/etc/shorewall/tcrules </filename>and
|
|
||||||
install the changes using <emphasis
|
|
||||||
role="bold">refresh</emphasis>.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><emphasis role="bold">reject</emphasis><replaceable>
|
<term><emphasis role="bold">reject</emphasis><replaceable>
|
||||||
address</replaceable></term>
|
address</replaceable></term>
|
||||||
@@ -1941,6 +1918,57 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><emphasis role="bold">remote-getcaps</emphasis>
|
||||||
|
[-<option>R</option>] [-<option>r</option>
|
||||||
|
<replaceable>root-user-name</replaceable>] [ [ -D ]
|
||||||
|
<replaceable>directory</replaceable> ] [
|
||||||
|
<replaceable>system</replaceable> ]</term>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Added in Shoreall 5.2.0, this command executes <emphasis
|
||||||
|
role="bold">shorewall[6]-lite show capabilities -f >
|
||||||
|
/var/lib/shorewall[6]-lite/capabilities</emphasis> on the remote
|
||||||
|
<replaceable>system</replaceable> via ssh then the generated file is
|
||||||
|
copied to <replaceable>directory</replaceable> on the local system.
|
||||||
|
If no <replaceable>directory</replaceable> is given, the current
|
||||||
|
working directory is assumed.</para>
|
||||||
|
|
||||||
|
<para>if <emphasis role="bold">-R</emphasis> is included, the remote
|
||||||
|
shorewallrc file is also copied to
|
||||||
|
<replaceable>directory</replaceable>.</para>
|
||||||
|
|
||||||
|
<para>If <option>-r</option> is included, it specifies that the root
|
||||||
|
user on <replaceable>system</replaceable> is named
|
||||||
|
<replaceable>root-user-name</replaceable> rather than "root".</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><emphasis role="bold">remote-getrc</emphasis>
|
||||||
|
[-<option>c</option>] [-<option>r</option>
|
||||||
|
<replaceable>root-user-name</replaceable>] [ [ -D ]
|
||||||
|
<replaceable>directory</replaceable> ] [
|
||||||
|
<replaceable>system</replaceable> ]</term>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Added in Shoreall 5.2.0, this command copies the shorewallrc
|
||||||
|
file from the remote <replaceable>system</replaceable> to
|
||||||
|
<replaceable>directory</replaceable> on the local system. If no
|
||||||
|
<replaceable>directory</replaceable> is given, the current working
|
||||||
|
directory is assumed.</para>
|
||||||
|
|
||||||
|
<para>if <emphasis role="bold">-c</emphasis> is included, the remote
|
||||||
|
capabilities are also copied to
|
||||||
|
<replaceable>directory</replaceable>, as is done by the
|
||||||
|
<command>remote-getcaps</command> command.</para>
|
||||||
|
|
||||||
|
<para>If <option>-r</option> is included, it specifies that the root
|
||||||
|
user on <replaceable>system</replaceable> is named
|
||||||
|
<replaceable>root-user-name</replaceable> rather than "root".</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><emphasis role="bold">remote-start</emphasis>
|
<term><emphasis role="bold">remote-start</emphasis>
|
||||||
[-<option>n</option>] [-<option>s</option>] [-<option>c</option>]
|
[-<option>n</option>] [-<option>s</option>] [-<option>c</option>]
|
||||||
@@ -1992,9 +2020,9 @@
|
|||||||
role="bold">shorewall-lite save</emphasis> via ssh.</para>
|
role="bold">shorewall-lite save</emphasis> via ssh.</para>
|
||||||
|
|
||||||
<para>if <emphasis role="bold">-c</emphasis> is included, the
|
<para>if <emphasis role="bold">-c</emphasis> is included, the
|
||||||
command <emphasis role="bold">shorewall-lite show capabilities -f
|
command <emphasis role="bold">shorewall[6]-lite show capabilities -f
|
||||||
> /var/lib/shorewall-lite/capabilities</emphasis> is executed via
|
> /var/lib/shorewall[6]-lite/capabilities</emphasis> is executed
|
||||||
ssh then the generated file is copied to
|
via ssh then the generated file is copied to
|
||||||
<replaceable>directory</replaceable> using scp. This step is
|
<replaceable>directory</replaceable> using scp. This step is
|
||||||
performed before the configuration is compiled.</para>
|
performed before the configuration is compiled.</para>
|
||||||
|
|
||||||
@@ -2005,13 +2033,6 @@
|
|||||||
<para>The <option>-T</option> option was added in Shorewall 4.5.3
|
<para>The <option>-T</option> option was added in Shorewall 4.5.3
|
||||||
and causes a Perl stack trace to be included with each
|
and causes a Perl stack trace to be included with each
|
||||||
compiler-generated error and warning message.</para>
|
compiler-generated error and warning message.</para>
|
||||||
|
|
||||||
<para>The <option>-i</option> option was added in Shorewall 4.6.0
|
|
||||||
and causes a warning message to be issued if the current line
|
|
||||||
contains alternative input specifications following a semicolon
|
|
||||||
(";"). Such lines will be handled incorrectly if INLINE_MATCHES is
|
|
||||||
set to Yes in <ulink
|
|
||||||
url="/manpages/shorewall.conf.html">shorewall.conf</ulink>(5).</para>
|
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@@ -2430,11 +2451,11 @@
|
|||||||
<replaceable>filename</replaceable> ]</term>
|
<replaceable>filename</replaceable> ]</term>
|
||||||
|
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>The dynamic blacklist is stored in /var/lib/shorewall/save.
|
<para>Creates a snapshot of the currently running firewall. The
|
||||||
The state of the firewall is stored in
|
dynamic blacklist is stored in /var/lib/shorewall/save. The state of
|
||||||
|
the firewall is stored in
|
||||||
/var/lib/shorewall/<emphasis>filename</emphasis> for use by the
|
/var/lib/shorewall/<emphasis>filename</emphasis> for use by the
|
||||||
<emphasis role="bold">shorewall restore</emphasis> and <emphasis
|
<emphasis role="bold">shorewall restore</emphasis> command. If
|
||||||
role="bold">shorewall -f start</emphasis> commands. If
|
|
||||||
<emphasis>filename</emphasis> is not given then the state is saved
|
<emphasis>filename</emphasis> is not given then the state is saved
|
||||||
in the file specified by the RESTOREFILE option in <ulink
|
in the file specified by the RESTOREFILE option in <ulink
|
||||||
url="/manpages/shorewall.conf.html">shorewall.conf</ulink>(5)
|
url="/manpages/shorewall.conf.html">shorewall.conf</ulink>(5)
|
||||||
@@ -2737,6 +2758,15 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><emphasis role="bold">rc</emphasis></term>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Added in Shorewall 5.2.0. Displays the contents of
|
||||||
|
$SHAREDIR/shorewall/shorewallrc.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>[-<option>c</option>]<emphasis role="bold">
|
<term>[-<option>c</option>]<emphasis role="bold">
|
||||||
routing</emphasis></term>
|
routing</emphasis></term>
|
||||||
@@ -2762,6 +2792,20 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term>saves</term>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Added in Shorewall 5.2.0. Lists snapshots created by the
|
||||||
|
<command>save</command> command. Each snapshot is listed with
|
||||||
|
the date and time when it was taken. If there is a snapshot
|
||||||
|
with the name specified in the RESTOREFILE option in <ulink
|
||||||
|
url="shorewall.conf.html">shorewall.conf(5</ulink>), that
|
||||||
|
snapshot is listed as the <emphasis>default</emphasis>
|
||||||
|
snapshot for the <command>restore</command> command.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><emphasis role="bold">tc</emphasis></term>
|
<term><emphasis role="bold">tc</emphasis></term>
|
||||||
|
|
||||||
@@ -2921,7 +2965,7 @@
|
|||||||
by the compiled script that executed the last successful <emphasis
|
by the compiled script that executed the last successful <emphasis
|
||||||
role="bold">start</emphasis>, <emphasis
|
role="bold">start</emphasis>, <emphasis
|
||||||
role="bold">restart</emphasis> or <emphasis
|
role="bold">restart</emphasis> or <emphasis
|
||||||
role="bold">refresh</emphasis> command if that script exists.</para>
|
role="bold">reload</emphasis> command if that script exists.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@@ -3187,14 +3231,15 @@
|
|||||||
shorewall-arprules(5), shorewall-blrules(5), shorewall.conf(5),
|
shorewall-arprules(5), shorewall-blrules(5), shorewall.conf(5),
|
||||||
shorewall-conntrack(5), shorewall-ecn(5), shorewall-exclusion(5),
|
shorewall-conntrack(5), shorewall-ecn(5), shorewall-exclusion(5),
|
||||||
shorewall-hosts(5), shorewall-init(5), shorewall_interfaces(5),
|
shorewall-hosts(5), shorewall-init(5), shorewall_interfaces(5),
|
||||||
shorewall-ipsets(5), shorewall-maclist(5), shorewall-mangle(5),
|
shorewall-ipsets(5), shorewall-logging(), shorewall-maclist(5),
|
||||||
shorewall-masq(5), shorewall-modules(5), shorewall-nat(5),
|
shorewall-mangle(5), shorewall-masq(5), shorewall-modules(5),
|
||||||
shorewall-nesting(5), shorewall-netmap(5), shorewall-params(5),
|
shorewall-nat(5), shorewall-nesting(5), shorewall-netmap(5),
|
||||||
shorewall-policy(5), shorewall-providers(5), shorewall-proxyarp(5),
|
shorewall-params(5), shorewall-policy(5), shorewall-providers(5),
|
||||||
shorewall6-proxyndp(5), shorewall-routes(5), shorewall-rtrules(5),
|
shorewall-proxyarp(5), shorewall6-proxyndp(5), shorewall-routes(5),
|
||||||
shorewall-rtrules(5), shorewall-rules(5), shorewall-secmarks(5),
|
shorewall-rtrules(5), shorewall-rtrules(5), shorewall-rules(5),
|
||||||
shorewall-snat(5), shorewall-tcclasses(5), shorewall-tcdevices(5),
|
shorewall-secmarks(5), shorewall-snat(5), shorewall-tcclasses(5),
|
||||||
shorewall-tcfilters(5), shorewall-tcinterfaces(5), shorewall-tcpri(5),
|
shorewall-tcdevices(5), shorewall-tcfilters(5), shorewall-tcinterfaces(5),
|
||||||
shorewall-tunnels(5), shorewall-vardir(5), shorewall-zones(5)</para>
|
shorewall-tcpri(5), shorewall-tunnels(5), shorewall-vardir(5),
|
||||||
|
shorewall-zones(5)</para>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
</refentry>
|
</refentry>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Apple OS X Shorewall 5.0 rc file
|
# Apple OS X Shorewall 5.2 rc file
|
||||||
#
|
#
|
||||||
BUILD=apple
|
BUILD=apple
|
||||||
HOST=apple
|
HOST=apple
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Arch Linux Shorewall 5.0 rc file
|
# Arch Linux Shorewall 5.2 rc file
|
||||||
#
|
#
|
||||||
BUILD= #Default is to detect the build system
|
BUILD= #Default is to detect the build system
|
||||||
HOST=archlinux
|
HOST=archlinux
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Cygwin Shorewall 5.0 rc file
|
# Cygwin Shorewall 5.2 rc file
|
||||||
#
|
#
|
||||||
BUILD=cygwin
|
BUILD=cygwin
|
||||||
HOST=cygwin
|
HOST=cygwin
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Debian Shorewall 5.0 rc file
|
# Debian Shorewall 5.2 rc file
|
||||||
#
|
#
|
||||||
BUILD= #Default is to detect the build system
|
BUILD= #Default is to detect the build system
|
||||||
HOST=debian
|
HOST=debian
|
||||||
@@ -13,7 +13,7 @@ MANDIR=${PREFIX}/share/man #Directory where manpages are installed.
|
|||||||
INITDIR= #Directory where SysV init scripts are installed.
|
INITDIR= #Directory where SysV init scripts are installed.
|
||||||
INITFILE= #Name of the product's installed SysV init script
|
INITFILE= #Name of the product's installed SysV init script
|
||||||
INITSOURCE=init.debian.sh #Name of the distributed file to be installed as the SysV init script
|
INITSOURCE=init.debian.sh #Name of the distributed file to be installed as the SysV init script
|
||||||
ANNOTATED= #If non-zero, annotated configuration files are installed
|
ANNOTATED= #If non-empty, annotated configuration files are installed
|
||||||
SYSCONFFILE=default.debian.systemd #Name of the distributed file to be installed in $SYSCONFDIR
|
SYSCONFFILE=default.debian.systemd #Name of the distributed file to be installed in $SYSCONFDIR
|
||||||
SERVICEFILE=$PRODUCT.service.debian #Name of the file to install in $SYSTEMD. Default is $PRODUCT.service
|
SERVICEFILE=$PRODUCT.service.debian #Name of the file to install in $SYSTEMD. Default is $PRODUCT.service
|
||||||
SYSCONFDIR=/etc/default #Directory where SysV init parameter files are installed
|
SYSCONFDIR=/etc/default #Directory where SysV init parameter files are installed
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Debian Shorewall 5.0 rc file
|
# Debian Shorewall 5.2 rc file
|
||||||
#
|
#
|
||||||
BUILD= #Default is to detect the build system
|
BUILD= #Default is to detect the build system
|
||||||
HOST=debian
|
HOST=debian
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Default Shorewall 5.0 rc file
|
# Default Shorewall 5.2 rc file
|
||||||
#
|
#
|
||||||
BUILD= #Default is to detect the build system
|
BUILD= #Default is to detect the build system
|
||||||
HOST=linux #Generic Linux
|
HOST=linux #Generic Linux
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# OpenWRT Shorewall 5.0 rc file
|
# OpenWRT/LEDE Shorewall 5.2 rc file
|
||||||
#
|
#
|
||||||
BUILD= #Default is to detect the build system
|
BUILD= #Default is to detect the build system
|
||||||
HOST=openwrt
|
HOST=openwrt
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# RedHat/FedoraShorewall 5.0 rc file
|
# RedHat/FedoraShorewall 5.2 rc file
|
||||||
#
|
#
|
||||||
BUILD= #Default is to detect the build system
|
BUILD= #Default is to detect the build system
|
||||||
HOST=redhat
|
HOST=redhat
|
||||||
|
28
Shorewall-core/shorewallrc.sandbox
Normal file
28
Shorewall-core/shorewallrc.sandbox
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#
|
||||||
|
# Shorewall 5.2 rc file for installing into a Sandbox
|
||||||
|
#
|
||||||
|
BUILD= # Default is to detect the build system
|
||||||
|
HOST=linux
|
||||||
|
INSTALLDIR= # Set this to the directory where you want Shorewall installed
|
||||||
|
PREFIX=${INSTALLDIR}/usr # Top-level directory for shared files, libraries, etc.
|
||||||
|
SHAREDIR=${PREFIX}/share # Directory for arch-neutral files.
|
||||||
|
LIBEXECDIR=${PREFIX}/share # Directory for executable scripts.
|
||||||
|
PERLLIBDIR=${PREFIX}/share/shorewall # Directory to install Shorewall Perl module directory
|
||||||
|
CONFDIR=${INSTALLDIR}/etc # Directory where subsystem configurations are installed
|
||||||
|
SBINDIR=${INSTALLDIR}/sbin # Directory where system administration programs are installed
|
||||||
|
MANDIR= # Leave empty
|
||||||
|
INITDIR= # Leave empty
|
||||||
|
INITSOURCE= # Leave empty
|
||||||
|
INITFILE= # Leave empty
|
||||||
|
AUXINITSOURCE= # Leave empty
|
||||||
|
AUXINITFILE= # Leave empty
|
||||||
|
SERVICEDIR= # Leave empty
|
||||||
|
SERVICEFILE= # Leave empty
|
||||||
|
SYSCONFFILE= # Leave empty
|
||||||
|
SYSCONFDIR= # Leave empty
|
||||||
|
SPARSE= # Leave empty
|
||||||
|
ANNOTATED= # If non-empty, annotated configuration files are installed
|
||||||
|
VARLIB=${INSTALLDIR}/var/lib # Directory where product variable data is stored.
|
||||||
|
VARDIR=${VARLIB}/$PRODUCT # Directory where product variable data is stored.
|
||||||
|
DEFAULT_PAGER=/usr/bin/less # Pager to use if none specified in shorewall[6].conf
|
||||||
|
SANDBOX=Yes # Indicates SANDBOX installation
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Slackware Shorewall 5.0 rc file
|
# Slackware Shorewall 5.2 rc file
|
||||||
#
|
#
|
||||||
BUILD=slackware
|
BUILD=slackware
|
||||||
HOST=slackware
|
HOST=slackware
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# SuSE Shorewall 5.0 rc file
|
# SuSE Shorewall 5.2 rc file
|
||||||
#
|
#
|
||||||
BUILD= #Default is to detect the build system
|
BUILD= #Default is to detect the build system
|
||||||
HOST=suse
|
HOST=suse
|
||||||
|
@@ -73,12 +73,16 @@ setstatedir() {
|
|||||||
|
|
||||||
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
||||||
|
|
||||||
|
if [ -x ${STATEDIR}/firewall ]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
if [ $PRODUCT = shorewall ]; then
|
if [ $PRODUCT = shorewall ]; then
|
||||||
${SBINDIR}/shorewall compile
|
${SBINDIR}/shorewall compile
|
||||||
elif [ $PRODUCT = shorewall6 ]; then
|
elif [ $PRODUCT = shorewall6 ]; then
|
||||||
${SBINDIR}/shorewall -6 compile
|
${SBINDIR}/shorewall -6 compile
|
||||||
else
|
else
|
||||||
return 0
|
return 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,7 +112,6 @@ shorewall_start () {
|
|||||||
|
|
||||||
for PRODUCT in $PRODUCTS; do
|
for PRODUCT in $PRODUCTS; do
|
||||||
if setstatedir; then
|
if setstatedir; then
|
||||||
if [ -x ${STATEDIR}/firewall ]; then
|
|
||||||
#
|
#
|
||||||
# Run in a sub-shell to avoid name collisions
|
# Run in a sub-shell to avoid name collisions
|
||||||
#
|
#
|
||||||
@@ -118,7 +121,6 @@ shorewall_start () {
|
|||||||
fi
|
fi
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "done."
|
echo "done."
|
||||||
@@ -145,10 +147,8 @@ shorewall_stop () {
|
|||||||
printf "Clearing \"Shorewall-based firewalls\": "
|
printf "Clearing \"Shorewall-based firewalls\": "
|
||||||
for PRODUCT in $PRODUCTS; do
|
for PRODUCT in $PRODUCTS; do
|
||||||
if setstatedir; then
|
if setstatedir; then
|
||||||
if [ -x ${STATEDIR}/firewall ]; then
|
|
||||||
${STATEDIR}/firewall ${OPTIONS} clear
|
${STATEDIR}/firewall ${OPTIONS} clear
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "done."
|
echo "done."
|
||||||
|
@@ -44,12 +44,14 @@ setstatedir() {
|
|||||||
|
|
||||||
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
||||||
|
|
||||||
if [ $PRODUCT = shorewall ]; then
|
if [ -x ${STATEDIR}/firewall ]; then
|
||||||
|
return 0
|
||||||
|
elif [ $PRODUCT = shorewall ]; then
|
||||||
${SBINDIR}/shorewall compile
|
${SBINDIR}/shorewall compile
|
||||||
elif [ $PRODUCT = shorewall6 ]; then
|
elif [ $PRODUCT = shorewall6 ]; then
|
||||||
${SBINDIR}/shorewall -6 compile
|
${SBINDIR}/shorewall -6 compile
|
||||||
else
|
else
|
||||||
return 0
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,7 +77,6 @@ start () {
|
|||||||
retval=$?
|
retval=$?
|
||||||
|
|
||||||
if [ $retval -eq 0 ]; then
|
if [ $retval -eq 0 ]; then
|
||||||
if [ -x "${STATEDIR}/firewall" ]; then
|
|
||||||
${STATEDIR}/firewall ${OPTIONS} stop 2>&1 | $logger
|
${STATEDIR}/firewall ${OPTIONS} stop 2>&1 | $logger
|
||||||
retval=${PIPESTATUS[0]}
|
retval=${PIPESTATUS[0]}
|
||||||
[ $retval -ne 0 ] && break
|
[ $retval -ne 0 ] && break
|
||||||
@@ -83,9 +84,6 @@ start () {
|
|||||||
retval=6 #Product not configured
|
retval=6 #Product not configured
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ $retval -eq 0 ]; then
|
if [ $retval -eq 0 ]; then
|
||||||
@@ -110,7 +108,6 @@ stop () {
|
|||||||
retval=$?
|
retval=$?
|
||||||
|
|
||||||
if [ $retval -eq 0 ]; then
|
if [ $retval -eq 0 ]; then
|
||||||
if [ -x "${STATEDIR}/firewall" ]; then
|
|
||||||
${STATEDIR}/firewall ${OPTIONS} clear 2>&1 | $logger
|
${STATEDIR}/firewall ${OPTIONS} clear 2>&1 | $logger
|
||||||
retval=${PIPESTATUS[0]}
|
retval=${PIPESTATUS[0]}
|
||||||
[ $retval -ne 0 ] && break
|
[ $retval -ne 0 ] && break
|
||||||
@@ -118,9 +115,6 @@ stop () {
|
|||||||
retval=6 #Product not configured
|
retval=6 #Product not configured
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ $retval -eq 0 ]; then
|
if [ $retval -eq 0 ]; then
|
||||||
|
14
Shorewall-init/init.openwrt.sh
Normal file → Executable file
14
Shorewall-init/init.openwrt.sh
Normal file → Executable file
@@ -75,12 +75,14 @@ setstatedir() {
|
|||||||
|
|
||||||
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
||||||
|
|
||||||
if [ $PRODUCT = shorewall ]; then
|
if [ -x ${STATEDIR}/firewall ]; then
|
||||||
|
return 0
|
||||||
|
elif [ $PRODUCT = shorewall ]; then
|
||||||
${SBINDIR}/shorewall compile
|
${SBINDIR}/shorewall compile
|
||||||
elif [ $PRODUCT = shorewall6 ]; then
|
elif [ $PRODUCT = shorewall6 ]; then
|
||||||
${SBINDIR}/shorewall -6 compile
|
${SBINDIR}/shorewall -6 compile
|
||||||
else
|
else
|
||||||
return 0
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,17 +94,17 @@ start () {
|
|||||||
printf "Initializing \"Shorewall-based firewalls\": "
|
printf "Initializing \"Shorewall-based firewalls\": "
|
||||||
for PRODUCT in $PRODUCTS; do
|
for PRODUCT in $PRODUCTS; do
|
||||||
if setstatedir; then
|
if setstatedir; then
|
||||||
if [ -x ${STATEDIR}/firewall ]; then
|
|
||||||
if ! ${SBIN}/$PRODUCT status > /dev/null 2>&1; then
|
if ! ${SBIN}/$PRODUCT status > /dev/null 2>&1; then
|
||||||
${STATEDIR}/firewall ${OPTIONS} stop
|
${STATEDIR}/firewall ${OPTIONS} stop
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -n "$SAVE_IPSETS" -a -f "$SAVE_IPSETS" ]; then
|
if [ -n "$SAVE_IPSETS" -a -f "$SAVE_IPSETS" ]; then
|
||||||
ipset -R < "$SAVE_IPSETS"
|
ipset -R < "$SAVE_IPSETS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
boot () {
|
boot () {
|
||||||
@@ -117,10 +119,8 @@ stop () {
|
|||||||
printf "Clearing \"Shorewall-based firewalls\": "
|
printf "Clearing \"Shorewall-based firewalls\": "
|
||||||
for PRODUCT in $PRODUCTS; do
|
for PRODUCT in $PRODUCTS; do
|
||||||
if setstatedir; then
|
if setstatedir; then
|
||||||
if [ -x ${STATEDIR}/firewall ]; then
|
|
||||||
${STATEDIR}/firewall ${OPTIONS} clear
|
${STATEDIR}/firewall ${OPTIONS} clear
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -n "$SAVE_IPSETS" ]; then
|
if [ -n "$SAVE_IPSETS" ]; then
|
||||||
@@ -131,5 +131,7 @@ stop () {
|
|||||||
rm -f "${SAVE_IPSETS}.tmp"
|
rm -f "${SAVE_IPSETS}.tmp"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -69,10 +69,12 @@ setstatedir() {
|
|||||||
|
|
||||||
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
||||||
|
|
||||||
if [ $PRODUCT = shorewall -o $PRODUCT = shorewall6 ]; then
|
if [ -x ${STATEDIR}/firewall ]; then
|
||||||
|
return 0
|
||||||
|
elif [ $PRODUCT = shorewall -o $PRODUCT = shorewall6 ]; then
|
||||||
${SBINDIR}/$PRODUCT ${OPTIONS} compile $STATEDIR/firewall
|
${SBINDIR}/$PRODUCT ${OPTIONS} compile $STATEDIR/firewall
|
||||||
else
|
else
|
||||||
return 0
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,12 +86,10 @@ shorewall_start () {
|
|||||||
printf "Initializing \"Shorewall-based firewalls\": "
|
printf "Initializing \"Shorewall-based firewalls\": "
|
||||||
for PRODUCT in $PRODUCTS; do
|
for PRODUCT in $PRODUCTS; do
|
||||||
if setstatedir; then
|
if setstatedir; then
|
||||||
if [ -x ${STATEDIR}/firewall ]; then
|
|
||||||
if ! ${SBIN}/$PRODUCT status > /dev/null 2>&1; then
|
if ! ${SBIN}/$PRODUCT status > /dev/null 2>&1; then
|
||||||
${STATEDIR}/firewall ${OPTIONS} stop
|
${STATEDIR}/firewall ${OPTIONS} stop
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -n "$SAVE_IPSETS" -a -f "$SAVE_IPSETS" ]; then
|
if [ -n "$SAVE_IPSETS" -a -f "$SAVE_IPSETS" ]; then
|
||||||
@@ -107,10 +107,8 @@ shorewall_stop () {
|
|||||||
printf "Clearing \"Shorewall-based firewalls\": "
|
printf "Clearing \"Shorewall-based firewalls\": "
|
||||||
for PRODUCT in $PRODUCTS; do
|
for PRODUCT in $PRODUCTS; do
|
||||||
if setstatedir; then
|
if setstatedir; then
|
||||||
if [ -x ${STATEDIR}/firewall ]; then
|
|
||||||
${STATEDIR}/firewall ${OPTIONS} clear
|
${STATEDIR}/firewall ${OPTIONS} clear
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -n "$SAVE_IPSETS" ]; then
|
if [ -n "$SAVE_IPSETS" ]; then
|
||||||
|
@@ -79,12 +79,14 @@ setstatedir() {
|
|||||||
|
|
||||||
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
||||||
|
|
||||||
if [ $PRODUCT = shorewall ]; then
|
if [ -x ${STATEDIR}/firewall ]; then
|
||||||
|
return 0
|
||||||
|
elif [ $PRODUCT = shorewall ]; then
|
||||||
${SBINDIR}/shorewall compile
|
${SBINDIR}/shorewall compile
|
||||||
elif [ $PRODUCT = shorewall6 ]; then
|
elif [ $PRODUCT = shorewall6 ]; then
|
||||||
${SBINDIR}/shorewall -6 compile
|
${SBINDIR}/shorewall -6 compile
|
||||||
else
|
else
|
||||||
return 0
|
return 6
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,12 +98,10 @@ shorewall_start () {
|
|||||||
printf "Initializing \"Shorewall-based firewalls\": "
|
printf "Initializing \"Shorewall-based firewalls\": "
|
||||||
for PRODUCT in $PRODUCTS; do
|
for PRODUCT in $PRODUCTS; do
|
||||||
if setstatedir; then
|
if setstatedir; then
|
||||||
if [ -x $STATEDIR/firewall ]; then
|
|
||||||
if ! ${SBIN}/$PRODUCT status > /dev/null 2>&1; then
|
if ! ${SBIN}/$PRODUCT status > /dev/null 2>&1; then
|
||||||
$STATEDIR/$PRODUCT/firewall ${OPTIONS} stop
|
$STATEDIR/$PRODUCT/firewall ${OPTIONS} stop
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -n "$SAVE_IPSETS" -a -f "$SAVE_IPSETS" ]; then
|
if [ -n "$SAVE_IPSETS" -a -f "$SAVE_IPSETS" ]; then
|
||||||
@@ -117,10 +117,8 @@ shorewall_stop () {
|
|||||||
printf "Clearing \"Shorewall-based firewalls\": "
|
printf "Clearing \"Shorewall-based firewalls\": "
|
||||||
for PRODUCT in $PRODUCTS; do
|
for PRODUCT in $PRODUCTS; do
|
||||||
if setstatedir; then
|
if setstatedir; then
|
||||||
if [ -x ${STATEDIR}/firewall ]; then
|
|
||||||
${STATEDIR}/firewall ${OPTIONS} clear
|
${STATEDIR}/firewall ${OPTIONS} clear
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -n "$SAVE_IPSETS" ]; then
|
if [ -n "$SAVE_IPSETS" ]; then
|
||||||
|
@@ -33,12 +33,12 @@ setstatedir() {
|
|||||||
|
|
||||||
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
[ -n "$statedir" ] && STATEDIR=${statedir} || STATEDIR=${VARLIB}/${PRODUCT}
|
||||||
|
|
||||||
if [ $PRODUCT = shorewall ]; then
|
if [ -x ${STATEDIR}/firewall ]; then
|
||||||
|
return 0
|
||||||
|
elif [ $PRODUCT = shorewall ]; then
|
||||||
${SBINDIR}/shorewall compile
|
${SBINDIR}/shorewall compile
|
||||||
elif [ $PRODUCT = shorewall6 ]; then
|
elif [ $PRODUCT = shorewall6 ]; then
|
||||||
${SBINDIR}/shorewall -6 compile
|
${SBINDIR}/shorewall -6 compile
|
||||||
else
|
|
||||||
return 0
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +67,6 @@ shorewall_start () {
|
|||||||
printf "Initializing \"Shorewall-based firewalls\": "
|
printf "Initializing \"Shorewall-based firewalls\": "
|
||||||
for PRODUCT in $PRODUCTS; do
|
for PRODUCT in $PRODUCTS; do
|
||||||
if setstatedir; then
|
if setstatedir; then
|
||||||
if [ -x ${STATEDIR}/firewall ]; then
|
|
||||||
#
|
#
|
||||||
# Run in a sub-shell to avoid name collisions
|
# Run in a sub-shell to avoid name collisions
|
||||||
#
|
#
|
||||||
@@ -77,7 +76,6 @@ shorewall_start () {
|
|||||||
fi
|
fi
|
||||||
)
|
)
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -n "$SAVE_IPSETS" -a -f "$SAVE_IPSETS" ]; then
|
if [ -n "$SAVE_IPSETS" -a -f "$SAVE_IPSETS" ]; then
|
||||||
@@ -95,10 +93,8 @@ shorewall_stop () {
|
|||||||
printf "Clearing \"Shorewall-based firewalls\": "
|
printf "Clearing \"Shorewall-based firewalls\": "
|
||||||
for PRODUCT in $PRODUCTS; do
|
for PRODUCT in $PRODUCTS; do
|
||||||
if setstatedir; then
|
if setstatedir; then
|
||||||
if [ -x ${STATEDIR}/firewall ]; then
|
|
||||||
${STATEDIR}/firewall ${OPTIONS} clear
|
${STATEDIR}/firewall ${OPTIONS} clear
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -n "$SAVE_IPSETS" ]; then
|
if [ -n "$SAVE_IPSETS" ]; then
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 4.4 -- /usr/share/shorewall-lite/lib.base
|
# Shorewall 5.2 -- /usr/share/shorewall-lite/lib.base
|
||||||
#
|
#
|
||||||
# (c) 2011,2014 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2011,2014 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
|
@@ -1,9 +0,0 @@
|
|||||||
#
|
|
||||||
# Shorewall6 -- /usr/share/shorewall/action.A_AllowICMPs
|
|
||||||
#
|
|
||||||
# This action A_ACCEPTs needed ICMP types
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
#ACTION SOURCE DEST PROTO DPORT
|
|
||||||
|
|
||||||
AllowICMPs(A_ACCEPT)
|
|
@@ -1,57 +0,0 @@
|
|||||||
#
|
|
||||||
# Shorewall -- /usr/share/shorewall/action.A_Drop
|
|
||||||
#
|
|
||||||
# The audited default DROP common rules
|
|
||||||
#
|
|
||||||
# This action is invoked before a DROP policy is enforced. The purpose
|
|
||||||
# of the action is:
|
|
||||||
#
|
|
||||||
# a) Avoid logging lots of useless cruft.
|
|
||||||
# b) Ensure that certain ICMP packets that are necessary for successful
|
|
||||||
# internet operation are always ACCEPTed.
|
|
||||||
#
|
|
||||||
# IF YOU ARE HAVING CONNECTION PROBLEMS, CHANGING THIS FILE WON'T HELP!!!!!!!!!
|
|
||||||
#
|
|
||||||
?require AUDIT_TARGET
|
|
||||||
?warning "You are using the deprecated A_Drop default action. Please see http://www.shorewall.net/Actions.html
|
|
||||||
###############################################################################
|
|
||||||
#ACTION SOURCE DEST PROTO DPORT SPORT
|
|
||||||
#
|
|
||||||
# Count packets that come through here
|
|
||||||
#
|
|
||||||
COUNT
|
|
||||||
#
|
|
||||||
# Special Handling for Auth
|
|
||||||
#
|
|
||||||
Auth(A_DROP)
|
|
||||||
#
|
|
||||||
# ACCEPT critical ICMP types
|
|
||||||
#
|
|
||||||
# For IPv6 connectivity ipv6-icmp broadcasting is required so
|
|
||||||
# AllowICMPs must be before broadcast Drop.
|
|
||||||
#
|
|
||||||
A_AllowICMPs - - icmp
|
|
||||||
#
|
|
||||||
# Don't log broadcasts and multicasts
|
|
||||||
#
|
|
||||||
dropBcast(audit)
|
|
||||||
dropMcast(audit)
|
|
||||||
#
|
|
||||||
# Drop packets that are in the INVALID state -- these are usually ICMP packets
|
|
||||||
# and just confuse people when they appear in the log.
|
|
||||||
#
|
|
||||||
dropInvalid(audit)
|
|
||||||
#
|
|
||||||
# Drop Microsoft noise so that it doesn't clutter up the log.
|
|
||||||
#
|
|
||||||
SMB(A_DROP)
|
|
||||||
A_DropUPnP
|
|
||||||
#
|
|
||||||
# Drop 'newnotsyn' traffic so that it doesn't get logged.
|
|
||||||
#
|
|
||||||
dropNotSyn(audit) - - tcp
|
|
||||||
#
|
|
||||||
# Drop late-arriving DNS replies. These are just a nuisance and clutter up
|
|
||||||
# the log.
|
|
||||||
#
|
|
||||||
A_DropDNSrep
|
|
@@ -1,11 +1,11 @@
|
|||||||
#
|
#
|
||||||
# Shorewall -- /usr/share/shorewall/action.A_REJECTWITH
|
# Shorewall -- /usr/share/shorewall/action.A_REJECT
|
||||||
#
|
#
|
||||||
# A_REJECT Action.
|
# A_REJECT Action.
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2012-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2012-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2012-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2012-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -1,54 +0,0 @@
|
|||||||
#
|
|
||||||
# Shorewall -- /usr/share/shorewall/action.A_Reject
|
|
||||||
#
|
|
||||||
# The audited default REJECT action common rules
|
|
||||||
#
|
|
||||||
# This action is invoked before a REJECT policy is enforced. The purpose
|
|
||||||
# of the action is:
|
|
||||||
#
|
|
||||||
# a) Avoid logging lots of useless cruft.
|
|
||||||
# b) Ensure that certain ICMP packets that are necessary for successful
|
|
||||||
# internet operation are always ACCEPTed.
|
|
||||||
#
|
|
||||||
# IF YOU ARE HAVING CONNECTION PROBLEMS, CHANGING THIS FILE WON'T HELP!!!!!!!!!
|
|
||||||
?require AUDIT_TARGET
|
|
||||||
?warning "You are using the deprecated A_REJECT default action. Please see http://www.shorewall.net/Actions.html
|
|
||||||
###############################################################################
|
|
||||||
#ACTION SOURCE DEST PROTO
|
|
||||||
#
|
|
||||||
# Count packets that come through here
|
|
||||||
#
|
|
||||||
COUNT
|
|
||||||
#
|
|
||||||
# ACCEPT critical ICMP types
|
|
||||||
#
|
|
||||||
# For IPv6 connectivity ipv6-icmp broadcasting is required so
|
|
||||||
# AllowICMPs must be before broadcast Drop.
|
|
||||||
#
|
|
||||||
A_AllowICMPs - - icmp
|
|
||||||
#
|
|
||||||
# Drop Broadcasts and multicasts so they don't clutter up the log
|
|
||||||
# (these must *not* be rejected).
|
|
||||||
#
|
|
||||||
dropBcast(audit)
|
|
||||||
dropMcast(audit)
|
|
||||||
#
|
|
||||||
# Drop packets that are in the INVALID state -- these are usually ICMP packets
|
|
||||||
# and just confuse people when they appear in the log (these ICMPs cannot be
|
|
||||||
# rejected).
|
|
||||||
#
|
|
||||||
dropInvalid(audit)
|
|
||||||
#
|
|
||||||
# Reject Microsoft noise so that it doesn't clutter up the log.
|
|
||||||
#
|
|
||||||
SMB(A_REJECT)
|
|
||||||
A_DropUPnP
|
|
||||||
#
|
|
||||||
# Drop 'newnotsyn' traffic so that it doesn't get logged.
|
|
||||||
#
|
|
||||||
dropNotSyn(audit) - - tcp
|
|
||||||
#
|
|
||||||
# Drop late-arriving DNS replies. These are just a nuisance and clutter up
|
|
||||||
# the log.
|
|
||||||
#
|
|
||||||
A_DropDNSrep
|
|
@@ -13,7 +13,6 @@ DEFAULTS ACCEPT
|
|||||||
@1 - - icmp time-exceeded {comment="Needed ICMP types"}
|
@1 - - icmp time-exceeded {comment="Needed ICMP types"}
|
||||||
?else
|
?else
|
||||||
?COMMENT Needed ICMP types (RFC4890)
|
?COMMENT Needed ICMP types (RFC4890)
|
||||||
|
|
||||||
@1 - - ipv6-icmp destination-unreachable
|
@1 - - ipv6-icmp destination-unreachable
|
||||||
@1 - - ipv6-icmp packet-too-big
|
@1 - - ipv6-icmp packet-too-big
|
||||||
@1 - - ipv6-icmp time-exceeded
|
@1 - - ipv6-icmp time-exceeded
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -1,84 +0,0 @@
|
|||||||
#
|
|
||||||
# Shorewall -- /usr/share/shorewall/action.Drop
|
|
||||||
#
|
|
||||||
# The former default DROP common rules. Use of this action is now deprecated
|
|
||||||
#
|
|
||||||
# This action is invoked before a DROP policy is enforced. The purpose
|
|
||||||
# of the action is:
|
|
||||||
#
|
|
||||||
# a) Avoid logging lots of useless cruft.
|
|
||||||
# b) Ensure that certain ICMP packets that are necessary for successful
|
|
||||||
# internet operation are always ACCEPTed.
|
|
||||||
#
|
|
||||||
# The action accepts six optional parameters:
|
|
||||||
#
|
|
||||||
# 1 - 'audit' or '-'. Default is '-' which means don't audit in builtin
|
|
||||||
# actions.
|
|
||||||
# 2 - Action to take with Auth requests. Default is to do nothing special
|
|
||||||
# with them.
|
|
||||||
# 3 - Action to take with SMB requests. Default is DROP or A_DROP,
|
|
||||||
# depending on the setting of the first parameter.
|
|
||||||
# 4 - Action to take with required ICMP packets. Default is ACCEPT or
|
|
||||||
# A_ACCEPT depending on the first parameter.
|
|
||||||
# 5 - Action to take with late DNS replies (UDP source port 53). Default
|
|
||||||
# is DROP or A_DROP depending on the first parameter.
|
|
||||||
# 6 - Action to take with UPnP packets. Default is DROP or A_DROP
|
|
||||||
# depending on the first parameter.
|
|
||||||
#
|
|
||||||
# IF YOU ARE HAVING CONNECTION PROBLEMS, CHANGING THIS FILE WON'T HELP!!!!!!!!!
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
?warning "You are using the deprecated Drop default action. Please see http://www.shorewall.net/Actions.html#Default"
|
|
||||||
|
|
||||||
?if passed(@1)
|
|
||||||
?if @1 eq 'audit'
|
|
||||||
DEFAULTS -,-,A_DROP,A_ACCEPT,A_DROP,A_DROP
|
|
||||||
?else
|
|
||||||
?error The first parameter to Drop must be 'audit' or '-'
|
|
||||||
?endif
|
|
||||||
?else
|
|
||||||
DEFAULTS -,-,DROP,ACCEPT,DROP,DROP
|
|
||||||
?endif
|
|
||||||
|
|
||||||
#ACTION SOURCE DEST PROTO DPORT SPORT
|
|
||||||
#
|
|
||||||
# Count packets that come through here
|
|
||||||
#
|
|
||||||
COUNT
|
|
||||||
#
|
|
||||||
# Special Handling for Auth
|
|
||||||
#
|
|
||||||
?if passed(@2)
|
|
||||||
Auth(@2)
|
|
||||||
?endif
|
|
||||||
#
|
|
||||||
# ACCEPT critical ICMP types
|
|
||||||
#
|
|
||||||
# For IPv6 connectivity ipv6-icmp broadcasting is required so
|
|
||||||
# AllowICMPs must be before silent broadcast Drop.
|
|
||||||
#
|
|
||||||
AllowICMPs(@4) - - icmp
|
|
||||||
#
|
|
||||||
# Don't log broadcasts or multicasts
|
|
||||||
#
|
|
||||||
Broadcast(DROP,@1)
|
|
||||||
Multicast(DROP,@1)
|
|
||||||
#
|
|
||||||
# Drop packets that are in the INVALID state -- these are usually ICMP packets
|
|
||||||
# and just confuse people when they appear in the log.
|
|
||||||
#
|
|
||||||
Invalid(DROP,@1)
|
|
||||||
#
|
|
||||||
# Drop Microsoft noise so that it doesn't clutter up the log.
|
|
||||||
#
|
|
||||||
SMB(@3)
|
|
||||||
DropUPnP(@6)
|
|
||||||
#
|
|
||||||
# Drop 'newnotsyn' traffic so that it doesn't get logged.
|
|
||||||
#
|
|
||||||
NotSyn(DROP,@1) - - tcp
|
|
||||||
#
|
|
||||||
# Drop late-arriving DNS replies. These are just a nuisance and clutter up
|
|
||||||
# the log.
|
|
||||||
#
|
|
||||||
DropDNSrep(@5)
|
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2012-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -30,4 +30,4 @@
|
|||||||
|
|
||||||
DEFAULTS ACCEPT,-
|
DEFAULTS ACCEPT,-
|
||||||
|
|
||||||
@1 - - ;;+ -p 6 --tcp-flags ACK,FIN,PSH ACK,FIN,PSH
|
@1 - - ;;+ -p 6 --tcp-flags ACK,FIN ACK,FIN
|
||||||
|
@@ -135,7 +135,7 @@ if ( $command & $RESET_CMD ) {
|
|||||||
#
|
#
|
||||||
# if the event is armed, remove it and perform the action
|
# if the event is armed, remove it and perform the action
|
||||||
#
|
#
|
||||||
perl_action_helper( $action , "-m mark --mark $mark/$mark -m recent --remove --name $event" );
|
perl_action_helper( $action , "-m mark --mark $mark/$mark -m recent --remove --name $event $srcdst" );
|
||||||
} elsif ( $command & $UPDATE_CMD ) {
|
} elsif ( $command & $UPDATE_CMD ) {
|
||||||
perl_action_helper( $action, "-m recent --update ${duration}--hitcount $hitcount --name $event $srcdst" );
|
perl_action_helper( $action, "-m recent --update ${duration}--hitcount $hitcount --name $event $srcdst" );
|
||||||
} else {
|
} else {
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
# Invalid Action
|
# Invalid Action
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2012-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2012-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -1,85 +0,0 @@
|
|||||||
#
|
|
||||||
# Shorewall -- /usr/share/shorewall/action.Reject
|
|
||||||
#
|
|
||||||
# The former default REJECT action common rules. Use of this action is deprecated.
|
|
||||||
#
|
|
||||||
# This action is invoked before a REJECT policy is enforced. The purpose
|
|
||||||
# of the action is:
|
|
||||||
#
|
|
||||||
# a) Avoid logging lots of useless cruft.
|
|
||||||
# b) Ensure that certain ICMP packets that are necessary for successful
|
|
||||||
# internet operation are always ACCEPTed.
|
|
||||||
#
|
|
||||||
# The action accepts six optional parameters:
|
|
||||||
#
|
|
||||||
# 1 - 'audit' or '-'. Default is '-' which means don't audit in builtin
|
|
||||||
# actions.
|
|
||||||
# 2 - Action to take with Auth requests. Default is to do nothing
|
|
||||||
# special with them.
|
|
||||||
# 3 - Action to take with SMB requests. Default is REJECT or A_REJECT,
|
|
||||||
# depending on the setting of the first parameter.
|
|
||||||
# 4 - Action to take with required ICMP packets. Default is ACCEPT or
|
|
||||||
# A_ACCEPT depending on the first parameter.
|
|
||||||
# 5 - Action to take with late DNS replies (UDP source port 53). Default
|
|
||||||
# is DROP or A_DROP depending on the first parameter.
|
|
||||||
# 6 - Action to take with UPnP packets. Default is DROP or A_DROP
|
|
||||||
# depending on the first parameter.
|
|
||||||
#
|
|
||||||
# IF YOU ARE HAVING CONNECTION PROBLEMS, CHANGING THIS FILE WON'T HELP!!!!!!!!!
|
|
||||||
###############################################################################
|
|
||||||
?warning "You are using the deprecated Reject default action. Please see http://www.shorewall.net/Actions.html#Default"
|
|
||||||
|
|
||||||
?if passed(@1)
|
|
||||||
?if @1 eq 'audit'
|
|
||||||
DEFAULTS -,-,A_REJECT,A_ACCEPT,A_DROP,A_DROP
|
|
||||||
?else
|
|
||||||
?error The first parameter to Reject must be 'audit' or '-'
|
|
||||||
?endif
|
|
||||||
?else
|
|
||||||
DEFAULTS -,-,REJECT,ACCEPT,DROP,DROP
|
|
||||||
?endif
|
|
||||||
|
|
||||||
#ACTION SOURCE DEST PROTO
|
|
||||||
#
|
|
||||||
# Count packets that come through here
|
|
||||||
#
|
|
||||||
COUNT
|
|
||||||
#
|
|
||||||
# Special handling for Auth
|
|
||||||
#
|
|
||||||
?if passed(@2)
|
|
||||||
Auth(@2)
|
|
||||||
?endif
|
|
||||||
#
|
|
||||||
# ACCEPT critical ICMP types
|
|
||||||
#
|
|
||||||
# For IPv6 connectivity ipv6-icmp broadcasting is required so
|
|
||||||
# AllowICMPs must be before silent broadcast Drop.
|
|
||||||
#
|
|
||||||
AllowICMPs(@4) - - icmp
|
|
||||||
#
|
|
||||||
# Drop Broadcasts so they don't clutter up the log
|
|
||||||
# (broadcasts must *not* be rejected).
|
|
||||||
#
|
|
||||||
Broadcast(DROP,@1)
|
|
||||||
Multicast(DROP,@1)
|
|
||||||
#
|
|
||||||
# Drop packets that are in the INVALID state -- these are usually ICMP packets
|
|
||||||
# and just confuse people when they appear in the log (these ICMPs cannot be
|
|
||||||
# rejected).
|
|
||||||
#
|
|
||||||
Invalid(DROP,@1)
|
|
||||||
#
|
|
||||||
# Reject Microsoft noise so that it doesn't clutter up the log.
|
|
||||||
#
|
|
||||||
SMB(@3)
|
|
||||||
DropUPnP(@6)
|
|
||||||
#
|
|
||||||
# Drop 'newnotsyn' traffic so that it doesn't get logged.
|
|
||||||
#
|
|
||||||
NotSyn(DROP,@1) - - tcp
|
|
||||||
#
|
|
||||||
# Drop late-arriving DNS replies. These are just a nuisance and clutter up
|
|
||||||
# the log.
|
|
||||||
#
|
|
||||||
DropDNSrep(@5)
|
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -26,4 +26,4 @@ $tcpflags_action - - ;;+ -p 6 --tcp-flags ALL FIN,URG,PSH
|
|||||||
$tcpflags_action - - ;;+ -p 6 --tcp-flags ALL NONE
|
$tcpflags_action - - ;;+ -p 6 --tcp-flags ALL NONE
|
||||||
$tcpflags_action - - ;;+ -p 6 --tcp-flags SYN,RST SYN,RST
|
$tcpflags_action - - ;;+ -p 6 --tcp-flags SYN,RST SYN,RST
|
||||||
$tcpflags_action - - ;;+ -p 6 --tcp-flags SYN,FIN SYN,FIN
|
$tcpflags_action - - ;;+ -p 6 --tcp-flags SYN,FIN SYN,FIN
|
||||||
$tcpflags_action - - ;;+ -p tcp --syn --sport 0
|
$tcpflags_action - - ;;+ -p 6 --syn --sport 0
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2011-2016 Tom Eastep (teastep@shorewall.net)
|
# (c) 2011-2017 Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall - /usr/share/shorewall/macro.SNMPtrap
|
# Shorewall -- /usr/share/shorewall/macro.Apcupsd
|
||||||
#
|
#
|
||||||
# This macro deprecated by SNMPtrap.
|
# This macro handles apcupsd traffic.
|
||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
SNMPtrap
|
PARAM - - tcp 3551
|
16
Shorewall/Macros/macro.FreeIPA
Normal file
16
Shorewall/Macros/macro.FreeIPA
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#
|
||||||
|
# Shorewall -- /usr/share/shorewall/macro.FreeIPA
|
||||||
|
#
|
||||||
|
# This macro handles FreeIPA server traffic.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
|
DNS
|
||||||
|
HTTP
|
||||||
|
HTTPS
|
||||||
|
Kerberos
|
||||||
|
Kpasswd
|
||||||
|
LDAP
|
||||||
|
LDAPS
|
||||||
|
NTP
|
9
Shorewall/Macros/macro.IPFS-API
Normal file
9
Shorewall/Macros/macro.IPFS-API
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Shorewall -- /usr/share/shorewall/macro.IPFS-API
|
||||||
|
#
|
||||||
|
# This macro handles IPFS API port (commands for the IPFS daemon).
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
|
PARAM - - tcp 5001
|
9
Shorewall/Macros/macro.IPFS-gateway
Normal file
9
Shorewall/Macros/macro.IPFS-gateway
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Shorewall -- /usr/share/shorewall/macro.IPFS-gateway
|
||||||
|
#
|
||||||
|
# This macro handles the IPFS gateway to HTTP.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
|
PARAM - - tcp 8080
|
9
Shorewall/Macros/macro.IPFS-swarm
Normal file
9
Shorewall/Macros/macro.IPFS-swarm
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Shorewall -- /usr/share/shorewall/macro.IPFS-swarm
|
||||||
|
#
|
||||||
|
# This macro handles IPFS data traffic (the connection to IPFS swarm).
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
|
PARAM - - tcp 4001
|
@@ -11,13 +11,20 @@
|
|||||||
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
PARAM - - tcp 623 # RMCP
|
PARAM - - tcp 623 # RMCP
|
||||||
|
PARAM - - udp 623 # RMCP
|
||||||
PARAM - - tcp 3668,3669 # Virtual Media, Secure (Dell)
|
PARAM - - tcp 3668,3669 # Virtual Media, Secure (Dell)
|
||||||
PARAM - - tcp 5120,5123 # CD, floppy (Asus, Aten)
|
PARAM - - tcp 5120,5122,5123 # CD,FD,HD (Asus, Aten)
|
||||||
PARAM - - tcp 5900,5901 # Remote Console (Aten, Dell)
|
PARAM - - tcp 5900,5901 # Remote Console (Aten, Dell)
|
||||||
PARAM - - tcp 7578 # Remote Console (AMI)
|
PARAM - - tcp 7578 # Remote Console (AMI)
|
||||||
PARAM - - udp 623 # RMCP
|
PARAM - - tcp 8889 # WS-MAN
|
||||||
HTTP
|
HTTP
|
||||||
HTTPS
|
|
||||||
SNMP
|
|
||||||
SSH # Serial over Lan
|
|
||||||
Telnet
|
Telnet
|
||||||
|
SNMP
|
||||||
|
|
||||||
|
# TLS/secure ports
|
||||||
|
PARAM - - tcp 3520 # Remote Console (Redfish)
|
||||||
|
PARAM - - tcp 3669 # Virtual Media (Dell)
|
||||||
|
PARAM - - tcp 5124,5126,5127 # CD,FD,HD (AMI)
|
||||||
|
PARAM - - tcp 7582 # Remote Console (AMI)
|
||||||
|
HTTPS
|
||||||
|
SSH # Serial over Lan
|
||||||
|
10
Shorewall/Macros/macro.Kpasswd
Normal file
10
Shorewall/Macros/macro.Kpasswd
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#
|
||||||
|
# Shorewall -- /usr/share/shorewall/macro.Kpasswd
|
||||||
|
#
|
||||||
|
# This macro handles Kerberos "passwd" traffic.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
|
PARAM - - tcp 464
|
||||||
|
PARAM - - udp 464
|
9
Shorewall/Macros/macro.RedisSecure
Normal file
9
Shorewall/Macros/macro.RedisSecure
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Shorewall -- /usr/share/shorewall/macro.RedisSecure
|
||||||
|
#
|
||||||
|
# This macro handles Redis Secure (SSL/TLS) traffic.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
|
PARAM - - tcp 6380
|
9
Shorewall/Macros/macro.Rwhois
Normal file
9
Shorewall/Macros/macro.Rwhois
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Shorewall -- /usr/share/shorewall/macro.Rwhois
|
||||||
|
#
|
||||||
|
# This macro handles Remote Who Is (rwhois) traffic.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
|
PARAM - - tcp 4321
|
9
Shorewall/Macros/macro.SSDP
Normal file
9
Shorewall/Macros/macro.SSDP
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#
|
||||||
|
# Shorewall -- /usr/share/shorewall/macro.SSDP
|
||||||
|
#
|
||||||
|
# This macro handles SSDP (used by DLNA/UPnP) client traffic.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
|
PARAM - - udp 1900
|
10
Shorewall/Macros/macro.SSDPserver
Normal file
10
Shorewall/Macros/macro.SSDPserver
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#
|
||||||
|
# Shorewall -- /usr/share/shorewall/macro.SSDPserver
|
||||||
|
#
|
||||||
|
# This macro handles SSDP (used by DLNA/UPnP) server bidirectional traffic.
|
||||||
|
#
|
||||||
|
###############################################################################
|
||||||
|
#ACTION SOURCE DEST PROTO DPORT SPORT ORIGDEST RATE USER
|
||||||
|
|
||||||
|
PARAM - - udp 1900
|
||||||
|
PARAM DEST SOURCE udp - 1900
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/ARP.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/ARP.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Accounting.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Accounting.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -282,7 +282,7 @@ sub process_accounting_rule1( $$$$$$$$$$$ ) {
|
|||||||
|
|
||||||
if ( $dest eq 'any' || $dest eq 'all' || $dest eq ALLIP ) {
|
if ( $dest eq 'any' || $dest eq 'all' || $dest eq ALLIP ) {
|
||||||
expand_rule(
|
expand_rule(
|
||||||
ensure_rules_chain ( 'accountout' ) ,
|
ensure_chain ( $config{ACCOUNTING_TABLE}, 'accountout' ) ,
|
||||||
OUTPUT_RESTRICT ,
|
OUTPUT_RESTRICT ,
|
||||||
$prerule ,
|
$prerule ,
|
||||||
$rule ,
|
$rule ,
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Chains.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Chains.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2018 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -172,6 +172,12 @@ our %EXPORT_TAGS = (
|
|||||||
related_chain
|
related_chain
|
||||||
invalid_chain
|
invalid_chain
|
||||||
untracked_chain
|
untracked_chain
|
||||||
|
rules_log
|
||||||
|
blacklist_log
|
||||||
|
established_log
|
||||||
|
related_log
|
||||||
|
invalid_log
|
||||||
|
untracked_log
|
||||||
zone_forward_chain
|
zone_forward_chain
|
||||||
use_forward_chain
|
use_forward_chain
|
||||||
input_chain
|
input_chain
|
||||||
@@ -335,7 +341,7 @@ our $VERSION = 'MODULEVERSION';
|
|||||||
# logchains => { <key1> = <chainref1>, ... }
|
# logchains => { <key1> = <chainref1>, ... }
|
||||||
# references => { <ref1> => <refs>, <ref2> => <refs>, ... }
|
# references => { <ref1> => <refs>, <ref2> => <refs>, ... }
|
||||||
# blacklistsection
|
# blacklistsection
|
||||||
# => Chain was created by entries in the BLACKLIST section of the rules file
|
# => Chain was created by entries in the blrules file
|
||||||
# action => <action tuple that generated this chain>
|
# action => <action tuple that generated this chain>
|
||||||
# restricted => Logical OR of restrictions of rules in this chain.
|
# restricted => Logical OR of restrictions of rules in this chain.
|
||||||
# restriction => Restrictions on further rules in this chain.
|
# restriction => Restrictions on further rules in this chain.
|
||||||
@@ -361,13 +367,13 @@ our $VERSION = 'MODULEVERSION';
|
|||||||
#
|
#
|
||||||
# Only 'referenced' chains get written to the iptables-restore input.
|
# Only 'referenced' chains get written to the iptables-restore input.
|
||||||
#
|
#
|
||||||
# 'loglevel', 'synparams', 'synchain', 'audit', 'default' abd 'origin' only apply to policy chains.
|
# 'loglevel', 'synparams', 'synchain', 'audit', 'default' and 'origin' only apply to policy chains.
|
||||||
###########################################################################################################################################
|
###########################################################################################################################################
|
||||||
#
|
#
|
||||||
# For each ordered pair of zones, there may exist a 'canonical rules chain' in the filter table; the name of this chain is formed by
|
# For each ordered pair of zones, there may exist a 'canonical rules chain' in the filter table; the name of this chain is formed by
|
||||||
# joining the names of the zones using the ZONE_SEPARATOR ('2' or '-'). This chain contains the rules that specifically deal with
|
# joining the names of the zones using the ZONE_SEPARATOR ('2' or '-'). This chain contains the rules that specifically deal with
|
||||||
# connections from the first zone to the second. These chains will end with the policy rules when EXPAND_POLICIES=Yes and when there is an
|
# connections from the first zone to the second. These chains will end with the policy rules when EXPAND_POLICIES=Yes and when there is an
|
||||||
# explicit policy for the order pair. Otherwise, unless the applicable policy is CONTINUE, the chain will terminate with a jump to a
|
# explicit policy for the ordered pair. Otherwise, unless the applicable policy is CONTINUE, the chain will terminate with a jump to a
|
||||||
# wildcard policy chain (all[2-]zone, zone[2-]all, or all[2-]all).
|
# wildcard policy chain (all[2-]zone, zone[2-]all, or all[2-]all).
|
||||||
#
|
#
|
||||||
# Except in the most trivial one-interface configurations, each zone has a "forward chain" which is branched to from the filter table
|
# Except in the most trivial one-interface configurations, each zone has a "forward chain" which is branched to from the filter table
|
||||||
@@ -397,7 +403,7 @@ our $VERSION = 'MODULEVERSION';
|
|||||||
# MAC Recent - <dev>_rec
|
# MAC Recent - <dev>_rec
|
||||||
# SNAT - <dev>_snat
|
# SNAT - <dev>_snat
|
||||||
# ECN - <dev>_ecn
|
# ECN - <dev>_ecn
|
||||||
# FORWARD Options - <dev>_fop
|
# INPUT Options - <dev>_iop
|
||||||
# OUTPUT Options - <dev>_oop
|
# OUTPUT Options - <dev>_oop
|
||||||
# FORWARD Options - <dev>_fop
|
# FORWARD Options - <dev>_fop
|
||||||
#
|
#
|
||||||
@@ -874,6 +880,9 @@ sub validate_port( $$ ) {
|
|||||||
fatal_error "Invalid/Unknown $proto port/service ($_[1])" unless defined $value;
|
fatal_error "Invalid/Unknown $proto port/service ($_[1])" unless defined $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Port or port-pair separated by ':'. Either port may be omitted in the pair
|
||||||
|
#
|
||||||
sub validate_portpair( $$ ) {
|
sub validate_portpair( $$ ) {
|
||||||
my ($proto, $portpair) = @_;
|
my ($proto, $portpair) = @_;
|
||||||
my $what;
|
my $what;
|
||||||
@@ -914,15 +923,15 @@ sub validate_portpair( $$ ) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Port or port-pair separated by '-'. Neither port may be omitted in the pair
|
||||||
|
#
|
||||||
sub validate_portpair1( $$ ) {
|
sub validate_portpair1( $$ ) {
|
||||||
my ($proto, $portpair) = @_;
|
my ($proto, $portpair) = @_;
|
||||||
my $what;
|
my $what;
|
||||||
|
|
||||||
fatal_error "Invalid port range ($portpair)" if $portpair =~ tr/-/-/ > 1;
|
fatal_error "Invalid port range ($portpair)" if $portpair =~ tr/-/-/ > 1;
|
||||||
|
|
||||||
$portpair = "1$portpair" if substr( $portpair, 0, 1 ) eq ':';
|
|
||||||
$portpair = "${portpair}65535" if substr( $portpair, -1, 1 ) eq ':';
|
|
||||||
|
|
||||||
my @ports = split /-/, $portpair, 2;
|
my @ports = split /-/, $portpair, 2;
|
||||||
|
|
||||||
my $protonum = resolve_proto( $proto ) || 0;
|
my $protonum = resolve_proto( $proto ) || 0;
|
||||||
@@ -1316,14 +1325,14 @@ sub pop_match( $$ ) {
|
|||||||
|
|
||||||
sub clone_irule( $ );
|
sub clone_irule( $ );
|
||||||
|
|
||||||
sub format_rule( $$;$ ) {
|
sub format_rule( $$ ) {
|
||||||
my ( $chainref, $rulerefp, $suppresshdr ) = @_;
|
my ( $chainref, $rulerefp ) = @_;
|
||||||
|
|
||||||
return $rulerefp->{cmd} if exists $rulerefp->{cmd};
|
return $rulerefp->{cmd} if exists $rulerefp->{cmd};
|
||||||
|
|
||||||
my $rule = $suppresshdr ? '' : "-A $chainref->{name}";
|
my $rule = "-A $chainref->{name}";
|
||||||
#
|
#
|
||||||
# The code the follows can be destructive of the rule so we clone it
|
# The code that follows can be destructive of the rule so we clone it
|
||||||
#
|
#
|
||||||
my $ruleref = $rulerefp->{complex} ? clone_irule( $rulerefp ) : $rulerefp;
|
my $ruleref = $rulerefp->{complex} ? clone_irule( $rulerefp ) : $rulerefp;
|
||||||
my $nfacct = $rulerefp->{nfacct};
|
my $nfacct = $rulerefp->{nfacct};
|
||||||
@@ -2263,6 +2272,56 @@ sub untracked_chain($$) {
|
|||||||
'&' . &rules_chain(@_);
|
'&' . &rules_chain(@_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Logname for chains between an ordered pair of zones
|
||||||
|
#
|
||||||
|
sub rules_log( $$ ) {
|
||||||
|
my $logchain = $config{LOG_ZONE};
|
||||||
|
|
||||||
|
if ( $logchain eq 'both' ) {
|
||||||
|
join "$config{ZONE2ZONE}", @_;
|
||||||
|
} elsif ( $logchain eq 'src' ) {
|
||||||
|
$_[0];
|
||||||
|
} else {
|
||||||
|
$_[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Log name of the blacklist chain between an ordered pair of zones
|
||||||
|
#
|
||||||
|
sub blacklist_log($$) {
|
||||||
|
&rules_log(@_) . '~';
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Log name of the established chain between an ordered pair of zones
|
||||||
|
#
|
||||||
|
sub established_log($$) {
|
||||||
|
'^' . &rules_log(@_)
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Log name of the related chain between an ordered pair of zones
|
||||||
|
#
|
||||||
|
sub related_log($$) {
|
||||||
|
'+' . &rules_log(@_);
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Log name of the invalid chain between an ordered pair of zones
|
||||||
|
#
|
||||||
|
sub invalid_log($$) {
|
||||||
|
'_' . &rules_log(@_);
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Name of the untracked chain between an ordered pair of zones
|
||||||
|
#
|
||||||
|
sub untracked_log($$) {
|
||||||
|
'&' . &rules_log(@_);
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Create the base for a chain involving the passed interface -- we make this a function so it will be
|
# Create the base for a chain involving the passed interface -- we make this a function so it will be
|
||||||
# easy to change the mapping should the need ever arrive.
|
# easy to change the mapping should the need ever arrive.
|
||||||
@@ -2298,8 +2357,6 @@ sub use_forward_chain($$) {
|
|||||||
|
|
||||||
my $interfaceref = find_interface($interface);
|
my $interfaceref = find_interface($interface);
|
||||||
my $nets = $interfaceref->{nets};
|
my $nets = $interfaceref->{nets};
|
||||||
|
|
||||||
return 1 if @{$chainref->{rules}} && ( $config{OPTIMIZE} & OPTIMIZE_USE_FIRST );
|
|
||||||
#
|
#
|
||||||
# Use it if we already have jumps to it
|
# Use it if we already have jumps to it
|
||||||
#
|
#
|
||||||
@@ -2374,8 +2431,6 @@ sub use_input_chain($$) {
|
|||||||
my ( $interface, $chainref ) = @_;
|
my ( $interface, $chainref ) = @_;
|
||||||
my $interfaceref = find_interface($interface);
|
my $interfaceref = find_interface($interface);
|
||||||
my $nets = $interfaceref->{nets};
|
my $nets = $interfaceref->{nets};
|
||||||
|
|
||||||
return 1 if @{$chainref->{rules}} && ( $config{OPTIMIZE} & OPTIMIZE_USE_FIRST );
|
|
||||||
#
|
#
|
||||||
# We must use the interfaces's chain if the interface is associated with multiple Zones
|
# We must use the interfaces's chain if the interface is associated with multiple Zones
|
||||||
#
|
#
|
||||||
@@ -2455,8 +2510,6 @@ sub use_output_chain($$) {
|
|||||||
my ( $interface, $chainref) = @_;
|
my ( $interface, $chainref) = @_;
|
||||||
my $interfaceref = find_interface($interface);
|
my $interfaceref = find_interface($interface);
|
||||||
my $nets = $interfaceref->{nets};
|
my $nets = $interfaceref->{nets};
|
||||||
|
|
||||||
return 1 if @{$chainref->{rules}} && ( $config{OPTIMIZE} & OPTIMIZE_USE_FIRST );
|
|
||||||
#
|
#
|
||||||
# We must use the interfaces's chain if the interface is associated with multiple Zones
|
# We must use the interfaces's chain if the interface is associated with multiple Zones
|
||||||
#
|
#
|
||||||
@@ -2588,13 +2641,14 @@ sub reserved_name( $ ) {
|
|||||||
#
|
#
|
||||||
# Create a new chain and return a reference to it.
|
# Create a new chain and return a reference to it.
|
||||||
#
|
#
|
||||||
sub new_chain($$)
|
sub new_chain($$;$)
|
||||||
{
|
{
|
||||||
my ($table, $chain) = @_;
|
my ($table, $chain, $logchain) = @_;
|
||||||
|
|
||||||
assert( $chain_table{$table} && ! ( $chain_table{$table}{$chain} || $builtin_target{ $chain } ) );
|
assert( $chain_table{$table} && ! ( $chain_table{$table}{$chain} || $builtin_target{ $chain } ) );
|
||||||
|
|
||||||
my $chainref = { name => $chain,
|
my $chainref = { name => $chain,
|
||||||
|
logname => $logchain || $chain,
|
||||||
rules => [],
|
rules => [],
|
||||||
table => $table,
|
table => $table,
|
||||||
loglevel => '',
|
loglevel => '',
|
||||||
@@ -2615,7 +2669,7 @@ sub new_chain($$)
|
|||||||
#
|
#
|
||||||
# Find a chain
|
# Find a chain
|
||||||
#
|
#
|
||||||
sub find_chain($$) {
|
sub find_chain($$;$) {
|
||||||
my ($table, $chain) = @_;
|
my ($table, $chain) = @_;
|
||||||
|
|
||||||
assert( $table && $chain && $chain_table{$table} );
|
assert( $table && $chain && $chain_table{$table} );
|
||||||
@@ -2626,7 +2680,7 @@ sub find_chain($$) {
|
|||||||
#
|
#
|
||||||
# Create a chain if it doesn't exist already
|
# Create a chain if it doesn't exist already
|
||||||
#
|
#
|
||||||
sub ensure_chain($$)
|
sub ensure_chain($$;$)
|
||||||
{
|
{
|
||||||
&find_chain( @_ ) || &new_chain( @_ );
|
&find_chain( @_ ) || &new_chain( @_ );
|
||||||
}
|
}
|
||||||
@@ -3179,6 +3233,8 @@ sub initialize_chain_table($) {
|
|||||||
new_builtin_chain 'nat', $chain, 'ACCEPT';
|
new_builtin_chain 'nat', $chain, 'ACCEPT';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new_builtin_chain 'nat', 'INPUT', 'ACCEPT' if have_capability('NAT_INPUT_CHAIN');
|
||||||
|
|
||||||
for my $chain ( qw(PREROUTING INPUT OUTPUT ) ) {
|
for my $chain ( qw(PREROUTING INPUT OUTPUT ) ) {
|
||||||
new_builtin_chain 'mangle', $chain, 'ACCEPT';
|
new_builtin_chain 'mangle', $chain, 'ACCEPT';
|
||||||
}
|
}
|
||||||
@@ -3241,6 +3297,8 @@ sub initialize_chain_table($) {
|
|||||||
new_builtin_chain 'nat', $chain, 'ACCEPT';
|
new_builtin_chain 'nat', $chain, 'ACCEPT';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
new_builtin_chain 'nat', 'INPUT', 'ACCEPT' if have_capability('NAT_INPUT_CHAIN');
|
||||||
|
|
||||||
for my $chain ( qw(PREROUTING INPUT OUTPUT FORWARD POSTROUTING ) ) {
|
for my $chain ( qw(PREROUTING INPUT OUTPUT FORWARD POSTROUTING ) ) {
|
||||||
new_builtin_chain 'mangle', $chain, 'ACCEPT';
|
new_builtin_chain 'mangle', $chain, 'ACCEPT';
|
||||||
}
|
}
|
||||||
@@ -3266,7 +3324,7 @@ sub initialize_chain_table($) {
|
|||||||
$mangle_table->{POSTROUTING}{chainnumber} = POSTROUTING;
|
$mangle_table->{POSTROUTING}{chainnumber} = POSTROUTING;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( my $docker = $config{DOCKER} ) {
|
if ( $config{DOCKER} ) {
|
||||||
add_commands( $nat_table->{OUTPUT}, '[ -f ${VARDIR}/.nat_OUTPUT ] && cat ${VARDIR}/.nat_OUTPUT >&3' );
|
add_commands( $nat_table->{OUTPUT}, '[ -f ${VARDIR}/.nat_OUTPUT ] && cat ${VARDIR}/.nat_OUTPUT >&3' );
|
||||||
add_commands( $nat_table->{POSTROUTING}, '[ -f ${VARDIR}/.nat_POSTROUTING ] && cat ${VARDIR}/.nat_POSTROUTING >&3' );
|
add_commands( $nat_table->{POSTROUTING}, '[ -f ${VARDIR}/.nat_POSTROUTING ] && cat ${VARDIR}/.nat_POSTROUTING >&3' );
|
||||||
$chainref = new_standard_chain( 'DOCKER' );
|
$chainref = new_standard_chain( 'DOCKER' );
|
||||||
@@ -3376,15 +3434,43 @@ sub delete_references( $ ) {
|
|||||||
#
|
#
|
||||||
# Calculate a digest for the passed chain and store it in the {digest} member.
|
# Calculate a digest for the passed chain and store it in the {digest} member.
|
||||||
#
|
#
|
||||||
|
# First, a lightweight version of format_rule()
|
||||||
|
#
|
||||||
|
sub irule_to_string( $ ) {
|
||||||
|
my ( $ruleref ) = @_;
|
||||||
|
|
||||||
|
return $ruleref->{cmd} if exists $ruleref->{cmd};
|
||||||
|
|
||||||
|
my $string = '';
|
||||||
|
|
||||||
|
for ( grep ! ( get_opttype( $_, 0 ) & ( CONTROL | TARGET ) ), @{$ruleref->{matches}} ) {
|
||||||
|
my $value = $ruleref->{$_};
|
||||||
|
if ( reftype $value ) {
|
||||||
|
$string .= "$_=" . join( ',', @$value ) . ' ';
|
||||||
|
} else {
|
||||||
|
$string .= "$_=$value ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( $ruleref->{target} ) {
|
||||||
|
$string .= join( ' ', " -$ruleref->{jump}", $ruleref->{target} );
|
||||||
|
$string .= join( '', ' ', $ruleref->{targetopts} ) if $ruleref->{targetopts};
|
||||||
|
}
|
||||||
|
|
||||||
|
$string .= join( '', ' -m comment --comment "', $ruleref->{comment}, '"' ) if $ruleref->{comment};
|
||||||
|
|
||||||
|
$string;
|
||||||
|
}
|
||||||
|
|
||||||
sub calculate_digest( $ ) {
|
sub calculate_digest( $ ) {
|
||||||
my $chainref = shift;
|
my $chainref = shift;
|
||||||
my $rules = '';
|
my $rules = '';
|
||||||
|
|
||||||
for ( @{$chainref->{rules}} ) {
|
for ( @{$chainref->{rules}} ) {
|
||||||
if ( $rules ) {
|
if ( $rules ) {
|
||||||
$rules .= ' |' . format_rule( $chainref, $_, 1 );
|
$rules .= ' |' . irule_to_string( $_ );
|
||||||
} else {
|
} else {
|
||||||
$rules = format_rule( $chainref, $_, 1 );
|
$rules = irule_to_string( $_ );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3746,7 +3832,7 @@ sub optimize_level4( $$ ) {
|
|||||||
#
|
#
|
||||||
# In this loop, we look for chains that end in an unconditional jump. The jump is replaced by
|
# In this loop, we look for chains that end in an unconditional jump. The jump is replaced by
|
||||||
# the target's rules, provided that the target chain is short (< 4 rules) or has only one
|
# the target's rules, provided that the target chain is short (< 4 rules) or has only one
|
||||||
# reference. This prevents multiple copies of long chains being created.
|
# reference. This prevents multiple copies of long chains from being created.
|
||||||
#
|
#
|
||||||
$progress = 1;
|
$progress = 1;
|
||||||
|
|
||||||
@@ -3856,7 +3942,10 @@ sub optimize_level8( $$$ ) {
|
|||||||
%renamed = ();
|
%renamed = ();
|
||||||
|
|
||||||
while ( $progress ) {
|
while ( $progress ) {
|
||||||
my @chains = ( sort { level8_compare($a, $b) } ( grep $_->{referenced} && ! $_->{builtin}, values %{$tableref} ) );
|
my @chains = ( sort { level8_compare($a, $b) } ( grep $_->{referenced} &&
|
||||||
|
@{$_->{rules}} &&
|
||||||
|
! $_->{builtin},
|
||||||
|
values %{$tableref} ) );
|
||||||
my @chains1 = @chains;
|
my @chains1 = @chains;
|
||||||
my $chains = @chains;
|
my $chains = @chains;
|
||||||
my %rename;
|
my %rename;
|
||||||
@@ -3876,12 +3965,11 @@ sub optimize_level8( $$$ ) {
|
|||||||
# Shift the current $chainref off of @chains1
|
# Shift the current $chainref off of @chains1
|
||||||
#
|
#
|
||||||
shift @chains1;
|
shift @chains1;
|
||||||
|
|
||||||
|
for my $chainref1 (grep ! ( $_->{optflags} & DONT_DELETE ), @chains1 ) {
|
||||||
#
|
#
|
||||||
# Skip empty chains
|
# Chains identical?
|
||||||
#
|
#
|
||||||
for my $chainref1 ( @chains1 ) {
|
|
||||||
next unless @{$chainref1->{rules}};
|
|
||||||
next if $chainref1->{optflags} & DONT_DELETE;
|
|
||||||
if ( $chainref->{digest} eq $chainref1->{digest} ) {
|
if ( $chainref->{digest} eq $chainref1->{digest} ) {
|
||||||
progress_message " Chain $chainref1->{name} combined with $chainref->{name}";
|
progress_message " Chain $chainref1->{name} combined with $chainref->{name}";
|
||||||
$progress = 1;
|
$progress = 1;
|
||||||
@@ -3892,7 +3980,7 @@ sub optimize_level8( $$$ ) {
|
|||||||
'', # Origin
|
'', # Origin
|
||||||
1 ); # Recalculate digests of modified chains
|
1 ); # Recalculate digests of modified chains
|
||||||
|
|
||||||
unless ( $chainref->{name} =~ /^~/ || $chainref1->{name} =~ /^%/ ) {
|
if ( $config{RENAME_COMBINED} && $chainref->{name} !~ /^[~%]/ ) {
|
||||||
#
|
#
|
||||||
# For simple use of the BLACKLIST section, we can end up with many identical
|
# For simple use of the BLACKLIST section, we can end up with many identical
|
||||||
# chains. To distinguish them from other renamed chains, we keep track of
|
# chains. To distinguish them from other renamed chains, we keep track of
|
||||||
@@ -4311,7 +4399,7 @@ sub get_conntrack( $ ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Return an array of keys for the passed rule. 'conntrack', 'comment' & origin are omitted;
|
# Return an array of keys for the passed rule. 'conntrack', 'comment' & 'origin' are omitted;
|
||||||
#
|
#
|
||||||
sub get_keys1( $ ) {
|
sub get_keys1( $ ) {
|
||||||
my %skip = ( comment => 1, origin => 1 , 'conntrack --ctstate' => 1 );
|
my %skip = ( comment => 1, origin => 1 , 'conntrack --ctstate' => 1 );
|
||||||
@@ -4475,16 +4563,22 @@ sub valid_tables() {
|
|||||||
|
|
||||||
sub optimize_ruleset() {
|
sub optimize_ruleset() {
|
||||||
|
|
||||||
|
my $optimize = $config{OPTIMIZE};
|
||||||
|
|
||||||
for my $table ( valid_tables ) {
|
for my $table ( valid_tables ) {
|
||||||
|
|
||||||
my $tableref = $chain_table{$table};
|
my $tableref = $chain_table{$table};
|
||||||
my $passes = 0;
|
my $passes = 0;
|
||||||
my $optimize = $config{OPTIMIZE};
|
|
||||||
|
|
||||||
$passes = optimize_level4( $table, $tableref ) if $optimize & 4;
|
$passes = optimize_level4( $table, $tableref ) if $optimize & 4;
|
||||||
$passes = optimize_level8( $table, $tableref , $passes ) if $optimize & 8;
|
|
||||||
$passes = optimize_level16( $table, $tableref , $passes ) if $optimize & 16;
|
$passes = optimize_level16( $table, $tableref , $passes ) if $optimize & 16;
|
||||||
|
|
||||||
|
my $savepasses = $passes;
|
||||||
|
|
||||||
|
$passes = optimize_level8( $table, $tableref , $passes ) if $optimize & 8;
|
||||||
|
|
||||||
|
$passes = optimize_level16( $table, $tableref , $passes ) if $optimize & 16 && $passes > $savepasses + 1;
|
||||||
|
|
||||||
progress_message " Table $table Optimized -- Passes = $passes";
|
progress_message " Table $table Optimized -- Passes = $passes";
|
||||||
progress_message '';
|
progress_message '';
|
||||||
}
|
}
|
||||||
@@ -4597,7 +4691,7 @@ sub logchain( $$$$$$ ) {
|
|||||||
log_irule_limit(
|
log_irule_limit(
|
||||||
$loglevel ,
|
$loglevel ,
|
||||||
$logchainref ,
|
$logchainref ,
|
||||||
$chainref->{name} ,
|
$chainref->{logname} ,
|
||||||
$disposition ,
|
$disposition ,
|
||||||
[] ,
|
[] ,
|
||||||
$logtag,
|
$logtag,
|
||||||
@@ -4782,6 +4876,7 @@ sub do_proto( $$$;$ )
|
|||||||
if ( $proto ne '' ) {
|
if ( $proto ne '' ) {
|
||||||
|
|
||||||
my $synonly = ( $proto =~ s/:(!)?syn$//i );
|
my $synonly = ( $proto =~ s/:(!)?syn$//i );
|
||||||
|
my $all = ( $proto =~ s/:all$//i );
|
||||||
my $notsyn = $1;
|
my $notsyn = $1;
|
||||||
my $invert = ( $proto =~ s/^!// ? '! ' : '' );
|
my $invert = ( $proto =~ s/^!// ? '! ' : '' );
|
||||||
my $protonum = resolve_proto $proto;
|
my $protonum = resolve_proto $proto;
|
||||||
@@ -4797,6 +4892,7 @@ sub do_proto( $$$;$ )
|
|||||||
# $proto now contains the protocol number and $pname contains the canonical name of the protocol
|
# $proto now contains the protocol number and $pname contains the canonical name of the protocol
|
||||||
#
|
#
|
||||||
unless ( $synonly ) {
|
unless ( $synonly ) {
|
||||||
|
fatal_error '":all" is only allowed with tcp' if $all && $proto != TCP;
|
||||||
$output = "${invert}-p ${proto} ";
|
$output = "${invert}-p ${proto} ";
|
||||||
} else {
|
} else {
|
||||||
fatal_error '":syn" is only allowed with tcp' unless $proto == TCP && ! $invert;
|
fatal_error '":syn" is only allowed with tcp' unless $proto == TCP && ! $invert;
|
||||||
@@ -4936,6 +5032,8 @@ sub do_proto( $$$;$ )
|
|||||||
} else {
|
} else {
|
||||||
fatal_error '":syn" is only allowed with tcp' if $synonly;
|
fatal_error '":syn" is only allowed with tcp' if $synonly;
|
||||||
|
|
||||||
|
$proto = $proto . ':all' if $all;
|
||||||
|
|
||||||
if ( $proto =~ /^(ipp2p(:(tcp|udp|all))?)$/i ) {
|
if ( $proto =~ /^(ipp2p(:(tcp|udp|all))?)$/i ) {
|
||||||
my $p = $2 ? lc $3 : 'tcp';
|
my $p = $2 ? lc $3 : 'tcp';
|
||||||
require_capability( 'IPP2P_MATCH' , "PROTO = $proto" , 's' );
|
require_capability( 'IPP2P_MATCH' , "PROTO = $proto" , 's' );
|
||||||
@@ -4992,6 +5090,7 @@ sub do_iproto( $$$ )
|
|||||||
if ( $proto ne '' ) {
|
if ( $proto ne '' ) {
|
||||||
|
|
||||||
my $synonly = ( $proto =~ s/:syn$//i );
|
my $synonly = ( $proto =~ s/:syn$//i );
|
||||||
|
my $all = ( $proto =~ s/:all$//i );
|
||||||
my $invert = ( $proto =~ s/^!// ? '! ' : '' );
|
my $invert = ( $proto =~ s/^!// ? '! ' : '' );
|
||||||
my $protonum = resolve_proto $proto;
|
my $protonum = resolve_proto $proto;
|
||||||
|
|
||||||
@@ -5006,6 +5105,7 @@ sub do_iproto( $$$ )
|
|||||||
# $proto now contains the protocol number and $pname contains the canonical name of the protocol
|
# $proto now contains the protocol number and $pname contains the canonical name of the protocol
|
||||||
#
|
#
|
||||||
unless ( $synonly ) {
|
unless ( $synonly ) {
|
||||||
|
fatal_error '":all" is only allowed with tcp' if $all && $proto != TCP;
|
||||||
@output = ( p => "${invert}${proto}" );
|
@output = ( p => "${invert}${proto}" );
|
||||||
} else {
|
} else {
|
||||||
fatal_error '":syn" is only allowed with tcp' unless $proto == TCP && ! $invert;
|
fatal_error '":syn" is only allowed with tcp' unless $proto == TCP && ! $invert;
|
||||||
@@ -5140,6 +5240,8 @@ sub do_iproto( $$$ )
|
|||||||
} else {
|
} else {
|
||||||
fatal_error '":syn" is only allowed with tcp' if $synonly;
|
fatal_error '":syn" is only allowed with tcp' if $synonly;
|
||||||
|
|
||||||
|
$proto = $proto . ':all' if $all;
|
||||||
|
|
||||||
if ( $proto =~ /^(ipp2p(:(tcp|udp|all))?)$/i ) {
|
if ( $proto =~ /^(ipp2p(:(tcp|udp|all))?)$/i ) {
|
||||||
my $p = $2 ? lc $3 : 'tcp';
|
my $p = $2 ? lc $3 : 'tcp';
|
||||||
require_capability( 'IPP2P_MATCH' , "PROTO = $proto" , 's' );
|
require_capability( 'IPP2P_MATCH' , "PROTO = $proto" , 's' );
|
||||||
@@ -6768,13 +6870,13 @@ sub log_irule_limit( $$$$$$$$@ ) {
|
|||||||
sub log_rule( $$$$ ) {
|
sub log_rule( $$$$ ) {
|
||||||
my ( $level, $chainref, $disposition, $matches ) = @_;
|
my ( $level, $chainref, $disposition, $matches ) = @_;
|
||||||
|
|
||||||
log_rule_limit $level, $chainref, $chainref->{name} , $disposition, $globals{LOGLIMIT}, '', 'add', $matches;
|
log_rule_limit $level, $chainref, $chainref->{logname} , $disposition, $globals{LOGLIMIT}, '', 'add', $matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub log_irule( $$$;@ ) {
|
sub log_irule( $$$;@ ) {
|
||||||
my ( $level, $chainref, $disposition, @matches ) = @_;
|
my ( $level, $chainref, $disposition, @matches ) = @_;
|
||||||
|
|
||||||
log_irule_limit $level, $chainref, $chainref->{name} , $disposition, $globals{LOGILIMIT} , '', 'add', '', @matches;
|
log_irule_limit $level, $chainref, $chainref->{logname} , $disposition, $globals{LOGILIMIT} , '', 'add', '', @matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -6995,14 +7097,17 @@ sub interface_address( $ ) {
|
|||||||
#
|
#
|
||||||
sub get_interface_address ( $;$ ) {
|
sub get_interface_address ( $;$ ) {
|
||||||
my ( $logical, $provider ) = @_;
|
my ( $logical, $provider ) = @_;
|
||||||
|
|
||||||
my $interface = get_physical( $logical );
|
my $interface = get_physical( $logical );
|
||||||
my $variable = interface_address( $interface );
|
my $variable = interface_address( $interface );
|
||||||
my $function = interface_is_optional( $logical ) ? 'find_first_interface_address_if_any' : 'find_first_interface_address';
|
|
||||||
|
|
||||||
$global_variables |= ALL_COMMANDS;
|
$global_variables |= ALL_COMMANDS;
|
||||||
|
|
||||||
|
if ( $interface eq loopback_interface ) {
|
||||||
|
$interfaceaddr{$interface} = "$variable=" . loopback_address;
|
||||||
|
} else {
|
||||||
|
my $function = interface_is_optional( $logical ) ? 'find_first_interface_address_if_any' : 'find_first_interface_address';
|
||||||
$interfaceaddr{$interface} = "$variable=\$($function $interface)\n";
|
$interfaceaddr{$interface} = "$variable=\$($function $interface)\n";
|
||||||
|
}
|
||||||
|
|
||||||
set_interface_option( $logical, 'used_address_variable', 1 ) unless $provider;
|
set_interface_option( $logical, 'used_address_variable', 1 ) unless $provider;
|
||||||
|
|
||||||
@@ -8190,19 +8295,8 @@ sub add_interface_options( $ ) {
|
|||||||
# Generate a digest for each chain
|
# Generate a digest for each chain
|
||||||
#
|
#
|
||||||
for my $chainref ( values %input_chains, values %forward_chains ) {
|
for my $chainref ( values %input_chains, values %forward_chains ) {
|
||||||
my $digest = '';
|
|
||||||
|
|
||||||
assert( $chainref );
|
assert( $chainref );
|
||||||
|
calculate_digest( $chainref );
|
||||||
for ( @{$chainref->{rules}} ) {
|
|
||||||
if ( $digest ) {
|
|
||||||
$digest .= ' |' . format_rule( $chainref, $_, 1 );
|
|
||||||
} else {
|
|
||||||
$digest = format_rule( $chainref, $_, 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$chainref->{digest} = sha1_hex $digest;
|
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
# Insert jumps to the interface chains into the rules chains
|
# Insert jumps to the interface chains into the rules chains
|
||||||
@@ -8491,7 +8585,7 @@ sub save_dynamic_chains() {
|
|||||||
my $tool = $family == F_IPV4 ? '${IPTABLES}' : '${IP6TABLES}';
|
my $tool = $family == F_IPV4 ? '${IPTABLES}' : '${IP6TABLES}';
|
||||||
my $utility = $family == F_IPV4 ? 'iptables-restore' : 'ip6tables-restore';
|
my $utility = $family == F_IPV4 ? 'iptables-restore' : 'ip6tables-restore';
|
||||||
|
|
||||||
emit ( 'if [ "$COMMAND" = reload -o "$COMMAND" = refresh ]; then' );
|
emit ( 'if [ "$COMMAND" = reload ]; then' );
|
||||||
push_indent;
|
push_indent;
|
||||||
|
|
||||||
emit( 'if [ -n "$g_counters" ]; then' ,
|
emit( 'if [ -n "$g_counters" ]; then' ,
|
||||||
@@ -8500,7 +8594,7 @@ sub save_dynamic_chains() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if ( have_capability 'IPTABLES_S' ) {
|
if ( have_capability 'IPTABLES_S' ) {
|
||||||
emit <<"EOF";
|
emithd <<"EOF";
|
||||||
if chain_exists 'UPnP -t nat'; then
|
if chain_exists 'UPnP -t nat'; then
|
||||||
$tool -t nat -S UPnP | tail -n +2 > \${VARDIR}/.UPnP
|
$tool -t nat -S UPnP | tail -n +2 > \${VARDIR}/.UPnP
|
||||||
else
|
else
|
||||||
@@ -8521,6 +8615,7 @@ fi
|
|||||||
EOF
|
EOF
|
||||||
if ( $config{MINIUPNPD} ) {
|
if ( $config{MINIUPNPD} ) {
|
||||||
emit << "EOF";
|
emit << "EOF";
|
||||||
|
|
||||||
if chain_exists 'MINIUPNPD-POSTROUTING -t nat'; then
|
if chain_exists 'MINIUPNPD-POSTROUTING -t nat'; then
|
||||||
$tool -t nat -S MINIUPNPD-POSTROUTING | tail -n +2 > \${VARDIR}/.MINIUPNPD-POSTROUTING
|
$tool -t nat -S MINIUPNPD-POSTROUTING | tail -n +2 > \${VARDIR}/.MINIUPNPD-POSTROUTING
|
||||||
else
|
else
|
||||||
@@ -8529,7 +8624,7 @@ fi
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
emit <<"EOF";
|
emithd <<"EOF";
|
||||||
if chain_exists 'UPnP -t nat'; then
|
if chain_exists 'UPnP -t nat'; then
|
||||||
$utility -t nat | grep '^-A UPnP ' > \${VARDIR}/.UPnP
|
$utility -t nat | grep '^-A UPnP ' > \${VARDIR}/.UPnP
|
||||||
else
|
else
|
||||||
@@ -8549,7 +8644,8 @@ else
|
|||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
if ( $config{MINIUPNPD} ) {
|
if ( $config{MINIUPNPD} ) {
|
||||||
emit << "EOF";
|
emithd << "EOF";
|
||||||
|
|
||||||
if chain_exists 'MINIUPNPD-POSTROUTING -t nat'; then
|
if chain_exists 'MINIUPNPD-POSTROUTING -t nat'; then
|
||||||
$utility -t nat | grep '^-A MINIUPNPD-POSTROUTING' > \${VARDIR}/.MINIUPNPD-POSTROUTING
|
$utility -t nat | grep '^-A MINIUPNPD-POSTROUTING' > \${VARDIR}/.MINIUPNPD-POSTROUTING
|
||||||
else
|
else
|
||||||
@@ -8563,7 +8659,7 @@ EOF
|
|||||||
emit ( 'else' );
|
emit ( 'else' );
|
||||||
push_indent;
|
push_indent;
|
||||||
|
|
||||||
emit <<"EOF";
|
emithd <<"EOF";
|
||||||
rm -f \${VARDIR}/.UPnP
|
rm -f \${VARDIR}/.UPnP
|
||||||
rm -f \${VARDIR}/.forwardUPnP
|
rm -f \${VARDIR}/.forwardUPnP
|
||||||
EOF
|
EOF
|
||||||
@@ -8600,7 +8696,7 @@ sub ensure_ipsets( @ ) {
|
|||||||
|
|
||||||
pop_indent;
|
pop_indent;
|
||||||
|
|
||||||
emit( qq( fi\n) );
|
emit( q( fi) );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8776,7 +8872,6 @@ sub create_load_ipsets() {
|
|||||||
' $IPSET flush $set' ,
|
' $IPSET flush $set' ,
|
||||||
' $IPSET destroy $set' ,
|
' $IPSET destroy $set' ,
|
||||||
" done" ,
|
" done" ,
|
||||||
'',
|
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
#
|
#
|
||||||
@@ -8788,7 +8883,7 @@ sub create_load_ipsets() {
|
|||||||
' fi' );
|
' fi' );
|
||||||
};
|
};
|
||||||
|
|
||||||
emit( '}' );
|
emit( "}\n" );
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
# Now generate load_ipsets()
|
# Now generate load_ipsets()
|
||||||
@@ -8855,22 +8950,16 @@ sub create_load_ipsets() {
|
|||||||
|
|
||||||
emit ( 'elif [ "$COMMAND" = reload ]; then' ); ################### Reload Command ####################
|
emit ( 'elif [ "$COMMAND" = reload ]; then' ); ################### Reload Command ####################
|
||||||
ensure_ipsets( @ipsets );
|
ensure_ipsets( @ipsets );
|
||||||
|
|
||||||
emit( 'elif [ "$COMMAND" = refresh ]; then' ); ################### Refresh Command ###################
|
|
||||||
emit ( '' );
|
|
||||||
ensure_ipsets( @ipsets );
|
|
||||||
emit ( '' );
|
|
||||||
};
|
};
|
||||||
|
|
||||||
emit ( 'fi' ,
|
emit ( 'fi' );
|
||||||
'' );
|
|
||||||
} else {
|
} else {
|
||||||
emit 'true';
|
emit 'true';
|
||||||
}
|
}
|
||||||
|
|
||||||
pop_indent;
|
pop_indent;
|
||||||
|
|
||||||
emit '}';
|
emit "}\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -9043,7 +9132,7 @@ sub create_netfilter_load( $ ) {
|
|||||||
"cat \${VARDIR}/.${utility}-input | \$command # Use this nonsensical form to appease SELinux",
|
"cat \${VARDIR}/.${utility}-input | \$command # Use this nonsensical form to appease SELinux",
|
||||||
'if [ $? != 0 ]; then',
|
'if [ $? != 0 ]; then',
|
||||||
qq( fatal_error "iptables-restore Failed. Input is in \${VARDIR}/.${utility}-input"),
|
qq( fatal_error "iptables-restore Failed. Input is in \${VARDIR}/.${utility}-input"),
|
||||||
"fi\n"
|
'fi'
|
||||||
);
|
);
|
||||||
|
|
||||||
pop_indent;
|
pop_indent;
|
||||||
@@ -9135,156 +9224,6 @@ sub preview_netfilter_load() {
|
|||||||
print "\n";
|
print "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
|
||||||
# Generate the netfilter input for refreshing a list of chains
|
|
||||||
#
|
|
||||||
sub create_chainlist_reload($) {
|
|
||||||
|
|
||||||
my $chains = $_[0];
|
|
||||||
|
|
||||||
my @chains;
|
|
||||||
|
|
||||||
unless ( $chains eq ':none:' ) {
|
|
||||||
if ( $chains eq ':refresh:' ) {
|
|
||||||
$chains = '';
|
|
||||||
} else {
|
|
||||||
@chains = split_list $chains, 'chain';
|
|
||||||
}
|
|
||||||
|
|
||||||
unless ( @chains ) {
|
|
||||||
@chains = qw( blacklst ) if $filter_table->{blacklst};
|
|
||||||
push @chains, 'blackout' if $filter_table->{blackout};
|
|
||||||
|
|
||||||
for ( grep $_->{blacklistsection} && $_->{referenced}, values %{$filter_table} ) {
|
|
||||||
push @chains, $_->{name} if $_->{blacklistsection};
|
|
||||||
}
|
|
||||||
|
|
||||||
push @chains, 'mangle:' if have_capability( 'MANGLE_ENABLED' ) && $config{MANGLE_ENABLED};
|
|
||||||
$chains = join( ',', @chains ) if @chains;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$mode = NULL_MODE;
|
|
||||||
|
|
||||||
emit( 'chainlist_reload()',
|
|
||||||
'{'
|
|
||||||
);
|
|
||||||
|
|
||||||
push_indent;
|
|
||||||
|
|
||||||
if ( @chains ) {
|
|
||||||
my $word = @chains == 1 ? 'chain' : 'chains';
|
|
||||||
|
|
||||||
progress_message2 "Compiling iptables-restore input for $word @chains...";
|
|
||||||
save_progress_message "Preparing iptables-restore input for $word @chains...";
|
|
||||||
|
|
||||||
emit '';
|
|
||||||
|
|
||||||
my $table = 'filter';
|
|
||||||
|
|
||||||
my %chains;
|
|
||||||
|
|
||||||
my %tables;
|
|
||||||
|
|
||||||
for my $chain ( @chains ) {
|
|
||||||
( $table , $chain ) = split ':', $chain if $chain =~ /:/;
|
|
||||||
|
|
||||||
fatal_error "Invalid table ( $table )" unless $table =~ /^(nat|mangle|filter|raw)$/;
|
|
||||||
|
|
||||||
$chains{$table} = {} unless $chains{$table};
|
|
||||||
|
|
||||||
if ( $chain ) {
|
|
||||||
my $chainref;
|
|
||||||
fatal_error "No $table chain found with name $chain" unless $chainref = $chain_table{$table}{$chain};
|
|
||||||
fatal_error "Built-in chains may not be refreshed" if $chainref->{builtin};
|
|
||||||
|
|
||||||
if ( $chainseq{$table} && @{$chainref->{rules}} ) {
|
|
||||||
$tables{$table} = 1;
|
|
||||||
} else {
|
|
||||||
$chains{$table}{$chain} = $chainref;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$tables{$table} = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for $table ( keys %tables ) {
|
|
||||||
while ( my ( $chain, $chainref ) = each %{$chain_table{$table}} ) {
|
|
||||||
$chains{$table}{$chain} = $chainref if $chainref->{referenced} && ! $chainref->{builtin};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
emit 'exec 3>${VARDIR}/.iptables-restore-input';
|
|
||||||
|
|
||||||
enter_cat_mode;
|
|
||||||
|
|
||||||
for $table ( qw(raw nat mangle filter) ) {
|
|
||||||
my $tableref=$chains{$table};
|
|
||||||
|
|
||||||
next unless $tableref;
|
|
||||||
|
|
||||||
@chains = sort keys %$tableref;
|
|
||||||
|
|
||||||
emit_unindented "*$table";
|
|
||||||
|
|
||||||
for my $chain ( @chains ) {
|
|
||||||
my $chainref = $tableref->{$chain};
|
|
||||||
emit_unindented ":$chainref->{name} - [0:0]";
|
|
||||||
}
|
|
||||||
|
|
||||||
for my $chain ( @chains ) {
|
|
||||||
my $chainref = $tableref->{$chain};
|
|
||||||
my @rules = @{$chainref->{rules}};
|
|
||||||
my $name = $chainref->{name};
|
|
||||||
|
|
||||||
@rules = () unless @rules;
|
|
||||||
#
|
|
||||||
# Emit the chain rules
|
|
||||||
#
|
|
||||||
emitr($chainref, $_) for @rules;
|
|
||||||
}
|
|
||||||
#
|
|
||||||
# Commit the changes to the table
|
|
||||||
#
|
|
||||||
enter_cat_mode unless $mode == CAT_MODE;
|
|
||||||
|
|
||||||
emit_unindented 'COMMIT';
|
|
||||||
}
|
|
||||||
|
|
||||||
enter_cmd_mode;
|
|
||||||
|
|
||||||
#
|
|
||||||
# Now generate the actual ip[6]tables-restore command
|
|
||||||
#
|
|
||||||
emit( 'exec 3>&-',
|
|
||||||
'' );
|
|
||||||
|
|
||||||
if ( $family == F_IPV4 ) {
|
|
||||||
emit ( 'progress_message2 "Running iptables-restore..."',
|
|
||||||
'',
|
|
||||||
'cat ${VARDIR}/.iptables-restore-input | $IPTABLES_RESTORE -n # Use this nonsensical form to appease SELinux',
|
|
||||||
'if [ $? != 0 ]; then',
|
|
||||||
' fatal_error "iptables-restore Failed. Input is in ${VARDIR}/.iptables-restore-input"',
|
|
||||||
"fi\n"
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
emit ( 'progress_message2 "Running ip6tables-restore..."',
|
|
||||||
'',
|
|
||||||
'cat ${VARDIR}/.iptables-restore-input | $IP6TABLES_RESTORE -n # Use this nonsensical form to appease SELinux',
|
|
||||||
'if [ $? != 0 ]; then',
|
|
||||||
' fatal_error "ip6tables-restore Failed. Input is in ${VARDIR}/.iptables-restore-input"',
|
|
||||||
"fi\n"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
emit('true');
|
|
||||||
}
|
|
||||||
|
|
||||||
pop_indent;
|
|
||||||
|
|
||||||
emit "}\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generate the netfilter input to stop the firewall
|
# Generate the netfilter input to stop the firewall
|
||||||
#
|
#
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -59,7 +59,7 @@ our $have_arptables;
|
|||||||
# Initilize the package-globals in the other modules
|
# Initilize the package-globals in the other modules
|
||||||
#
|
#
|
||||||
sub initialize_package_globals( $$$ ) {
|
sub initialize_package_globals( $$$ ) {
|
||||||
Shorewall::Config::initialize($family, $_[1], $_[2]);
|
Shorewall::Config::initialize($family, $export, $_[1], $_[2]);
|
||||||
Shorewall::Chains::initialize ($family, 1, $export );
|
Shorewall::Chains::initialize ($family, 1, $export );
|
||||||
Shorewall::Zones::initialize ($family, $_[0]);
|
Shorewall::Zones::initialize ($family, $_[0]);
|
||||||
Shorewall::Nat::initialize($family);
|
Shorewall::Nat::initialize($family);
|
||||||
@@ -103,13 +103,13 @@ sub generate_script_1( $ ) {
|
|||||||
|
|
||||||
copy2( $lib, $debug ) if -f $lib;
|
copy2( $lib, $debug ) if -f $lib;
|
||||||
|
|
||||||
emit <<'EOF';
|
emithd<<'EOF';
|
||||||
################################################################################
|
################################################################################
|
||||||
# Functions to execute the various user exits (extension scripts)
|
# Functions to execute the various user exits (extension scripts)
|
||||||
################################################################################
|
################################################################################
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
for my $exit ( qw/init start tcclear started stop stopped clear refresh refreshed restored enabled disabled/ ) {
|
for my $exit ( qw/init start tcclear started stop stopped clear restored enabled disabled/ ) {
|
||||||
emit "\nrun_${exit}_exit() {";
|
emit "\nrun_${exit}_exit() {";
|
||||||
push_indent;
|
push_indent;
|
||||||
append_file $exit or emit 'true';
|
append_file $exit or emit 'true';
|
||||||
@@ -125,7 +125,7 @@ EOF
|
|||||||
emit '}';
|
emit '}';
|
||||||
}
|
}
|
||||||
|
|
||||||
emit <<'EOF';
|
emithd <<'EOF';
|
||||||
################################################################################
|
################################################################################
|
||||||
# End user exit functions
|
# End user exit functions
|
||||||
################################################################################
|
################################################################################
|
||||||
@@ -270,12 +270,11 @@ sub generate_script_2() {
|
|||||||
);
|
);
|
||||||
emit( 'chain_exists DOCKER-INGRESS && g_dockeringress=Yes' );
|
emit( 'chain_exists DOCKER-INGRESS && g_dockeringress=Yes' );
|
||||||
emit( 'chain_exists DOCKER-ISOLATION && g_dockernetwork=Yes' );
|
emit( 'chain_exists DOCKER-ISOLATION && g_dockernetwork=Yes' );
|
||||||
emit( '' );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pop_indent;
|
pop_indent;
|
||||||
|
|
||||||
emit "\n}\n"; # End of initialize()
|
emit "}\n"; # End of initialize()
|
||||||
|
|
||||||
emit( '' ,
|
emit( '' ,
|
||||||
'#' ,
|
'#' ,
|
||||||
@@ -312,10 +311,9 @@ sub generate_script_2() {
|
|||||||
push_indent;
|
push_indent;
|
||||||
|
|
||||||
if ( $global_variables == ( ALL_COMMANDS | NOT_RESTORE ) ) {
|
if ( $global_variables == ( ALL_COMMANDS | NOT_RESTORE ) ) {
|
||||||
|
verify_required_interfaces(0);
|
||||||
set_global_variables(0, 0);
|
set_global_variables(0, 0);
|
||||||
|
handle_optional_interfaces;
|
||||||
handle_optional_interfaces(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
emit ';;';
|
emit ';;';
|
||||||
@@ -327,19 +325,19 @@ sub generate_script_2() {
|
|||||||
push_indent;
|
push_indent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
verify_required_interfaces(1);
|
||||||
set_global_variables(1,1);
|
set_global_variables(1,1);
|
||||||
|
handle_optional_interfaces;
|
||||||
|
|
||||||
if ( $global_variables & NOT_RESTORE ) {
|
if ( $global_variables & NOT_RESTORE ) {
|
||||||
handle_optional_interfaces(1);
|
|
||||||
emit ';;';
|
emit ';;';
|
||||||
pop_indent;
|
pop_indent;
|
||||||
pop_indent;
|
pop_indent;
|
||||||
emit ( 'esac' );
|
emit ( 'esac' );
|
||||||
} else {
|
|
||||||
handle_optional_interfaces(1);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
emit( 'true' ) unless handle_optional_interfaces(1);
|
verify_required_interfaces(1);
|
||||||
|
emit( 'true' ) unless handle_optional_interfaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
pop_indent;
|
pop_indent;
|
||||||
@@ -358,7 +356,7 @@ sub generate_script_2() {
|
|||||||
# Note: This function is not called when $command eq 'check'. So it must have no side effects other
|
# Note: This function is not called when $command eq 'check'. So it must have no side effects other
|
||||||
# than those related to writing to the output script file.
|
# than those related to writing to the output script file.
|
||||||
#
|
#
|
||||||
sub generate_script_3($) {
|
sub generate_script_3() {
|
||||||
|
|
||||||
if ( $family == F_IPV4 ) {
|
if ( $family == F_IPV4 ) {
|
||||||
progress_message2 "Creating iptables-restore input...";
|
progress_message2 "Creating iptables-restore input...";
|
||||||
@@ -368,7 +366,6 @@ sub generate_script_3($) {
|
|||||||
|
|
||||||
create_netfilter_load( $test );
|
create_netfilter_load( $test );
|
||||||
create_arptables_load( $test ) if $have_arptables;
|
create_arptables_load( $test ) if $have_arptables;
|
||||||
create_chainlist_reload( $_[0] );
|
|
||||||
create_save_ipsets;
|
create_save_ipsets;
|
||||||
create_load_ipsets;
|
create_load_ipsets;
|
||||||
|
|
||||||
@@ -400,16 +397,10 @@ sub generate_script_3($) {
|
|||||||
emit 'load_kernel_modules Yes';
|
emit 'load_kernel_modules Yes';
|
||||||
}
|
}
|
||||||
|
|
||||||
emit '';
|
emit( '' ,
|
||||||
|
|
||||||
emit ( 'if [ "$COMMAND" = refresh ]; then' ,
|
|
||||||
' run_refresh_exit' ,
|
|
||||||
'else' ,
|
|
||||||
'run_init_exit',
|
'run_init_exit',
|
||||||
'fi',
|
'' ,
|
||||||
'' );
|
'load_ipsets' ,
|
||||||
|
|
||||||
emit( 'load_ipsets' ,
|
|
||||||
'' );
|
'' );
|
||||||
|
|
||||||
create_nfobjects;
|
create_nfobjects;
|
||||||
@@ -467,11 +458,6 @@ sub generate_script_3($) {
|
|||||||
dump_proxy_arp;
|
dump_proxy_arp;
|
||||||
emit_unindented '__EOF__';
|
emit_unindented '__EOF__';
|
||||||
|
|
||||||
emit( '',
|
|
||||||
'if [ "$COMMAND" != refresh ]; then' );
|
|
||||||
|
|
||||||
push_indent;
|
|
||||||
|
|
||||||
emit 'cat > ${VARDIR}/zones << __EOF__';
|
emit 'cat > ${VARDIR}/zones << __EOF__';
|
||||||
dump_zone_contents;
|
dump_zone_contents;
|
||||||
emit_unindented '__EOF__';
|
emit_unindented '__EOF__';
|
||||||
@@ -484,10 +470,6 @@ sub generate_script_3($) {
|
|||||||
dump_mark_layout;
|
dump_mark_layout;
|
||||||
emit_unindented '__EOF__';
|
emit_unindented '__EOF__';
|
||||||
|
|
||||||
pop_indent;
|
|
||||||
|
|
||||||
emit "fi\n";
|
|
||||||
|
|
||||||
emit '> ${VARDIR}/nat';
|
emit '> ${VARDIR}/nat';
|
||||||
|
|
||||||
add_addresses;
|
add_addresses;
|
||||||
@@ -526,29 +508,12 @@ sub generate_script_3($) {
|
|||||||
|
|
||||||
my $config_dir = $globals{CONFIGDIR};
|
my $config_dir = $globals{CONFIGDIR};
|
||||||
|
|
||||||
emit<<"EOF";
|
emithd <<"EOF";
|
||||||
set_state Started $config_dir
|
set_state Started $config_dir
|
||||||
run_restored_exit
|
run_restored_exit
|
||||||
elif [ \$COMMAND = refresh ]; then
|
else
|
||||||
chainlist_reload
|
setup_netfilter
|
||||||
EOF
|
EOF
|
||||||
push_indent;
|
|
||||||
setup_load_distribution;
|
|
||||||
setup_forwarding( $family , 0 );
|
|
||||||
pop_indent;
|
|
||||||
#
|
|
||||||
# Use a parameter list rather than 'here documents' to avoid an extra blank line
|
|
||||||
#
|
|
||||||
emit( ' run_refreshed_exit',
|
|
||||||
' do_iptables -N shorewall' );
|
|
||||||
|
|
||||||
emit( ' do_iptables -A shorewall -m recent --set --name %CURRENTTIME' ) if have_capability 'RECENT_MATCH';
|
|
||||||
|
|
||||||
emit( " set_state Started $config_dir",
|
|
||||||
' [ $0 = ${VARDIR}/firewall ] || cp -f $(my_pathname) ${VARDIR}/firewall',
|
|
||||||
'else',
|
|
||||||
' setup_netfilter' );
|
|
||||||
|
|
||||||
push_indent;
|
push_indent;
|
||||||
emit 'setup_arptables' if $have_arptables;
|
emit 'setup_arptables' if $have_arptables;
|
||||||
setup_load_distribution;
|
setup_load_distribution;
|
||||||
@@ -573,7 +538,7 @@ EOF
|
|||||||
' run_started_exit',
|
' run_started_exit',
|
||||||
"fi\n" );
|
"fi\n" );
|
||||||
|
|
||||||
emit<<'EOF';
|
emithd<<'EOF';
|
||||||
date > ${VARDIR}/restarted
|
date > ${VARDIR}/restarted
|
||||||
|
|
||||||
case $COMMAND in
|
case $COMMAND in
|
||||||
@@ -583,9 +548,6 @@ case $COMMAND in
|
|||||||
reload)
|
reload)
|
||||||
mylogger kern.info "$g_product reloaded"
|
mylogger kern.info "$g_product reloaded"
|
||||||
;;
|
;;
|
||||||
refresh)
|
|
||||||
mylogger kern.info "$g_product refreshed"
|
|
||||||
;;
|
|
||||||
restore)
|
restore)
|
||||||
mylogger kern.info "$g_product restored"
|
mylogger kern.info "$g_product restored"
|
||||||
;;
|
;;
|
||||||
@@ -620,8 +582,8 @@ sub compile_info_command() {
|
|||||||
#
|
#
|
||||||
sub compiler {
|
sub compiler {
|
||||||
|
|
||||||
my ( $scriptfilename, $directory, $verbosity, $timestamp , $debug, $chains , $log , $log_verbosity, $preview, $confess , $update , $annotate , $config_path, $shorewallrc , $shorewallrc1 , $inline ) =
|
my ( $scriptfilename, $directory, $verbosity, $timestamp , $debug, $log , $log_verbosity, $preview, $confess , $update , $annotate , $config_path, $shorewallrc , $shorewallrc1 ) =
|
||||||
( '', '', -1, '', 0, '', '', -1, 0, 0, 0, 0, , '' , '/usr/share/shorewall/shorewallrc', '' , 0 );
|
( '', '', -1, '', 0, '', -1, 0, 0, 0, 0, , '' , '/usr/share/shorewall/shorewallrc', '' );
|
||||||
|
|
||||||
$export = 0;
|
$export = 0;
|
||||||
$test = 0;
|
$test = 0;
|
||||||
@@ -650,7 +612,6 @@ sub compiler {
|
|||||||
timestamp => { store => \$timestamp, validate => \&validate_boolean } ,
|
timestamp => { store => \$timestamp, validate => \&validate_boolean } ,
|
||||||
debug => { store => \$debug, validate => \&validate_boolean } ,
|
debug => { store => \$debug, validate => \&validate_boolean } ,
|
||||||
export => { store => \$export , validate => \&validate_boolean } ,
|
export => { store => \$export , validate => \&validate_boolean } ,
|
||||||
chains => { store => \$chains },
|
|
||||||
log => { store => \$log },
|
log => { store => \$log },
|
||||||
log_verbosity => { store => \$log_verbosity, validate => \&validate_verbosity } ,
|
log_verbosity => { store => \$log_verbosity, validate => \&validate_verbosity } ,
|
||||||
test => { store => \$test },
|
test => { store => \$test },
|
||||||
@@ -658,7 +619,6 @@ sub compiler {
|
|||||||
confess => { store => \$confess, validate=> \&validate_boolean } ,
|
confess => { store => \$confess, validate=> \&validate_boolean } ,
|
||||||
update => { store => \$update, validate=> \&validate_boolean } ,
|
update => { store => \$update, validate=> \&validate_boolean } ,
|
||||||
annotate => { store => \$annotate, validate=> \&validate_boolean } ,
|
annotate => { store => \$annotate, validate=> \&validate_boolean } ,
|
||||||
inline => { store => \$inline, validate=> \&validate_boolean } ,
|
|
||||||
config_path => { store => \$config_path } ,
|
config_path => { store => \$config_path } ,
|
||||||
shorewallrc => { store => \$shorewallrc } ,
|
shorewallrc => { store => \$shorewallrc } ,
|
||||||
shorewallrc1 => { store => \$shorewallrc1 } ,
|
shorewallrc1 => { store => \$shorewallrc1 } ,
|
||||||
@@ -695,7 +655,7 @@ sub compiler {
|
|||||||
# S H O R E W A L L R C ,
|
# S H O R E W A L L R C ,
|
||||||
# S H O R E W A L L . C O N F A N D C A P A B I L I T I E S
|
# S H O R E W A L L . C O N F A N D C A P A B I L I T I E S
|
||||||
#
|
#
|
||||||
get_configuration( $export , $update , $annotate , $inline );
|
get_configuration( $export , $update , $annotate );
|
||||||
#
|
#
|
||||||
# Chain table initialization depends on shorewall.conf and capabilities. So it must be deferred until
|
# Chain table initialization depends on shorewall.conf and capabilities. So it must be deferred until
|
||||||
# now when shorewall.conf has been processed and the capabilities have been determined.
|
# now when shorewall.conf has been processed and the capabilities have been determined.
|
||||||
@@ -818,7 +778,7 @@ sub compiler {
|
|||||||
#
|
#
|
||||||
# Setup Masquerade/SNAT
|
# Setup Masquerade/SNAT
|
||||||
#
|
#
|
||||||
setup_snat( $update );
|
setup_snat;
|
||||||
#
|
#
|
||||||
# Setup Nat
|
# Setup Nat
|
||||||
#
|
#
|
||||||
@@ -899,7 +859,7 @@ sub compiler {
|
|||||||
|
|
||||||
optimize_level0;
|
optimize_level0;
|
||||||
|
|
||||||
if ( ( my $optimize = $config{OPTIMIZE} ) & 0x1E ) {
|
if ( ( my $optimize = $config{OPTIMIZE} ) & OPTIMIZE_MASK ) {
|
||||||
progress_message2 'Optimizing Ruleset...';
|
progress_message2 'Optimizing Ruleset...';
|
||||||
#
|
#
|
||||||
# Optimize Policy Chains
|
# Optimize Policy Chains
|
||||||
@@ -921,7 +881,7 @@ sub compiler {
|
|||||||
# N E T F I L T E R L O A D
|
# N E T F I L T E R L O A D
|
||||||
# (Produces setup_netfilter(), setup_arptables(), chainlist_reload() and define_firewall() )
|
# (Produces setup_netfilter(), setup_arptables(), chainlist_reload() and define_firewall() )
|
||||||
#
|
#
|
||||||
generate_script_3( $chains );
|
generate_script_3();
|
||||||
#
|
#
|
||||||
# We must reinitialize Shorewall::Chains before generating the iptables-restore input
|
# We must reinitialize Shorewall::Chains before generating the iptables-restore input
|
||||||
# for stopping the firewall
|
# for stopping the firewall
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Config.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Config.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2018 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -30,6 +30,84 @@
|
|||||||
# into those files (emitters) and finalizing those files (renaming
|
# into those files (emitters) and finalizing those files (renaming
|
||||||
# them to their final name and setting their mode appropriately).
|
# them to their final name and setting their mode appropriately).
|
||||||
#
|
#
|
||||||
|
# A significant portion of this module is dedicated to the preprocessor:
|
||||||
|
#
|
||||||
|
# process_compiler_directive() - processes compiler directives
|
||||||
|
#
|
||||||
|
# embedded_shell() - handles embedded shell scripting
|
||||||
|
#
|
||||||
|
# embedded_perl() - handles embedded perl scripting
|
||||||
|
#
|
||||||
|
# read_a_line() - Reads the next configuration file record to
|
||||||
|
# be passed to the function processing the file.
|
||||||
|
#
|
||||||
|
# - Detects compiler directives and passes then to
|
||||||
|
# process_compiler_directive() for handling.
|
||||||
|
#
|
||||||
|
# - Handles line continuation
|
||||||
|
#
|
||||||
|
# - Invokes a callback when the first (concatinated) non-directive
|
||||||
|
# record is read from a file.
|
||||||
|
#
|
||||||
|
# - Conditionally expands variables.
|
||||||
|
#
|
||||||
|
# - Conditionally detects embedded Shell and Perl and passes them
|
||||||
|
# off to embedded_shell() and embedded_perl() respectively.
|
||||||
|
#
|
||||||
|
# - Conditionally detects and handles [?}INCLUDE directives.
|
||||||
|
#
|
||||||
|
# - Conditionally detects and handles ?SECTION directives.
|
||||||
|
# File processing functions can supply a callback to be
|
||||||
|
# called during this processing.
|
||||||
|
#
|
||||||
|
# File processing routines may need to open a second (third, fourth, ...)
|
||||||
|
# file while processing the main file (macro and/or action files). Two
|
||||||
|
# functions are provided to make that possible:
|
||||||
|
#
|
||||||
|
# push_open() - open a file while leaving the current file open.
|
||||||
|
#
|
||||||
|
# pop_open() - close the current file, and make the previous
|
||||||
|
# file (if any) the current one.
|
||||||
|
#
|
||||||
|
# Because this module expands variables, it must be aware of action
|
||||||
|
# parameters.
|
||||||
|
#
|
||||||
|
# push_action_params() - populates the %actparams hash and
|
||||||
|
# returns a reference to the previous
|
||||||
|
# contents of that hash. The caller is
|
||||||
|
# expected to store those contents locally.
|
||||||
|
#
|
||||||
|
# pop_action_params() - Restores the %actparams hash from
|
||||||
|
# the reference returned by
|
||||||
|
# push_action_params().
|
||||||
|
#
|
||||||
|
# The following routines are provided for INLINE PERL within
|
||||||
|
# action bodies:
|
||||||
|
#
|
||||||
|
# default_action_params() - called to fill in omitted
|
||||||
|
# arguments when a DEFAULTS
|
||||||
|
# line is encountered.
|
||||||
|
#
|
||||||
|
# get_action_params() - returns an array of arguments.
|
||||||
|
#
|
||||||
|
# setup_audit_action() - helper for A_* actions.
|
||||||
|
#
|
||||||
|
# get_action_logging() - returns log level and tag
|
||||||
|
# from the action's invocation.
|
||||||
|
#
|
||||||
|
# get_action_chain_name() - returns chain name.
|
||||||
|
#
|
||||||
|
# set_action_name_to_caller() - replace chain name
|
||||||
|
# with that of invoking
|
||||||
|
# chain for logging purposes.
|
||||||
|
#
|
||||||
|
# set_action_disposition() - set the current action
|
||||||
|
# disposition for logging purposes.
|
||||||
|
#
|
||||||
|
# get_action_disposition() - get the current action disposition.
|
||||||
|
#
|
||||||
|
# set_action_param() - set the value of an argument.
|
||||||
|
#
|
||||||
package Shorewall::Config;
|
package Shorewall::Config;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
@@ -111,6 +189,7 @@ our %EXPORT_TAGS = ( internal => [ qw( create_temp_script
|
|||||||
in_hex8
|
in_hex8
|
||||||
in_hexp
|
in_hexp
|
||||||
emit
|
emit
|
||||||
|
emithd
|
||||||
emitstd
|
emitstd
|
||||||
emit_unindented
|
emit_unindented
|
||||||
save_progress_message
|
save_progress_message
|
||||||
@@ -224,10 +303,10 @@ our %EXPORT_TAGS = ( internal => [ qw( create_temp_script
|
|||||||
DO_SECTION
|
DO_SECTION
|
||||||
NORMAL_READ
|
NORMAL_READ
|
||||||
|
|
||||||
|
OPTIMIZE_MASK
|
||||||
OPTIMIZE_POLICY_MASK
|
OPTIMIZE_POLICY_MASK
|
||||||
OPTIMIZE_POLICY_MASK2n4
|
OPTIMIZE_POLICY_MASK2n4
|
||||||
OPTIMIZE_RULESET_MASK
|
OPTIMIZE_RULESET_MASK
|
||||||
OPTIMIZE_USE_FIRST
|
|
||||||
OPTIMIZE_ALL
|
OPTIMIZE_ALL
|
||||||
) , ] ,
|
) , ] ,
|
||||||
protocols => [ qw (
|
protocols => [ qw (
|
||||||
@@ -335,7 +414,6 @@ our %capdesc = ( NAT_ENABLED => 'NAT',
|
|||||||
'Old conntrack match syntax',
|
'Old conntrack match syntax',
|
||||||
NEW_CONNTRACK_MATCH =>
|
NEW_CONNTRACK_MATCH =>
|
||||||
'Extended Connection Tracking Match',
|
'Extended Connection Tracking Match',
|
||||||
USEPKTTYPE => 'Packet Type Match',
|
|
||||||
POLICY_MATCH => 'Policy Match',
|
POLICY_MATCH => 'Policy Match',
|
||||||
PHYSDEV_MATCH => 'Physdev Match',
|
PHYSDEV_MATCH => 'Physdev Match',
|
||||||
PHYSDEV_BRIDGE => 'Physdev-is-bridged support',
|
PHYSDEV_BRIDGE => 'Physdev-is-bridged support',
|
||||||
@@ -418,6 +496,10 @@ our %capdesc = ( NAT_ENABLED => 'NAT',
|
|||||||
NFLOG_SIZE => '--nflog-size support',
|
NFLOG_SIZE => '--nflog-size support',
|
||||||
RESTORE_WAIT_OPTION
|
RESTORE_WAIT_OPTION
|
||||||
=> 'iptables-restore --wait option',
|
=> 'iptables-restore --wait option',
|
||||||
|
NAT_INPUT_CHAIN => 'INPUT chain in NAT table',
|
||||||
|
#
|
||||||
|
# Helpers
|
||||||
|
#
|
||||||
AMANDA_HELPER => 'Amanda Helper',
|
AMANDA_HELPER => 'Amanda Helper',
|
||||||
FTP_HELPER => 'FTP Helper',
|
FTP_HELPER => 'FTP Helper',
|
||||||
FTP0_HELPER => 'FTP-0 Helper',
|
FTP0_HELPER => 'FTP-0 Helper',
|
||||||
@@ -465,9 +547,8 @@ use constant {
|
|||||||
OPTIMIZE_POLICY_MASK => 0x02 , # Call optimize_policy_chains()
|
OPTIMIZE_POLICY_MASK => 0x02 , # Call optimize_policy_chains()
|
||||||
OPTIMIZE_POLICY_MASK2n4 => 0x06 ,
|
OPTIMIZE_POLICY_MASK2n4 => 0x06 ,
|
||||||
OPTIMIZE_RULESET_MASK => 0x1C , # Call optimize_ruleset()
|
OPTIMIZE_RULESET_MASK => 0x1C , # Call optimize_ruleset()
|
||||||
|
OPTIMIZE_MASK => 0x1E , # Do optimizations beyond level 1
|
||||||
OPTIMIZE_ALL => 0x1F , # Maximum value for documented categories.
|
OPTIMIZE_ALL => 0x1F , # Maximum value for documented categories.
|
||||||
|
|
||||||
OPTIMIZE_USE_FIRST => 0x1000 # Always use interface 'first' chains -- undocumented
|
|
||||||
};
|
};
|
||||||
|
|
||||||
our %helpers = ( amanda => UDP,
|
our %helpers = ( amanda => UDP,
|
||||||
@@ -483,6 +564,8 @@ our %helpers = ( amanda => UDP,
|
|||||||
tftp => UDP,
|
tftp => UDP,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
use constant { INCLUDE_LIMIT => 20 };
|
||||||
|
|
||||||
our %helpers_map;
|
our %helpers_map;
|
||||||
|
|
||||||
our %helpers_names;
|
our %helpers_names;
|
||||||
@@ -512,8 +595,6 @@ our %config_files = ( #accounting => 1,
|
|||||||
policy => 1,
|
policy => 1,
|
||||||
providers => 1,
|
providers => 1,
|
||||||
proxyarp => 1,
|
proxyarp => 1,
|
||||||
refresh => 1,
|
|
||||||
refreshed => 1,
|
|
||||||
restored => 1,
|
restored => 1,
|
||||||
rawnat => 1,
|
rawnat => 1,
|
||||||
route_rules => 1,
|
route_rules => 1,
|
||||||
@@ -588,7 +669,6 @@ our $comments_allowed; # True if [?]COMMENT is allowed in the current file
|
|||||||
our $nocomment; # When true, ignore [?]COMMENT in the current file
|
our $nocomment; # When true, ignore [?]COMMENT in the current file
|
||||||
our $sr_comment; # When true, $comment should only be applied to the current rule
|
our $sr_comment; # When true, $comment should only be applied to the current rule
|
||||||
our $warningcount; # Used to suppress duplicate warnings about missing COMMENT support
|
our $warningcount; # Used to suppress duplicate warnings about missing COMMENT support
|
||||||
our $checkinline; # The -i option to check/compile/etc.
|
|
||||||
our $directive_callback; # Function to call in compiler_directive
|
our $directive_callback; # Function to call in compiler_directive
|
||||||
|
|
||||||
our $shorewall_dir; # Shorewall Directory; if non-empty, search here first for files.
|
our $shorewall_dir; # Shorewall Directory; if non-empty, search here first for files.
|
||||||
@@ -597,6 +677,7 @@ our $debug; # Global debugging flag
|
|||||||
our $confess; # If true, use Carp to report errors with stack trace.
|
our $confess; # If true, use Carp to report errors with stack trace.
|
||||||
|
|
||||||
our $family; # Protocol family (4 or 6)
|
our $family; # Protocol family (4 or 6)
|
||||||
|
our $export; # True when compiling for export
|
||||||
our $toolname; # Name of the tool to use (iptables or iptables6)
|
our $toolname; # Name of the tool to use (iptables or iptables6)
|
||||||
our $toolNAME; # Tool name in CAPS
|
our $toolNAME; # Tool name in CAPS
|
||||||
our $product; # Name of product that will run the generated script
|
our $product; # Name of product that will run the generated script
|
||||||
@@ -630,13 +711,13 @@ our %validlevels; # Valid log levels.
|
|||||||
# Deprecated options with their default values
|
# Deprecated options with their default values
|
||||||
#
|
#
|
||||||
our %deprecated = (
|
our %deprecated = (
|
||||||
LEGACY_RESTART => 'no'
|
LEGACY_RESTART => 'no' ,
|
||||||
);
|
);
|
||||||
#
|
#
|
||||||
# Deprecated options that are eliminated via update
|
# Deprecated options that are eliminated via update
|
||||||
#
|
#
|
||||||
our %converted = (
|
our %converted = (
|
||||||
LEGACY_RESTART => 1
|
LEGACY_RESTART => 1 ,
|
||||||
);
|
);
|
||||||
#
|
#
|
||||||
# Eliminated options
|
# Eliminated options
|
||||||
@@ -651,6 +732,8 @@ our %eliminated = ( LOGRATE => 1,
|
|||||||
BLACKLISTNEWONLY => 1,
|
BLACKLISTNEWONLY => 1,
|
||||||
CHAIN_SCRIPTS => 1,
|
CHAIN_SCRIPTS => 1,
|
||||||
MODULE_SUFFIX => 1,
|
MODULE_SUFFIX => 1,
|
||||||
|
MAPOLDACTIONS => 1,
|
||||||
|
INLINE_MATCHES => 1,
|
||||||
);
|
);
|
||||||
#
|
#
|
||||||
# Variables involved in ?IF, ?ELSE ?ENDIF processing
|
# Variables involved in ?IF, ?ELSE ?ENDIF processing
|
||||||
@@ -710,8 +793,8 @@ sub add_variables( \% );
|
|||||||
# 2. The compiler can run multiple times in the same process so it has to be
|
# 2. The compiler can run multiple times in the same process so it has to be
|
||||||
# able to re-initialize its dependent modules' state.
|
# able to re-initialize its dependent modules' state.
|
||||||
#
|
#
|
||||||
sub initialize( $;$$) {
|
sub initialize( $;$$$) {
|
||||||
( $family, my ( $shorewallrc, $shorewallrc1 ) ) = @_;
|
( $family, $export, my ( $shorewallrc, $shorewallrc1 ) ) = @_;
|
||||||
|
|
||||||
if ( $family == F_IPV4 ) {
|
if ( $family == F_IPV4 ) {
|
||||||
( $product, $Product, $toolname, $toolNAME ) = qw( shorewall Shorewall iptables IPTABLES );
|
( $product, $Product, $toolname, $toolNAME ) = qw( shorewall Shorewall iptables IPTABLES );
|
||||||
@@ -755,8 +838,8 @@ sub initialize( $;$$) {
|
|||||||
TC_SCRIPT => '',
|
TC_SCRIPT => '',
|
||||||
EXPORT => 0,
|
EXPORT => 0,
|
||||||
KLUDGEFREE => '',
|
KLUDGEFREE => '',
|
||||||
VERSION => "5.1.8-Beta1",
|
VERSION => '5.2.0-Beta1',
|
||||||
CAPVERSION => 50106 ,
|
CAPVERSION => 50200 ,
|
||||||
BLACKLIST_LOG_TAG => '',
|
BLACKLIST_LOG_TAG => '',
|
||||||
RELATED_LOG_TAG => '',
|
RELATED_LOG_TAG => '',
|
||||||
MACLIST_LOG_TAG => '',
|
MACLIST_LOG_TAG => '',
|
||||||
@@ -800,6 +883,7 @@ sub initialize( $;$$) {
|
|||||||
UNTRACKED_LOG_LEVEL => undef,
|
UNTRACKED_LOG_LEVEL => undef,
|
||||||
LOG_BACKEND => undef,
|
LOG_BACKEND => undef,
|
||||||
LOG_LEVEL => undef,
|
LOG_LEVEL => undef,
|
||||||
|
LOG_ZONE => undef,
|
||||||
#
|
#
|
||||||
# Location of Files
|
# Location of Files
|
||||||
#
|
#
|
||||||
@@ -858,7 +942,6 @@ sub initialize( $;$$) {
|
|||||||
MACLIST_TTL => undef,
|
MACLIST_TTL => undef,
|
||||||
SAVE_IPSETS => undef,
|
SAVE_IPSETS => undef,
|
||||||
SAVE_ARPTABLES => undef,
|
SAVE_ARPTABLES => undef,
|
||||||
MAPOLDACTIONS => undef,
|
|
||||||
FASTACCEPT => undef,
|
FASTACCEPT => undef,
|
||||||
IMPLICIT_CONTINUE => undef,
|
IMPLICIT_CONTINUE => undef,
|
||||||
IPSET_WARNINGS => undef,
|
IPSET_WARNINGS => undef,
|
||||||
@@ -901,7 +984,6 @@ sub initialize( $;$$) {
|
|||||||
USE_RT_NAMES => undef,
|
USE_RT_NAMES => undef,
|
||||||
TRACK_RULES => undef,
|
TRACK_RULES => undef,
|
||||||
REJECT_ACTION => undef,
|
REJECT_ACTION => undef,
|
||||||
INLINE_MATCHES => undef,
|
|
||||||
BASIC_FILTERS => undef,
|
BASIC_FILTERS => undef,
|
||||||
WORKAROUNDS => undef ,
|
WORKAROUNDS => undef ,
|
||||||
LEGACY_RESTART => undef ,
|
LEGACY_RESTART => undef ,
|
||||||
@@ -915,6 +997,7 @@ sub initialize( $;$$) {
|
|||||||
BALANCE_PROVIDERS => undef ,
|
BALANCE_PROVIDERS => undef ,
|
||||||
PERL_HASH_SEED => undef ,
|
PERL_HASH_SEED => undef ,
|
||||||
USE_NFLOG_SIZE => undef ,
|
USE_NFLOG_SIZE => undef ,
|
||||||
|
RENAME_COMBINED => undef ,
|
||||||
#
|
#
|
||||||
# Packet Disposition
|
# Packet Disposition
|
||||||
#
|
#
|
||||||
@@ -972,7 +1055,6 @@ sub initialize( $;$$) {
|
|||||||
CONNTRACK_MATCH => undef,
|
CONNTRACK_MATCH => undef,
|
||||||
NEW_CONNTRACK_MATCH => undef,
|
NEW_CONNTRACK_MATCH => undef,
|
||||||
OLD_CONNTRACK_MATCH => undef,
|
OLD_CONNTRACK_MATCH => undef,
|
||||||
USEPKTTYPE => undef,
|
|
||||||
POLICY_MATCH => undef,
|
POLICY_MATCH => undef,
|
||||||
PHYSDEV_MATCH => undef,
|
PHYSDEV_MATCH => undef,
|
||||||
PHYSDEV_BRIDGE => undef,
|
PHYSDEV_BRIDGE => undef,
|
||||||
@@ -1050,6 +1132,7 @@ sub initialize( $;$$) {
|
|||||||
NETMAP_TARGET => undef,
|
NETMAP_TARGET => undef,
|
||||||
NFLOG_SIZE => undef,
|
NFLOG_SIZE => undef,
|
||||||
RESTORE_WAIT_OPTION => undef,
|
RESTORE_WAIT_OPTION => undef,
|
||||||
|
NAT_INPUT_CHAIN => undef,
|
||||||
|
|
||||||
AMANDA_HELPER => undef,
|
AMANDA_HELPER => undef,
|
||||||
FTP_HELPER => undef,
|
FTP_HELPER => undef,
|
||||||
@@ -1609,6 +1692,7 @@ sub emit {
|
|||||||
$line =~ s/^\n// if $lastlineblank;
|
$line =~ s/^\n// if $lastlineblank;
|
||||||
$line =~ s/^/$indent/gm if $indent;
|
$line =~ s/^/$indent/gm if $indent;
|
||||||
$line =~ s/ /\t/gm;
|
$line =~ s/ /\t/gm;
|
||||||
|
$line =~ s/[ \t]+\n/\n/gm;
|
||||||
print $script "$line\n" if $script;
|
print $script "$line\n" if $script;
|
||||||
$lastlineblank = ( substr( $line, -1, 1 ) eq "\n" );
|
$lastlineblank = ( substr( $line, -1, 1 ) eq "\n" );
|
||||||
|
|
||||||
@@ -1629,6 +1713,15 @@ sub emit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Used to emit a 'here documents' string without introducing an unwanted blank line at the end
|
||||||
|
#
|
||||||
|
sub emithd( $ ) {
|
||||||
|
my ( $line ) = @_; #make writable
|
||||||
|
chomp $line;
|
||||||
|
emit $line;
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Version of emit() that writes to standard out unconditionally
|
# Version of emit() that writes to standard out unconditionally
|
||||||
#
|
#
|
||||||
@@ -1639,6 +1732,7 @@ sub emitstd {
|
|||||||
$line =~ s/^\n// if $lastlineblank;
|
$line =~ s/^\n// if $lastlineblank;
|
||||||
$line =~ s/^/$indent/gm if $indent;
|
$line =~ s/^/$indent/gm if $indent;
|
||||||
$line =~ s/ /\t/gm;
|
$line =~ s/ /\t/gm;
|
||||||
|
$line =~ s/[ \t]+\n/\n/gm;
|
||||||
print "$line\n";
|
print "$line\n";
|
||||||
$lastlineblank = ( substr( $line, -1, 1 ) eq "\n" );
|
$lastlineblank = ( substr( $line, -1, 1 ) eq "\n" );
|
||||||
} else {
|
} else {
|
||||||
@@ -2301,8 +2395,6 @@ sub clear_comment();
|
|||||||
sub split_line2( $$;$$$ ) {
|
sub split_line2( $$;$$$ ) {
|
||||||
my ( $description, $columnsref, $nopad, $maxcolumns, $inline ) = @_;
|
my ( $description, $columnsref, $nopad, $maxcolumns, $inline ) = @_;
|
||||||
|
|
||||||
my $inlinematches = $config{INLINE_MATCHES};
|
|
||||||
|
|
||||||
my ( $columns, $pairs, $rest );
|
my ( $columns, $pairs, $rest );
|
||||||
|
|
||||||
my $currline = $currentline;
|
my $currline = $currentline;
|
||||||
@@ -2325,16 +2417,20 @@ sub split_line2( $$;$$$ ) {
|
|||||||
fatal_error "Only one set of double semicolons (';;') allowed on a line" if defined $rest;
|
fatal_error "Only one set of double semicolons (';;') allowed on a line" if defined $rest;
|
||||||
|
|
||||||
$currline = $columns;
|
$currline = $columns;
|
||||||
|
#
|
||||||
|
# Remove trailing white space
|
||||||
|
#
|
||||||
|
$currline =~ s/\s*$//;
|
||||||
|
|
||||||
$inline_matches = $pairs;
|
$inline_matches = $pairs;
|
||||||
#
|
#
|
||||||
# Don't look for matches below
|
# Don't look for matches below
|
||||||
#
|
#
|
||||||
$inline = $inlinematches = '';
|
$inline = '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
# Next, see if there is a semicolon on the line; what follows will be column/value pairs or raw iptables input
|
# Next, see if there is a single semicolon on the line; what follows will be column/value pairs
|
||||||
#
|
#
|
||||||
( $columns, $pairs, $rest ) = split( ';', $currline );
|
( $columns, $pairs, $rest ) = split( ';', $currline );
|
||||||
|
|
||||||
@@ -2343,42 +2439,6 @@ sub split_line2( $$;$$$ ) {
|
|||||||
# Found it -- be sure there wasn't more than one.
|
# Found it -- be sure there wasn't more than one.
|
||||||
#
|
#
|
||||||
fatal_error "Only one semicolon (';') allowed on a line" if defined $rest;
|
fatal_error "Only one semicolon (';') allowed on a line" if defined $rest;
|
||||||
|
|
||||||
if ( $inlinematches ) {
|
|
||||||
fatal_error "The $description does not support inline matches (INLINE_MATCHES=Yes)" unless $inline;
|
|
||||||
|
|
||||||
$inline_matches = $pairs;
|
|
||||||
|
|
||||||
if ( $columns =~ /^(\s*|.*[^&@%])\{(.*)\}\s*$/ ) {
|
|
||||||
#
|
|
||||||
# Pairs are enclosed in curly brackets.
|
|
||||||
#
|
|
||||||
$columns = $1;
|
|
||||||
$pairs = $2;
|
|
||||||
} else {
|
|
||||||
$pairs = '';
|
|
||||||
}
|
|
||||||
} elsif ( $inline ) {
|
|
||||||
#
|
|
||||||
# This file supports INLINE or IPTABLES
|
|
||||||
#
|
|
||||||
if ( $currline =~ /^\s*INLINE(?:\(.*\)(:.*)?|:.*)?\s/ || $currline =~ /^\s*IP6?TABLES(?:\(.*\)|:.*)?\s/ ) {
|
|
||||||
$inline_matches = $pairs;
|
|
||||||
|
|
||||||
if ( $columns =~ /^(\s*|.*[^&@%])\{(.*)\}\s*$/ ) {
|
|
||||||
#
|
|
||||||
# Pairs are enclosed in curly brackets.
|
|
||||||
#
|
|
||||||
$columns = $1;
|
|
||||||
$pairs = $2;
|
|
||||||
} else {
|
|
||||||
warning_message "This entry needs to be changed before INLINE_MATCHES can be set to Yes" if $checkinline;
|
|
||||||
$pairs = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} elsif ( $checkinline ) {
|
|
||||||
warning_message "This entry needs to be changed before INLINE_MATCHES can be set to Yes";
|
|
||||||
}
|
|
||||||
} elsif ( $currline =~ /^(\s*|.*[^&@%])\{(.*)\}$/ ) {
|
} elsif ( $currline =~ /^(\s*|.*[^&@%])\{(.*)\}$/ ) {
|
||||||
#
|
#
|
||||||
# Pairs are enclosed in curly brackets.
|
# Pairs are enclosed in curly brackets.
|
||||||
@@ -2469,6 +2529,10 @@ sub split_rawline2( $$;$$$ ) {
|
|||||||
# Delete trailing comment
|
# Delete trailing comment
|
||||||
#
|
#
|
||||||
$currentline =~ s/\s*#.*//;
|
$currentline =~ s/\s*#.*//;
|
||||||
|
#
|
||||||
|
# Convert ${...} to $...
|
||||||
|
#
|
||||||
|
$currentline =~ s/\$\{(.*?)\}/\$$1/g;
|
||||||
|
|
||||||
my @result = &split_line2( @_ );
|
my @result = &split_line2( @_ );
|
||||||
|
|
||||||
@@ -3262,7 +3326,7 @@ sub copy1( $ ) {
|
|||||||
my @line = split / /;
|
my @line = split / /;
|
||||||
|
|
||||||
fatal_error "Invalid INCLUDE command" if @line != 2;
|
fatal_error "Invalid INCLUDE command" if @line != 2;
|
||||||
fatal_error "INCLUDEs nested too deeply" if @includestack >= 4;
|
fatal_error "INCLUDEs nested too deeply" if @includestack >= INCLUDE_LIMIT;
|
||||||
|
|
||||||
my $filename = find_file $line[1];
|
my $filename = find_file $line[1];
|
||||||
|
|
||||||
@@ -3472,7 +3536,7 @@ sub read_a_line($);
|
|||||||
sub embedded_shell( $ ) {
|
sub embedded_shell( $ ) {
|
||||||
my $multiline = shift;
|
my $multiline = shift;
|
||||||
|
|
||||||
fatal_error "INCLUDEs nested too deeply" if @includestack >= 4;
|
fatal_error "INCLUDEs nested too deeply" if @includestack >= INCLUDE_LIMIT;
|
||||||
my ( $command, $linenumber ) = ( "/bin/sh -c '$currentline", $currentlinenumber );
|
my ( $command, $linenumber ) = ( "/bin/sh -c '$currentline", $currentlinenumber );
|
||||||
|
|
||||||
$directive_callback->( 'SHELL', $currentline ) if $directive_callback;
|
$directive_callback->( 'SHELL', $currentline ) if $directive_callback;
|
||||||
@@ -3559,7 +3623,7 @@ sub embedded_perl( $ ) {
|
|||||||
$embedded--;
|
$embedded--;
|
||||||
|
|
||||||
if ( $perlscript ) {
|
if ( $perlscript ) {
|
||||||
fatal_error "INCLUDEs nested too deeply" if @includestack >= 4;
|
fatal_error "INCLUDEs nested too deeply" if @includestack >= INCLUDE_LIMIT;
|
||||||
|
|
||||||
assert( close $perlscript );
|
assert( close $perlscript );
|
||||||
|
|
||||||
@@ -3913,7 +3977,7 @@ sub read_a_line($) {
|
|||||||
my @line = split ' ', $currentline;
|
my @line = split ' ', $currentline;
|
||||||
|
|
||||||
fatal_error "Invalid INCLUDE command" if @line != 2;
|
fatal_error "Invalid INCLUDE command" if @line != 2;
|
||||||
fatal_error "INCLUDEs/Scripts nested too deeply" if @includestack >= 4;
|
fatal_error "INCLUDEs/Scripts nested too deeply" if @includestack >= INCLUDE_LIMIT;
|
||||||
|
|
||||||
my $filename = find_file $line[1];
|
my $filename = find_file $line[1];
|
||||||
|
|
||||||
@@ -4367,6 +4431,12 @@ sub Nat_Enabled() {
|
|||||||
qt1( "$iptables $iptablesw -t nat -L -n" );
|
qt1( "$iptables $iptablesw -t nat -L -n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub Nat_Input_Chain {
|
||||||
|
have_capability( 'NAT_ENABLED' ) || return '';
|
||||||
|
|
||||||
|
qt1( "$iptables $iptablesw -t nat -L INPUT -n" );
|
||||||
|
}
|
||||||
|
|
||||||
sub Persistent_Snat() {
|
sub Persistent_Snat() {
|
||||||
have_capability( 'NAT_ENABLED' ) || return '';
|
have_capability( 'NAT_ENABLED' ) || return '';
|
||||||
|
|
||||||
@@ -4690,10 +4760,6 @@ sub IPSET_V5() {
|
|||||||
$result;
|
$result;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub Usepkttype() {
|
|
||||||
qt1( "$iptables $iptablesw -A $sillyname -m pkttype --pkt-type broadcast -j ACCEPT" );
|
|
||||||
}
|
|
||||||
|
|
||||||
sub Addrtype() {
|
sub Addrtype() {
|
||||||
qt1( "$iptables $iptablesw -A $sillyname -m addrtype --src-type BROADCAST -j ACCEPT" );
|
qt1( "$iptables $iptablesw -A $sillyname -m addrtype --src-type BROADCAST -j ACCEPT" );
|
||||||
}
|
}
|
||||||
@@ -5012,6 +5078,7 @@ our %detect_capability =
|
|||||||
MASQUERADE_TGT => \&Masquerade_Tgt,
|
MASQUERADE_TGT => \&Masquerade_Tgt,
|
||||||
MULTIPORT => \&Multiport,
|
MULTIPORT => \&Multiport,
|
||||||
NAT_ENABLED => \&Nat_Enabled,
|
NAT_ENABLED => \&Nat_Enabled,
|
||||||
|
NAT_INPUT_CHAIN => \&Nat_Input_Chain,
|
||||||
NETBIOS_NS_HELPER => \&Netbios_ns_Helper,
|
NETBIOS_NS_HELPER => \&Netbios_ns_Helper,
|
||||||
NETMAP_TARGET => \&Netmap_Target,
|
NETMAP_TARGET => \&Netmap_Target,
|
||||||
NEW_CONNTRACK_MATCH => \&New_Conntrack_Match,
|
NEW_CONNTRACK_MATCH => \&New_Conntrack_Match,
|
||||||
@@ -5048,7 +5115,6 @@ our %detect_capability =
|
|||||||
TIME_MATCH => \&Time_Match,
|
TIME_MATCH => \&Time_Match,
|
||||||
TPROXY_TARGET => \&Tproxy_Target,
|
TPROXY_TARGET => \&Tproxy_Target,
|
||||||
UDPLITEREDIRECT => \&Udpliteredirect,
|
UDPLITEREDIRECT => \&Udpliteredirect,
|
||||||
USEPKTTYPE => \&Usepkttype,
|
|
||||||
XCONNMARK_MATCH => \&Xconnmark_Match,
|
XCONNMARK_MATCH => \&Xconnmark_Match,
|
||||||
XCONNMARK => \&Xconnmark,
|
XCONNMARK => \&Xconnmark,
|
||||||
XMARK => \&Xmark,
|
XMARK => \&Xmark,
|
||||||
@@ -5111,6 +5177,7 @@ sub determine_capabilities() {
|
|||||||
#
|
#
|
||||||
$capabilities{NAT_ENABLED} = detect_capability( 'NAT_ENABLED' );
|
$capabilities{NAT_ENABLED} = detect_capability( 'NAT_ENABLED' );
|
||||||
$capabilities{PERSISTENT_SNAT} = detect_capability( 'PERSISTENT_SNAT' );
|
$capabilities{PERSISTENT_SNAT} = detect_capability( 'PERSISTENT_SNAT' );
|
||||||
|
$capabilities{NAT_INPUT_CHAIN} = detect_capability( 'NAT_INPUT_CHAIN' );
|
||||||
$capabilities{MANGLE_ENABLED} = detect_capability( 'MANGLE_ENABLED' );
|
$capabilities{MANGLE_ENABLED} = detect_capability( 'MANGLE_ENABLED' );
|
||||||
|
|
||||||
if ( $capabilities{CONNTRACK_MATCH} = detect_capability( 'CONNTRACK_MATCH' ) ) {
|
if ( $capabilities{CONNTRACK_MATCH} = detect_capability( 'CONNTRACK_MATCH' ) ) {
|
||||||
@@ -5158,7 +5225,6 @@ sub determine_capabilities() {
|
|||||||
$capabilities{MANGLE_FORWARD} = detect_capability( 'MANGLE_FORWARD' );
|
$capabilities{MANGLE_FORWARD} = detect_capability( 'MANGLE_FORWARD' );
|
||||||
$capabilities{RAW_TABLE} = detect_capability( 'RAW_TABLE' );
|
$capabilities{RAW_TABLE} = detect_capability( 'RAW_TABLE' );
|
||||||
$capabilities{IPSET_MATCH} = detect_capability( 'IPSET_MATCH' );
|
$capabilities{IPSET_MATCH} = detect_capability( 'IPSET_MATCH' );
|
||||||
$capabilities{USEPKTTYPE} = detect_capability( 'USEPKTTYPE' );
|
|
||||||
$capabilities{ADDRTYPE} = detect_capability( 'ADDRTYPE' );
|
$capabilities{ADDRTYPE} = detect_capability( 'ADDRTYPE' );
|
||||||
$capabilities{TCPMSS_MATCH} = detect_capability( 'TCPMSS_MATCH' );
|
$capabilities{TCPMSS_MATCH} = detect_capability( 'TCPMSS_MATCH' );
|
||||||
$capabilities{NFQUEUE_TARGET} = detect_capability( 'NFQUEUE_TARGET' );
|
$capabilities{NFQUEUE_TARGET} = detect_capability( 'NFQUEUE_TARGET' );
|
||||||
@@ -5250,7 +5316,13 @@ sub ensure_config_path() {
|
|||||||
fatal_error "CONFIG_PATH not found in $f" unless $config{CONFIG_PATH};
|
fatal_error "CONFIG_PATH not found in $f" unless $config{CONFIG_PATH};
|
||||||
}
|
}
|
||||||
|
|
||||||
@config_path = split /:/, $config{CONFIG_PATH};
|
my $path = $config{CONFIG_PATH};
|
||||||
|
|
||||||
|
my $chop = ( $path =~ s/^:// );
|
||||||
|
|
||||||
|
@config_path = split /:/, $path;
|
||||||
|
|
||||||
|
shift @config_path if $chop && ( $export || $> != 0 );
|
||||||
|
|
||||||
#
|
#
|
||||||
# To accomodate Cygwin-based compilation, we have separate directories for files whose names
|
# To accomodate Cygwin-based compilation, we have separate directories for files whose names
|
||||||
@@ -5391,6 +5463,32 @@ sub update_config_file( $ ) {
|
|||||||
update_default( 'BLACKLIST_DEFAULT', 'AllowICMPs,dropBcasts,dropNotSyn,dropInvalid' );
|
update_default( 'BLACKLIST_DEFAULT', 'AllowICMPs,dropBcasts,dropNotSyn,dropInvalid' );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for ( qw/DROP_DEFAULT REJECT_DEFAULT BLACKLIST_DEFAULT/ ) {
|
||||||
|
my $policy = $config{ $_ };
|
||||||
|
|
||||||
|
if ( $policy =~ /\bA_(?:Drop|Reject)\b/ ) {
|
||||||
|
if ( $family == F_IPV4 ) {
|
||||||
|
$policy =~ s/A_(?:Drop|Reject)/Broadcast(A_DROP),Multicast(A_DROP)/;
|
||||||
|
} else {
|
||||||
|
$policy =~ s/A_(?:Drop|Reject)/AllowICMPS(A_ACCEPT),Broadcast(A_DROP),Multicast(A_DROP)/;
|
||||||
|
}
|
||||||
|
} elsif ( $policy =~ /\b(?:Drop|Reject)\(\s*audit.*\)/ ) {
|
||||||
|
if ( $family == F_IPV4 ) {
|
||||||
|
$policy =~ s/(?:Drop|Reject)\(\s*audit.*\)/Broadcast(A_DROP),Multicast(A_DROP)/;
|
||||||
|
} else {
|
||||||
|
$policy =~ s/(?:Drop|Reject)\(\s*audit.*\)/AllowICMPs(A_ACCEPT),Broadcast(A_DROP),Multicast(A_DROP)/;
|
||||||
|
}
|
||||||
|
} elsif ( $policy =~ /\b(?:Drop|Reject)\b/ ) {
|
||||||
|
if ( $family == F_IPV4 ) {
|
||||||
|
$policy =~ s/(?:Drop|Reject)/Broadcast(DROP),Multicast(DROP)/;
|
||||||
|
} else {
|
||||||
|
$policy =~ s/(?:Drop|Reject)/AllowICMPs,Broadcast(DROP),Multicast(DROP)/;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$config{$_} = $policy;
|
||||||
|
}
|
||||||
|
|
||||||
my $fn;
|
my $fn;
|
||||||
|
|
||||||
unless ( -d "$globals{SHAREDIR}/configfiles/" ) {
|
unless ( -d "$globals{SHAREDIR}/configfiles/" ) {
|
||||||
@@ -5430,7 +5528,13 @@ sub update_config_file( $ ) {
|
|||||||
#
|
#
|
||||||
# OPTION='' - use default if 'Yes' or 'No'
|
# OPTION='' - use default if 'Yes' or 'No'
|
||||||
#
|
#
|
||||||
$config{$var} = $val = $default if $default eq 'Yes' || $default eq 'No';
|
if ( $default eq 'Yes' || $default eq 'No' ) {
|
||||||
|
$config{$var} = $val = $default;
|
||||||
|
} elsif ( $var eq 'CONFIG_PATH' ) {
|
||||||
|
$val =~ s|^/etc/|\${CONFDIR}|;
|
||||||
|
$val =~ s|:/etc/|:\${CONFDIR}/g|;
|
||||||
|
$val =~ s|:/usr/share/|:\${SHAREDIR}|g;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
#
|
#
|
||||||
# Wasn't mentioned in old file - use default value
|
# Wasn't mentioned in old file - use default value
|
||||||
@@ -5438,7 +5542,6 @@ sub update_config_file( $ ) {
|
|||||||
$config{$var} = $val = $default;
|
$config{$var} = $val = $default;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if ( supplied $val ) {
|
if ( supplied $val ) {
|
||||||
#
|
#
|
||||||
@@ -5919,9 +6022,12 @@ sub export_params() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Walk the CONFIG_PATH converting FORMAT and COMMENT lines to compiler directives
|
# Walk the CONFIG_PATH converting
|
||||||
|
# - FORMAT and COMMENT lines to compiler directives
|
||||||
|
# - single semicolons to double semicolons in lines beginning with 'INLINE', IPTABLES or IP6TABLES
|
||||||
|
# - Rename macros/actions to their 5.2 counterparts
|
||||||
#
|
#
|
||||||
sub convert_to_directives() {
|
sub convert_to_version_5_2() {
|
||||||
my $sharedir = $shorewallrc{SHAREDIR};
|
my $sharedir = $shorewallrc{SHAREDIR};
|
||||||
#
|
#
|
||||||
# Make a copy of @config_path so that the for-loop below doesn't clobber that list
|
# Make a copy of @config_path so that the for-loop below doesn't clobber that list
|
||||||
@@ -5932,7 +6038,7 @@ sub convert_to_directives() {
|
|||||||
|
|
||||||
my $dirtest = qr|^$sharedir/+shorewall6?(?:/.*)?$|;
|
my $dirtest = qr|^$sharedir/+shorewall6?(?:/.*)?$|;
|
||||||
|
|
||||||
progress_message3 "Converting 'FORMAT', 'SECTION' and 'COMMENT' lines to compiler directives...";
|
progress_message3 "Performing Shorewall 5.2 conversions...";
|
||||||
|
|
||||||
for my $dir ( @path ) {
|
for my $dir ( @path ) {
|
||||||
unless ( $dir =~ /$dirtest/ ) {
|
unless ( $dir =~ /$dirtest/ ) {
|
||||||
@@ -5943,40 +6049,129 @@ sub convert_to_directives() {
|
|||||||
|
|
||||||
opendir( my $dirhandle, $dir ) || fatal_error "Cannot open directory $dir for reading:$!";
|
opendir( my $dirhandle, $dir ) || fatal_error "Cannot open directory $dir for reading:$!";
|
||||||
|
|
||||||
while ( my $file = readdir( $dirhandle ) ) {
|
while ( my $fname = readdir( $dirhandle ) ) {
|
||||||
unless ( $file eq 'capabilities' ||
|
unless ( $fname eq 'capabilities' ||
|
||||||
$file eq 'params' ||
|
$fname eq 'params' ||
|
||||||
$file =~ /^shorewall6?.conf$/ ||
|
$fname =~ /^shorewall6?.conf$/ ||
|
||||||
$file =~ /\.bak$/ ) {
|
$fname =~ /\.bak$/ ) {
|
||||||
$file = "$dir/$file";
|
#
|
||||||
|
# File we are interested in
|
||||||
|
#
|
||||||
|
my $fullname = "$dir/$fname";
|
||||||
|
|
||||||
if ( -f $file && -w _ ) {
|
if ( -f $fullname && -w _ ) {
|
||||||
#
|
#
|
||||||
# writeable regular file
|
# writeable regular file
|
||||||
#
|
#
|
||||||
my $result = system << "EOF";
|
my $v5_2_update = ( $fname eq 'rules' ||
|
||||||
perl -pi.bak -e '/^\\s*FORMAT\\s+/ && s/FORMAT/?FORMAT/;
|
$fname =~ /^action\./ ||
|
||||||
/^\\s*SECTION\\s+/ && s/SECTION/?SECTION/;
|
$fname =~ /^macro\./ ||
|
||||||
if ( /^\\s*COMMENT\\s+/ ) {
|
$fname eq 'snat' ||
|
||||||
|
$fname eq 'mangle' ||
|
||||||
|
$fname eq 'conntrack' ||
|
||||||
|
$fname eq 'accounting' ||
|
||||||
|
$fname eq 'masq' ||
|
||||||
|
$fname eq 'policy' );
|
||||||
|
my $is_policy = ( $fname eq 'policy' );
|
||||||
|
my @file;
|
||||||
|
my ( $ifile, $ofile );
|
||||||
|
my $omitting = 0;
|
||||||
|
my $changed;
|
||||||
|
|
||||||
|
open $ifile, '<', "$fullname" or fatal_error "Unable to open $fullname: $!";
|
||||||
|
|
||||||
|
while ( <$ifile> ) {
|
||||||
|
if ( $omitting ) {
|
||||||
|
$omitting = 0, next if /\s*\??end\s+(?:perl|shell)/i;
|
||||||
|
} else {
|
||||||
|
$omitting = 1, next if /\s*\??begin\s+(?:perl|shell)/i;
|
||||||
|
}
|
||||||
|
|
||||||
|
unless ( $omitting || /^\s*[#?]/ ) {
|
||||||
|
if ( /^\s*FORMAT\s+/ ) {
|
||||||
|
s/FORMAT/?FORMAT/;
|
||||||
|
$changed = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /^\s*SECTION\s+/ ) {
|
||||||
|
s/SECTION/?SECTION/;
|
||||||
|
$changed = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /^\s*COMMENT\s+/ ) {
|
||||||
s/COMMENT/?COMMENT/;
|
s/COMMENT/?COMMENT/;
|
||||||
|
$changed = 1;
|
||||||
} elsif ( /^\\s*COMMENT\\s*\$/ ) {
|
} elsif ( /^\\s*COMMENT\\s*\$/ ) {
|
||||||
s/COMMENT/?COMMENT/;
|
s/COMMENT/?COMMENT/;
|
||||||
}' $file
|
}
|
||||||
EOF
|
|
||||||
if ( $result == 0 ) {
|
if ( $v5_2_update ) {
|
||||||
if ( system( "diff -q $file ${file}.bak > /dev/null" ) ) {
|
if ( /\bA_AllowICMPs\b/ ) {
|
||||||
progress_message3 " File $file updated - old file renamed ${file}.bak";
|
s/A_AllowICMPs/AllowICMPs(A_ACCEPT)/;
|
||||||
} elsif ( rename "${file}.bak" , $file ) {
|
$changed = 1;
|
||||||
progress_message " File $file not updated -- no bare 'COMMENT', 'SECTION' or 'FORMAT' lines found";
|
}
|
||||||
progress_message " File $file not updated -- no bare 'COMMENT' or 'FORMAT' lines found";
|
|
||||||
|
if ( $is_policy ) {
|
||||||
|
if ( /\bA_(?:Drop|Reject)\b/ ) {
|
||||||
|
if ( $family == F_IPV4 ) {
|
||||||
|
s/A_(?:Drop|Reject)/Broadcast(A_DROP),Multicast(A_DROP)/;
|
||||||
} else {
|
} else {
|
||||||
warning message "Unable to rename ${file}.bak to $file:$!";
|
s/A_(?:Drop|Reject)/AllowICMPS(A_ACCEPT),Broadcast(A_DROP),Multicast(A_DROP)/;
|
||||||
|
}
|
||||||
|
|
||||||
|
$changed = 1;
|
||||||
|
} elsif ( /\b(?:Drop|Reject)\(\s*audit.*\)/ ) {
|
||||||
|
if ( $family == F_IPV4 ) {
|
||||||
|
s/(?:Drop|Reject)\(\s*audit.*\)/Broadcast(A_DROP),Multicast(A_DROP)/;
|
||||||
|
} else {
|
||||||
|
s/(?:Drop|Reject)\(\s*audit.*\)/AllowICMPs(A_ACCEPT),Broadcast(A_DROP),Multicast(A_DROP)/;
|
||||||
|
}
|
||||||
|
|
||||||
|
$changed = 1;
|
||||||
|
} elsif ( /\b(?:Drop|Reject)\b/ ) {
|
||||||
|
if ( $family == F_IPV4 ) {
|
||||||
|
s/(?:Drop|Reject)/Broadcast(DROP),Multicast(DROP)/;
|
||||||
|
} else {
|
||||||
|
s/(?:Drop|Reject)/AllowICMPs,Broadcast(DROP),Multicast(DROP)/;
|
||||||
|
}
|
||||||
|
|
||||||
|
$changed = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
warning_message ("Unable to update file $file" );
|
unless ( /;;/ ) {
|
||||||
|
if ( /^\s*(?:INLINE|IP6?TABLES)/ ) {
|
||||||
|
s/;/;;/;
|
||||||
|
$changed = 1;
|
||||||
|
} elsif ( /^[^#]*;\s*-[mgj]/ ) {
|
||||||
|
s/;/;;/;
|
||||||
|
$changed = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( /\bSMTPTrap\b/ ) {
|
||||||
|
s/SMTPTrap/SMTPtrap/;
|
||||||
|
$changed = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
push @file, $_;
|
||||||
|
}
|
||||||
|
|
||||||
|
close $ifile;
|
||||||
|
|
||||||
|
if ( $changed ) {
|
||||||
|
fatal_error "Can't rename $fullname to $fullname.bak" unless rename $fullname, "$fullname.bak";
|
||||||
|
open $ofile, '>', "$fullname" or fatal_error "Unable to open $fullname: $!";
|
||||||
|
print $ofile $_ for @file;
|
||||||
|
close $ofile;
|
||||||
|
progress_message3 " File $fullname updated - old file renamed ${fullname}.bak";
|
||||||
|
} else {
|
||||||
|
progress_message " File $file not updated -- no update required";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
warning_message( "$file skipped (not writeable)" ) unless -d _;
|
warning_message( "$fullname skipped (not writeable)" ) unless -d _;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5993,9 +6188,9 @@ EOF
|
|||||||
# - Read the capabilities file, if any
|
# - Read the capabilities file, if any
|
||||||
# - establish global hashes %params, %config , %globals and %capabilities
|
# - establish global hashes %params, %config , %globals and %capabilities
|
||||||
#
|
#
|
||||||
sub get_configuration( $$$$ ) {
|
sub get_configuration( $$$ ) {
|
||||||
|
|
||||||
( my ( $export, $update, $annotate ) , $checkinline ) = @_;
|
my ( $export, $update, $annotate ) = @_;
|
||||||
|
|
||||||
$globals{EXPORT} = $export;
|
$globals{EXPORT} = $export;
|
||||||
|
|
||||||
@@ -6297,7 +6492,6 @@ sub get_configuration( $$$$ ) {
|
|||||||
default_yes_no 'SAVE_ARPTABLES' , '';
|
default_yes_no 'SAVE_ARPTABLES' , '';
|
||||||
default_yes_no 'STARTUP_ENABLED' , 'Yes';
|
default_yes_no 'STARTUP_ENABLED' , 'Yes';
|
||||||
default_yes_no 'DELAYBLACKLISTLOAD' , '';
|
default_yes_no 'DELAYBLACKLISTLOAD' , '';
|
||||||
default_yes_no 'MAPOLDACTIONS' , 'Yes';
|
|
||||||
|
|
||||||
warning_message 'DELAYBLACKLISTLOAD=Yes is not supported by Shorewall ' . $globals{VERSION} if $config{DELAYBLACKLISTLOAD};
|
warning_message 'DELAYBLACKLISTLOAD=Yes is not supported by Shorewall ' . $globals{VERSION} if $config{DELAYBLACKLISTLOAD};
|
||||||
|
|
||||||
@@ -6353,6 +6547,7 @@ sub get_configuration( $$$$ ) {
|
|||||||
default_yes_no 'AUTOCOMMENT' , 'Yes';
|
default_yes_no 'AUTOCOMMENT' , 'Yes';
|
||||||
default_yes_no 'MULTICAST' , '';
|
default_yes_no 'MULTICAST' , '';
|
||||||
default_yes_no 'MARK_IN_FORWARD_CHAIN' , '';
|
default_yes_no 'MARK_IN_FORWARD_CHAIN' , '';
|
||||||
|
default_yes_no 'RENAME_COMBINED' , 'Yes';
|
||||||
|
|
||||||
if ( supplied ( $val = $config{TRACK_RULES} ) ) {
|
if ( supplied ( $val = $config{TRACK_RULES} ) ) {
|
||||||
if ( lc( $val ) eq 'file' ) {
|
if ( lc( $val ) eq 'file' ) {
|
||||||
@@ -6372,7 +6567,6 @@ sub get_configuration( $$$$ ) {
|
|||||||
$origin{$_} ||= '';
|
$origin{$_} ||= '';
|
||||||
}
|
}
|
||||||
|
|
||||||
default_yes_no 'INLINE_MATCHES' , '';
|
|
||||||
default_yes_no 'BASIC_FILTERS' , '';
|
default_yes_no 'BASIC_FILTERS' , '';
|
||||||
default_yes_no 'WORKAROUNDS' , 'Yes';
|
default_yes_no 'WORKAROUNDS' , 'Yes';
|
||||||
default_yes_no 'DOCKER' , '';
|
default_yes_no 'DOCKER' , '';
|
||||||
@@ -6405,11 +6599,14 @@ sub get_configuration( $$$$ ) {
|
|||||||
default_yes_no 'MANGLE_ENABLED' , have_capability( 'MANGLE_ENABLED' ) ? 'Yes' : '';
|
default_yes_no 'MANGLE_ENABLED' , have_capability( 'MANGLE_ENABLED' ) ? 'Yes' : '';
|
||||||
default_yes_no 'USE_DEFAULT_RT' , '';
|
default_yes_no 'USE_DEFAULT_RT' , '';
|
||||||
default_yes_no 'RESTORE_DEFAULT_ROUTE' , 'Yes';
|
default_yes_no 'RESTORE_DEFAULT_ROUTE' , 'Yes';
|
||||||
default_yes_no 'AUTOMAKE' , '';
|
default_yes_no 'TRACK_PROVIDERS' , 'Yes';
|
||||||
default_yes_no 'TRACK_PROVIDERS' , '';
|
|
||||||
default_yes_no 'BALANCE_PROVIDERS' , $config{USE_DEFAULT_RT} ? 'Yes' : '';
|
default_yes_no 'BALANCE_PROVIDERS' , $config{USE_DEFAULT_RT} ? 'Yes' : '';
|
||||||
default_yes_no 'USE_NFLOG_SIZE' , '';
|
default_yes_no 'USE_NFLOG_SIZE' , '';
|
||||||
|
|
||||||
|
if ( ( $val = ( $config{AUTOMAKE} || '' ) ) !~ /^[Rr]ecursive$/ ) {
|
||||||
|
default_yes_no( 'AUTOMAKE' , '' ) unless $val && $val =~ /^\d{1,2}$/;
|
||||||
|
}
|
||||||
|
|
||||||
if ( $config{USE_NFLOG_SIZE} ) {
|
if ( $config{USE_NFLOG_SIZE} ) {
|
||||||
if ( have_capability( 'NFLOG_SIZE' ) ) {
|
if ( have_capability( 'NFLOG_SIZE' ) ) {
|
||||||
@suffixes = qw(group size threshold nlgroup cprange qthreshold);
|
@suffixes = qw(group size threshold nlgroup cprange qthreshold);
|
||||||
@@ -6606,6 +6803,13 @@ sub get_configuration( $$$$ ) {
|
|||||||
$config{LOG_BACKEND} = $val;
|
$config{LOG_BACKEND} = $val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( supplied( $val = $config{LOG_ZONE} ) ) {
|
||||||
|
fatal_error "Invalid LOG_ZONE setting ($val)" unless $val =~ /^(src|dst|both)$/i;
|
||||||
|
$config{LOG_ZONE} = lc( $val );
|
||||||
|
} else {
|
||||||
|
$config{LOG_ZONE} = 'both';
|
||||||
|
}
|
||||||
|
|
||||||
warning_message "RFC1918_LOG_LEVEL=$config{RFC1918_LOG_LEVEL} ignored. The 'norfc1918' interface/host option is no longer supported" if $config{RFC1918_LOG_LEVEL};
|
warning_message "RFC1918_LOG_LEVEL=$config{RFC1918_LOG_LEVEL} ignored. The 'norfc1918' interface/host option is no longer supported" if $config{RFC1918_LOG_LEVEL};
|
||||||
|
|
||||||
default_log_level 'SMURF_LOG_LEVEL', '';
|
default_log_level 'SMURF_LOG_LEVEL', '';
|
||||||
@@ -6782,7 +6986,7 @@ sub get_configuration( $$$$ ) {
|
|||||||
} else {
|
} else {
|
||||||
$val = numeric_value $config{OPTIMIZE};
|
$val = numeric_value $config{OPTIMIZE};
|
||||||
|
|
||||||
fatal_error "Invalid OPTIMIZE value ($config{OPTIMIZE})" unless supplied( $val ) && $val >= 0 && ( $val & ~OPTIMIZE_USE_FIRST ) <= OPTIMIZE_ALL;
|
fatal_error "Invalid OPTIMIZE value ($config{OPTIMIZE})" unless supplied( $val ) && $val >= 0 && $val <= OPTIMIZE_ALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
require_capability 'XMULTIPORT', 'OPTIMIZE level 16', 's' if $val & 16;
|
require_capability 'XMULTIPORT', 'OPTIMIZE level 16', 's' if $val & 16;
|
||||||
@@ -6851,7 +7055,7 @@ sub get_configuration( $$$$ ) {
|
|||||||
$variables{$var} = $config{$val};
|
$variables{$var} = $config{$val};
|
||||||
}
|
}
|
||||||
|
|
||||||
convert_to_directives if $update;
|
convert_to_version_5_2 if $update;
|
||||||
|
|
||||||
cleanup_iptables if $sillyname && ! $config{LOAD_HELPERS_ONLY};
|
cleanup_iptables if $sillyname && ! $config{LOAD_HELPERS_ONLY};
|
||||||
}
|
}
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/IPAddrs.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/IPAddrs.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2015 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -60,6 +60,7 @@ our @EXPORT = ( qw( ALLIPv4
|
|||||||
decompose_net
|
decompose_net
|
||||||
decompose_net_u32
|
decompose_net_u32
|
||||||
compare_nets
|
compare_nets
|
||||||
|
loopback_address
|
||||||
validate_host
|
validate_host
|
||||||
validate_range
|
validate_range
|
||||||
ip_range_explicit
|
ip_range_explicit
|
||||||
@@ -98,12 +99,14 @@ our $resolve_dnsname;
|
|||||||
our $validate_range;
|
our $validate_range;
|
||||||
our $validate_host;
|
our $validate_host;
|
||||||
our $family;
|
our $family;
|
||||||
|
our $loopback_address;
|
||||||
|
|
||||||
use constant { ALLIPv4 => '0.0.0.0/0' ,
|
use constant { ALLIPv4 => '0.0.0.0/0' ,
|
||||||
ALLIPv6 => '::/0' ,
|
ALLIPv6 => '::/0' ,
|
||||||
NILIPv4 => '0.0.0.0' ,
|
NILIPv4 => '0.0.0.0' ,
|
||||||
NILIPv6 => '::' ,
|
NILIPv6 => '::' ,
|
||||||
IPv4_MULTICAST => '224.0.0.0/4' ,
|
IPv4_MULTICAST => '224.0.0.0/4' ,
|
||||||
|
IPv4_LOOPBACK => '127.0.0.1' ,
|
||||||
IPv6_MULTICAST => 'ff00::/8' ,
|
IPv6_MULTICAST => 'ff00::/8' ,
|
||||||
IPv6_LINKLOCAL => 'fe80::/10' ,
|
IPv6_LINKLOCAL => 'fe80::/10' ,
|
||||||
IPv6_SITELOCAL => 'feC0::/10' ,
|
IPv6_SITELOCAL => 'feC0::/10' ,
|
||||||
@@ -370,6 +373,10 @@ sub rfc1918_networks() {
|
|||||||
@rfc1918_networks
|
@rfc1918_networks
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub loopback_address() {
|
||||||
|
$loopback_address;
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Protocol/port validation
|
# Protocol/port validation
|
||||||
#
|
#
|
||||||
@@ -755,6 +762,7 @@ sub initialize( $ ) {
|
|||||||
$nilip = NILIPv4;
|
$nilip = NILIPv4;
|
||||||
@nilip = @nilipv4;
|
@nilip = @nilipv4;
|
||||||
$vlsm_width = VLSMv4;
|
$vlsm_width = VLSMv4;
|
||||||
|
$loopback_address = IPv4_LOOPBACK;
|
||||||
$valid_address = \&valid_4address;
|
$valid_address = \&valid_4address;
|
||||||
$validate_address = \&validate_4address;
|
$validate_address = \&validate_4address;
|
||||||
$validate_net = \&validate_4net;
|
$validate_net = \&validate_4net;
|
||||||
@@ -767,6 +775,7 @@ sub initialize( $ ) {
|
|||||||
$nilip = NILIPv6;
|
$nilip = NILIPv6;
|
||||||
@nilip = @nilipv6;
|
@nilip = @nilipv6;
|
||||||
$vlsm_width = VLSMv6;
|
$vlsm_width = VLSMv6;
|
||||||
|
$loopback_address = IPv6_LOOPBACK;
|
||||||
$valid_address = \&valid_6address;
|
$valid_address = \&valid_6address;
|
||||||
$validate_address = \&validate_6address;
|
$validate_address = \&validate_6address;
|
||||||
$validate_net = \&validate_6net;
|
$validate_net = \&validate_6net;
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Misc.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Misc.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -718,7 +718,7 @@ sub add_common_rules ( $ ) {
|
|||||||
|
|
||||||
if ( $config{REJECT_ACTION} ) {
|
if ( $config{REJECT_ACTION} ) {
|
||||||
process_reject_action;
|
process_reject_action;
|
||||||
fatal_eror( "The REJECT_ACTION ($config{REJECT_ACTION}) is not terminating" ) unless terminating( $rejectref );
|
fatal_error( "The REJECT_ACTION ($config{REJECT_ACTION}) is not terminating" ) unless terminating( $rejectref );
|
||||||
} else {
|
} else {
|
||||||
if ( have_capability( 'ADDRTYPE' ) ) {
|
if ( have_capability( 'ADDRTYPE' ) ) {
|
||||||
add_ijump $rejectref , j => 'DROP' , addrtype => '--src-type BROADCAST';
|
add_ijump $rejectref , j => 'DROP' , addrtype => '--src-type BROADCAST';
|
||||||
@@ -2448,7 +2448,7 @@ sub setup_mss( ) {
|
|||||||
my $clampmss = $config{CLAMPMSS};
|
my $clampmss = $config{CLAMPMSS};
|
||||||
my $option;
|
my $option;
|
||||||
my @match;
|
my @match;
|
||||||
my $chainref = $filter_table->{FORWARD};
|
my $chainref = $mangle_table->{FORWARD};
|
||||||
|
|
||||||
if ( $clampmss ) {
|
if ( $clampmss ) {
|
||||||
if ( "\L$clampmss" eq 'yes' ) {
|
if ( "\L$clampmss" eq 'yes' ) {
|
||||||
@@ -2554,9 +2554,6 @@ EOF
|
|||||||
reload)
|
reload)
|
||||||
mylogger kern.err "ERROR:$g_product reload failed"
|
mylogger kern.err "ERROR:$g_product reload failed"
|
||||||
;;
|
;;
|
||||||
refresh)
|
|
||||||
mylogger kern.err "ERROR:$g_product refresh failed"
|
|
||||||
;;
|
|
||||||
enable)
|
enable)
|
||||||
mylogger kern.err "ERROR:$g_product 'enable $g_interface' failed"
|
mylogger kern.err "ERROR:$g_product 'enable $g_interface' failed"
|
||||||
;;
|
;;
|
||||||
@@ -2646,7 +2643,6 @@ EOF
|
|||||||
|
|
||||||
rm -f ${VARDIR}/proxyarp
|
rm -f ${VARDIR}/proxyarp
|
||||||
fi
|
fi
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
} else {
|
} else {
|
||||||
emit <<'EOF';
|
emit <<'EOF';
|
||||||
@@ -2660,7 +2656,6 @@ EOF
|
|||||||
|
|
||||||
rm -f ${VARDIR}/proxyndp
|
rm -f ${VARDIR}/proxyndp
|
||||||
fi
|
fi
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Nat.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Nat.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -37,7 +37,7 @@ use strict;
|
|||||||
|
|
||||||
our @ISA = qw(Exporter);
|
our @ISA = qw(Exporter);
|
||||||
our @EXPORT = qw( setup_nat setup_netmap add_addresses );
|
our @EXPORT = qw( setup_nat setup_netmap add_addresses );
|
||||||
our %EXPORT_TAGS = ( rules => [ qw ( handle_nat_rule handle_nonat_rule process_one_masq convert_masq @addresses_to_add %addresses_to_add ) ] );
|
our %EXPORT_TAGS = ( rules => [ qw ( handle_nat_rule handle_nonat_rule convert_masq @addresses_to_add %addresses_to_add ) ] );
|
||||||
our @EXPORT_OK = ();
|
our @EXPORT_OK = ();
|
||||||
|
|
||||||
Exporter::export_ok_tags('rules');
|
Exporter::export_ok_tags('rules');
|
||||||
@@ -587,11 +587,11 @@ EOF
|
|||||||
# Convert a masq file into the equivalent snat file
|
# Convert a masq file into the equivalent snat file
|
||||||
#
|
#
|
||||||
sub convert_masq() {
|
sub convert_masq() {
|
||||||
|
my $have_masq_rules;
|
||||||
|
|
||||||
if ( my $fn = open_file( 'masq', 1, 1 ) ) {
|
if ( my $fn = open_file( 'masq', 1, 1 ) ) {
|
||||||
my ( $snat, $fn1 ) = open_snat_for_output( $fn );
|
my ( $snat, $fn1 ) = open_snat_for_output( $fn );
|
||||||
|
|
||||||
my $have_masq_rules;
|
|
||||||
|
|
||||||
directive_callback(
|
directive_callback(
|
||||||
sub ()
|
sub ()
|
||||||
{
|
{
|
||||||
@@ -647,6 +647,8 @@ sub convert_masq() {
|
|||||||
|
|
||||||
close $snat, directive_callback( 0 );
|
close $snat, directive_callback( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$have_masq_rules;
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Proc.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Proc.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Providers.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Providers.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -161,6 +161,15 @@ sub setup_route_marking() {
|
|||||||
add_ijump_extended $mangle_table->{PREROUTING} , j => $chainref, $origin, i => $physical, mark => "--mark 0/$mask";
|
add_ijump_extended $mangle_table->{PREROUTING} , j => $chainref, $origin, i => $physical, mark => "--mark 0/$mask";
|
||||||
add_ijump_extended $mangle_table->{PREROUTING} , j => $chainref1, $origin, i => "! $physical", mark => "--mark $mark/$mask";
|
add_ijump_extended $mangle_table->{PREROUTING} , j => $chainref1, $origin, i => "! $physical", mark => "--mark $mark/$mask";
|
||||||
add_ijump_extended $mangle_table->{OUTPUT} , j => $chainref2, $origin, mark => "--mark $mark/$mask";
|
add_ijump_extended $mangle_table->{OUTPUT} , j => $chainref2, $origin, mark => "--mark $mark/$mask";
|
||||||
|
|
||||||
|
if ( have_ipsec ) {
|
||||||
|
if ( have_capability( 'MARK_ANYWHERE' ) ) {
|
||||||
|
add_ijump_extended $filter_table->{forward_chain($interface)}, j => 'CONNMARK', $origin, targetopts => "--set-mark 0${exmask}", , state_imatch('NEW'), policy => '--dir in --pol ipsec';
|
||||||
|
} elsif ( have_capability( 'MANGLE_FORWARD' ) ) {
|
||||||
|
add_ijump_extended $mangle_table->{FORWARD}, j => 'CONNMARK', $origin, targetopts => "--set-mark 0${exmask}", i => $physical, state_imatch('NEW'), policy => '--dir in --pol ipsec';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$marked_interfaces{$interface} = 1;
|
$marked_interfaces{$interface} = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,22 +338,22 @@ sub balance_default_route( $$$$ ) {
|
|||||||
if ( $first_default_route ) {
|
if ( $first_default_route ) {
|
||||||
if ( $balanced_providers == 1 ) {
|
if ( $balanced_providers == 1 ) {
|
||||||
if ( $gateway ) {
|
if ( $gateway ) {
|
||||||
emit "DEFAULT_ROUTE=\"via $gateway dev $interface $realm\"";
|
emit qq(DEFAULT_ROUTE="via $gateway dev $interface $realm");
|
||||||
} else {
|
} else {
|
||||||
emit "DEFAULT_ROUTE=\"dev $interface $realm\"";
|
emit qq(DEFAULT_ROUTE="dev $interface $realm");
|
||||||
}
|
}
|
||||||
} elsif ( $gateway ) {
|
} elsif ( $gateway ) {
|
||||||
emit "DEFAULT_ROUTE=\"nexthop via $gateway dev $interface weight $weight $realm\"";
|
emit qq(DEFAULT_ROUTE="nexthop via $gateway dev $interface weight $weight $realm");
|
||||||
} else {
|
} else {
|
||||||
emit "DEFAULT_ROUTE=\"nexthop dev $interface weight $weight $realm\"";
|
emit qq(DEFAULT_ROUTE="nexthop dev $interface weight $weight $realm");
|
||||||
}
|
}
|
||||||
|
|
||||||
$first_default_route = 0;
|
$first_default_route = 0;
|
||||||
} else {
|
} else {
|
||||||
if ( $gateway ) {
|
if ( $gateway ) {
|
||||||
emit "DEFAULT_ROUTE=\"\$DEFAULT_ROUTE nexthop via $gateway dev $interface weight $weight $realm\"";
|
emit qq(DEFAULT_ROUTE="\$DEFAULT_ROUTE nexthop via $gateway dev $interface weight $weight $realm");
|
||||||
} else {
|
} else {
|
||||||
emit "DEFAULT_ROUTE=\"\$DEFAULT_ROUTE nexthop dev $interface weight $weight $realm\"";
|
emit qq(DEFAULT_ROUTE="\$DEFAULT_ROUTE nexthop dev $interface weight $weight $realm");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -359,22 +368,22 @@ sub balance_fallback_route( $$$$ ) {
|
|||||||
if ( $first_fallback_route ) {
|
if ( $first_fallback_route ) {
|
||||||
if ( $fallback_providers == 1 ) {
|
if ( $fallback_providers == 1 ) {
|
||||||
if ( $gateway ) {
|
if ( $gateway ) {
|
||||||
emit "FALLBACK_ROUTE=\"via $gateway dev $interface $realm\"";
|
emit qq(FALLBACK_ROUTE="via $gateway dev $interface $realm");
|
||||||
} else {
|
} else {
|
||||||
emit "FALLBACK_ROUTE=\"dev $interface $realm\"";
|
emit qq(FALLBACK_ROUTE="dev $interface $realm");
|
||||||
}
|
}
|
||||||
} elsif ( $gateway ) {
|
} elsif ( $gateway ) {
|
||||||
emit "FALLBACK_ROUTE=\"nexthop via $gateway dev $interface weight $weight $realm\"";
|
emit qq(FALLBACK_ROUTE="nexthop via $gateway dev $interface weight $weight $realm");
|
||||||
} else {
|
} else {
|
||||||
emit "FALLBACK_ROUTE=\"nexthop dev $interface weight $weight $realm\"";
|
emit qq(FALLBACK_ROUTE="nexthop dev $interface weight $weight $realm");
|
||||||
}
|
}
|
||||||
|
|
||||||
$first_fallback_route = 0;
|
$first_fallback_route = 0;
|
||||||
} else {
|
} else {
|
||||||
if ( $gateway ) {
|
if ( $gateway ) {
|
||||||
emit "FALLBACK_ROUTE=\"\$FALLBACK_ROUTE nexthop via $gateway dev $interface weight $weight $realm\"";
|
emit qq(FALLBACK_ROUTE="\$FALLBACK_ROUTE nexthop via $gateway dev $interface weight $weight $realm");
|
||||||
} else {
|
} else {
|
||||||
emit "FALLBACK_ROUTE=\"\$FALLBACK_ROUTE nexthop dev $interface weight $weight $realm\"";
|
emit qq(FALLBACK_ROUTE="\$FALLBACK_ROUTE nexthop dev $interface weight $weight $realm");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -512,6 +521,9 @@ sub process_a_provider( $ ) {
|
|||||||
set_interface_option( $interface, 'gateway', 'none' );
|
set_interface_option( $interface, 'gateway', 'none' );
|
||||||
} elsif ( $gateway && $gateway ne '-' ) {
|
} elsif ( $gateway && $gateway ne '-' ) {
|
||||||
( $gateway, $mac ) = split_host_list( $gateway, 0 );
|
( $gateway, $mac ) = split_host_list( $gateway, 0 );
|
||||||
|
|
||||||
|
$gateway = $1 if $family == F_IPV6 && $gateway =~ /^\[(.+)\]$/;
|
||||||
|
|
||||||
validate_address $gateway, 0;
|
validate_address $gateway, 0;
|
||||||
|
|
||||||
if ( defined $mac ) {
|
if ( defined $mac ) {
|
||||||
@@ -689,7 +701,6 @@ sub process_a_provider( $ ) {
|
|||||||
|
|
||||||
$pref = 10000 + $number - 1;
|
$pref = 10000 + $number - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unless ( $loose || $pseudo ) {
|
unless ( $loose || $pseudo ) {
|
||||||
@@ -874,7 +885,8 @@ sub add_a_provider( $$ ) {
|
|||||||
emit( "run_ip rule add from $address pref 20000 table $id" ,
|
emit( "run_ip rule add from $address pref 20000 table $id" ,
|
||||||
"echo \"\$IP -$family rule del from $address pref 20000> /dev/null 2>&1\" >> \${VARDIR}/undo_${table}_routing" );
|
"echo \"\$IP -$family rule del from $address pref 20000> /dev/null 2>&1\" >> \${VARDIR}/undo_${table}_routing" );
|
||||||
} else {
|
} else {
|
||||||
emit ( "find_interface_addresses $physical | while read address; do",
|
emit ( '',
|
||||||
|
"find_interface_addresses $physical | while read address; do",
|
||||||
" qt \$IP -$family rule del from \$address",
|
" qt \$IP -$family rule del from \$address",
|
||||||
" run_ip rule add from \$address pref 20000 table $id",
|
" run_ip rule add from \$address pref 20000 table $id",
|
||||||
" echo \"\$IP -$family rule del from \$address pref 20000 > /dev/null 2>&1\" >> \${VARDIR}/undo_${table}_routing",
|
" echo \"\$IP -$family rule del from \$address pref 20000 > /dev/null 2>&1\" >> \${VARDIR}/undo_${table}_routing",
|
||||||
@@ -1239,7 +1251,7 @@ CEOF
|
|||||||
'if [ $COMMAND = disable ]; then',
|
'if [ $COMMAND = disable ]; then',
|
||||||
" do_persistent_${what}_${table}",
|
" do_persistent_${what}_${table}",
|
||||||
"else",
|
"else",
|
||||||
" echo 1 > \${VARDIR}/${physical}_disabled\n",
|
" echo 1 > \${VARDIR}/${physical}_disabled",
|
||||||
"fi\n",
|
"fi\n",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1573,7 +1585,7 @@ sub finish_providers() {
|
|||||||
emit ( " run_ip route replace default scope global table $table \$DEFAULT_ROUTE" );
|
emit ( " run_ip route replace default scope global table $table \$DEFAULT_ROUTE" );
|
||||||
} else {
|
} else {
|
||||||
emit ( " if echo \$DEFAULT_ROUTE | grep -q 'nexthop.+nexthop'; then",
|
emit ( " if echo \$DEFAULT_ROUTE | grep -q 'nexthop.+nexthop'; then",
|
||||||
" qt \$IP -6 route delete default scope global table $table \$DEFAULT_ROUTE",
|
" while qt \$IP -6 route delete default table $table; do true; done",
|
||||||
" run_ip route add default scope global table $table \$DEFAULT_ROUTE",
|
" run_ip route add default scope global table $table \$DEFAULT_ROUTE",
|
||||||
' else',
|
' else',
|
||||||
" run_ip route replace default scope global table $table \$DEFAULT_ROUTE",
|
" run_ip route replace default scope global table $table \$DEFAULT_ROUTE",
|
||||||
@@ -1582,7 +1594,8 @@ sub finish_providers() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( $config{USE_DEFAULT_RT} ) {
|
if ( $config{USE_DEFAULT_RT} ) {
|
||||||
emit ( " while qt \$IP -$family route del default table $main; do",
|
emit ( '',
|
||||||
|
" while qt \$IP -$family route del default table $main; do",
|
||||||
' true',
|
' true',
|
||||||
' done',
|
' done',
|
||||||
''
|
''
|
||||||
@@ -1636,7 +1649,7 @@ sub finish_providers() {
|
|||||||
if ( $family == F_IPV4 ) {
|
if ( $family == F_IPV4 ) {
|
||||||
emit( " run_ip route replace default scope global table $default \$FALLBACK_ROUTE" );
|
emit( " run_ip route replace default scope global table $default \$FALLBACK_ROUTE" );
|
||||||
} else {
|
} else {
|
||||||
emit( " run_ip route delete default scope global table $default \$FALLBACK_ROUTE" );
|
emit( " while qt \$IP -6 route delete default table $default; do true; done" );
|
||||||
emit( " run_ip route add default scope global table $default \$FALLBACK_ROUTE" );
|
emit( " run_ip route add default scope global table $default \$FALLBACK_ROUTE" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1697,7 +1710,7 @@ sub process_providers( $ ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( $providers ) {
|
if ( $providers ) {
|
||||||
fatal_error q(Either all 'fallback' providers must specify a weight or non of them can specify a weight) if $fallback && $metrics;
|
fatal_error q(Either all 'fallback' providers must specify a weight or none of them can specify a weight) if $fallback && $metrics;
|
||||||
|
|
||||||
my $fn = open_file( 'route_rules' );
|
my $fn = open_file( 'route_rules' );
|
||||||
|
|
||||||
@@ -1728,7 +1741,7 @@ sub process_providers( $ ) {
|
|||||||
|
|
||||||
add_a_provider( $providers{$_}, $tcdevices ) for @providers;
|
add_a_provider( $providers{$_}, $tcdevices ) for @providers;
|
||||||
|
|
||||||
emit << 'EOF';;
|
emithd << 'EOF';;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Enable an optional provider
|
# Enable an optional provider
|
||||||
@@ -1774,12 +1787,11 @@ EOF
|
|||||||
pop_indent;
|
pop_indent;
|
||||||
pop_indent;
|
pop_indent;
|
||||||
|
|
||||||
emit << 'EOF';;
|
emithd << 'EOF';;
|
||||||
*)
|
*)
|
||||||
startup_error "$g_interface is not an optional provider or interface"
|
startup_error "$g_interface is not an optional provider or interface"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -1883,20 +1895,19 @@ sub setup_providers() {
|
|||||||
|
|
||||||
start_providers;
|
start_providers;
|
||||||
|
|
||||||
setup_null_routing if $config{NULL_ROUTE_RFC1918};
|
setup_null_routing, emit '' if $config{NULL_ROUTE_RFC1918};
|
||||||
|
|
||||||
emit '';
|
|
||||||
|
|
||||||
|
if ( @providers ) {
|
||||||
emit "start_$providers{$_}->{what}_$_" for @providers;
|
emit "start_$providers{$_}->{what}_$_" for @providers;
|
||||||
|
|
||||||
emit '';
|
emit '';
|
||||||
|
}
|
||||||
|
|
||||||
finish_providers;
|
finish_providers;
|
||||||
|
|
||||||
emit "\nrun_ip route flush cache";
|
emit "\nrun_ip route flush cache";
|
||||||
|
|
||||||
pop_indent;
|
pop_indent;
|
||||||
emit "fi\n";
|
emit 'fi';
|
||||||
|
|
||||||
setup_route_marking if @routemarked_interfaces || @load_interfaces;
|
setup_route_marking if @routemarked_interfaces || @load_interfaces;
|
||||||
} else {
|
} else {
|
||||||
@@ -1907,9 +1918,10 @@ sub setup_providers() {
|
|||||||
if ( $pseudoproviders ) {
|
if ( $pseudoproviders ) {
|
||||||
emit '';
|
emit '';
|
||||||
emit "start_$providers{$_}->{what}_$_" for @providers;
|
emit "start_$providers{$_}->{what}_$_" for @providers;
|
||||||
|
emit '';
|
||||||
}
|
}
|
||||||
|
|
||||||
emit "\nundo_routing";
|
emit "undo_routing";
|
||||||
emit "restore_default_route $config{USE_DEFAULT_RT}";
|
emit "restore_default_route $config{USE_DEFAULT_RT}";
|
||||||
|
|
||||||
my $standard_routes = @{$providers{main}{routes}} || @{$providers{default}{routes}};
|
my $standard_routes = @{$providers{main}{routes}} || @{$providers{default}{routes}};
|
||||||
@@ -1934,9 +1946,8 @@ sub setup_providers() {
|
|||||||
|
|
||||||
pop_indent;
|
pop_indent;
|
||||||
|
|
||||||
emit "fi\n";
|
emit 'fi';
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -2185,17 +2196,13 @@ sub provider_realm( $ ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# This function is called by the compiler when it is generating the detect_configuration() function.
|
# Perform processing related to optional interfaces. Returns true if there are optional interfaces.
|
||||||
# The function calls Shorewall::Zones::verify_required_interfaces then emits code to set the
|
|
||||||
# ..._IS_USABLE interface variables appropriately for the optional interfaces
|
|
||||||
#
|
#
|
||||||
# Returns true if there were required or optional interfaces
|
sub handle_optional_interfaces() {
|
||||||
#
|
|
||||||
sub handle_optional_interfaces( $ ) {
|
|
||||||
|
|
||||||
my @interfaces;
|
my @interfaces;
|
||||||
my $wildcards;
|
my $wildcards;
|
||||||
|
|
||||||
#
|
#
|
||||||
# First do the provider interfacess. Those that are real providers will never have wildcard physical
|
# First do the provider interfacess. Those that are real providers will never have wildcard physical
|
||||||
# names but they might derive from wildcard interface entries. Optional interfaces which do not have
|
# names but they might derive from wildcard interface entries. Optional interfaces which do not have
|
||||||
@@ -2219,10 +2226,6 @@ sub handle_optional_interfaces( $ ) {
|
|||||||
|
|
||||||
if ( @interfaces ) {
|
if ( @interfaces ) {
|
||||||
my $require = $config{REQUIRE_INTERFACE};
|
my $require = $config{REQUIRE_INTERFACE};
|
||||||
my $gencase = shift;
|
|
||||||
|
|
||||||
verify_required_interfaces( $gencase );
|
|
||||||
emit '' if $gencase;
|
|
||||||
|
|
||||||
emit( 'HAVE_INTERFACE=', '' ) if $require;
|
emit( 'HAVE_INTERFACE=', '' ) if $require;
|
||||||
#
|
#
|
||||||
@@ -2365,7 +2368,7 @@ sub handle_optional_interfaces( $ ) {
|
|||||||
emit( '',
|
emit( '',
|
||||||
'if [ -z "$HAVE_INTERFACE" ]; then' ,
|
'if [ -z "$HAVE_INTERFACE" ]; then' ,
|
||||||
' case "$COMMAND" in',
|
' case "$COMMAND" in',
|
||||||
' start|reload|restore|refresh)'
|
' start|reload|restore)'
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( $family == F_IPV4 ) {
|
if ( $family == F_IPV4 ) {
|
||||||
@@ -2386,8 +2389,6 @@ sub handle_optional_interfaces( $ ) {
|
|||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
verify_required_interfaces( shift );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Proxyarp.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Proxyarp.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -96,6 +96,7 @@ sub setup_one_proxy_arp( $$$$$$$ ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
emit ( "run_ip neigh add proxy $address nud permanent dev $extphy" ,
|
emit ( "run_ip neigh add proxy $address nud permanent dev $extphy" ,
|
||||||
|
'' ,
|
||||||
qq(progress_message " Host $address connected to $interface added to $proto on $extphy"\n) );
|
qq(progress_message " Host $address connected to $interface added to $proto on $extphy"\n) );
|
||||||
|
|
||||||
push @proxyarp, "$address $interface $external $haveroute";
|
push @proxyarp, "$address $interface $external $haveroute";
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Raw.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Raw.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2009-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2009-2018 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -91,7 +91,7 @@ sub process_conntrack_rule( $$$$$$$$$$ ) {
|
|||||||
|
|
||||||
my $disposition = $action;
|
my $disposition = $action;
|
||||||
my $exception_rule = '';
|
my $exception_rule = '';
|
||||||
my $rule = do_proto( $proto, $ports, $sports ) . do_user ( $user ) . do_condition( $switch , $chainref->{name} );
|
|
||||||
my $level = '';
|
my $level = '';
|
||||||
|
|
||||||
if ( $action =~ /^(?:NFLOG|ULOG)/ ) {
|
if ( $action =~ /^(?:NFLOG|ULOG)/ ) {
|
||||||
@@ -138,6 +138,14 @@ sub process_conntrack_rule( $$$$$$$$$$ ) {
|
|||||||
|
|
||||||
require_capability 'CT_TARGET', 'CT entries in the conntrack file', '';
|
require_capability 'CT_TARGET', 'CT entries in the conntrack file', '';
|
||||||
|
|
||||||
|
if ( $proto ne '-' ) {
|
||||||
|
if ( $proto =~ s/:all$// ) {
|
||||||
|
fatal_error '":all" may only be used with TCP' unless resolve_proto( $proto ) == TCP;
|
||||||
|
} else {
|
||||||
|
$proto = TCP . ':syn' if $proto !~ /:syn/ && resolve_proto( $proto ) == TCP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( $option eq 'notrack' ) {
|
if ( $option eq 'notrack' ) {
|
||||||
fatal_error "Invalid conntrack ACTION ( $action )" if supplied $args;
|
fatal_error "Invalid conntrack ACTION ( $action )" if supplied $args;
|
||||||
$action = 'CT --notrack';
|
$action = 'CT --notrack';
|
||||||
@@ -199,7 +207,9 @@ sub process_conntrack_rule( $$$$$$$$$$ ) {
|
|||||||
expand_rule( $chainref ,
|
expand_rule( $chainref ,
|
||||||
$restriction ,
|
$restriction ,
|
||||||
'',
|
'',
|
||||||
$rule,
|
do_proto( $proto, $ports, $sports ) .
|
||||||
|
do_user ( $user ) .
|
||||||
|
do_condition( $switch , $chainref->{name} ),
|
||||||
$source ,
|
$source ,
|
||||||
$dest ,
|
$dest ,
|
||||||
'' ,
|
'' ,
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Rules.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Rules.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -96,7 +96,7 @@ use constant { NULL_SECTION => 0x00,
|
|||||||
INVALID_SECTION => 0x10,
|
INVALID_SECTION => 0x10,
|
||||||
UNTRACKED_SECTION => 0x20,
|
UNTRACKED_SECTION => 0x20,
|
||||||
NEW_SECTION => 0x40,
|
NEW_SECTION => 0x40,
|
||||||
DEFAULTACTION_SECTION => 0x80 };
|
POLICYACTION_SECTION => 0x80 };
|
||||||
#
|
#
|
||||||
# Number of elements in the action tuple
|
# Number of elements in the action tuple
|
||||||
#
|
#
|
||||||
@@ -112,6 +112,13 @@ our %section_functions = ( ALL_SECTION , \&rules_chain,
|
|||||||
UNTRACKED_SECTION, \&untracked_chain,
|
UNTRACKED_SECTION, \&untracked_chain,
|
||||||
NEW_SECTION, \&rules_chain );
|
NEW_SECTION, \&rules_chain );
|
||||||
|
|
||||||
|
our %log_functions = ( ALL_SECTION , \&rules_log ,
|
||||||
|
BLACKLIST_SECTION , \&blacklist_log ,
|
||||||
|
ESTABLISHED_SECTION , \&established_log ,
|
||||||
|
RELATED_SECTION , \&related_log ,
|
||||||
|
INVALID_SECTION , \&invalid_log ,
|
||||||
|
UNTRACKED_SECTION , \&untracked_log ,
|
||||||
|
NEW_SECTION , \&rules_log );
|
||||||
#
|
#
|
||||||
# Section => STATE map - initialized in process_rules().
|
# Section => STATE map - initialized in process_rules().
|
||||||
#
|
#
|
||||||
@@ -403,8 +410,8 @@ sub initialize( $ ) {
|
|||||||
#
|
#
|
||||||
# Create a rules chain
|
# Create a rules chain
|
||||||
#
|
#
|
||||||
sub new_rules_chain( $ ) {
|
sub new_rules_chain( $$ ) {
|
||||||
my $chainref = new_chain( 'filter', $_[0] );
|
my $chainref = new_chain( 'filter', &rules_chain( @_ ), &rules_log( @_ ) );
|
||||||
|
|
||||||
if ( $config{FASTACCEPT} ) {
|
if ( $config{FASTACCEPT} ) {
|
||||||
if ( $globals{RELATED_TARGET} eq 'ACCEPT' && ! $config{RELATED_LOG_LEVEL} ) {
|
if ( $globals{RELATED_TARGET} eq 'ACCEPT' && ! $config{RELATED_LOG_LEVEL} ) {
|
||||||
@@ -445,7 +452,7 @@ sub new_policy_chain($$$$$)
|
|||||||
{
|
{
|
||||||
my ($source, $dest, $policy, $provisional, $audit) = @_;
|
my ($source, $dest, $policy, $provisional, $audit) = @_;
|
||||||
|
|
||||||
my $chainref = new_rules_chain( rules_chain( ${source}, ${dest} ) );
|
my $chainref = new_rules_chain( ${source}, ${dest} );
|
||||||
|
|
||||||
convert_to_policy_chain( $chainref, $source, $dest, $policy, $provisional, $audit );
|
convert_to_policy_chain( $chainref, $source, $dest, $policy, $provisional, $audit );
|
||||||
|
|
||||||
@@ -455,9 +462,11 @@ sub new_policy_chain($$$$$)
|
|||||||
#
|
#
|
||||||
# Set the passed chain's policychain and policy to the passed values.
|
# Set the passed chain's policychain and policy to the passed values.
|
||||||
#
|
#
|
||||||
sub set_policy_chain($$$$$$)
|
sub set_policy_chain($$$$$)
|
||||||
{
|
{
|
||||||
my ( $chain, $source, $dest, $polchainref, $policy, $intrazone ) = @_;
|
my ( $source, $dest, $polchainref, $policy, $intrazone ) = @_;
|
||||||
|
|
||||||
|
my $chain = rules_chain( $source, $dest );
|
||||||
|
|
||||||
my $chainref = $filter_table->{$chain};
|
my $chainref = $filter_table->{$chain};
|
||||||
|
|
||||||
@@ -467,7 +476,7 @@ sub set_policy_chain($$$$$$)
|
|||||||
$chainref->{provisional} = '';
|
$chainref->{provisional} = '';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$chainref = new_rules_chain $chain;
|
$chainref = new_rules_chain( $source, $dest );
|
||||||
}
|
}
|
||||||
|
|
||||||
unless ( $chainref->{policychain} ) {
|
unless ( $chainref->{policychain} ) {
|
||||||
@@ -483,6 +492,7 @@ sub set_policy_chain($$$$$$)
|
|||||||
if ( defined $polchainref->{synparams} ) {
|
if ( defined $polchainref->{synparams} ) {
|
||||||
$chainref->{synparams} = $polchainref->{synparams};
|
$chainref->{synparams} = $polchainref->{synparams};
|
||||||
$chainref->{synchain} = $polchainref->{synchain};
|
$chainref->{synchain} = $polchainref->{synchain};
|
||||||
|
$chainref->{synlog} = $polchainref->{synlog};
|
||||||
}
|
}
|
||||||
|
|
||||||
$chainref->{pactions} = $polchainref->{pactions} || [];
|
$chainref->{pactions} = $polchainref->{pactions} || [];
|
||||||
@@ -580,7 +590,7 @@ sub process_policy_actions( $$$ ) {
|
|||||||
for my $paction ( split_list3( $pactions, 'Policy Action' ) ) {
|
for my $paction ( split_list3( $pactions, 'Policy Action' ) ) {
|
||||||
my ( $action, $level, $remainder ) = split( /:/, $paction, 3 );
|
my ( $action, $level, $remainder ) = split( /:/, $paction, 3 );
|
||||||
|
|
||||||
fatal_error "Invalid policy action ($paction:$level:$remainder)" if defined $remainder;
|
fatal_error "Invalid policy action ($paction)" if defined $remainder;
|
||||||
|
|
||||||
push @pactions, process_policy_action( $originalpolicy, $policy, $action, $level );
|
push @pactions, process_policy_action( $originalpolicy, $policy, $action, $level );
|
||||||
}
|
}
|
||||||
@@ -743,7 +753,8 @@ sub process_a_policy1($$$$$$$) {
|
|||||||
$value = do_ratelimit $synparams, 'ACCEPT' if $synparams ne '';
|
$value = do_ratelimit $synparams, 'ACCEPT' if $synparams ne '';
|
||||||
$value .= do_connlimit $connlimit if $connlimit ne '';
|
$value .= do_connlimit $connlimit if $connlimit ne '';
|
||||||
$chainref->{synparams} = $value;
|
$chainref->{synparams} = $value;
|
||||||
$chainref->{synchain} = $chain
|
$chainref->{synchain} = $chain;
|
||||||
|
$chainref->{synlog} = '@' . $chainref->{logname};
|
||||||
}
|
}
|
||||||
|
|
||||||
$chainref->{pactions} = $pactionref;
|
$chainref->{pactions} = $pactionref;
|
||||||
@@ -753,19 +764,19 @@ sub process_a_policy1($$$$$$$) {
|
|||||||
if ( $serverwild ) {
|
if ( $serverwild ) {
|
||||||
for my $zone ( @zonelist ) {
|
for my $zone ( @zonelist ) {
|
||||||
for my $zone1 ( @zonelist ) {
|
for my $zone1 ( @zonelist ) {
|
||||||
set_policy_chain rules_chain( ${zone}, ${zone1} ), $zone, $zone1, $chainref, $policy, $intrazone;
|
set_policy_chain $zone, $zone1, $chainref, $policy, $intrazone;
|
||||||
print_policy $zone, $zone1, $originalpolicy, $chain;
|
print_policy $zone, $zone1, $originalpolicy, $chain;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for my $zone ( all_zones ) {
|
for my $zone ( all_zones ) {
|
||||||
set_policy_chain rules_chain( ${zone}, ${server} ), $zone, $server, $chainref, $policy, $intrazone;
|
set_policy_chain $zone, $server, $chainref, $policy, $intrazone;
|
||||||
print_policy $zone, $server, $originalpolicy, $chain;
|
print_policy $zone, $server, $originalpolicy, $chain;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elsif ( $serverwild ) {
|
} elsif ( $serverwild ) {
|
||||||
for my $zone ( @zonelist ) {
|
for my $zone ( @zonelist ) {
|
||||||
set_policy_chain rules_chain( ${client}, ${zone} ), $client, $zone, $chainref, $policy, $intrazone;
|
set_policy_chain $client, $zone, $chainref, $policy, $intrazone;
|
||||||
print_policy $client, $zone, $originalpolicy, $chain;
|
print_policy $client, $zone, $originalpolicy, $chain;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -832,6 +843,8 @@ sub save_policies() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub ensure_rules_chain( $$ );
|
||||||
|
|
||||||
#
|
#
|
||||||
# Process the policy file
|
# Process the policy file
|
||||||
#
|
#
|
||||||
@@ -881,19 +894,15 @@ sub process_policies()
|
|||||||
if ( $type == LOCAL ) {
|
if ( $type == LOCAL ) {
|
||||||
for my $zone1 ( off_firewall_zones ) {
|
for my $zone1 ( off_firewall_zones ) {
|
||||||
unless ( $zone eq $zone1 ) {
|
unless ( $zone eq $zone1 ) {
|
||||||
my $name = rules_chain( $zone, $zone1 );
|
set_policy_chain( $zone, $zone1, ensure_rules_chain( $zone, $zone1 ), 'NONE', 0 );
|
||||||
my $name1 = rules_chain( $zone1, $zone );
|
set_policy_chain( $zone1, $zone, ensure_rules_chain( $zone1, $zone ), 'NONE', 0 );
|
||||||
set_policy_chain( $name, $zone, $zone1, ensure_rules_chain( $name ), 'NONE', 0 );
|
|
||||||
set_policy_chain( $name1, $zone1, $zone, ensure_rules_chain( $name1 ), 'NONE', 0 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} elsif ( $type == LOOPBACK ) {
|
} elsif ( $type == LOOPBACK ) {
|
||||||
for my $zone1 ( off_firewall_zones ) {
|
for my $zone1 ( off_firewall_zones ) {
|
||||||
unless ( $zone eq $zone1 || zone_type( $zone1 ) == LOOPBACK ) {
|
unless ( $zone eq $zone1 || zone_type( $zone1 ) == LOOPBACK ) {
|
||||||
my $name = rules_chain( $zone, $zone1 );
|
set_policy_chain( $zone, $zone1, ensure_rules_chain( $zone, $zone1 ), 'NONE', 0 );
|
||||||
my $name1 = rules_chain( $zone1, $zone );
|
set_policy_chain( $zone1, $zone, ensure_rules_chain( $zone1, $zone ), 'NONE', 0 );
|
||||||
set_policy_chain( $name, $zone, $zone1, ensure_rules_chain( $name ), 'NONE', 0 );
|
|
||||||
set_policy_chain( $name1, $zone1, $zone, ensure_rules_chain( $name1 ), 'NONE', 0 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -927,27 +936,49 @@ sub process_policies()
|
|||||||
#
|
#
|
||||||
sub process_inline ($$$$$$$$$$$$$$$$$$$$$$);
|
sub process_inline ($$$$$$$$$$$$$$$$$$$$$$);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Determine the protocol to be used in the jump to the passed action
|
||||||
|
#
|
||||||
|
sub determine_action_protocol( $$ ) {
|
||||||
|
my ( $action, $proto ) = @_;
|
||||||
|
|
||||||
|
if ( my $actionproto = $actions{$action}{proto} ) {
|
||||||
|
if ( $proto eq '-' ) {
|
||||||
|
$proto = $actionproto;
|
||||||
|
} else {
|
||||||
|
if ( defined( my $protonum = resolve_proto( $proto ) ) ) {
|
||||||
|
fatal_error( "The $action action is only usable with " . proto_name( $actionproto ) ) unless $actionproto == $protonum;
|
||||||
|
$proto = $protonum;
|
||||||
|
} else {
|
||||||
|
fatal_error( "Unknown protocol ($proto)" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$proto;
|
||||||
|
}
|
||||||
|
|
||||||
sub add_policy_rules( $$$$$ ) {
|
sub add_policy_rules( $$$$$ ) {
|
||||||
my ( $chainref , $target, $loglevel, $pactions, $dropmulticast ) = @_;
|
my ( $chainref , $target, $loglevel, $pactions, $dropmulticast ) = @_;
|
||||||
|
|
||||||
unless ( $target eq 'NONE' ) {
|
unless ( $target eq 'NONE' ) {
|
||||||
my @pactions;
|
|
||||||
|
|
||||||
@pactions = @$pactions;
|
|
||||||
|
|
||||||
add_ijump $chainref, j => 'RETURN', d => '224.0.0.0/4' if $dropmulticast && $target ne 'CONTINUE' && $target ne 'ACCEPT';
|
add_ijump $chainref, j => 'RETURN', d => '224.0.0.0/4' if $dropmulticast && $target ne 'CONTINUE' && $target ne 'ACCEPT';
|
||||||
|
|
||||||
for my $paction ( @pactions ) {
|
for my $paction ( @$pactions ) {
|
||||||
my ( $action ) = split ':', $paction;
|
my ( $action ) = split ':', $paction;
|
||||||
|
|
||||||
if ( ( $targets{$action} || 0 ) & ACTION ) {
|
if ( ( $targets{$action} || 0 ) & ACTION ) {
|
||||||
#
|
#
|
||||||
# Default action is a regular action -- jump to the action chain
|
# Policy action is a regular action -- jump to the action chain
|
||||||
#
|
#
|
||||||
|
if ( ( my $proto = determine_action_protocol( $action, '-' ) ) ne '-' ) {
|
||||||
|
add_ijump( $chainref, j => use_policy_action( $paction, $chainref->{name} ), p => $proto );
|
||||||
|
} else {
|
||||||
add_ijump $chainref, j => use_policy_action( $paction, $chainref->{name} );
|
add_ijump $chainref, j => use_policy_action( $paction, $chainref->{name} );
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
#
|
#
|
||||||
# Default action is an inline
|
# Policy action is an inline
|
||||||
#
|
#
|
||||||
( undef, my $level ) = split /:/, $paction, 2;
|
( undef, my $level ) = split /:/, $paction, 2;
|
||||||
( $action, my $param ) = get_target_param( $action );
|
( $action, my $param ) = get_target_param( $action );
|
||||||
@@ -979,7 +1010,7 @@ sub add_policy_rules( $$$$$ ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
log_rule $loglevel , $chainref , $target , '' if $loglevel ne '';
|
log_rule $loglevel , $chainref , $target , '' if $loglevel ne '';
|
||||||
fatal_error "Null target in policy_rules()" unless $target;
|
assert( $target );
|
||||||
|
|
||||||
if ( $target eq 'BLACKLIST' ) {
|
if ( $target eq 'BLACKLIST' ) {
|
||||||
my ( $dbl_type, $dbl_ipset, $dbl_level, $dbl_tag ) = split( ':', $config{DYNAMIC_BLACKLIST} );
|
my ( $dbl_type, $dbl_ipset, $dbl_level, $dbl_tag ) = split( ':', $config{DYNAMIC_BLACKLIST} );
|
||||||
@@ -1040,7 +1071,7 @@ sub complete_policy_chain( $$$ ) { #Chainref, Source Zone, Destination Zone
|
|||||||
progress_message_nocompress " Policy $policy from $_[1] to $_[2] using chain $chainref->{name}";
|
progress_message_nocompress " Policy $policy from $_[1] to $_[2] using chain $chainref->{name}";
|
||||||
}
|
}
|
||||||
|
|
||||||
sub ensure_rules_chain( $ );
|
sub finish_chain_sections( $ );
|
||||||
|
|
||||||
#
|
#
|
||||||
# Finish all policy Chains
|
# Finish all policy Chains
|
||||||
@@ -1054,7 +1085,7 @@ sub complete_policy_chains() {
|
|||||||
my $provisional = $chainref->{provisional};
|
my $provisional = $chainref->{provisional};
|
||||||
my $defaults = $chainref->{pactions};
|
my $defaults = $chainref->{pactions};
|
||||||
my $name = $chainref->{name};
|
my $name = $chainref->{name};
|
||||||
my $synparms = $chainref->{synparms};
|
my $synparams = $chainref->{synparams};
|
||||||
|
|
||||||
unless ( $chainref->{referenced} || $provisional || $policy eq 'CONTINUE' ) {
|
unless ( $chainref->{referenced} || $provisional || $policy eq 'CONTINUE' ) {
|
||||||
if ( $config{OPTIMIZE} & 2 ) {
|
if ( $config{OPTIMIZE} & 2 ) {
|
||||||
@@ -1064,13 +1095,13 @@ sub complete_policy_chains() {
|
|||||||
# is a single jump. Generate_matrix() will just use the policy target when
|
# is a single jump. Generate_matrix() will just use the policy target when
|
||||||
# needed.
|
# needed.
|
||||||
#
|
#
|
||||||
ensure_rules_chain $name if ( @$defaults ||
|
finish_chain_sections( $chainref ) if ( @$defaults ||
|
||||||
$loglevel ||
|
$loglevel ||
|
||||||
$synparms ||
|
$synparams ||
|
||||||
$config{MULTICAST} ||
|
$config{MULTICAST} ||
|
||||||
! ( $policy eq 'ACCEPT' || $config{FASTACCEPT} ) );
|
! ( $policy eq 'ACCEPT' || $config{FASTACCEPT} ) );
|
||||||
} else {
|
} else {
|
||||||
ensure_rules_chain $name;
|
finish_chain_sections( $chainref );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1127,13 +1158,14 @@ sub setup_syn_flood_chains() {
|
|||||||
my $limit = $chainref->{synparams};
|
my $limit = $chainref->{synparams};
|
||||||
if ( $limit && ! $filter_table->{syn_flood_chain $chainref} ) {
|
if ( $limit && ! $filter_table->{syn_flood_chain $chainref} ) {
|
||||||
my $level = $chainref->{loglevel};
|
my $level = $chainref->{loglevel};
|
||||||
my $synchainref = @zones > 1 ?
|
my $synchainref =
|
||||||
new_chain 'filter' , syn_flood_chain $chainref :
|
@zones > 1 ?
|
||||||
new_chain( 'filter' , '@' . $chainref->{name} );
|
new_chain( 'filter' , syn_flood_chain $chainref , $chainref->{synlog} ) :
|
||||||
|
new_chain( 'filter' , '@' . $chainref->{name} , '@' . $chainref->{logname} );
|
||||||
add_rule $synchainref , "${limit}-j RETURN";
|
add_rule $synchainref , "${limit}-j RETURN";
|
||||||
log_irule_limit( $level ,
|
log_irule_limit( $level ,
|
||||||
$synchainref ,
|
$synchainref ,
|
||||||
$chainref->{name} ,
|
$synchainref->{logname} ,
|
||||||
'DROP',
|
'DROP',
|
||||||
@{$globals{LOGILIMIT}} ? $globals{LOGILIMIT} : [ limit => "--limit 5/min --limit-burst 5" ] ,
|
@{$globals{LOGILIMIT}} ? $globals{LOGILIMIT} : [ limit => "--limit 5/min --limit-burst 5" ] ,
|
||||||
'' ,
|
'' ,
|
||||||
@@ -1200,12 +1232,12 @@ sub finish_chain_section ($$$) {
|
|||||||
if ( $twochains ) {
|
if ( $twochains ) {
|
||||||
$chain2ref = $chainref;
|
$chain2ref = $chainref;
|
||||||
} else {
|
} else {
|
||||||
$chain2ref = new_chain( 'filter', "${char}$chainref->{name}" );
|
$chain2ref = new_chain( 'filter', "${char}$chainref->{name}" , "${char}$chainref->{logname}" );
|
||||||
}
|
}
|
||||||
|
|
||||||
log_rule_limit( $level,
|
log_rule_limit( $level,
|
||||||
$chain2ref,
|
$chain2ref,
|
||||||
$chain2ref->{name},
|
$chain2ref->{logname},
|
||||||
uc $target,
|
uc $target,
|
||||||
$globals{LOGLIMIT},
|
$globals{LOGLIMIT},
|
||||||
$tag ,
|
$tag ,
|
||||||
@@ -1262,7 +1294,7 @@ sub finish_chain_section ($$$) {
|
|||||||
if ( $chain1ref->{is_policy} ) {
|
if ( $chain1ref->{is_policy} ) {
|
||||||
if ( $chain1ref->{synparams} ) {
|
if ( $chain1ref->{synparams} ) {
|
||||||
my $synchainref = ensure_chain 'filter', syn_flood_chain $chain1ref;
|
my $synchainref = ensure_chain 'filter', syn_flood_chain $chain1ref;
|
||||||
if ( $section == DEFAULTACTION_SECTION ) {
|
if ( $section == POLICYACTION_SECTION ) {
|
||||||
if ( $chain1ref->{policy} =~ /^(ACCEPT|CONTINUE|QUEUE|NFQUEUE)/ ) {
|
if ( $chain1ref->{policy} =~ /^(ACCEPT|CONTINUE|QUEUE|NFQUEUE)/ ) {
|
||||||
add_ijump $chain1ref, j => $synchainref, p => 'tcp --syn';
|
add_ijump $chain1ref, j => $synchainref, p => 'tcp --syn';
|
||||||
}
|
}
|
||||||
@@ -1284,21 +1316,10 @@ sub finish_chain_section ($$$) {
|
|||||||
pop_comment( $save_comment );
|
pop_comment( $save_comment );
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
sub finish_chain_sections( $ ) {
|
||||||
# Create a rules chain if necessary and populate it with the appropriate ESTABLISHED,RELATED rule(s) and perform SYN rate limiting.
|
my ( $chainref ) = @_;
|
||||||
#
|
|
||||||
# Return a reference to the chain's table entry.
|
|
||||||
#
|
|
||||||
sub ensure_rules_chain( $ )
|
|
||||||
{
|
|
||||||
my ($chain) = @_;
|
|
||||||
|
|
||||||
my $chainref = $filter_table->{$chain};
|
if ( $section & ( NEW_SECTION | POLICYACTION_SECTION ) ) {
|
||||||
|
|
||||||
$chainref = new_rules_chain( $chain ) unless $chainref;
|
|
||||||
|
|
||||||
unless ( $chainref->{referenced} ) {
|
|
||||||
if ( $section & ( NEW_SECTION | DEFAULTACTION_SECTION ) ) {
|
|
||||||
finish_chain_section $chainref , $chainref, 'ESTABLISHED,RELATED,INVALID,UNTRACKED';
|
finish_chain_section $chainref , $chainref, 'ESTABLISHED,RELATED,INVALID,UNTRACKED';
|
||||||
} elsif ( $section == UNTRACKED_SECTION ) {
|
} elsif ( $section == UNTRACKED_SECTION ) {
|
||||||
finish_chain_section $chainref , $chainref, 'ESTABLISHED,RELATED,INVALID';
|
finish_chain_section $chainref , $chainref, 'ESTABLISHED,RELATED,INVALID';
|
||||||
@@ -1311,6 +1332,23 @@ sub ensure_rules_chain( $ )
|
|||||||
$chainref->{referenced} = 1;
|
$chainref->{referenced} = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create a rules chain if necessary and populate it with the appropriate ESTABLISHED,RELATED rule(s) and perform SYN rate limiting.
|
||||||
|
#
|
||||||
|
# Return a reference to the chain's table entry.
|
||||||
|
#
|
||||||
|
sub ensure_rules_chain( $$ )
|
||||||
|
{
|
||||||
|
my ($source, $dest) = @_;
|
||||||
|
|
||||||
|
my $chain = rules_chain( $source, $dest );
|
||||||
|
|
||||||
|
my $chainref = $filter_table->{$chain};
|
||||||
|
|
||||||
|
$chainref = new_rules_chain( $source, $dest ) unless $chainref;
|
||||||
|
|
||||||
|
finish_chain_sections( $chainref ) unless $chainref->{referenced};
|
||||||
|
|
||||||
$chainref;
|
$chainref;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1417,13 +1455,13 @@ sub external_name( $ ) {
|
|||||||
#
|
#
|
||||||
# Define an Action
|
# Define an Action
|
||||||
#
|
#
|
||||||
sub new_action( $$$$$ ) {
|
sub new_action( $$$$$$ ) {
|
||||||
|
|
||||||
my ( $action , $type, $options , $actionfile , $state ) = @_;
|
my ( $action , $type, $options , $actionfile , $state, $proto ) = @_;
|
||||||
|
|
||||||
fatal_error "Invalid action name($action)" if reserved_name( $action );
|
fatal_error "Reserved action name ($action)" if reserved_name( $action );
|
||||||
|
|
||||||
$actions{$action} = { file => $actionfile, actchain => '' , type => $type, options => $options , state => $state };
|
$actions{$action} = { file => $actionfile, actchain => '' , type => $type, options => $options , state => $state, proto => $proto };
|
||||||
|
|
||||||
$targets{$action} = $type;
|
$targets{$action} = $type;
|
||||||
}
|
}
|
||||||
@@ -1431,11 +1469,7 @@ sub new_action( $$$$$ ) {
|
|||||||
#
|
#
|
||||||
# Create and record a log action chain -- Log action chains have names
|
# Create and record a log action chain -- Log action chains have names
|
||||||
# that are formed from the action name by prepending a "%" and appending
|
# that are formed from the action name by prepending a "%" and appending
|
||||||
# a 1- or 2-digit sequence number. In the functions that follow,
|
# a 1- or 2-digit sequence number.
|
||||||
# the $chain, $level and $tag variables serve as arguments to the user's
|
|
||||||
# exit. We call the exit corresponding to the name of the action but we
|
|
||||||
# set $chain to the name of the iptables chain where rules are to be added.
|
|
||||||
# Similarly, $level and $tag contain the log level and log tag respectively.
|
|
||||||
#
|
#
|
||||||
# The maximum length of a chain name is 30 characters -- since the log
|
# The maximum length of a chain name is 30 characters -- since the log
|
||||||
# action chain name is 2-3 characters longer than the base chain name,
|
# action chain name is 2-3 characters longer than the base chain name,
|
||||||
@@ -1641,7 +1675,7 @@ sub merge_inline_source_dest( $$ ) {
|
|||||||
return join( ':', $invocation, $body );
|
return join( ':', $invocation, $body );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fatal_error 'Interface names cannot appear in the DEST column within an action body' if $body =~ /:\[|:\+|/;
|
fatal_error 'Interface names cannot appear in the DEST column within an action body' if $body =~ /:\[|:\+/;
|
||||||
|
|
||||||
if ( $invocation =~ /:\[|:\+/ ) {
|
if ( $invocation =~ /:\[|:\+/ ) {
|
||||||
$invocation =~ s/:.*//;
|
$invocation =~ s/:.*//;
|
||||||
@@ -1696,34 +1730,6 @@ sub isolate_basic_target( $ ) {
|
|||||||
$target =~ /^(\w+)[(].*[)]$/ ? $1 : $target;
|
$target =~ /^(\w+)[(].*[)]$/ ? $1 : $target;
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
|
||||||
# Map pre-3.0 actions to the corresponding Macro invocation
|
|
||||||
#
|
|
||||||
|
|
||||||
sub find_old_action ( $$$ ) {
|
|
||||||
my ( $target, $macro, $param ) = @_;
|
|
||||||
|
|
||||||
if ( my $actiontype = find_macro( $macro ) ) {
|
|
||||||
( $macro, $actiontype , $param );
|
|
||||||
} else {
|
|
||||||
( $target, 0, '' );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub map_old_actions( $ ) {
|
|
||||||
my $target = shift;
|
|
||||||
|
|
||||||
if ( $target =~ /^Allow(.*)$/ ) {
|
|
||||||
find_old_action( $target, $1, 'ACCEPT' );
|
|
||||||
} elsif ( $target =~ /^Drop(.*)$/ ) {
|
|
||||||
find_old_action( $target, $1, 'DROP' );
|
|
||||||
} elsif ( $target = /^Reject(.*)$/ ) {
|
|
||||||
find_old_action( $target, $1, 'REJECT' );
|
|
||||||
} else {
|
|
||||||
( $target, 0, '' );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub process_rule ( $$$$$$$$$$$$$$$$$$$$ );
|
sub process_rule ( $$$$$$$$$$$$$$$$$$$$ );
|
||||||
sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$$ );
|
sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$$ );
|
||||||
sub process_snat1( $$$$$$$$$$$$ );
|
sub process_snat1( $$$$$$$$$$$$ );
|
||||||
@@ -1751,6 +1757,14 @@ sub process_action(\$\$$) {
|
|||||||
fatal_error "Action $action may not be used in the mangle file" if $chainref->{table} eq 'mangle';
|
fatal_error "Action $action may not be used in the mangle file" if $chainref->{table} eq 'mangle';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( $type & NAT_TABLE ) {
|
||||||
|
fatal_error "Action $action may only be used in the snat file" unless $chainref->{table} eq 'nat';
|
||||||
|
} else {
|
||||||
|
fatal_error "Action $action may not be used in the snat file" if $chainref->{table} eq 'nat';
|
||||||
|
}
|
||||||
|
|
||||||
|
$param = $1 if $param =~ /^.*\|(.*)$/; #Strip interface name off of the parameters
|
||||||
|
|
||||||
my $actionfile = $actionref->{file};
|
my $actionfile = $actionref->{file};
|
||||||
|
|
||||||
progress_message2 "$doing $actionfile for chain $chainref->{name}...";
|
progress_message2 "$doing $actionfile for chain $chainref->{name}...";
|
||||||
@@ -1939,7 +1953,7 @@ sub process_action(\$\$$) {
|
|||||||
|
|
||||||
for my $proto (split_list( $protos, 'Protocol' ) ) {
|
for my $proto (split_list( $protos, 'Protocol' ) ) {
|
||||||
process_snat1( $chainref,
|
process_snat1( $chainref,
|
||||||
$action,
|
$nolog ? $action : merge_levels( join(':', @actparams{'chain','loglevel','logtag'}), $action ),
|
||||||
$source,
|
$source,
|
||||||
$dest,
|
$dest,
|
||||||
$proto,
|
$proto,
|
||||||
@@ -2041,9 +2055,10 @@ sub process_actions() {
|
|||||||
my $opts = $type == INLINE ? NOLOG_OPT : 0;
|
my $opts = $type == INLINE ? NOLOG_OPT : 0;
|
||||||
|
|
||||||
my $state = '';
|
my $state = '';
|
||||||
|
my $proto = 0;
|
||||||
|
|
||||||
if ( $action =~ /:/ ) {
|
if ( $action =~ /:/ ) {
|
||||||
warning_message 'Default Actions are now specified in /etc/shorewall/shorewall.conf';
|
warning_message 'Policy Actions are now specified in /etc/shorewall/shorewall.conf';
|
||||||
$action =~ s/:.*$//;
|
$action =~ s/:.*$//;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2057,6 +2072,9 @@ sub process_actions() {
|
|||||||
} else {
|
} else {
|
||||||
fatal_error( q(The 'state' option is reserved for use in the actions.std file) );
|
fatal_error( q(The 'state' option is reserved for use in the actions.std file) );
|
||||||
}
|
}
|
||||||
|
} elsif ( /^proto=(.+)$/ ) {
|
||||||
|
fatal_error "Unknown Protocol ($1)" unless defined( $proto = resolve_proto( $1 ) );
|
||||||
|
fatal_error "A protocol may not be specified on the REJECT_ACTION ($action)" if $action eq $config{REJECT_ACTION};
|
||||||
} else {
|
} else {
|
||||||
fatal_error "Invalid option ($_)" unless $options{$_};
|
fatal_error "Invalid option ($_)" unless $options{$_};
|
||||||
$opts |= $options{$_};
|
$opts |= $options{$_};
|
||||||
@@ -2066,9 +2084,9 @@ sub process_actions() {
|
|||||||
unless ( $type & INLINE ) {
|
unless ( $type & INLINE ) {
|
||||||
$type = INLINE if $opts & INLINE_OPT;
|
$type = INLINE if $opts & INLINE_OPT;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
fatal_error "Conflicting OPTIONS ($options)" if ( $opts & NOINLINE_OPT && $type == INLINE ) || ( $opts & INLINE_OPT && $opts & BUILTIN_OPT );
|
fatal_error "Conflicting OPTIONS ($options)" if ( $opts & NOINLINE_OPT && $type == INLINE ) || ( $opts & INLINE_OPT && $opts & BUILTIN_OPT );
|
||||||
|
}
|
||||||
|
|
||||||
if ( my $actiontype = $targets{$action} ) {
|
if ( my $actiontype = $targets{$action} ) {
|
||||||
if ( ( $actiontype & ACTION ) && ( $type == INLINE ) ) {
|
if ( ( $actiontype & ACTION ) && ( $type == INLINE ) ) {
|
||||||
@@ -2077,6 +2095,11 @@ sub process_actions() {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$proto = $actions{$action}{proto} unless $proto;
|
||||||
|
delete $actions{$action};
|
||||||
|
delete $targets{$action};
|
||||||
|
} elsif ( ( $actiontype & INLINE ) && ( $type == ACTION ) && $opts & NOINLINE_OPT ) {
|
||||||
|
$proto = $actions{$action}{proto} unless $proto;
|
||||||
delete $actions{$action};
|
delete $actions{$action};
|
||||||
delete $targets{$action};
|
delete $targets{$action};
|
||||||
} else {
|
} else {
|
||||||
@@ -2086,6 +2109,8 @@ sub process_actions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( $opts & BUILTIN_OPT ) {
|
if ( $opts & BUILTIN_OPT ) {
|
||||||
|
warning_message( "The 'proto' option has no effect when specified on a builtin action" ) if $proto;
|
||||||
|
|
||||||
my $actiontype = USERBUILTIN | OPTIONS;
|
my $actiontype = USERBUILTIN | OPTIONS;
|
||||||
$actiontype |= MANGLE_TABLE if $opts & MANGLE_OPT;
|
$actiontype |= MANGLE_TABLE if $opts & MANGLE_OPT;
|
||||||
$actiontype |= RAW_TABLE if $opts & RAW_OPT;
|
$actiontype |= RAW_TABLE if $opts & RAW_OPT;
|
||||||
@@ -2118,7 +2143,7 @@ sub process_actions() {
|
|||||||
|
|
||||||
fatal_error "Missing Action File ($actionfile)" unless -f $actionfile;
|
fatal_error "Missing Action File ($actionfile)" unless -f $actionfile;
|
||||||
|
|
||||||
new_action ( $action, $type, $opts, $actionfile , $state );
|
new_action ( $action, $type, $opts, $actionfile , $state , $proto );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2156,7 +2181,7 @@ sub process_reject_action() {
|
|||||||
#
|
#
|
||||||
# This gets called very early in the compilation process so we fake the section
|
# This gets called very early in the compilation process so we fake the section
|
||||||
#
|
#
|
||||||
$section = DEFAULTACTION_SECTION;
|
$section = POLICYACTION_SECTION;
|
||||||
|
|
||||||
if ( ( $targets{$action} || 0 ) == ACTION ) {
|
if ( ( $targets{$action} || 0 ) == ACTION ) {
|
||||||
add_ijump $rejectref, j => use_policy_action( $action, $rejectref->{name} );
|
add_ijump $rejectref, j => use_policy_action( $action, $rejectref->{name} );
|
||||||
@@ -2490,7 +2515,7 @@ sub verify_audit($;$$) {
|
|||||||
# the target is a macro, the macro is expanded and this function is called recursively for each rule in the expansion.
|
# the target is a macro, the macro is expanded and this function is called recursively for each rule in the expansion.
|
||||||
# Similarly, if a new action tuple is encountered, this function is called recursively for each rule in the action
|
# Similarly, if a new action tuple is encountered, this function is called recursively for each rule in the action
|
||||||
# body. In this latter case, a reference to the tuple's chain is passed in the first ($chainref) argument. A chain
|
# body. In this latter case, a reference to the tuple's chain is passed in the first ($chainref) argument. A chain
|
||||||
# reference is also passed when rules are being generated during processing of a macro used as a default action.
|
# reference is also passed when rules are being generated during processing of a macro used as a policy action.
|
||||||
#
|
#
|
||||||
|
|
||||||
sub process_rule ( $$$$$$$$$$$$$$$$$$$$ ) {
|
sub process_rule ( $$$$$$$$$$$$$$$$$$$$ ) {
|
||||||
@@ -2593,10 +2618,6 @@ sub process_rule ( $$$$$$$$$$$$$$$$$$$$ ) {
|
|||||||
#
|
#
|
||||||
$actiontype = $targets{$basictarget} || find_macro( $basictarget );
|
$actiontype = $targets{$basictarget} || find_macro( $basictarget );
|
||||||
|
|
||||||
if ( $config{ MAPOLDACTIONS } ) {
|
|
||||||
( $basictarget, $actiontype , $param ) = map_old_actions( $basictarget ) unless $actiontype || supplied $param;
|
|
||||||
}
|
|
||||||
|
|
||||||
fatal_error "Unknown ACTION ($action)" unless $actiontype;
|
fatal_error "Unknown ACTION ($action)" unless $actiontype;
|
||||||
|
|
||||||
$usergenerated = $actiontype & IPTABLES;
|
$usergenerated = $actiontype & IPTABLES;
|
||||||
@@ -2962,7 +2983,7 @@ sub process_rule ( $$$$$$$$$$$$$$$$$$$$ ) {
|
|||||||
#
|
#
|
||||||
# Mark the chain as referenced and add appropriate rules from earlier sections.
|
# Mark the chain as referenced and add appropriate rules from earlier sections.
|
||||||
#
|
#
|
||||||
$chainref = ensure_rules_chain $chain;
|
$chainref = ensure_rules_chain ${sourcezone}, ${destzone};
|
||||||
#
|
#
|
||||||
# Handle rules in the BLACKLIST, ESTABLISHED, RELATED, INVALID and UNTRACKED sections
|
# Handle rules in the BLACKLIST, ESTABLISHED, RELATED, INVALID and UNTRACKED sections
|
||||||
#
|
#
|
||||||
@@ -2972,7 +2993,7 @@ sub process_rule ( $$$$$$$$$$$$$$$$$$$$ ) {
|
|||||||
|
|
||||||
unless ( $auxref ) {
|
unless ( $auxref ) {
|
||||||
my $save_comment = push_comment;
|
my $save_comment = push_comment;
|
||||||
$auxref = new_chain 'filter', $auxchain;
|
$auxref = new_chain 'filter', $auxchain, $log_functions{$section}->( $sourcezone, $destzone );
|
||||||
$auxref->{blacklistsection} = 1 if $blacklist;
|
$auxref->{blacklistsection} = 1 if $blacklist;
|
||||||
|
|
||||||
add_ijump( $chainref, j => $auxref, state_imatch( $section_states{$section} ) );
|
add_ijump( $chainref, j => $auxref, state_imatch( $section_states{$section} ) );
|
||||||
@@ -3001,6 +3022,10 @@ sub process_rule ( $$$$$$$$$$$$$$$$$$$$ ) {
|
|||||||
my $actionchain; # Name of the action chain
|
my $actionchain; # Name of the action chain
|
||||||
|
|
||||||
if ( $actiontype & ACTION ) {
|
if ( $actiontype & ACTION ) {
|
||||||
|
#
|
||||||
|
# Verify action 'proto', if any
|
||||||
|
#
|
||||||
|
$proto = determine_action_protocol( $basictarget, $proto );
|
||||||
#
|
#
|
||||||
# Save NAT-oriented column contents
|
# Save NAT-oriented column contents
|
||||||
#
|
#
|
||||||
@@ -3151,7 +3176,7 @@ sub process_rule ( $$$$$$$$$$$$$$$$$$$$ ) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
unless ( $section & ( NEW_SECTION | DEFAULTACTION_SECTION ) ||
|
unless ( $section & ( NEW_SECTION | POLICYACTION_SECTION ) ||
|
||||||
$inaction ||
|
$inaction ||
|
||||||
$blacklist ||
|
$blacklist ||
|
||||||
$basictarget eq 'dropInvalid' ) {
|
$basictarget eq 'dropInvalid' ) {
|
||||||
@@ -3287,7 +3312,7 @@ sub process_rule ( $$$$$$$$$$$$$$$$$$$$ ) {
|
|||||||
$log_action ,
|
$log_action ,
|
||||||
$exceptionrule ,
|
$exceptionrule ,
|
||||||
$usergenerated && ! $loglevel )
|
$usergenerated && ! $loglevel )
|
||||||
unless unreachable_warning( $wildcard || $section == DEFAULTACTION_SECTION, $chainref );
|
unless unreachable_warning( $wildcard || $section == POLICYACTION_SECTION, $chainref );
|
||||||
}
|
}
|
||||||
|
|
||||||
$generated = 1;
|
$generated = 1;
|
||||||
@@ -3365,7 +3390,7 @@ sub check_state( $ ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $section & ( NEW_SECTION | DEFAULTACTION_SECTION ) ) {
|
if ( $section & ( NEW_SECTION | POLICYACTION_SECTION ) ) {
|
||||||
if ( $state eq 'NEW' ) {
|
if ( $state eq 'NEW' ) {
|
||||||
#
|
#
|
||||||
# If an INVALID or UNTRACKED rule would be emitted then we must include the state match
|
# If an INVALID or UNTRACKED rule would be emitted then we must include the state match
|
||||||
@@ -3906,7 +3931,7 @@ sub process_rules() {
|
|||||||
#
|
#
|
||||||
# No need to finish the NEW section since no rules need to be generated
|
# No need to finish the NEW section since no rules need to be generated
|
||||||
#
|
#
|
||||||
$section = $next_section = DEFAULTACTION_SECTION;
|
$section = $next_section = POLICYACTION_SECTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub process_mangle_inline( $$$$$$$$$$$$$$$$$$$$ ) {
|
sub process_mangle_inline( $$$$$$$$$$$$$$$$$$$$ ) {
|
||||||
@@ -4589,6 +4614,52 @@ sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$$ ) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
TCPMSS => {
|
||||||
|
defaultchain => FORWARD,
|
||||||
|
allowedchains => FORWARD | POSTROUTING,
|
||||||
|
minparams => 0,
|
||||||
|
maxparams => 2,
|
||||||
|
function => sub () {
|
||||||
|
if ( $proto eq '-' ) {
|
||||||
|
$proto = TCP;
|
||||||
|
} else {
|
||||||
|
fatal_error 'TCPMSS only valid with TCP' unless $proto eq '6' || $proto eq 'tcp';
|
||||||
|
}
|
||||||
|
|
||||||
|
$target = 'TCPMSS ';
|
||||||
|
$matches .= '--tcp-flags SYN,RST SYN ';
|
||||||
|
|
||||||
|
if ( supplied $params ) {
|
||||||
|
my ( $mss, $ipsec ) = split /,/, $params;
|
||||||
|
|
||||||
|
if ( supplied $mss ) {
|
||||||
|
if ( $mss eq 'pmtu' ) {
|
||||||
|
$target .= '--clamp-mss-to-pmtu';
|
||||||
|
} else {
|
||||||
|
my $num = numeric_value $mss;
|
||||||
|
fatal_error "Invalid MSS ($mss)" unless defined $num && $num >= 500 && $num < 65534;
|
||||||
|
$target .= "--set-mss $num";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$target .= '--clamp-mss-to-pmtu';
|
||||||
|
}
|
||||||
|
if ( supplied $ipsec && $ipsec ne 'all' ) {
|
||||||
|
if ( $ipsec eq '-' || $ipsec eq 'none' ) {
|
||||||
|
$matches .= '-m policy --pol none --dir out ';
|
||||||
|
} elsif ( $ipsec eq 'ipsec' ) {
|
||||||
|
$matches .= '-m policy --pol ipsec --dir out ';
|
||||||
|
} else {
|
||||||
|
fatal_error "Invalid ipsec parameter ($ipsec)";
|
||||||
|
}
|
||||||
|
|
||||||
|
require_capability 'POLICY_MATCH', "The $ipsec ipsec option", 's';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$target .= '--clamp-mss-to-pmtu';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
TOS => {
|
TOS => {
|
||||||
defaultchain => 0,
|
defaultchain => 0,
|
||||||
allowedchains => PREROUTING | FORWARD | OUTPUT | POSTROUTING,
|
allowedchains => PREROUTING | FORWARD | OUTPUT | POSTROUTING,
|
||||||
@@ -4612,8 +4683,7 @@ sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$$ ) {
|
|||||||
my ( $port, $ip, $bad );
|
my ( $port, $ip, $bad );
|
||||||
|
|
||||||
if ( $params ) {
|
if ( $params ) {
|
||||||
( $port, $ip, $bad ) = split_list $params, 'Parameter';
|
( $port, $ip ) = split /,/, $params, 2;
|
||||||
fatal_error "Invalid TPROXY specification( TPROXY($params) )" if defined $bad;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
my $mark = in_hex( $globals{TPROXY_MARK} ) . '/' . in_hex( $globals{TPROXY_MARK} );
|
my $mark = in_hex( $globals{TPROXY_MARK} ) . '/' . in_hex( $globals{TPROXY_MARK} );
|
||||||
@@ -4680,6 +4750,10 @@ sub process_mangle_rule1( $$$$$$$$$$$$$$$$$$$ ) {
|
|||||||
function => sub() {
|
function => sub() {
|
||||||
fatal_error( qq(Action $cmd may not be used in the mangle file) ) unless $actiontype & MANGLE_TABLE;
|
fatal_error( qq(Action $cmd may not be used in the mangle file) ) unless $actiontype & MANGLE_TABLE;
|
||||||
#
|
#
|
||||||
|
# Verify action 'proto', if any
|
||||||
|
#
|
||||||
|
$proto = determine_action_protocol( $cmd, $proto );
|
||||||
|
#
|
||||||
# Create the action:level:tag:param tuple.
|
# Create the action:level:tag:param tuple.
|
||||||
#
|
#
|
||||||
my $normalized_target = normalize_action( $cmd, '', $params );
|
my $normalized_target = normalize_action( $cmd, '', $params );
|
||||||
@@ -5205,17 +5279,22 @@ sub process_mangle_rule( $ ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub process_snat_inline( $$$$$$$$$$$$$ ) {
|
sub process_snat_inline( $$$$$$$$$$$$$$ ) {
|
||||||
my ($inline, $chainref, $params, $source, $dest, $protos, $ports, $ipsec, $mark, $user, $condition, $origdest, $probability ) = @_;
|
my ($inline, $chainref, $params, $loglevel, $source, $dest, $protos, $ports, $ipsec, $mark, $user, $condition, $origdest, $probability ) = @_;
|
||||||
|
|
||||||
|
my ( $level,
|
||||||
|
$tag ) = split( ':', $loglevel, 2 );
|
||||||
my $oldparms = push_action_params( $inline,
|
my $oldparms = push_action_params( $inline,
|
||||||
$chainref,
|
$chainref,
|
||||||
$params,
|
$params,
|
||||||
'none',
|
supplied $level ? $level : 'none',
|
||||||
'' ,
|
defined $tag ? $tag : '' ,
|
||||||
$chainref->{name} );
|
$chainref->{name} );
|
||||||
|
|
||||||
my $inlinefile = $actions{$inline}{file};
|
my $actionref = $actions{$inline};
|
||||||
|
my $inlinefile = $actionref->{file};
|
||||||
|
my $options = $actionref->{options};
|
||||||
|
my $nolog = $options & NOLOG_OPT;
|
||||||
my $matches = fetch_inline_matches;
|
my $matches = fetch_inline_matches;
|
||||||
|
|
||||||
progress_message "..Expanding inline action $inlinefile...";
|
progress_message "..Expanding inline action $inlinefile...";
|
||||||
@@ -5250,6 +5329,8 @@ sub process_snat_inline( $$$$$$$$$$$$$ ) {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$maction = merge_levels( join(':', @actparams{'chain','loglevel','logtag'}), $maction ) unless $nolog;
|
||||||
|
|
||||||
$msource = $source if $msource eq '-';
|
$msource = $source if $msource eq '-';
|
||||||
|
|
||||||
if ( $mdest eq '-' ) {
|
if ( $mdest eq '-' ) {
|
||||||
@@ -5294,7 +5375,7 @@ sub process_snat_inline( $$$$$$$$$$$$$ ) {
|
|||||||
# Process a record in the snat file
|
# Process a record in the snat file
|
||||||
#
|
#
|
||||||
sub process_snat1( $$$$$$$$$$$$ ) {
|
sub process_snat1( $$$$$$$$$$$$ ) {
|
||||||
my ( $chainref, $action, $source, $dest, $proto, $ports, $ipsec, $mark, $user, $condition, $origdest, $probability ) = @_;
|
my ( $chainref, $origaction, $source, $dest, $proto, $ports, $ipsec, $mark, $user, $condition, $origdest, $probability ) = @_;
|
||||||
|
|
||||||
my $inchain;
|
my $inchain;
|
||||||
my $inaction;
|
my $inaction;
|
||||||
@@ -5311,6 +5392,9 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
my $actiontype;
|
my $actiontype;
|
||||||
my $interfaces;
|
my $interfaces;
|
||||||
my $normalized_action;
|
my $normalized_action;
|
||||||
|
my ( $action, $loglevel ) = split_action( $origaction );
|
||||||
|
my $logaction;
|
||||||
|
my $param;
|
||||||
|
|
||||||
if ( $action =~ /^MASQUERADE(\+)?(?:\((.+)\))?$/ ) {
|
if ( $action =~ /^MASQUERADE(\+)?(?:\((.+)\))?$/ ) {
|
||||||
$target = 'MASQUERADE';
|
$target = 'MASQUERADE';
|
||||||
@@ -5319,6 +5403,7 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
$addresses = ( $2 || '' );
|
$addresses = ( $2 || '' );
|
||||||
$options = 'random' if $addresses =~ s/:?random$//;
|
$options = 'random' if $addresses =~ s/:?random$//;
|
||||||
$add_snat_aliases = '';
|
$add_snat_aliases = '';
|
||||||
|
$logaction = 'MASQ';
|
||||||
} elsif ( $action =~ /^SNAT(\+)?\((.+)\)$/ ) {
|
} elsif ( $action =~ /^SNAT(\+)?\((.+)\)$/ ) {
|
||||||
$pre_nat = $1;
|
$pre_nat = $1;
|
||||||
$addresses = $2;
|
$addresses = $2;
|
||||||
@@ -5327,13 +5412,16 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
$options .= ':persistent' if $addresses =~ s/:persistent//;
|
$options .= ':persistent' if $addresses =~ s/:persistent//;
|
||||||
$options .= ':random' if $addresses =~ s/:random//;
|
$options .= ':random' if $addresses =~ s/:random//;
|
||||||
$options =~ s/^://;
|
$options =~ s/^://;
|
||||||
|
$logaction = 'SNAT';
|
||||||
} elsif ( $action =~ /^CONTINUE(\+)?$/ ) {
|
} elsif ( $action =~ /^CONTINUE(\+)?$/ ) {
|
||||||
$add_snat_aliases = 0;
|
$add_snat_aliases = 0;
|
||||||
$actiontype = $builtin_target{$target = 'RETURN'};
|
$actiontype = $builtin_target{$target = 'RETURN'};
|
||||||
$pre_nat = $1;
|
$pre_nat = $1;
|
||||||
|
$logaction = 'RETURN';
|
||||||
} elsif ( $action eq 'MASQUERADE' ) {
|
} elsif ( $action eq 'MASQUERADE' ) {
|
||||||
$actiontype = $builtin_target{$target = 'MASQUERADE'};
|
$actiontype = $builtin_target{$target = 'MASQUERADE'};
|
||||||
$add_snat_aliases = '';
|
$add_snat_aliases = '';
|
||||||
|
$logaction = 'MASQ';
|
||||||
} else {
|
} else {
|
||||||
( $target , $params ) = get_target_param1( $action );
|
( $target , $params ) = get_target_param1( $action );
|
||||||
|
|
||||||
@@ -5341,11 +5429,24 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
|
|
||||||
$actiontype = ( $targets{$target} || 0 );
|
$actiontype = ( $targets{$target} || 0 );
|
||||||
|
|
||||||
|
if ( $actiontype & LOGRULE ) {
|
||||||
|
$logaction = 'LOG';
|
||||||
|
if ( $target eq 'LOG' ) {
|
||||||
|
fatal_error 'LOG requires a log level' unless supplied $loglevel;
|
||||||
|
} else {
|
||||||
|
$target = "$target($params)";
|
||||||
|
validate_level( $action );
|
||||||
|
$loglevel = supplied $loglevel ? join( ':', $target, $loglevel ) : $target;
|
||||||
|
$target = 'LOG';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
fatal_error "Invalid ACTION ($action)" unless $actiontype & ( ACTION | INLINE );
|
fatal_error "Invalid ACTION ($action)" unless $actiontype & ( ACTION | INLINE );
|
||||||
|
$logaction = '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( $inchain = defined $chainref ) {
|
if ( $inchain = defined $chainref ) {
|
||||||
( $inaction, undef, $interfaces, undef, undef ) = split /:/, $normalized_action = $chainref->{action}, 5 if $chainref->{action};
|
( $inaction, undef,undef,undef,$param ) = split( /:/, $normalized_action = $chainref->{action}) if $chainref->{action};
|
||||||
fatal_error q('+' is not allowed within an action body) if $pre_nat;
|
fatal_error q('+' is not allowed within an action body) if $pre_nat;
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
@@ -5353,6 +5454,8 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
#
|
#
|
||||||
if ( $inaction ) {
|
if ( $inaction ) {
|
||||||
$destnets = $dest;
|
$destnets = $dest;
|
||||||
|
assert( $param =~ /^(.*)\|/ );
|
||||||
|
$interfaces=$1;
|
||||||
} elsif ( $family == F_IPV4 ) {
|
} elsif ( $family == F_IPV4 ) {
|
||||||
if ( $dest =~ /^([^:]+)::([^:]*)$/ ) {
|
if ( $dest =~ /^([^:]+)::([^:]*)$/ ) {
|
||||||
$add_snat_aliases = 0;
|
$add_snat_aliases = 0;
|
||||||
@@ -5382,22 +5485,6 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
$interfaces = $dest;
|
$interfaces = $dest;
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
# Handle IPSEC options, if any
|
|
||||||
#
|
|
||||||
if ( $ipsec ne '-' ) {
|
|
||||||
fatal_error "Non-empty IPSEC column requires policy match support in your kernel and iptables" unless have_capability( 'POLICY_MATCH' );
|
|
||||||
|
|
||||||
if ( $ipsec =~ /^yes$/i ) {
|
|
||||||
$baserule .= do_ipsec_options 'out', 'ipsec', '';
|
|
||||||
} elsif ( $ipsec =~ /^no$/i ) {
|
|
||||||
$baserule .= do_ipsec_options 'out', 'none', '';
|
|
||||||
} else {
|
|
||||||
$baserule .= do_ipsec_options 'out', 'ipsec', $ipsec;
|
|
||||||
}
|
|
||||||
} elsif ( have_ipsec ) {
|
|
||||||
$baserule .= '-m policy --pol none --dir out ';
|
|
||||||
}
|
|
||||||
#
|
|
||||||
# Handle Protocol, Ports and Condition
|
# Handle Protocol, Ports and Condition
|
||||||
#
|
#
|
||||||
$baserule .= do_proto( $proto, $ports, '' );
|
$baserule .= do_proto( $proto, $ports, '' );
|
||||||
@@ -5408,7 +5495,9 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
$baserule .= do_user( $user ) if $user ne '-';
|
$baserule .= do_user( $user ) if $user ne '-';
|
||||||
$baserule .= do_probability( $probability ) if $probability ne '-';
|
$baserule .= do_probability( $probability ) if $probability ne '-';
|
||||||
|
|
||||||
for my $fullinterface ( split_list( $interfaces, 'interface' ) ) {
|
my @interfaces = split_list( $interfaces, 'interface' );
|
||||||
|
|
||||||
|
for my $fullinterface ( @interfaces ) {
|
||||||
|
|
||||||
my $rule = '';
|
my $rule = '';
|
||||||
my $saveaddresses = $addresses;
|
my $saveaddresses = $addresses;
|
||||||
@@ -5416,9 +5505,21 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
my $savebaserule = $baserule;
|
my $savebaserule = $baserule;
|
||||||
my $interface = $fullinterface;
|
my $interface = $fullinterface;
|
||||||
|
|
||||||
$interface =~ s/:.*//; #interface name may include 'alias'
|
if ( $inaction ) {
|
||||||
|
$interface =~ s/:.*// if $family == F_IPV4; #interface name may include 'alias'
|
||||||
|
} else {
|
||||||
|
if ( $interface eq firewall_zone ) {
|
||||||
|
if ( @interfaces == 1 ) {
|
||||||
|
fatal_error q('+' not valid when the DEST is $FW) if $pre_nat;
|
||||||
|
fatal_error q('MASQUERADE' not allowed when DEST is $FW) if $action eq 'MASQUERADE';
|
||||||
|
require_capability 'NAT_INPUT_CHAIN', '$FW in the DEST column', 's';
|
||||||
|
$interface = '';
|
||||||
|
} else {
|
||||||
|
fatal_error q($FW may not appear in a list of interfaces);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$interface =~ s/:.*// if $family == F_IPV4; #interface name may include 'alias'
|
||||||
|
|
||||||
unless ( $inaction ) {
|
|
||||||
if ( $interface =~ /(.*)[(](\w*)[)]$/ ) {
|
if ( $interface =~ /(.*)[(](\w*)[)]$/ ) {
|
||||||
$interface = $1;
|
$interface = $1;
|
||||||
my $provider = $2;
|
my $provider = $2;
|
||||||
@@ -5441,11 +5542,34 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
$rule .= match_dest_dev( $interface );
|
$rule .= match_dest_dev( $interface );
|
||||||
$interface = $interfaceref->{name};
|
$interface = $interfaceref->{name};
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$chainref = ensure_chain('nat', $pre_nat ? snat_chain $interface : masq_chain $interface);
|
$chainref = $interface ? ensure_chain('nat', $pre_nat ? snat_chain $interface : masq_chain $interface) : $nat_table->{INPUT};
|
||||||
}
|
}
|
||||||
|
|
||||||
$baserule .= do_condition( $condition , $chainref->{name} );
|
$baserule .= do_condition( $condition , $chainref->{name} );
|
||||||
|
#
|
||||||
|
# Handle IPSEC options, if any
|
||||||
|
#
|
||||||
|
if ( $ipsec ne '-' ) {
|
||||||
|
fatal_error "Non-empty IPSEC column requires policy match support in your kernel and iptables" unless have_capability( 'POLICY_MATCH' );
|
||||||
|
|
||||||
|
my $dir = $interface ? 'out' : 'in';
|
||||||
|
|
||||||
|
if ( $ipsec =~ /^yes$/i ) {
|
||||||
|
$baserule .= do_ipsec_options $dir, 'ipsec', '';
|
||||||
|
} elsif ( $ipsec =~ /^no$/i ) {
|
||||||
|
$baserule .= do_ipsec_options $dir, 'none', '';
|
||||||
|
} else {
|
||||||
|
$baserule .= do_ipsec_options $dir, 'ipsec', $ipsec;
|
||||||
|
}
|
||||||
|
} elsif ( have_ipsec ) {
|
||||||
|
if ( $interface ) {
|
||||||
|
$baserule .= '-m policy --pol none --dir out ';
|
||||||
|
} else {
|
||||||
|
$baserule .= '-m policy --pol none --dir in ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
my $detectaddress = 0;
|
my $detectaddress = 0;
|
||||||
my $exceptionrule = '';
|
my $exceptionrule = '';
|
||||||
@@ -5453,6 +5577,7 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
|
|
||||||
if ( $action eq 'SNAT' ) {
|
if ( $action eq 'SNAT' ) {
|
||||||
if ( $addresses eq 'detect' ) {
|
if ( $addresses eq 'detect' ) {
|
||||||
|
fatal_error q('detect' not allowed when the destination is $FW) unless $interface;
|
||||||
my $variable = get_interface_address $interface;
|
my $variable = get_interface_address $interface;
|
||||||
$target .= " --to-source $variable";
|
$target .= " --to-source $variable";
|
||||||
|
|
||||||
@@ -5579,6 +5704,7 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
$target .= $addrlist;
|
$target .= $addrlist;
|
||||||
}
|
}
|
||||||
} elsif ( $action eq 'MASQUERADE' ) {
|
} elsif ( $action eq 'MASQUERADE' ) {
|
||||||
|
fatal_error q('MASQUERADE' not allowed when the destination is $FW') unless $interface;
|
||||||
if ( supplied $addresses ) {
|
if ( supplied $addresses ) {
|
||||||
validate_portpair1($proto, $addresses );
|
validate_portpair1($proto, $addresses );
|
||||||
$target .= " --to-ports $addresses";
|
$target .= " --to-ports $addresses";
|
||||||
@@ -5594,8 +5720,9 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
process_snat_inline( $target,
|
process_snat_inline( $target,
|
||||||
$chainref,
|
$chainref,
|
||||||
$params,
|
$params,
|
||||||
|
$loglevel,
|
||||||
$source,
|
$source,
|
||||||
supplied $destnets && $destnets ne '-' ? $inaction ? $destnets : join( ':', $interface, $destnets ) : $inaction ? '-' : $interface,
|
supplied( $destnets ) && $destnets ne '-' ? $inaction || $interface ? join( ':', $interface, $destnets ) : $destnets : $inaction ? '-' : $interface,
|
||||||
$proto,
|
$proto,
|
||||||
$ports,
|
$ports,
|
||||||
$ipsec,
|
$ipsec,
|
||||||
@@ -5608,10 +5735,14 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
if ( $actiontype & ACTION ) {
|
if ( $actiontype & ACTION ) {
|
||||||
fatal_error( qq(Action $target may not be used in the snat file) ) unless $actiontype & NAT_TABLE;
|
fatal_error( qq(Action $target may not be used in the snat file) ) unless $actiontype & NAT_TABLE;
|
||||||
#
|
#
|
||||||
|
# Verify action 'proto', if any
|
||||||
|
#
|
||||||
|
$proto = determine_action_protocol( $target, $proto );
|
||||||
|
#
|
||||||
# Create the action:level:tag:param tuple. Since we don't allow logging out of nat POSTROUTING, we store
|
# Create the action:level:tag:param tuple. Since we don't allow logging out of nat POSTROUTING, we store
|
||||||
# the interface name in the log tag
|
# the interface name in the log tag
|
||||||
#
|
#
|
||||||
my $normalized_target = normalize_action( $target, "none:$interface", $params );
|
my $normalized_target = normalize_action( $target, "$loglevel", "$interface|$params" );
|
||||||
fatal_error( "Action $target invoked Recursively (" . join( '->', map( external_name( $_ ), @actionstack , $normalized_target ) ) . ')' ) if $active{$target};
|
fatal_error( "Action $target invoked Recursively (" . join( '->', map( external_name( $_ ), @actionstack , $normalized_target ) ) . ')' ) if $active{$target};
|
||||||
|
|
||||||
my $ref = use_action( 'nat', $normalized_target );
|
my $ref = use_action( 'nat', $normalized_target );
|
||||||
@@ -5621,9 +5752,6 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
# First reference to this tuple - process_action may modify both $normalized_target and $ref!!!
|
# First reference to this tuple - process_action may modify both $normalized_target and $ref!!!
|
||||||
#
|
#
|
||||||
process_action( $normalized_target, $ref, $chainref->{name} );
|
process_action( $normalized_target, $ref, $chainref->{name} );
|
||||||
#
|
|
||||||
# Capture the name of the action chain
|
|
||||||
#
|
|
||||||
} else {
|
} else {
|
||||||
#
|
#
|
||||||
# We've seen this tuple before
|
# We've seen this tuple before
|
||||||
@@ -5632,6 +5760,12 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$target = $ref->{name};
|
$target = $ref->{name};
|
||||||
|
|
||||||
|
if ( $actions{$target}{options} & LOGJUMP_OPT ) {
|
||||||
|
$logaction = $target;
|
||||||
|
} else {
|
||||||
|
$loglevel = '';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for my $option ( split_list2( $options , 'option' ) ) {
|
for my $option ( split_list2( $options , 'option' ) ) {
|
||||||
if ( $option eq 'random' ) {
|
if ( $option eq 'random' ) {
|
||||||
@@ -5653,22 +5787,22 @@ sub process_snat1( $$$$$$$$$$$$ ) {
|
|||||||
$destnets = ALLIP unless supplied $destnets && $destnets ne '-';
|
$destnets = ALLIP unless supplied $destnets && $destnets ne '-';
|
||||||
|
|
||||||
expand_rule( $chainref ,
|
expand_rule( $chainref ,
|
||||||
POSTROUTE_RESTRICT ,
|
$interface ? POSTROUTE_RESTRICT : INPUT_RESTRICT ,
|
||||||
$prerule ,
|
$prerule ,
|
||||||
$baserule . $inlinematches . $rule ,
|
$baserule . $inlinematches . $rule ,
|
||||||
$source ,
|
$source ,
|
||||||
$destnets ,
|
$destnets ,
|
||||||
$origdest ,
|
$origdest ,
|
||||||
$target ,
|
$target ,
|
||||||
'' ,
|
$loglevel ,
|
||||||
'' ,
|
$logaction ,
|
||||||
$exceptionrule ,
|
$exceptionrule ,
|
||||||
'' )
|
'' )
|
||||||
unless unreachable_warning( 0, $chainref );
|
unless unreachable_warning( 0, $chainref );
|
||||||
|
|
||||||
conditional_rule_end( $chainref ) if $detectaddress || $conditional;
|
conditional_rule_end( $chainref ) if $detectaddress || $conditional;
|
||||||
|
|
||||||
if ( $add_snat_aliases && $addresses ) {
|
if ( $interface && $add_snat_aliases && $addresses ) {
|
||||||
my ( $interface, $alias , $remainder ) = split( /:/, $fullinterface, 3 );
|
my ( $interface, $alias , $remainder ) = split( /:/, $fullinterface, 3 );
|
||||||
fatal_error "Invalid alias ($alias:$remainder)" if defined $remainder;
|
fatal_error "Invalid alias ($alias:$remainder)" if defined $remainder;
|
||||||
for my $address ( split_list $addresses, 'address' ) {
|
for my $address ( split_list $addresses, 'address' ) {
|
||||||
@@ -5717,23 +5851,15 @@ sub process_snat( )
|
|||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Process the masq or snat file
|
# Process the snat file. Convert the masq file if found and non-empty
|
||||||
#
|
#
|
||||||
sub setup_snat( $ ) # Convert masq->snat if true
|
sub setup_snat()
|
||||||
{
|
{
|
||||||
my $fn;
|
my $fn;
|
||||||
my $have_masq;
|
|
||||||
|
|
||||||
if ( $_[0] ) {
|
unless ( convert_masq ) {
|
||||||
convert_masq();
|
|
||||||
} elsif ( $fn = open_file( 'masq', 1, 1 ) ) {
|
|
||||||
first_entry( sub { progress_message2 "$doing $fn..."; require_capability 'NAT_ENABLED' , "a non-empty masq file" , 's'; } );
|
|
||||||
process_one_masq(0), $have_masq = 1 while read_a_line( NORMAL_READ );
|
|
||||||
}
|
|
||||||
|
|
||||||
unless ( $have_masq ) {
|
|
||||||
#
|
#
|
||||||
# Masq file empty or didn't exist
|
# Masq file was empty or didn't exist
|
||||||
#
|
#
|
||||||
if ( $fn = open_file( 'snat', 1, 1 ) ) {
|
if ( $fn = open_file( 'snat', 1, 1 ) ) {
|
||||||
first_entry( sub { progress_message2 "$doing $fn..."; require_capability 'NAT_ENABLED' , "a non-empty snat file" , 's'; } );
|
first_entry( sub { progress_message2 "$doing $fn..."; require_capability 'NAT_ENABLED' , "a non-empty snat file" , 's'; } );
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Tc.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Tc.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Traffic Control is from tc4shorewall Version 0.5
|
# Traffic Control is from tc4shorewall Version 0.5
|
||||||
# (c) 2005 Arne Bernin <arne@ucbering.de>
|
# (c) 2005 Arne Bernin <arne@ucbering.de>
|
||||||
@@ -225,11 +225,11 @@ sub handle_in_bandwidth( $$$ ) {
|
|||||||
if ( have_capability 'BASIC_FILTER' ) {
|
if ( have_capability 'BASIC_FILTER' ) {
|
||||||
if ( $in_rate ) {
|
if ( $in_rate ) {
|
||||||
emit( "run_tc filter add dev $physical parent ffff: protocol all prio 10 basic \\",
|
emit( "run_tc filter add dev $physical parent ffff: protocol all prio 10 basic \\",
|
||||||
" police mpu 64 drop rate ${in_rate}kbit burst $in_burst\n" );
|
" police mpu 64 rate ${in_rate}kbit burst $in_burst drop\n" );
|
||||||
} else {
|
} else {
|
||||||
emit( "run_tc filter add dev $physical parent ffff: protocol all prio 10 \\",
|
emit( "run_tc filter add dev $physical parent ffff: protocol all prio 10 \\",
|
||||||
" estimator $in_interval $in_decay basic \\",
|
" estimator $in_interval $in_decay basic \\",
|
||||||
" police drop avrate ${in_avrate}kbit\n" );
|
" police avrate ${in_avrate}kbit drop\n" );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
emit( "run_tc filter add dev $physical parent ffff: protocol all prio 10 \\" ,
|
emit( "run_tc filter add dev $physical parent ffff: protocol all prio 10 \\" ,
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/Shorewall/Tunnels.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Tunnels.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007-2016 - Tom Eastep (teastep@shorewall.net)
|
||||||
@@ -85,8 +85,8 @@ sub setup_tunnels() {
|
|||||||
for my $zone ( split_list $gatewayzones, 'zone' ) {
|
for my $zone ( split_list $gatewayzones, 'zone' ) {
|
||||||
my $type = zone_type( $zone );
|
my $type = zone_type( $zone );
|
||||||
fatal_error "Invalid zone ($zone) for GATEWAY ZONE" if $type == FIREWALL || $type == BPORT;
|
fatal_error "Invalid zone ($zone) for GATEWAY ZONE" if $type == FIREWALL || $type == BPORT;
|
||||||
$inchainref = ensure_rules_chain( rules_chain( ${zone}, ${fw} ) );
|
$inchainref = ensure_rules_chain( ${zone}, ${fw} );
|
||||||
$outchainref = ensure_rules_chain( rules_chain( ${fw}, ${zone} ) );
|
$outchainref = ensure_rules_chain( ${fw}, ${zone} );
|
||||||
|
|
||||||
unless ( have_ipsec ) {
|
unless ( have_ipsec ) {
|
||||||
add_tunnel_rule $inchainref, p => 50, @$source;
|
add_tunnel_rule $inchainref, p => 50, @$source;
|
||||||
@@ -250,8 +250,8 @@ sub setup_tunnels() {
|
|||||||
|
|
||||||
fatal_error "Invalid tunnel ZONE ($zone)" if $zonetype & ( FIREWALL | BPORT );
|
fatal_error "Invalid tunnel ZONE ($zone)" if $zonetype & ( FIREWALL | BPORT );
|
||||||
|
|
||||||
my $inchainref = ensure_rules_chain( rules_chain( ${zone}, ${fw} ) );
|
my $inchainref = ensure_rules_chain( ${zone}, ${fw} );
|
||||||
my $outchainref = ensure_rules_chain( rules_chain( ${fw}, ${zone} ) );
|
my $outchainref = ensure_rules_chain( ${fw}, ${zone} );
|
||||||
|
|
||||||
$gateways = ALLIP if $gateways eq '-';
|
$gateways = ALLIP if $gateways eq '-';
|
||||||
|
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 4.4 -- /usr/share/shorewall/Shorewall/Zones.pm
|
# Shorewall 5.2 -- /usr/share/shorewall/Shorewall/Zones.pm
|
||||||
#
|
#
|
||||||
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
# This program is under GPL [http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt]
|
||||||
#
|
#
|
||||||
# (c) 2007,2008,2009,2010,2011 - Tom Eastep (teastep@shorewall.net)
|
# (c) 2007,2008,2009,2010,2011-2017 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -90,7 +90,6 @@ our @EXPORT = ( qw( NOTHING
|
|||||||
interface_is_optional
|
interface_is_optional
|
||||||
interface_is_required
|
interface_is_required
|
||||||
find_interfaces_by_option
|
find_interfaces_by_option
|
||||||
find_interfaces_by_option1
|
|
||||||
get_interface_option
|
get_interface_option
|
||||||
get_interface_origin
|
get_interface_origin
|
||||||
interface_has_option
|
interface_has_option
|
||||||
@@ -253,6 +252,17 @@ use constant { NO_UPDOWN => 1,
|
|||||||
|
|
||||||
our %validinterfaceoptions;
|
our %validinterfaceoptions;
|
||||||
|
|
||||||
|
our %procinterfaceoptions=( accept_ra => 1,
|
||||||
|
arp_filter => 1,
|
||||||
|
arp_ignore => 1,
|
||||||
|
forward => 1,
|
||||||
|
logmartians => 1,
|
||||||
|
proxyarp => 1,
|
||||||
|
proxyndp => 1,
|
||||||
|
routefilter => 1,
|
||||||
|
sourceroute => 1,
|
||||||
|
);
|
||||||
|
|
||||||
our %prohibitunmanaged = (
|
our %prohibitunmanaged = (
|
||||||
blacklist => 1,
|
blacklist => 1,
|
||||||
bridge => 1,
|
bridge => 1,
|
||||||
@@ -317,7 +327,7 @@ sub initialize( $$ ) {
|
|||||||
%mapbase = ();
|
%mapbase = ();
|
||||||
%mapbase1 = ();
|
%mapbase1 = ();
|
||||||
$baseseq = 0;
|
$baseseq = 0;
|
||||||
$minroot = 0;
|
$minroot = undef;
|
||||||
$loopback_interface = '';
|
$loopback_interface = '';
|
||||||
|
|
||||||
%validzoneoptions = ( mss => NUMERIC,
|
%validzoneoptions = ( mss => NUMERIC,
|
||||||
@@ -339,7 +349,7 @@ sub initialize( $$ ) {
|
|||||||
arp_ignore => ENUM_IF_OPTION,
|
arp_ignore => ENUM_IF_OPTION,
|
||||||
blacklist => SIMPLE_IF_OPTION + IF_OPTION_HOST,
|
blacklist => SIMPLE_IF_OPTION + IF_OPTION_HOST,
|
||||||
bridge => SIMPLE_IF_OPTION,
|
bridge => SIMPLE_IF_OPTION,
|
||||||
dbl => ENUM_IF_OPTION,
|
dbl => ENUM_IF_OPTION + IF_OPTION_WILDOK,
|
||||||
destonly => SIMPLE_IF_OPTION + IF_OPTION_HOST,
|
destonly => SIMPLE_IF_OPTION + IF_OPTION_HOST,
|
||||||
detectnets => OBSOLETE_IF_OPTION,
|
detectnets => OBSOLETE_IF_OPTION,
|
||||||
dhcp => SIMPLE_IF_OPTION,
|
dhcp => SIMPLE_IF_OPTION,
|
||||||
@@ -363,9 +373,9 @@ sub initialize( $$ ) {
|
|||||||
upnp => SIMPLE_IF_OPTION,
|
upnp => SIMPLE_IF_OPTION,
|
||||||
upnpclient => SIMPLE_IF_OPTION,
|
upnpclient => SIMPLE_IF_OPTION,
|
||||||
mss => NUMERIC_IF_OPTION + IF_OPTION_WILDOK,
|
mss => NUMERIC_IF_OPTION + IF_OPTION_WILDOK,
|
||||||
physical => STRING_IF_OPTION + IF_OPTION_HOST,
|
physical => STRING_IF_OPTION + IF_OPTION_HOST + IF_OPTION_WILDOK,
|
||||||
unmanaged => SIMPLE_IF_OPTION,
|
unmanaged => SIMPLE_IF_OPTION,
|
||||||
wait => NUMERIC_IF_OPTION + IF_OPTION_WILDOK,
|
wait => NUMERIC_IF_OPTION,
|
||||||
);
|
);
|
||||||
%validhostoptions = (
|
%validhostoptions = (
|
||||||
blacklist => 1,
|
blacklist => 1,
|
||||||
@@ -390,7 +400,7 @@ sub initialize( $$ ) {
|
|||||||
%validinterfaceoptions = ( accept_ra => NUMERIC_IF_OPTION,
|
%validinterfaceoptions = ( accept_ra => NUMERIC_IF_OPTION,
|
||||||
blacklist => SIMPLE_IF_OPTION + IF_OPTION_HOST,
|
blacklist => SIMPLE_IF_OPTION + IF_OPTION_HOST,
|
||||||
bridge => SIMPLE_IF_OPTION,
|
bridge => SIMPLE_IF_OPTION,
|
||||||
dbl => ENUM_IF_OPTION,
|
dbl => ENUM_IF_OPTION + IF_OPTION_WILDOK,
|
||||||
destonly => SIMPLE_IF_OPTION + IF_OPTION_HOST,
|
destonly => SIMPLE_IF_OPTION + IF_OPTION_HOST,
|
||||||
dhcp => SIMPLE_IF_OPTION,
|
dhcp => SIMPLE_IF_OPTION,
|
||||||
ignore => NUMERIC_IF_OPTION + IF_OPTION_WILDOK,
|
ignore => NUMERIC_IF_OPTION + IF_OPTION_WILDOK,
|
||||||
@@ -402,18 +412,18 @@ sub initialize( $$ ) {
|
|||||||
optional => SIMPLE_IF_OPTION,
|
optional => SIMPLE_IF_OPTION,
|
||||||
proxyndp => BINARY_IF_OPTION,
|
proxyndp => BINARY_IF_OPTION,
|
||||||
required => SIMPLE_IF_OPTION,
|
required => SIMPLE_IF_OPTION,
|
||||||
routeback => BINARY_IF_OPTION + IF_OPTION_ZONEONLY + IF_OPTION_HOST + IF_OPTION_VSERVER,
|
routeback => BINARY_IF_OPTION + IF_OPTION_ZONEONLY + IF_OPTION_HOST + IF_OPTION_VSERVER + IF_OPTION_WILDOK,
|
||||||
rpfilter => SIMPLE_IF_OPTION,
|
rpfilter => SIMPLE_IF_OPTION,
|
||||||
sfilter => IPLIST_IF_OPTION,
|
sfilter => IPLIST_IF_OPTION,
|
||||||
sourceroute => BINARY_IF_OPTION,
|
sourceroute => BINARY_IF_OPTION,
|
||||||
tcpflags => BINARY_IF_OPTION + IF_OPTION_HOST,
|
tcpflags => BINARY_IF_OPTION + IF_OPTION_HOST,
|
||||||
mss => NUMERIC_IF_OPTION + IF_OPTION_WILDOK,
|
mss => NUMERIC_IF_OPTION + IF_OPTION_WILDOK,
|
||||||
forward => BINARY_IF_OPTION,
|
forward => BINARY_IF_OPTION,
|
||||||
physical => STRING_IF_OPTION + IF_OPTION_HOST,
|
physical => STRING_IF_OPTION + IF_OPTION_HOST + IF_OPTION_WILDOK,
|
||||||
unmanaged => SIMPLE_IF_OPTION,
|
unmanaged => SIMPLE_IF_OPTION,
|
||||||
upnp => SIMPLE_IF_OPTION,
|
upnp => SIMPLE_IF_OPTION,
|
||||||
upnpclient => SIMPLE_IF_OPTION,
|
upnpclient => SIMPLE_IF_OPTION,
|
||||||
wait => NUMERIC_IF_OPTION + IF_OPTION_WILDOK,
|
wait => NUMERIC_IF_OPTION,
|
||||||
);
|
);
|
||||||
%validhostoptions = (
|
%validhostoptions = (
|
||||||
blacklist => 1,
|
blacklist => 1,
|
||||||
@@ -714,7 +724,7 @@ sub interface_match( $$ ) {
|
|||||||
return 1 if $piface eq $cifaceref->{bridge};
|
return 1 if $piface eq $cifaceref->{bridge};
|
||||||
return 1 if $ciface eq $pifaceref->{bridge};
|
return 1 if $ciface eq $pifaceref->{bridge};
|
||||||
|
|
||||||
if ( $minroot ) {
|
if ( defined $minroot ) {
|
||||||
if ( $piface =~ /\+$/ ) {
|
if ( $piface =~ /\+$/ ) {
|
||||||
my $root = $pifaceref->{root};
|
my $root = $pifaceref->{root};
|
||||||
my $rlength = length( $root );
|
my $rlength = length( $root );
|
||||||
@@ -1204,15 +1214,16 @@ sub process_interface( $$ ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
my $wildcard = 0;
|
my $wildcard = 0;
|
||||||
|
my $physwild = 0;
|
||||||
my $root;
|
my $root;
|
||||||
|
|
||||||
if ( $interface =~ /\+$/ ) {
|
if ( $interface =~ /\+$/ ) {
|
||||||
$wildcard = 1;
|
$wildcard = $physwild = 1; # Default physical name is the logical name
|
||||||
$root = substr( $interface, 0, -1 );
|
$root = substr( $interface, 0, -1 );
|
||||||
$roots{$root} = $interface;
|
$roots{$root} = $interface;
|
||||||
my $len = length $root;
|
my $len = length $root;
|
||||||
|
|
||||||
if ( $minroot ) {
|
if ( defined $minroot ) {
|
||||||
$minroot = $len if $minroot > $len;
|
$minroot = $len if $minroot > $len;
|
||||||
} else {
|
} else {
|
||||||
$minroot = $len;
|
$minroot = $len;
|
||||||
@@ -1258,8 +1269,6 @@ sub process_interface( $$ ) {
|
|||||||
my %hostoptions = ( dynamic => 0 );
|
my %hostoptions = ( dynamic => 0 );
|
||||||
|
|
||||||
for my $option (split_list1 $options, 'option' ) {
|
for my $option (split_list1 $options, 'option' ) {
|
||||||
next if $option eq '-';
|
|
||||||
|
|
||||||
( $option, my $value ) = split /=/, $option;
|
( $option, my $value ) = split /=/, $option;
|
||||||
|
|
||||||
fatal_error "Invalid Interface option ($option)" unless my $type = $validinterfaceoptions{$option};
|
fatal_error "Invalid Interface option ($option)" unless my $type = $validinterfaceoptions{$option};
|
||||||
@@ -1296,7 +1305,6 @@ sub process_interface( $$ ) {
|
|||||||
} elsif ( $type == BINARY_IF_OPTION ) {
|
} elsif ( $type == BINARY_IF_OPTION ) {
|
||||||
$value = 1 unless defined $value;
|
$value = 1 unless defined $value;
|
||||||
fatal_error "Option value for '$option' must be 0 or 1" unless ( $value eq '0' || $value eq '1' );
|
fatal_error "Option value for '$option' must be 0 or 1" unless ( $value eq '0' || $value eq '1' );
|
||||||
fatal_error "The '$option' option may not be used with a wild-card interface name" if $wildcard && ! $type && IF_OPTION_WILDOK;
|
|
||||||
$options{$option} = $value;
|
$options{$option} = $value;
|
||||||
$hostoptions{$option} = $value if $hostopt;
|
$hostoptions{$option} = $value if $hostopt;
|
||||||
} elsif ( $type == ENUM_IF_OPTION ) {
|
} elsif ( $type == ENUM_IF_OPTION ) {
|
||||||
@@ -1320,7 +1328,6 @@ sub process_interface( $$ ) {
|
|||||||
assert( 0 );
|
assert( 0 );
|
||||||
}
|
}
|
||||||
} elsif ( $type == NUMERIC_IF_OPTION ) {
|
} elsif ( $type == NUMERIC_IF_OPTION ) {
|
||||||
fatal_error "The '$option' option may not be specified on a wildcard interface" if $wildcard && ! $type && IF_OPTION_WILDOK;
|
|
||||||
$value = $defaultinterfaceoptions{$option} unless defined $value;
|
$value = $defaultinterfaceoptions{$option} unless defined $value;
|
||||||
fatal_error "The '$option' option requires a value" unless defined $value;
|
fatal_error "The '$option' option requires a value" unless defined $value;
|
||||||
my $numval = numeric_value $value;
|
my $numval = numeric_value $value;
|
||||||
@@ -1372,7 +1379,9 @@ sub process_interface( $$ ) {
|
|||||||
|
|
||||||
fatal_error "Duplicate physical interface name ($value)" if ( $interfaces{$value} && ! $port );
|
fatal_error "Duplicate physical interface name ($value)" if ( $interfaces{$value} && ! $port );
|
||||||
|
|
||||||
fatal_error "The type of 'physical' name ($value) doesn't match the type of interface name ($interface)" if $wildcard && ! $value =~ /\+$/;
|
$physwild = ( $value =~ /\+$/ );
|
||||||
|
fatal_error "The type of 'physical' name ($value) doesn't match the type of interface name ($interface)" if $wildcard && ! $physwild;
|
||||||
|
|
||||||
$physical = $value;
|
$physical = $value;
|
||||||
} else {
|
} else {
|
||||||
assert(0);
|
assert(0);
|
||||||
@@ -1400,6 +1409,14 @@ sub process_interface( $$ ) {
|
|||||||
$options{ignore} = 0;
|
$options{ignore} = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for my $option ( keys %options ) {
|
||||||
|
if ( $root ) {
|
||||||
|
warning_message( "The '$option' option is ignored when used with a wildcard physical name" ) if $physwild && $procinterfaceoptions{$option};
|
||||||
|
} else {
|
||||||
|
warning_message( "The '$option' option is ignored when used with interface name '+'" ) unless $validinterfaceoptions{$option} & IF_OPTION_WILDOK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( $netsref eq 'dynamic' ) {
|
if ( $netsref eq 'dynamic' ) {
|
||||||
my $ipset = $family == F_IPV4 ? "${zone}" : "6_${zone}";
|
my $ipset = $family == F_IPV4 ? "${zone}" : "6_${zone}";
|
||||||
$ipset = join( '_', $ipset, var_base1( $physical ) ) unless $zoneref->{options}{in_out}{dynamic_shared};
|
$ipset = join( '_', $ipset, var_base1( $physical ) ) unless $zoneref->{options}{in_out}{dynamic_shared};
|
||||||
@@ -1458,6 +1475,7 @@ sub process_interface( $$ ) {
|
|||||||
zones => {},
|
zones => {},
|
||||||
origin => shortlineinfo( '' ),
|
origin => shortlineinfo( '' ),
|
||||||
wildcard => $wildcard,
|
wildcard => $wildcard,
|
||||||
|
physwild => $physwild, # Currently unused
|
||||||
};
|
};
|
||||||
|
|
||||||
$interfaces{$physical} = $interfaceref if $physical ne $interface;
|
$interfaces{$physical} = $interfaceref if $physical ne $interface;
|
||||||
@@ -1616,7 +1634,7 @@ sub known_interface($)
|
|||||||
|
|
||||||
my $iface = $interface;
|
my $iface = $interface;
|
||||||
|
|
||||||
if ( $minroot ) {
|
if ( defined $minroot ) {
|
||||||
#
|
#
|
||||||
# We have wildcard interfaces -- see if this interface matches one of their roots
|
# We have wildcard interfaces -- see if this interface matches one of their roots
|
||||||
#
|
#
|
||||||
@@ -1857,7 +1875,8 @@ sub find_interfaces_by_option( $;$ ) {
|
|||||||
for my $interface ( @interfaces ) {
|
for my $interface ( @interfaces ) {
|
||||||
my $interfaceref = $interfaces{$interface};
|
my $interfaceref = $interfaces{$interface};
|
||||||
|
|
||||||
next unless $interfaceref->{root};
|
next unless $interfaceref->{root}; # Don't return '+' interface
|
||||||
|
next if $procinterfaceoptions{$option} && $interfaceref->{physwild}; # Ignore /proc options on wildcard interface
|
||||||
|
|
||||||
my $optionsref = $interfaceref->{options};
|
my $optionsref = $interfaceref->{options};
|
||||||
if ( $nonzero ) {
|
if ( $nonzero ) {
|
||||||
@@ -1872,35 +1891,6 @@ sub find_interfaces_by_option( $;$ ) {
|
|||||||
\@ints;
|
\@ints;
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
|
||||||
# Returns reference to array of interfaces with the passed option. Unlike the preceding function, this one:
|
|
||||||
#
|
|
||||||
# - All entries in %interfaces are searched.
|
|
||||||
# - Returns a two-element list; the second element indicates whether any members of the list have wildcard physical names
|
|
||||||
#
|
|
||||||
sub find_interfaces_by_option1( $ ) {
|
|
||||||
my $option = $_[0];
|
|
||||||
my @ints = ();
|
|
||||||
my $wild = 0;
|
|
||||||
|
|
||||||
for my $interface ( @interfaces ) {
|
|
||||||
my $interfaceref = $interfaces{$interface};
|
|
||||||
|
|
||||||
next unless defined $interfaceref->{physical};
|
|
||||||
|
|
||||||
my $optionsref = $interfaceref->{options};
|
|
||||||
|
|
||||||
if ( $optionsref && defined $optionsref->{$option} ) {
|
|
||||||
$wild ||= $interfaceref->{wildcard};
|
|
||||||
push @ints , $interface
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return unless defined wantarray;
|
|
||||||
|
|
||||||
wantarray ? ( \@ints, $wild ) : \@ints;
|
|
||||||
}
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Return the value of an option for an interface
|
# Return the value of an option for an interface
|
||||||
#
|
#
|
||||||
@@ -2031,6 +2021,7 @@ sub verify_required_interfaces( $ ) {
|
|||||||
|
|
||||||
emit( "esac\n" );
|
emit( "esac\n" );
|
||||||
|
|
||||||
|
$returnvalue = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
$interfaces = find_interfaces_by_option( 'required' );
|
$interfaces = find_interfaces_by_option( 'required' );
|
||||||
@@ -2040,7 +2031,7 @@ sub verify_required_interfaces( $ ) {
|
|||||||
if ( $generate_case ) {
|
if ( $generate_case ) {
|
||||||
emit( 'case "$COMMAND" in' );
|
emit( 'case "$COMMAND" in' );
|
||||||
push_indent;
|
push_indent;
|
||||||
emit( 'start|reload|restore|refresh)' );
|
emit( 'start|reload|restore)' );
|
||||||
push_indent;
|
push_indent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2076,7 +2067,7 @@ sub verify_required_interfaces( $ ) {
|
|||||||
emit( ';;' );
|
emit( ';;' );
|
||||||
pop_indent;
|
pop_indent;
|
||||||
pop_indent;
|
pop_indent;
|
||||||
emit( 'esac' );
|
emit( "esac\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
$returnvalue = 1;
|
$returnvalue = 1;
|
||||||
|
@@ -32,7 +32,6 @@
|
|||||||
# --directory=<directory> # Directory where configuration resides (default is /etc/shorewall)
|
# --directory=<directory> # Directory where configuration resides (default is /etc/shorewall)
|
||||||
# --timestamp # Timestamp all progress messages
|
# --timestamp # Timestamp all progress messages
|
||||||
# --debug # Print stack trace on warnings and fatal error.
|
# --debug # Print stack trace on warnings and fatal error.
|
||||||
# --refresh=<chainlist> # Make the 'refresh' command refresh a comma-separated list of chains rather than 'blacklst'.
|
|
||||||
# --log=<filename> # Log file
|
# --log=<filename> # Log file
|
||||||
# --log_verbosity=<number> # Log Verbosity range -1 to 2
|
# --log_verbosity=<number> # Log Verbosity range -1 to 2
|
||||||
# --family=<number> # IP family; 4 = IPv4 (default), 6 = IPv6
|
# --family=<number> # IP family; 4 = IPv4 (default), 6 = IPv6
|
||||||
@@ -40,7 +39,6 @@
|
|||||||
# --shorewallrc=<path> # Path to global shorewallrc file.
|
# --shorewallrc=<path> # Path to global shorewallrc file.
|
||||||
# --shorewallrc1=<path> # Path to export shorewallrc file.
|
# --shorewallrc1=<path> # Path to export shorewallrc file.
|
||||||
# --config_path=<path-list> # Search path for config files
|
# --config_path=<path-list> # Search path for config files
|
||||||
# --inline # Update alternative column specifications
|
|
||||||
# --update # Update configuration to current release
|
# --update # Update configuration to current release
|
||||||
#
|
#
|
||||||
# If the <filename> is omitted, then a 'check' operation is performed.
|
# If the <filename> is omitted, then a 'check' operation is performed.
|
||||||
@@ -64,7 +62,6 @@ usage: compiler.pl [ <option> ... ] [ <filename> ]
|
|||||||
[ --timestamp ]
|
[ --timestamp ]
|
||||||
[ --debug ]
|
[ --debug ]
|
||||||
[ --confess ]
|
[ --confess ]
|
||||||
[ --refresh=<chainlist> ]
|
|
||||||
[ --log=<filename> ]
|
[ --log=<filename> ]
|
||||||
[ --log-verbose={-1|0-2} ]
|
[ --log-verbose={-1|0-2} ]
|
||||||
[ --test ]
|
[ --test ]
|
||||||
@@ -75,7 +72,6 @@ usage: compiler.pl [ <option> ... ] [ <filename> ]
|
|||||||
[ --shorewallrc=<pathname> ]
|
[ --shorewallrc=<pathname> ]
|
||||||
[ --shorewallrc1=<pathname> ]
|
[ --shorewallrc1=<pathname> ]
|
||||||
[ --config_path=<path-list> ]
|
[ --config_path=<path-list> ]
|
||||||
[ --inline ]
|
|
||||||
_EOF_
|
_EOF_
|
||||||
|
|
||||||
exit shift @_;
|
exit shift @_;
|
||||||
@@ -90,7 +86,6 @@ my $verbose = 0;
|
|||||||
my $timestamp = 0;
|
my $timestamp = 0;
|
||||||
my $debug = 0;
|
my $debug = 0;
|
||||||
my $confess = 0;
|
my $confess = 0;
|
||||||
my $chains = ':none:';
|
|
||||||
my $log = '';
|
my $log = '';
|
||||||
my $log_verbose = 0;
|
my $log_verbose = 0;
|
||||||
my $help = 0;
|
my $help = 0;
|
||||||
@@ -102,7 +97,6 @@ my $update = 0;
|
|||||||
my $config_path = '';
|
my $config_path = '';
|
||||||
my $shorewallrc = '';
|
my $shorewallrc = '';
|
||||||
my $shorewallrc1 = '';
|
my $shorewallrc1 = '';
|
||||||
my $inline = 0;
|
|
||||||
|
|
||||||
Getopt::Long::Configure ('bundling');
|
Getopt::Long::Configure ('bundling');
|
||||||
|
|
||||||
@@ -117,8 +111,6 @@ my $result = GetOptions('h' => \$help,
|
|||||||
'timestamp' => \$timestamp,
|
'timestamp' => \$timestamp,
|
||||||
't' => \$timestamp,
|
't' => \$timestamp,
|
||||||
'debug' => \$debug,
|
'debug' => \$debug,
|
||||||
'r=s' => \$chains,
|
|
||||||
'refresh=s' => \$chains,
|
|
||||||
'log=s' => \$log,
|
'log=s' => \$log,
|
||||||
'l=s' => \$log,
|
'l=s' => \$log,
|
||||||
'log_verbosity=i' => \$log_verbose,
|
'log_verbosity=i' => \$log_verbose,
|
||||||
@@ -132,7 +124,6 @@ my $result = GetOptions('h' => \$help,
|
|||||||
'annotate' => \$annotate,
|
'annotate' => \$annotate,
|
||||||
'u' => \$update,
|
'u' => \$update,
|
||||||
'update' => \$update,
|
'update' => \$update,
|
||||||
'inline' => \$inline,
|
|
||||||
'config_path=s' => \$config_path,
|
'config_path=s' => \$config_path,
|
||||||
'shorewallrc=s' => \$shorewallrc,
|
'shorewallrc=s' => \$shorewallrc,
|
||||||
'shorewallrc1=s' => \$shorewallrc1,
|
'shorewallrc1=s' => \$shorewallrc1,
|
||||||
@@ -147,7 +138,6 @@ compiler( script => $ARGV[0] || '',
|
|||||||
timestamp => $timestamp,
|
timestamp => $timestamp,
|
||||||
debug => $debug,
|
debug => $debug,
|
||||||
export => $export,
|
export => $export,
|
||||||
chains => $chains,
|
|
||||||
log => $log,
|
log => $log,
|
||||||
log_verbosity => $log_verbose,
|
log_verbosity => $log_verbose,
|
||||||
test => $test,
|
test => $test,
|
||||||
@@ -159,5 +149,4 @@ compiler( script => $ARGV[0] || '',
|
|||||||
config_path => $config_path,
|
config_path => $config_path,
|
||||||
shorewallrc => $shorewallrc,
|
shorewallrc => $shorewallrc,
|
||||||
shorewallrc1 => $shorewallrc1,
|
shorewallrc1 => $shorewallrc1,
|
||||||
inline => $inline,
|
|
||||||
);
|
);
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
# (c) 1999-2017 - Tom Eastep (teastep@shorewall.net)
|
# (c) 1999-2018 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# This program is part of Shorewall.
|
# This program is part of Shorewall.
|
||||||
#
|
#
|
||||||
@@ -192,7 +192,7 @@ find_default_interface() {
|
|||||||
# Determine if Interface is up
|
# Determine if Interface is up
|
||||||
#
|
#
|
||||||
interface_is_up() {
|
interface_is_up() {
|
||||||
[ -n "$($IP -$g_family link list dev $1 2> /dev/null | grep -e '[<,]UP[,>]')" ]
|
[ -n "$($IP -$g_family link list dev $1 2> /dev/null | grep -e '[<,]UP[,>]' | grep -v ' state DOWN ')" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -1065,8 +1065,6 @@ clear_firewall() {
|
|||||||
run_iptables -F
|
run_iptables -F
|
||||||
qt $IPTABLES -t raw -F
|
qt $IPTABLES -t raw -F
|
||||||
|
|
||||||
echo 1 > /proc/sys/net/ipv4/ip_forward
|
|
||||||
|
|
||||||
if [ -n "$DISABLE_IPV6" ]; then
|
if [ -n "$DISABLE_IPV6" ]; then
|
||||||
if [ -x $IP6TABLES ]; then
|
if [ -x $IP6TABLES ]; then
|
||||||
$IP6TABLES -P INPUT ACCEPT 2> /dev/null
|
$IP6TABLES -P INPUT ACCEPT 2> /dev/null
|
||||||
@@ -1375,8 +1373,6 @@ clear_firewall() {
|
|||||||
run_iptables -F
|
run_iptables -F
|
||||||
qt $IP6TABLES -t raw -F
|
qt $IP6TABLES -t raw -F
|
||||||
|
|
||||||
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
|
|
||||||
|
|
||||||
run_clear_exit
|
run_clear_exit
|
||||||
|
|
||||||
set_state "Cleared"
|
set_state "Cleared"
|
||||||
|
@@ -1,5 +1,23 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
# Code imported from /usr/share/shorewall/prog.footer
|
# Code imported from /usr/share/shorewall/prog.footer
|
||||||
|
#
|
||||||
|
# (c) 1999-2018 - Tom Eastep (teastep@shorewall.net)
|
||||||
|
#
|
||||||
|
# This program is part of Shorewall.
|
||||||
|
#
|
||||||
|
# This program 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.
|
||||||
|
#
|
||||||
|
# This program 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.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# Give Usage Information
|
# Give Usage Information
|
||||||
@@ -268,8 +286,10 @@ case "$COMMAND" in
|
|||||||
error_message "$g_product is not running"
|
error_message "$g_product is not running"
|
||||||
status=2
|
status=2
|
||||||
elif [ $# -eq 1 ]; then
|
elif [ $# -eq 1 ]; then
|
||||||
$g_tool -Z
|
for table in raw mangle nat filter; do
|
||||||
$g_tool -t mangle -Z
|
qt $g_tool -t $table -Z
|
||||||
|
done
|
||||||
|
|
||||||
date > ${VARDIR}/restarted
|
date > ${VARDIR}/restarted
|
||||||
status=0
|
status=0
|
||||||
progress_message3 "$g_product Counters Reset"
|
progress_message3 "$g_product Counters Reset"
|
||||||
@@ -353,6 +373,7 @@ case "$COMMAND" in
|
|||||||
clear)
|
clear)
|
||||||
[ $# -ne 1 ] && usage 2
|
[ $# -ne 1 ] && usage 2
|
||||||
progress_message3 "Clearing $g_product...."
|
progress_message3 "Clearing $g_product...."
|
||||||
|
detect_configuration
|
||||||
clear_firewall
|
clear_firewall
|
||||||
status=0
|
status=0
|
||||||
if [ -n "$SUBSYSLOCK" ]; then
|
if [ -n "$SUBSYSLOCK" ]; then
|
||||||
|
@@ -45,6 +45,8 @@ LOG_MARTIANS=Yes
|
|||||||
|
|
||||||
LOG_VERBOSITY=2
|
LOG_VERBOSITY=2
|
||||||
|
|
||||||
|
LOG_ZONE=Both
|
||||||
|
|
||||||
LOGALLNEW=
|
LOGALLNEW=
|
||||||
|
|
||||||
LOGFILE=/var/log/messages
|
LOGFILE=/var/log/messages
|
||||||
@@ -77,7 +79,7 @@ UNTRACKED_LOG_LEVEL=
|
|||||||
|
|
||||||
ARPTABLES=
|
ARPTABLES=
|
||||||
|
|
||||||
CONFIG_PATH="${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
CONFIG_PATH=":${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
||||||
|
|
||||||
GEOIPDIR=/usr/share/xt_geoip/LE
|
GEOIPDIR=/usr/share/xt_geoip/LE
|
||||||
|
|
||||||
@@ -183,8 +185,6 @@ IGNOREUNKNOWNVARIABLES=No
|
|||||||
|
|
||||||
IMPLICIT_CONTINUE=No
|
IMPLICIT_CONTINUE=No
|
||||||
|
|
||||||
INLINE_MATCHES=Yes
|
|
||||||
|
|
||||||
IPSET_WARNINGS=Yes
|
IPSET_WARNINGS=Yes
|
||||||
|
|
||||||
IP_FORWARDING=On
|
IP_FORWARDING=On
|
||||||
@@ -199,8 +199,6 @@ MACLIST_TTL=
|
|||||||
|
|
||||||
MANGLE_ENABLED=Yes
|
MANGLE_ENABLED=Yes
|
||||||
|
|
||||||
MAPOLDACTIONS=No
|
|
||||||
|
|
||||||
MINIUPNPD=No
|
MINIUPNPD=No
|
||||||
|
|
||||||
MARK_IN_FORWARD_CHAIN=No
|
MARK_IN_FORWARD_CHAIN=No
|
||||||
@@ -219,6 +217,8 @@ PERL_HASH_SEED=0
|
|||||||
|
|
||||||
REJECT_ACTION=
|
REJECT_ACTION=
|
||||||
|
|
||||||
|
RENAME_COMBINED=Yes
|
||||||
|
|
||||||
REQUIRE_INTERFACE=Yes
|
REQUIRE_INTERFACE=Yes
|
||||||
|
|
||||||
RESTART=restart
|
RESTART=restart
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Shorewall - Sample Interfaces File for one-interface configuration.
|
# Shorewall - Sample Interfaces File for one-interface configuration.
|
||||||
# Copyright (C) 2006-2015 by the Shorewall Team
|
# Copyright (C) 2006-2017 by the Shorewall Team
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -14,4 +14,4 @@
|
|||||||
?FORMAT 2
|
?FORMAT 2
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#ZONE INTERFACE OPTIONS
|
#ZONE INTERFACE OPTIONS
|
||||||
net eth0 dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0
|
net NET_IF dhcp,tcpflags,logmartians,nosmurfs,sourceroute=0,physical=eth0
|
||||||
|
@@ -56,6 +56,8 @@ LOG_MARTIANS=Yes
|
|||||||
|
|
||||||
LOG_VERBOSITY=2
|
LOG_VERBOSITY=2
|
||||||
|
|
||||||
|
LOG_ZONE=Both
|
||||||
|
|
||||||
LOGALLNEW=
|
LOGALLNEW=
|
||||||
|
|
||||||
LOGFILE=/var/log/messages
|
LOGFILE=/var/log/messages
|
||||||
@@ -88,7 +90,7 @@ UNTRACKED_LOG_LEVEL=
|
|||||||
|
|
||||||
ARPTABLES=
|
ARPTABLES=
|
||||||
|
|
||||||
CONFIG_PATH="${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
CONFIG_PATH=":${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
||||||
|
|
||||||
GEOIPDIR=/usr/share/xt_geoip/LE
|
GEOIPDIR=/usr/share/xt_geoip/LE
|
||||||
|
|
||||||
@@ -194,8 +196,6 @@ IGNOREUNKNOWNVARIABLES=No
|
|||||||
|
|
||||||
IMPLICIT_CONTINUE=No
|
IMPLICIT_CONTINUE=No
|
||||||
|
|
||||||
INLINE_MATCHES=Yes
|
|
||||||
|
|
||||||
IPSET_WARNINGS=Yes
|
IPSET_WARNINGS=Yes
|
||||||
|
|
||||||
IP_FORWARDING=Off
|
IP_FORWARDING=Off
|
||||||
@@ -210,8 +210,6 @@ MACLIST_TTL=
|
|||||||
|
|
||||||
MANGLE_ENABLED=Yes
|
MANGLE_ENABLED=Yes
|
||||||
|
|
||||||
MAPOLDACTIONS=No
|
|
||||||
|
|
||||||
MINIUPNPD=No
|
MINIUPNPD=No
|
||||||
|
|
||||||
MARK_IN_FORWARD_CHAIN=No
|
MARK_IN_FORWARD_CHAIN=No
|
||||||
@@ -230,6 +228,8 @@ PERL_HASH_SEED=0
|
|||||||
|
|
||||||
REJECT_ACTION=
|
REJECT_ACTION=
|
||||||
|
|
||||||
|
RENAME_COMBINED=Yes
|
||||||
|
|
||||||
REQUIRE_INTERFACE=No
|
REQUIRE_INTERFACE=No
|
||||||
|
|
||||||
RESTART=restart
|
RESTART=restart
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Shorewall - Sample Interfaces File for three-interface configuration.
|
# Shorewall - Sample Interfaces File for three-interface configuration.
|
||||||
# Copyright (C) 2006-2015 by the Shorewall Team
|
# Copyright (C) 2006-2017 by the Shorewall Team
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -14,6 +14,6 @@
|
|||||||
?FORMAT 2
|
?FORMAT 2
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#ZONE INTERFACE OPTIONS
|
#ZONE INTERFACE OPTIONS
|
||||||
net eth0 tcpflags,dhcp,nosmurfs,routefilter,logmartians,sourceroute=0
|
net NET_IF tcpflags,dhcp,nosmurfs,routefilter,logmartians,sourceroute=0,physical=eth0
|
||||||
loc eth1 tcpflags,nosmurfs,routefilter,logmartians
|
loc LOC_IF tcpflags,nosmurfs,routefilter,logmartians,physical=eth1
|
||||||
dmz eth2 tcpflags,nosmurfs,routefilter,logmartians
|
dmz DMZ_IF tcpflags,nosmurfs,routefilter,logmartians,physical=eth2
|
||||||
|
@@ -53,6 +53,8 @@ LOG_MARTIANS=Yes
|
|||||||
|
|
||||||
LOG_VERBOSITY=2
|
LOG_VERBOSITY=2
|
||||||
|
|
||||||
|
LOG_ZONE=Both
|
||||||
|
|
||||||
LOGALLNEW=
|
LOGALLNEW=
|
||||||
|
|
||||||
LOGFILE=/var/log/messages
|
LOGFILE=/var/log/messages
|
||||||
@@ -85,7 +87,7 @@ UNTRACKED_LOG_LEVEL=
|
|||||||
|
|
||||||
ARPTABLES=
|
ARPTABLES=
|
||||||
|
|
||||||
CONFIG_PATH="${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
CONFIG_PATH=":${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
||||||
|
|
||||||
GEOIPDIR=/usr/share/xt_geoip/LE
|
GEOIPDIR=/usr/share/xt_geoip/LE
|
||||||
|
|
||||||
@@ -191,8 +193,6 @@ IGNOREUNKNOWNVARIABLES=No
|
|||||||
|
|
||||||
IMPLICIT_CONTINUE=No
|
IMPLICIT_CONTINUE=No
|
||||||
|
|
||||||
INLINE_MATCHES=Yes
|
|
||||||
|
|
||||||
IPSET_WARNINGS=Yes
|
IPSET_WARNINGS=Yes
|
||||||
|
|
||||||
IP_FORWARDING=On
|
IP_FORWARDING=On
|
||||||
@@ -207,8 +207,6 @@ MACLIST_TTL=
|
|||||||
|
|
||||||
MANGLE_ENABLED=Yes
|
MANGLE_ENABLED=Yes
|
||||||
|
|
||||||
MAPOLDACTIONS=No
|
|
||||||
|
|
||||||
MINIUPNPD=No
|
MINIUPNPD=No
|
||||||
|
|
||||||
MARK_IN_FORWARD_CHAIN=No
|
MARK_IN_FORWARD_CHAIN=No
|
||||||
@@ -227,6 +225,8 @@ PERL_HASH_SEED=0
|
|||||||
|
|
||||||
REJECT_ACTION=
|
REJECT_ACTION=
|
||||||
|
|
||||||
|
RENAME_COMBINED=Yes
|
||||||
|
|
||||||
REQUIRE_INTERFACE=No
|
REQUIRE_INTERFACE=No
|
||||||
|
|
||||||
RESTART=restart
|
RESTART=restart
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Shorewall - Sample SNAT/Masqueradee File for three-interface configuration.
|
# Shorewall - Sample SNAT/Masqueradee File for three-interface configuration.
|
||||||
# Copyright (C) 2006-2016 by the Shorewall Team
|
# Copyright (C) 2006-2017 by the Shorewall Team
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -20,4 +20,4 @@
|
|||||||
MASQUERADE 10.0.0.0/8,\
|
MASQUERADE 10.0.0.0/8,\
|
||||||
169.254.0.0/16,\
|
169.254.0.0/16,\
|
||||||
172.16.0.0/12,\
|
172.16.0.0/12,\
|
||||||
192.168.0.0/16 eth0
|
192.168.0.0/16 NET_IF
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Shorewall - Sample Stoppedrules File for three-interface configuration.
|
# Shorewall - Sample Stoppedrules File for three-interface configuration.
|
||||||
# Copyright (C) 2012-2015 by the Shorewall Team
|
# Copyright (C) 2012-2017 by the Shorewall Team
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -13,8 +13,8 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#ACTION SOURCE DEST PROTO DEST SOURCE
|
#ACTION SOURCE DEST PROTO DEST SOURCE
|
||||||
# PORT(S) PORT(S)
|
# PORT(S) PORT(S)
|
||||||
ACCEPT eth1 -
|
ACCEPT LOC_IF -
|
||||||
ACCEPT - eth1
|
ACCEPT - LOC_IF
|
||||||
ACCEPT eth2 -
|
ACCEPT DMZ_IF -
|
||||||
ACCEPT - eth2
|
ACCEPT - DMZ_IF
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Shorewall - Sample Interfaces File for two-interface configuration.
|
# Shorewall - Sample Interfaces File for two-interface configuration.
|
||||||
# Copyright (C) 2006-2015 by the Shorewall Team
|
# Copyright (C) 2006-2017 by the Shorewall Team
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -14,5 +14,5 @@
|
|||||||
?FORMAT 2
|
?FORMAT 2
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#ZONE INTERFACE OPTIONS
|
#ZONE INTERFACE OPTIONS
|
||||||
net eth0 dhcp,tcpflags,nosmurfs,routefilter,logmartians,sourceroute=0
|
net NET_IF dhcp,tcpflags,nosmurfs,routefilter,logmartians,sourceroute=0,physical=eth0
|
||||||
loc eth1 tcpflags,nosmurfs,routefilter,logmartians
|
loc LOC_IF tcpflags,nosmurfs,routefilter,logmartians,physical=eth1
|
||||||
|
@@ -56,6 +56,8 @@ LOG_MARTIANS=Yes
|
|||||||
|
|
||||||
LOG_VERBOSITY=2
|
LOG_VERBOSITY=2
|
||||||
|
|
||||||
|
LOG_ZONE=Both
|
||||||
|
|
||||||
LOGALLNEW=
|
LOGALLNEW=
|
||||||
|
|
||||||
LOGFILE=/var/log/messages
|
LOGFILE=/var/log/messages
|
||||||
@@ -88,7 +90,7 @@ UNTRACKED_LOG_LEVEL=
|
|||||||
|
|
||||||
ARPTABLES=
|
ARPTABLES=
|
||||||
|
|
||||||
CONFIG_PATH="${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
CONFIG_PATH=":${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
||||||
|
|
||||||
GEOIPDIR=/usr/share/xt_geoip/LE
|
GEOIPDIR=/usr/share/xt_geoip/LE
|
||||||
|
|
||||||
@@ -194,8 +196,6 @@ IGNOREUNKNOWNVARIABLES=No
|
|||||||
|
|
||||||
IMPLICIT_CONTINUE=No
|
IMPLICIT_CONTINUE=No
|
||||||
|
|
||||||
INLINE_MATCHES=Yes
|
|
||||||
|
|
||||||
IPSET_WARNINGS=Yes
|
IPSET_WARNINGS=Yes
|
||||||
|
|
||||||
IP_FORWARDING=On
|
IP_FORWARDING=On
|
||||||
@@ -210,8 +210,6 @@ MACLIST_TTL=
|
|||||||
|
|
||||||
MANGLE_ENABLED=Yes
|
MANGLE_ENABLED=Yes
|
||||||
|
|
||||||
MAPOLDACTIONS=No
|
|
||||||
|
|
||||||
MINIUPNPD=No
|
MINIUPNPD=No
|
||||||
|
|
||||||
MARK_IN_FORWARD_CHAIN=No
|
MARK_IN_FORWARD_CHAIN=No
|
||||||
@@ -230,6 +228,8 @@ PERL_HASH_SEED=0
|
|||||||
|
|
||||||
REJECT_ACTION=
|
REJECT_ACTION=
|
||||||
|
|
||||||
|
RENAME_COMBINED=Yes
|
||||||
|
|
||||||
REQUIRE_INTERFACE=No
|
REQUIRE_INTERFACE=No
|
||||||
|
|
||||||
RESTART=restart
|
RESTART=restart
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Shorewall - Sample SNAT/Masqueradee File for two-interface configuration.
|
# Shorewall - Sample SNAT/Masqueradee File for two-interface configuration.
|
||||||
# Copyright (C) 2006-2016 by the Shorewall Team
|
# Copyright (C) 2006-2017 by the Shorewall Team
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -20,4 +20,4 @@
|
|||||||
MASQUERADE 10.0.0.0/8,\
|
MASQUERADE 10.0.0.0/8,\
|
||||||
169.254.0.0/16,\
|
169.254.0.0/16,\
|
||||||
172.16.0.0/12,\
|
172.16.0.0/12,\
|
||||||
192.168.0.0/16 eth0
|
192.168.0.0/16 NET_IF
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Shorewall - Sample Stoppedrules File for two-interface configuration.
|
# Shorewall - Sample Stoppedrules File for two-interface configuration.
|
||||||
# Copyright (C) 2012-2015 by the Shorewall Team
|
# Copyright (C) 2012-2017 by the Shorewall Team
|
||||||
#
|
#
|
||||||
# This library is free software; you can redistribute it and/or
|
# This library is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
# modify it under the terms of the GNU Lesser General Public
|
||||||
@@ -13,5 +13,5 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
#ACTION SOURCE DEST PROTO DEST SOURCE
|
#ACTION SOURCE DEST PROTO DEST SOURCE
|
||||||
# PORT(S) PORT(S)
|
# PORT(S) PORT(S)
|
||||||
ACCEPT eth1 -
|
ACCEPT LOC_IF -
|
||||||
ACCEPT - eth1
|
ACCEPT - LOC_IF
|
||||||
|
@@ -8,11 +8,8 @@
|
|||||||
#
|
#
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#ACTION
|
#ACTION
|
||||||
A_AllowICMPs inline # Audited version of AllowICMPs
|
|
||||||
A_Drop # Audited Default Action for DROP policy
|
|
||||||
A_REJECT noinline,logjump # Audits then rejects a connection request
|
A_REJECT noinline,logjump # Audits then rejects a connection request
|
||||||
A_REJECT! inline # Audits then rejects a connection request
|
A_REJECT! inline # Audits then rejects a connection request
|
||||||
A_Reject # Audited Default action for REJECT policy
|
|
||||||
AllowICMPs inline # Allow Required ICMP packets
|
AllowICMPs inline # Allow Required ICMP packets
|
||||||
allowBcast inline # Silently Allow Broadcast
|
allowBcast inline # Silently Allow Broadcast
|
||||||
allowinUPnP inline # Allow UPnP inbound (to firewall) traffic
|
allowinUPnP inline # Allow UPnP inbound (to firewall) traffic
|
||||||
@@ -21,35 +18,44 @@ allowMcast inline # Silently Allow Multicast
|
|||||||
AutoBL noinline # Auto-blacklist IPs that exceed thesholds
|
AutoBL noinline # Auto-blacklist IPs that exceed thesholds
|
||||||
AutoBLL noinline # Helper for AutoBL
|
AutoBLL noinline # Helper for AutoBL
|
||||||
BLACKLIST logjump,section # Add sender to the dynamic blacklist
|
BLACKLIST logjump,section # Add sender to the dynamic blacklist
|
||||||
|
?if __ADDRTYPE
|
||||||
|
Broadcast inline,audit # Handles Broadcast/Anycast
|
||||||
|
?else
|
||||||
Broadcast noinline,audit # Handles Broadcast/Anycast
|
Broadcast noinline,audit # Handles Broadcast/Anycast
|
||||||
DNSAmp # Matches one-question recursive DNS queries
|
?endif
|
||||||
Drop # Default Action for DROP policy (deprecated)
|
DNSAmp proto=17 # Matches one-question recursive DNS queries
|
||||||
dropBcast inline # Silently Drop Broadcast
|
dropBcast inline # Silently Drop Broadcast
|
||||||
dropBcasts inline # Silently Drop Broadcast
|
dropBcasts inline # Silently Drop Broadcast
|
||||||
dropInvalid inline # Drops packets in the INVALID conntrack state
|
dropInvalid inline # Drops packets in the INVALID conntrack state
|
||||||
dropMcast inline # Silently Drop Multicast
|
dropMcast inline # Silently Drop Multicast
|
||||||
dropNotSyn noinline # Silently Drop Non-syn TCP packets
|
dropNotSyn noinline,proto=6 # Silently Drop Non-syn TCP packets
|
||||||
DropDNSrep inline # Drops DNS replies
|
DropDNSrep inline,proto=17 # Drops DNS replies
|
||||||
DropSmurfs noinline # Drop smurf packets
|
DropSmurfs noinline # Drop smurf packets
|
||||||
Established inline,\ # Handles packets in the ESTABLISHED state
|
Established inline,\ # Handles packets in the ESTABLISHED state
|
||||||
state=ESTABLISHED #
|
state=ESTABLISHED #
|
||||||
FIN inline,audit # Handles ACK,FIN,PSH packets
|
FIN inline,audit,\ # Handles ACK,FIN packets
|
||||||
|
proto=6
|
||||||
forwardUPnP noinline # Allow traffic that upnpd has redirected from 'upnp' interfaces.
|
forwardUPnP noinline # Allow traffic that upnpd has redirected from 'upnp' interfaces.
|
||||||
GlusterFS inline # Handles GlusterFS
|
GlusterFS inline # Handles GlusterFS
|
||||||
IfEvent noinline # Perform an action based on an event
|
IfEvent noinline # Perform an action based on an event
|
||||||
Invalid inline,audit,\ # Handles packets in the INVALID conntrack state
|
Invalid inline,audit,\ # Handles packets in the INVALID conntrack state
|
||||||
state=INVALID #
|
state=INVALID #
|
||||||
Limit noinline # Limit the rate of connections from each individual IP address
|
Limit noinline # Limit the rate of connections from each individual IP address
|
||||||
|
?if __ADDRTYPE
|
||||||
|
Multicast inline,audit # Handles Multicast
|
||||||
|
?else
|
||||||
Multicast noinline,audit # Handles Multicast
|
Multicast noinline,audit # Handles Multicast
|
||||||
|
?endif
|
||||||
New inline,state=NEW # Handles packets in the NEW conntrack state
|
New inline,state=NEW # Handles packets in the NEW conntrack state
|
||||||
NotSyn inline,audit # Handles TCP packets which do not have SYN=1 and ACK=0
|
NotSyn inline,audit,\ # Handles TCP packets which do not have SYN=1 and ACK=0
|
||||||
rejNotSyn noinline # Silently Reject Non-syn TCP packets
|
proto=6
|
||||||
Reject # Default Action for REJECT policy (deprecated)
|
rejNotSyn noinline,proto=6 # Silently Reject Non-syn TCP packets
|
||||||
Related inline,\ # Handles packets in the RELATED conntrack state
|
Related inline,\ # Handles packets in the RELATED conntrack state
|
||||||
state=RELATED #
|
state=RELATED #
|
||||||
ResetEvent inline # Reset an Event
|
ResetEvent inline # Reset an Event
|
||||||
RST inline,audit # Handle packets with RST set
|
RST inline,audit,\ # Handle packets with RST set
|
||||||
|
proto=6
|
||||||
SetEvent inline # Initialize an event
|
SetEvent inline # Initialize an event
|
||||||
TCPFlags # Handle bad flag combinations.
|
TCPFlags proto=6 # Handle bad flag combinations.
|
||||||
Untracked inline,\ # Handles packets in the UNTRACKED conntrack state
|
Untracked inline,\ # Handles packets in the UNTRACKED conntrack state
|
||||||
state=UNTRACKED #
|
state=UNTRACKED #
|
||||||
|
@@ -1,10 +0,0 @@
|
|||||||
#
|
|
||||||
# Shorewall -- /etc/shorewall/masq
|
|
||||||
#
|
|
||||||
# For information about entries in this file, type "man shorewall-masq"
|
|
||||||
#
|
|
||||||
# The manpage is also online at
|
|
||||||
# http://www.shorewall.net/manpages/shorewall-masq.html
|
|
||||||
#
|
|
||||||
###################################################################################################################################
|
|
||||||
#INTERFACE SOURCE ADDRESS PROTO PORT IPSEC MARK USER SWITCH ORIGDEST PROBABILITY
|
|
@@ -45,6 +45,8 @@ LOG_MARTIANS=Yes
|
|||||||
|
|
||||||
LOG_VERBOSITY=2
|
LOG_VERBOSITY=2
|
||||||
|
|
||||||
|
LOG_ZONE=Both
|
||||||
|
|
||||||
LOGALLNEW=
|
LOGALLNEW=
|
||||||
|
|
||||||
LOGFILE=/var/log/messages
|
LOGFILE=/var/log/messages
|
||||||
@@ -77,7 +79,7 @@ UNTRACKED_LOG_LEVEL=
|
|||||||
|
|
||||||
ARPTABLES=
|
ARPTABLES=
|
||||||
|
|
||||||
CONFIG_PATH="${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
CONFIG_PATH=":${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
||||||
|
|
||||||
GEOIPDIR=/usr/share/xt_geoip/LE
|
GEOIPDIR=/usr/share/xt_geoip/LE
|
||||||
|
|
||||||
@@ -183,8 +185,6 @@ IGNOREUNKNOWNVARIABLES=No
|
|||||||
|
|
||||||
IMPLICIT_CONTINUE=No
|
IMPLICIT_CONTINUE=No
|
||||||
|
|
||||||
INLINE_MATCHES=No
|
|
||||||
|
|
||||||
IPSET_WARNINGS=Yes
|
IPSET_WARNINGS=Yes
|
||||||
|
|
||||||
IP_FORWARDING=Keep
|
IP_FORWARDING=Keep
|
||||||
@@ -199,8 +199,6 @@ MACLIST_TTL=
|
|||||||
|
|
||||||
MANGLE_ENABLED=Yes
|
MANGLE_ENABLED=Yes
|
||||||
|
|
||||||
MAPOLDACTIONS=No
|
|
||||||
|
|
||||||
MARK_IN_FORWARD_CHAIN=No
|
MARK_IN_FORWARD_CHAIN=No
|
||||||
|
|
||||||
MINIUPNPD=No
|
MINIUPNPD=No
|
||||||
@@ -219,6 +217,8 @@ PERL_HASH_SEED=0
|
|||||||
|
|
||||||
REJECT_ACTION=
|
REJECT_ACTION=
|
||||||
|
|
||||||
|
RENAME_COMBINED=Yes
|
||||||
|
|
||||||
REQUIRE_INTERFACE=No
|
REQUIRE_INTERFACE=No
|
||||||
|
|
||||||
RESTART=restart
|
RESTART=restart
|
||||||
@@ -241,7 +241,7 @@ TC_EXPERT=No
|
|||||||
|
|
||||||
TC_PRIOMAP="2 3 3 3 2 3 1 1 2 2 2 2 2 2 2 2"
|
TC_PRIOMAP="2 3 3 3 2 3 1 1 2 2 2 2 2 2 2 2"
|
||||||
|
|
||||||
TRACK_PROVIDERS=No
|
TRACK_PROVIDERS=Yes
|
||||||
|
|
||||||
TRACK_RULES=No
|
TRACK_RULES=No
|
||||||
|
|
||||||
|
@@ -3,4 +3,4 @@
|
|||||||
#
|
#
|
||||||
# /usr/share/shorewall/configpath
|
# /usr/share/shorewall/configpath
|
||||||
#
|
#
|
||||||
CONFIG_PATH=${CONFDIR}/shorewall:${SHAREDIR}/shorewall
|
CONFIG_PATH=":${CONFDIR}/shorewall:${SHAREDIR}/shorewall"
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Shorewall 5.0 -- /usr/share/shorewall/lib.cli-std.
|
# Shorewall 5.2 -- /usr/share/shorewall/lib.cli-std
|
||||||
#
|
#
|
||||||
# (c) 1999-2015 - Tom Eastep (teastep@shorewall.net)
|
# (c) 1999-2018 - Tom Eastep (teastep@shorewall.net)
|
||||||
#
|
#
|
||||||
# Complete documentation is available at http://shorewall.net
|
# Complete documentation is available at http://shorewall.net
|
||||||
#
|
#
|
||||||
@@ -47,11 +47,10 @@ get_config() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$(id -u)" -eq 0 ]; then
|
if [ -n "$g_shorewalldir" ]; then
|
||||||
config=$(find_file ${PRODUCT}.conf)
|
|
||||||
else
|
|
||||||
[ -n "$g_shorewalldir" ] || fatal_error "Ordinary users may not $COMMAND the $CONFDIR/$PRODUCT configuration"
|
|
||||||
config="$g_shorewalldir/$PRODUCT.conf"
|
config="$g_shorewalldir/$PRODUCT.conf"
|
||||||
|
else
|
||||||
|
config=$(find_file ${PRODUCT}.conf)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f $config ]; then
|
if [ -f $config ]; then
|
||||||
@@ -211,7 +210,8 @@ get_config() {
|
|||||||
LOG_VERBOSITY=-1
|
LOG_VERBOSITY=-1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$SHOREWALL_SHELL" -a -z "$g_export" ]; then
|
if [ -z "${g_export}${g_test}" ]; then
|
||||||
|
if [ -n "$SHOREWALL_SHELL" ]; then
|
||||||
if [ ! -x "$SHOREWALL_SHELL" ]; then
|
if [ ! -x "$SHOREWALL_SHELL" ]; then
|
||||||
echo " WARNING: The program specified in SHOREWALL_SHELL does not exist or is not executable; falling back to /bin/sh" >&2
|
echo " WARNING: The program specified in SHOREWALL_SHELL does not exist or is not executable; falling back to /bin/sh" >&2
|
||||||
SHOREWALL_SHELL=/bin/sh
|
SHOREWALL_SHELL=/bin/sh
|
||||||
@@ -236,6 +236,10 @@ get_config() {
|
|||||||
else
|
else
|
||||||
IP='ip'
|
IP='ip'
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
[ -n "$SHOREWALL_SHELL" ] || SHOREWALL_SHELL=/bin/sh
|
||||||
|
[ -n "$IP" ] || IP='ip'
|
||||||
|
fi
|
||||||
|
|
||||||
case $VERBOSITY in
|
case $VERBOSITY in
|
||||||
-1|0|1|2)
|
-1|0|1|2)
|
||||||
@@ -277,10 +281,18 @@ get_config() {
|
|||||||
|
|
||||||
case $AUTOMAKE in
|
case $AUTOMAKE in
|
||||||
Yes|yes)
|
Yes|yes)
|
||||||
|
AUTOMAKE=1
|
||||||
;;
|
;;
|
||||||
No|no)
|
No|no)
|
||||||
AUTOMAKE=
|
AUTOMAKE=
|
||||||
;;
|
;;
|
||||||
|
[1-9])
|
||||||
|
;;
|
||||||
|
[1-9][0-9])
|
||||||
|
;;
|
||||||
|
[Rr]ecursive)
|
||||||
|
AUTOMAKE=recursive
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
if [ -n "$AUTOMAKE" ]; then
|
if [ -n "$AUTOMAKE" ]; then
|
||||||
fatal_error "Invalid AUTOMAKE setting ($AUTOMAKE)"
|
fatal_error "Invalid AUTOMAKE setting ($AUTOMAKE)"
|
||||||
@@ -337,8 +349,12 @@ get_config() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$DYNAMIC_BLACKLIST" ]; then
|
if [ -n "$DYNAMIC_BLACKLIST" -a "$(id -u)" = 0 ]; then
|
||||||
|
case $COMMAND in
|
||||||
|
blacklist|allow|drop|logdrop|reject)
|
||||||
setup_dbl
|
setup_dbl
|
||||||
|
;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$PERL_HASH_SEED" ]; then
|
if [ -z "$PERL_HASH_SEED" ]; then
|
||||||
@@ -358,6 +374,17 @@ get_config() {
|
|||||||
[ -f $lib ] && . $lib
|
[ -f $lib ] && . $lib
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ensure that the effective UID is 0 or that we are dealing with a private configuration
|
||||||
|
#
|
||||||
|
ensure_root() {
|
||||||
|
if [ $(id -u) -ne 0 ]; then
|
||||||
|
if [ -z "$g_shorewalldir" -o "$g_shorewalldir" = $CONFDIR/$PRODUCT ]; then
|
||||||
|
startup_error "Ordinary users may not $COMMAND the default $PRODUCT configuration"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Determine if there are config files newer than the passed object
|
# Determine if there are config files newer than the passed object
|
||||||
#
|
#
|
||||||
@@ -365,20 +392,39 @@ uptodate() {
|
|||||||
[ -x $1 ] || return 1
|
[ -x $1 ] || return 1
|
||||||
|
|
||||||
local dir
|
local dir
|
||||||
local ifs
|
local busybox
|
||||||
|
local find
|
||||||
|
|
||||||
ifs="$IFS"
|
find=$(mywhich find)
|
||||||
IFS=':'
|
|
||||||
|
|
||||||
for dir in $g_shorewalldir $CONFIG_PATH; do
|
[ -n "${find}" ] || return 1
|
||||||
if [ -n "$(find ${dir} -newer $1)" ]; then
|
[ -h "${find}" ] && busybox=Yes
|
||||||
IFS="$ifs"
|
|
||||||
|
for dir in $g_shorewalldir $(split $CONFIG_PATH); do
|
||||||
|
if [ -n "${busybox}" ]; then
|
||||||
|
#
|
||||||
|
# Busybox 'find' doesn't support -quit.
|
||||||
|
#
|
||||||
|
if [ $AUTOMAKE = recursive ]; then
|
||||||
|
if [ -n "$(${find} ${dir} -newer $1 -print)" ]; then
|
||||||
|
return 1;
|
||||||
|
fi
|
||||||
|
elif [ -n "$(${find} ${dir} -maxdepth $AUTOMAKE -type f -newer $1 -print)" ]; then
|
||||||
|
return 1;
|
||||||
|
fi
|
||||||
|
elif [ "$AUTOMAKE" = recursive ]; then
|
||||||
|
if [ -n "$(${find} ${dir} -newer $1 -print -quit)" ]; then
|
||||||
|
return 1;
|
||||||
|
fi
|
||||||
|
elif [ -z "$AUTOMAKE" ]; then
|
||||||
|
if [ -n "$(${find} ${dir} -maxdepth 1 -type f -newer $1 -print -quit)" ]; then
|
||||||
|
return 1;
|
||||||
|
fi
|
||||||
|
elif [ -n "$(${find} ${dir} -maxdepth $AUTOMAKE -type f -newer $1 -print -quit)" ]; then
|
||||||
return 1;
|
return 1;
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
IFS="$ifs"
|
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -408,11 +454,7 @@ compiler() {
|
|||||||
|
|
||||||
pc=${LIBEXECDIR}/shorewall/compiler.pl
|
pc=${LIBEXECDIR}/shorewall/compiler.pl
|
||||||
|
|
||||||
if [ $(id -u) -ne 0 ]; then
|
ensure_root
|
||||||
if [ -z "$g_shorewalldir" -o "$g_shorewalldir" = $CONFDIR/$PRODUCT ]; then
|
|
||||||
startup_error "Ordinary users may not $COMMAND the $CONFDIR/$PRODUCT configuration"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#
|
#
|
||||||
# We've now set g_shorewalldir so recalculate CONFIG_PATH
|
# We've now set g_shorewalldir so recalculate CONFIG_PATH
|
||||||
#
|
#
|
||||||
@@ -423,7 +465,7 @@ compiler() {
|
|||||||
get_config Yes
|
get_config Yes
|
||||||
|
|
||||||
case $COMMAND in
|
case $COMMAND in
|
||||||
*start|try|refresh|reload|restart|safe-*)
|
*start|try|reload|restart|safe-*)
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
STARTUP_LOG=
|
STARTUP_LOG=
|
||||||
@@ -465,11 +507,9 @@ compiler() {
|
|||||||
[ -n "$g_test" ] && options="$options --test"
|
[ -n "$g_test" ] && options="$options --test"
|
||||||
[ -n "$g_preview" ] && options="$options --preview"
|
[ -n "$g_preview" ] && options="$options --preview"
|
||||||
[ "$g_debugging" = trace ] && options="$options --debug"
|
[ "$g_debugging" = trace ] && options="$options --debug"
|
||||||
[ -n "$g_refreshchains" ] && options="$options --refresh=$g_refreshchains"
|
|
||||||
[ -n "$g_confess" ] && options="$options --confess"
|
[ -n "$g_confess" ] && options="$options --confess"
|
||||||
[ -n "$g_update" ] && options="$options --update"
|
[ -n "$g_update" ] && options="$options --update"
|
||||||
[ -n "$g_annotate" ] && options="$options --annotate"
|
[ -n "$g_annotate" ] && options="$options --annotate"
|
||||||
[ -n "$g_inline" ] && options="$options --inline"
|
|
||||||
|
|
||||||
if [ -n "$PERL" ]; then
|
if [ -n "$PERL" ]; then
|
||||||
if [ ! -x "$PERL" ]; then
|
if [ ! -x "$PERL" ]; then
|
||||||
@@ -574,10 +614,6 @@ start_command() {
|
|||||||
g_confess=Yes
|
g_confess=Yes
|
||||||
option=${option#T}
|
option=${option#T}
|
||||||
;;
|
;;
|
||||||
i*)
|
|
||||||
g_inline=Yes
|
|
||||||
option=${option#i}
|
|
||||||
;;
|
|
||||||
C*)
|
C*)
|
||||||
g_counters=Yes
|
g_counters=Yes
|
||||||
option=${option#C}
|
option=${option#C}
|
||||||
@@ -619,24 +655,24 @@ start_command() {
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
if [ -n "${g_fast}${AUTOMAKE}" ]; then
|
if [ -n "${g_fast}${AUTOMAKE}" ]; then
|
||||||
if ! uptodate ${VARDIR}/firewall; then
|
if ! uptodate $g_firewall; then
|
||||||
g_fast=
|
g_fast=
|
||||||
AUTOMAKE=
|
AUTOMAKE=
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$AUTOMAKE" ]; then
|
if [ -n "$AUTOMAKE" ]; then
|
||||||
[ -n "$nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
run_it ${VARDIR}/firewall $g_debugging start
|
run_it $g_firewall $g_debugging start
|
||||||
rc=$?
|
rc=$?
|
||||||
[ -n "$nolock" ] || mutex_off
|
[ -n "$g_nolock" ] || mutex_off
|
||||||
else
|
else
|
||||||
g_file="${VARDIR}/.start"
|
g_file="${VARDIR}/.start"
|
||||||
if compiler $g_debugging $nolock compile "$g_file"; then
|
if compiler $g_debugging $g_nolock compile "$g_file"; then
|
||||||
[ -n "$nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
run_it ${VARDIR}/.start $g_debugging start
|
run_it ${VARDIR}/.start $g_debugging start
|
||||||
rc=$?
|
rc=$?
|
||||||
[ -n "$nolock" ] || mutex_off
|
[ -n "$g_nolock" ] || mutex_off
|
||||||
else
|
else
|
||||||
rc=$?
|
rc=$?
|
||||||
mylogger kern.err "ERROR:$g_product start failed"
|
mylogger kern.err "ERROR:$g_product start failed"
|
||||||
@@ -688,10 +724,6 @@ compile_command() {
|
|||||||
g_confess=Yes
|
g_confess=Yes
|
||||||
option=${option#T}
|
option=${option#T}
|
||||||
;;
|
;;
|
||||||
i*)
|
|
||||||
g_inline=Yes
|
|
||||||
option=${option#i}
|
|
||||||
;;
|
|
||||||
-)
|
-)
|
||||||
finished=1
|
finished=1
|
||||||
option=
|
option=
|
||||||
@@ -712,7 +744,7 @@ compile_command() {
|
|||||||
|
|
||||||
case $# in
|
case $# in
|
||||||
0)
|
0)
|
||||||
[ -n "$g_export" ] && g_file=firewall || g_file=${VARDIR}/firewall
|
[ -n "$g_export" ] && g_file=firewall || g_file=$g_firewall
|
||||||
;;
|
;;
|
||||||
1)
|
1)
|
||||||
g_file=$1
|
g_file=$1
|
||||||
@@ -770,6 +802,10 @@ check_command() {
|
|||||||
g_profile=Yes
|
g_profile=Yes
|
||||||
option=${option#p}
|
option=${option#p}
|
||||||
;;
|
;;
|
||||||
|
t*)
|
||||||
|
g_test=Yes
|
||||||
|
option=${option#t}
|
||||||
|
;;
|
||||||
d*)
|
d*)
|
||||||
g_debug=Yes;
|
g_debug=Yes;
|
||||||
option=${option#d}
|
option=${option#d}
|
||||||
@@ -782,10 +818,6 @@ check_command() {
|
|||||||
g_confess=Yes
|
g_confess=Yes
|
||||||
option=${option#T}
|
option=${option#T}
|
||||||
;;
|
;;
|
||||||
i*)
|
|
||||||
g_inline=Yes
|
|
||||||
option=${option#i}
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
option_error $option
|
option_error $option
|
||||||
;;
|
;;
|
||||||
@@ -822,7 +854,7 @@ check_command() {
|
|||||||
|
|
||||||
g_doing="Checking"
|
g_doing="Checking"
|
||||||
|
|
||||||
compiler $g_debugging $nolock check
|
compiler $g_debugging $g_nolock check
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -854,6 +886,10 @@ update_command() {
|
|||||||
g_profile=Yes
|
g_profile=Yes
|
||||||
option=${option#p}
|
option=${option#p}
|
||||||
;;
|
;;
|
||||||
|
t*)
|
||||||
|
g_test=Yes
|
||||||
|
option=${option#t}
|
||||||
|
;;
|
||||||
d*)
|
d*)
|
||||||
g_debug=Yes;
|
g_debug=Yes;
|
||||||
option=${option#d}
|
option=${option#d}
|
||||||
@@ -866,16 +902,11 @@ update_command() {
|
|||||||
g_confess=Yes
|
g_confess=Yes
|
||||||
option=${option#T}
|
option=${option#T}
|
||||||
;;
|
;;
|
||||||
i*)
|
|
||||||
g_inline=Yes
|
|
||||||
option=${option#i}
|
|
||||||
;;
|
|
||||||
a*)
|
a*)
|
||||||
g_annotate=Yes
|
g_annotate=Yes
|
||||||
option=${option#a}
|
option=${option#a}
|
||||||
;;
|
;;
|
||||||
A*)
|
A*)
|
||||||
g_inline=Yes
|
|
||||||
option=${option#A}
|
option=${option#A}
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -914,7 +945,7 @@ update_command() {
|
|||||||
|
|
||||||
g_doing="Updating"
|
g_doing="Updating"
|
||||||
|
|
||||||
compiler $g_debugging $nolock check
|
compiler $g_debugging $g_nolock check
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -965,7 +996,6 @@ restart_command() {
|
|||||||
option=${option#T}
|
option=${option#T}
|
||||||
;;
|
;;
|
||||||
i*)
|
i*)
|
||||||
g_inline=Yes
|
|
||||||
option=${option#i}
|
option=${option#i}
|
||||||
;;
|
;;
|
||||||
C*)
|
C*)
|
||||||
@@ -1011,117 +1041,65 @@ restart_command() {
|
|||||||
[ -n "$STARTUP_ENABLED" ] || not_configured_error "Startup is disabled"
|
[ -n "$STARTUP_ENABLED" ] || not_configured_error "Startup is disabled"
|
||||||
|
|
||||||
if [ -z "$g_fast" -a -n "$AUTOMAKE" ]; then
|
if [ -z "$g_fast" -a -n "$AUTOMAKE" ]; then
|
||||||
uptodate ${VARDIR}/firewall && g_fast=Yes
|
uptodate $g_firewall && g_fast=Yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
g_file="${VARDIR}/.${COMMAND}"
|
g_file="${VARDIR}/.${COMMAND}"
|
||||||
|
|
||||||
if [ -z "$g_fast" ]; then
|
if [ -z "$g_fast" ]; then
|
||||||
if compiler $g_debugging $nolock compile "$g_file"; then
|
if compiler $g_debugging $g_nolock compile "$g_file"; then
|
||||||
[ -n "$nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
run_it ${VARDIR}/.${COMMAND} $g_debugging ${COMMAND}
|
run_it ${VARDIR}/.${COMMAND} $g_debugging ${COMMAND}
|
||||||
rc=$?
|
rc=$?
|
||||||
[ -n "$nolock" ] || mutex_off
|
[ -n "$g_nolock" ] || mutex_off
|
||||||
else
|
else
|
||||||
rc=$?
|
rc=$?
|
||||||
mylogger kern.err "ERROR:$g_product ${COMMAND} failed"
|
mylogger kern.err "ERROR:$g_product ${COMMAND} failed"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
[ -x ${VARDIR}/firewall ] || fatal_error "No ${VARDIR}/firewall file found"
|
[ -x $g_firewall ] || fatal_error "No $g_firewall file found"
|
||||||
[ -n "$nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
run_it ${VARDIR}/firewall $g_debugging $COMMAND
|
run_it $g_firewall $g_debugging $COMMAND
|
||||||
rc=$?
|
rc=$?
|
||||||
[ -n "$nolock" ] || mutex_off
|
[ -n "$g_nolock" ] || mutex_off
|
||||||
fi
|
fi
|
||||||
|
|
||||||
return $rc
|
return $rc
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
read_yesno_with_timeout() {
|
||||||
# Refresh Command Executor
|
local timeout
|
||||||
#
|
timeout=${1:-60}
|
||||||
refresh_command() {
|
|
||||||
local finished
|
|
||||||
finished=0
|
|
||||||
|
|
||||||
while [ $finished -eq 0 -a $# -gt 0 ]; do
|
case $timeout in
|
||||||
option=$1
|
*s)
|
||||||
case $option in
|
|
||||||
-*)
|
|
||||||
option=${option#-}
|
|
||||||
|
|
||||||
while [ -n "$option" ]; do
|
|
||||||
case $option in
|
|
||||||
-)
|
|
||||||
finished=1
|
|
||||||
option=
|
|
||||||
;;
|
;;
|
||||||
d*)
|
*m)
|
||||||
g_debug=Yes
|
timeout=$((${timeout%m} * 60))
|
||||||
option=${option#d}
|
|
||||||
;;
|
;;
|
||||||
n*)
|
*h)
|
||||||
g_noroutes=Yes
|
timeout=$((${timeout%h} * 3600))
|
||||||
option=${option#n}
|
|
||||||
;;
|
|
||||||
T*)
|
|
||||||
g_confess=Yes
|
|
||||||
option=${option#T}
|
|
||||||
;;
|
|
||||||
i*)
|
|
||||||
g_inline=Yes
|
|
||||||
option=${option#i}
|
|
||||||
;;
|
|
||||||
D)
|
|
||||||
if [ $# -gt 1 ]; then
|
|
||||||
g_shorewalldir="$2"
|
|
||||||
option=
|
|
||||||
shift
|
|
||||||
else
|
|
||||||
fatal_error "The -D option requires a directory name"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
option_error $option
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
|
||||||
shift
|
read -t $timeout yn 2> /dev/null
|
||||||
|
if [ $? -eq 2 ]
|
||||||
|
then
|
||||||
|
# read doesn't support timeout
|
||||||
|
test -x /bin/bash || return 2 # bash is not installed so the feature is not available
|
||||||
|
/bin/bash -c "read -t $timeout yn ; if [ \"\$yn\" == \"y\" ] ; then exit 0 ; else exit 1 ; fi" # invoke bash and use its version of read
|
||||||
|
return $?
|
||||||
|
else
|
||||||
|
# read supports timeout
|
||||||
|
case "$yn" in
|
||||||
|
y|Y)
|
||||||
|
return 0
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
finished=1
|
return 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
|
||||||
|
|
||||||
if [ $# -gt 0 ]; then
|
|
||||||
g_refreshchains=$1
|
|
||||||
shift
|
|
||||||
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
g_refreshchains="$g_refreshchains,$1"
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
else
|
|
||||||
g_refreshchains=:refresh:
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
product_is_started || fatal_error "$g_product is not running"
|
|
||||||
|
|
||||||
[ -n "$STARTUP_ENABLED" ] || not_configured_error "Startup is disabled"
|
|
||||||
|
|
||||||
g_file="${VARDIR}/.refresh"
|
|
||||||
|
|
||||||
if compiler $g_debugging $nolock compile "$g_file"; then
|
|
||||||
[ -n "$nolock" ] || mutex_on
|
|
||||||
run_it ${VARDIR}/.refresh $g_debugging refresh
|
|
||||||
rc=$?
|
|
||||||
[ -n "$nolock" ] || mutex_off
|
|
||||||
else
|
|
||||||
rc=$?
|
|
||||||
fi
|
|
||||||
|
|
||||||
return $rc
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -1246,7 +1224,7 @@ safe_commands() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
[ -n "$nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
|
|
||||||
if run_it ${VARDIR}/.$command $g_debugging $command; then
|
if run_it ${VARDIR}/.$command $g_debugging $command; then
|
||||||
|
|
||||||
@@ -1261,7 +1239,7 @@ safe_commands() {
|
|||||||
run_it ${VARDIR}/.$command clear
|
run_it ${VARDIR}/.$command clear
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -n "$nolock" ] || mutex_off
|
[ -n "$g_nolock" ] || mutex_off
|
||||||
|
|
||||||
echo "New configuration has been rejected and the old one restored"
|
echo "New configuration has been rejected and the old one restored"
|
||||||
exit 2
|
exit 2
|
||||||
@@ -1269,7 +1247,7 @@ safe_commands() {
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -n "$nolock" ] || mutex_off
|
[ -n "$g_nolock" ] || mutex_off
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -1359,7 +1337,7 @@ try_command() {
|
|||||||
|
|
||||||
g_file="${VARDIR}/.$command"
|
g_file="${VARDIR}/.$command"
|
||||||
|
|
||||||
if ! compiler $g_debugging $nolock compile "$g_file"; then
|
if ! compiler $g_debugging $g_nolock compile "$g_file"; then
|
||||||
status=$?
|
status=$?
|
||||||
exit $status
|
exit $status
|
||||||
fi
|
fi
|
||||||
@@ -1379,7 +1357,7 @@ try_command() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
[ -n "$nolock" ] || mutex_on
|
[ -n "$g_nolock" ] || mutex_on
|
||||||
|
|
||||||
if run_it ${VARDIR}/.$command $g_debugging $command && [ -n "$timeout" ]; then
|
if run_it ${VARDIR}/.$command $g_debugging $command && [ -n "$timeout" ]; then
|
||||||
sleep $timeout
|
sleep $timeout
|
||||||
@@ -1391,7 +1369,7 @@ try_command() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -n "$nolock" ] || mutex_off
|
[ -n "$g_nolock" ] || mutex_off
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -1409,10 +1387,163 @@ rcp_command() {
|
|||||||
eval $RCP_COMMAND
|
eval $RCP_COMMAND
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Remote-{getcaps|getrc} command executer
|
||||||
|
#
|
||||||
|
remote_capture() # $* = original arguments less the command.
|
||||||
|
{
|
||||||
|
local verbose
|
||||||
|
verbose=$(make_verbose)
|
||||||
|
local finished
|
||||||
|
finished=0
|
||||||
|
local system
|
||||||
|
local getrc
|
||||||
|
getrc=
|
||||||
|
local getcaps
|
||||||
|
getcaps=
|
||||||
|
local remote_sw_dir_path
|
||||||
|
remote_sw_dir_path=
|
||||||
|
local root
|
||||||
|
root=root
|
||||||
|
local libexec
|
||||||
|
libexec=${LIBEXECDIR}
|
||||||
|
|
||||||
|
while [ $finished -eq 0 -a $# -gt 0 ]; do
|
||||||
|
option=$1
|
||||||
|
case $option in
|
||||||
|
-*)
|
||||||
|
option=${option#-}
|
||||||
|
|
||||||
|
while [ -n "$option" ]; do
|
||||||
|
case $option in
|
||||||
|
-)
|
||||||
|
finished=1
|
||||||
|
option=
|
||||||
|
;;
|
||||||
|
R*)
|
||||||
|
getrc=Yes
|
||||||
|
option=${option#R}
|
||||||
|
;;
|
||||||
|
c*)
|
||||||
|
getcaps=Yes
|
||||||
|
option=${option#c}
|
||||||
|
;;
|
||||||
|
r)
|
||||||
|
[ $# -gt 1 ] || fatal_error "Missing Root User name"
|
||||||
|
root=$2
|
||||||
|
option=
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
D)
|
||||||
|
[ $# -gt 1 ] || fatal_error "Missing directory name"
|
||||||
|
g_shorewalldir=$2
|
||||||
|
option=
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
p)
|
||||||
|
[ $# -gt 1 ] || fatal_error "Missing directory name"
|
||||||
|
remote_sw_dir_path=$2
|
||||||
|
option=
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
T*)
|
||||||
|
g_confess=Yes
|
||||||
|
option=${option#T}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
option_error $option
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
finished=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
case $# in
|
||||||
|
0)
|
||||||
|
[ -n "$g_shorewalldir" ] || g_shorewalldir='.'
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
g_shorewalldir="."
|
||||||
|
system=$1
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
g_shorewalldir=$1
|
||||||
|
system=$2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
too_many_arguments $3
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
g_export=Yes
|
||||||
|
|
||||||
|
ensure_config_path
|
||||||
|
|
||||||
|
get_config Yes
|
||||||
|
|
||||||
|
g_haveconfig=Yes
|
||||||
|
|
||||||
|
if [ -z "$system" ]; then
|
||||||
|
system=$FIREWALL
|
||||||
|
[ -n "$system" ] || fatal_error "No system name given and the FIREWALL option is not set"
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $COMMAND in
|
||||||
|
remote-getrc)
|
||||||
|
getrc=Yes
|
||||||
|
;;
|
||||||
|
remote-getcaps)
|
||||||
|
getcaps=Yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
[ -n "$getcaps" ] && getrc=Yes
|
||||||
|
|
||||||
|
if [ -n "$getrc" -o ! -s $g_shorewalldir/shorewallrc ]; then
|
||||||
|
progress_message2 "Getting shorewallrc file on system $system..."
|
||||||
|
|
||||||
|
if [ -n "$remote_sw_dir_path" ]; then
|
||||||
|
if ! rsh_command "/sbin/shorewall-lite show rc $remote_sw_dir_path" > $g_shorewalldir/shorewallrc; then
|
||||||
|
fatal_error "Capturing RC file on system $system failed"
|
||||||
|
fi
|
||||||
|
elif ! rsh_command "/sbin/shorewall-lite show rc" > $g_shorewalldir/shorewallrc; then
|
||||||
|
fatal_error "Capturing RC file on system $system failed"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
remote_sw_dir_path=
|
||||||
|
|
||||||
|
if [ -n "$getcaps" -o ! -s $g_shorewalldir/capabilities ]; then
|
||||||
|
if [ -f $g_shorewalldir/shorewallrc -a -s $g_shorewalldir/shorewallrc ]; then
|
||||||
|
. $g_shorewalldir/shorewallrc
|
||||||
|
libexec="$LIBEXECDIR"
|
||||||
|
|
||||||
|
[ -n "$DONT_LOAD" ] && DONT_LOAD="$(echo $DONT_LOAD | tr ',' ' ')"
|
||||||
|
|
||||||
|
progress_message2 "Getting Capabilities on system $system..."
|
||||||
|
|
||||||
|
if [ $g_family -eq 4 ]; then
|
||||||
|
if ! rsh_command "MODULESDIR=$MODULESDIR IPTABLES=$IPTABLES DONT_LOAD=\"$DONT_LOAD\" $libexec/shorewall-lite/shorecap" > $g_shorewalldir/capabilities; then
|
||||||
|
fatal_error "Capturing capabilities on system $system failed"
|
||||||
|
fi
|
||||||
|
elif ! rsh_command "MODULESDIR=$MODULESDIR IP6TABLES=$IP6TABLES DONT_LOAD=\"$DONT_LOAD\" $libexec/shorewall6-lite/shorecap" > $g_shorewalldir/capabilities; then
|
||||||
|
fatal_error "Capturing capabilities on system $system failed"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
fatal_error "$g_shorewalldir/shorewallrc is not present."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Remote-{start|reload|restart} command executor
|
# Remote-{start|reload|restart} command executor
|
||||||
#
|
#
|
||||||
remote_reload_command() # $* = original arguments less the command.
|
remote_commands() # $* = original arguments less the command.
|
||||||
{
|
{
|
||||||
local verbose
|
local verbose
|
||||||
verbose=$(make_verbose)
|
verbose=$(make_verbose)
|
||||||
@@ -1478,10 +1609,6 @@ remote_reload_command() # $* = original arguments less the command.
|
|||||||
g_confess=Yes
|
g_confess=Yes
|
||||||
option=${option#T}
|
option=${option#T}
|
||||||
;;
|
;;
|
||||||
i*)
|
|
||||||
g_inline=Yes
|
|
||||||
option=${option#i}
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
option_error $option
|
option_error $option
|
||||||
;;
|
;;
|
||||||
@@ -1527,14 +1654,11 @@ remote_reload_command() # $* = original arguments less the command.
|
|||||||
litedir="${VARDIR}-lite"
|
litedir="${VARDIR}-lite"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -f $g_shorewalldir/${PRODUCT}.conf ]; then
|
g_export=Yes
|
||||||
if [ -f $g_shorewalldir/params ]; then
|
|
||||||
. $g_shorewalldir/params
|
|
||||||
fi
|
|
||||||
|
|
||||||
ensure_config_path
|
ensure_config_path
|
||||||
|
|
||||||
get_config No
|
get_config Yes
|
||||||
|
|
||||||
g_haveconfig=Yes
|
g_haveconfig=Yes
|
||||||
|
|
||||||
@@ -1542,19 +1666,16 @@ remote_reload_command() # $* = original arguments less the command.
|
|||||||
system=$FIREWALL
|
system=$FIREWALL
|
||||||
[ -n "$system" ] || fatal_error "No system name given and the FIREWALL option is not set"
|
[ -n "$system" ] || fatal_error "No system name given and the FIREWALL option is not set"
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
fatal_error "$g_shorewalldir/$PRODUCT.conf does not exist"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$getcaps" ]; then
|
if [ -z "$getcaps" ]; then
|
||||||
capabilities=$(find_file capabilities)
|
capabilities=$(find_file capabilities)
|
||||||
[ -f $capabilities ] || getcaps=Yes
|
[ ! -f $capabilities -o ! -s $capabilities ] && getcaps=Yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$getcaps" ]; then
|
if [ -n "$getcaps" ]; then
|
||||||
[ -n "$DONT_LOAD" ] && DONT_LOAD="$(echo $DONT_LOAD | tr ',' ' ')"
|
[ -n "$DONT_LOAD" ] && DONT_LOAD="$(echo $DONT_LOAD | tr ',' ' ')"
|
||||||
|
|
||||||
progress_message "Getting Capabilities on system $system..."
|
progress_message2 "Getting Capabilities on system $system..."
|
||||||
if [ $g_family -eq 4 ]; then
|
if [ $g_family -eq 4 ]; then
|
||||||
if ! rsh_command "MODULESDIR=$MODULESDIR IPTABLES=$IPTABLES DONT_LOAD=\"$DONT_LOAD\" $libexec/shorewall-lite/shorecap" > $g_shorewalldir/capabilities; then
|
if ! rsh_command "MODULESDIR=$MODULESDIR IPTABLES=$IPTABLES DONT_LOAD=\"$DONT_LOAD\" $libexec/shorewall-lite/shorecap" > $g_shorewalldir/capabilities; then
|
||||||
fatal_error "Capturing capabilities on system $system failed"
|
fatal_error "Capturing capabilities on system $system failed"
|
||||||
@@ -1566,12 +1687,11 @@ remote_reload_command() # $* = original arguments less the command.
|
|||||||
|
|
||||||
file=$(resolve_file $g_shorewalldir/firewall)
|
file=$(resolve_file $g_shorewalldir/firewall)
|
||||||
|
|
||||||
g_export=Yes
|
|
||||||
|
|
||||||
program=$sbindir/${PRODUCT}-lite
|
program=$sbindir/${PRODUCT}-lite
|
||||||
#
|
#
|
||||||
# Handle nonstandard remote VARDIR
|
# Handle nonstandard remote VARDIR
|
||||||
#
|
#
|
||||||
|
progress_message2 "Getting VARDIR on system $system..."
|
||||||
temp=$(rsh_command $program show config 2> /dev/null | grep ^LITEDIR | sed 's/LITEDIR is //')
|
temp=$(rsh_command $program show config 2> /dev/null | grep ^LITEDIR | sed 's/LITEDIR is //')
|
||||||
|
|
||||||
[ -n "$temp" ] && litedir="$temp"
|
[ -n "$temp" ] && litedir="$temp"
|
||||||
@@ -1712,11 +1832,11 @@ export_command() # $* = original arguments less the command.
|
|||||||
}
|
}
|
||||||
|
|
||||||
run_command() {
|
run_command() {
|
||||||
if [ -x ${VARDIR}/firewall ] ; then
|
if [ -x $g_firewall ] ; then
|
||||||
uptodate ${VARDIR}/firewall || echo " WARNING: ${VARDIR}/firewall is not up to date" >&2
|
uptodate $g_firewall || echo " WARNING: $g_firewall is not up to date" >&2
|
||||||
run_it ${VARDIR}/firewall $g_debugging $@
|
run_it $g_firewall $g_debugging $@
|
||||||
else
|
else
|
||||||
fatal_error "${VARDIR}/firewall does not exist or is not executable"
|
fatal_error "$g_firewall does not exist or is not executable"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1727,11 +1847,6 @@ compiler_command() {
|
|||||||
shift
|
shift
|
||||||
compile_command $@
|
compile_command $@
|
||||||
;;
|
;;
|
||||||
refresh)
|
|
||||||
get_config Yes Yes
|
|
||||||
shift
|
|
||||||
refresh_command $@
|
|
||||||
;;
|
|
||||||
check|ck)
|
check|ck)
|
||||||
shift
|
shift
|
||||||
check_command $@
|
check_command $@
|
||||||
@@ -1742,22 +1857,28 @@ compiler_command() {
|
|||||||
;;
|
;;
|
||||||
remote-start|remote-reload|remote-restart)
|
remote-start|remote-reload|remote-restart)
|
||||||
shift
|
shift
|
||||||
remote_reload_command $@
|
remote_commands $@
|
||||||
;;
|
;;
|
||||||
export)
|
export)
|
||||||
shift
|
shift
|
||||||
export_command $@
|
export_command $@
|
||||||
;;
|
;;
|
||||||
try)
|
try)
|
||||||
|
only_root
|
||||||
get_config Yes
|
get_config Yes
|
||||||
shift
|
shift
|
||||||
try_command $@
|
try_command $@
|
||||||
;;
|
;;
|
||||||
safe-reload|safe-restart|safe-start)
|
safe-reload|safe-restart|safe-start)
|
||||||
|
only_root
|
||||||
get_config Yes
|
get_config Yes
|
||||||
shift
|
shift
|
||||||
safe_commands $@
|
safe_commands $@
|
||||||
;;
|
;;
|
||||||
|
remote-getrc|remote-getcaps)
|
||||||
|
shift
|
||||||
|
remote_capture $@
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
fatal_error "Invalid command: $COMMAND"
|
fatal_error "Invalid command: $COMMAND"
|
||||||
;;
|
;;
|
||||||
|
@@ -791,11 +791,7 @@
|
|||||||
<title>See ALSO</title>
|
<title>See ALSO</title>
|
||||||
|
|
||||||
<para><ulink
|
<para><ulink
|
||||||
url="/Accounting.html">http://www.shorewall.net/Accounting.html
|
url="shorewall-logging.htm">shorewall-logging(5)</ulink></para>
|
||||||
</ulink></para>
|
|
||||||
|
|
||||||
<para><ulink
|
|
||||||
url="/shorewall_logging.html">http://www.shorewall.net/shorewall_logging.html</ulink></para>
|
|
||||||
|
|
||||||
<para><ulink
|
<para><ulink
|
||||||
url="/configuration_file_basics.htm#Pairs">http://www.shorewall.net/configuration_file_basics.htm#Pairs</ulink></para>
|
url="/configuration_file_basics.htm#Pairs">http://www.shorewall.net/configuration_file_basics.htm#Pairs</ulink></para>
|
||||||
|
@@ -191,6 +191,27 @@
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>proto</option>=<replaceable>protocol</replaceable></term>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>Added in Shorewall 5.1.10. Specifies that the action is
|
||||||
|
only usable with the specified
|
||||||
|
<replaceable>protocol</replaceable> (name or number). When the
|
||||||
|
action is invoked with no protocol specified in the PROTO
|
||||||
|
column, or if the action is used as a Policy Action, the named
|
||||||
|
<replaceable>protocol</replaceable> will be assumed. If a
|
||||||
|
protocol is specified in the PROTO column of an invocation,
|
||||||
|
then it must match the named
|
||||||
|
<replaceable>protocol</replaceable>.</para>
|
||||||
|
|
||||||
|
<para>The <option>proto</option> option has no effect if the
|
||||||
|
<option>inline</option> or <option>builtin</option> option is
|
||||||
|
specified. A warning is issued if <option>proto</option> is
|
||||||
|
specified along with <option>builtin</option>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><option>section</option></term>
|
<term><option>section</option></term>
|
||||||
|
|
||||||
|
@@ -167,7 +167,7 @@
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>queues matching packets to a back end logging daemon via
|
<para>queues matching packets to a back end logging daemon via
|
||||||
a netlink socket then continues to the next rule. See <ulink
|
a netlink socket then continues to the next rule. See <ulink
|
||||||
url="/shorewall_logging.html">http://www.shorewall.net/shorewall_logging.html</ulink>.</para>
|
url="shorewall-logging.html">shorewall-logging(5)</ulink>.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@@ -258,7 +258,7 @@
|
|||||||
<para>You may also specify <emphasis role="bold">NFLOG</emphasis>
|
<para>You may also specify <emphasis role="bold">NFLOG</emphasis>
|
||||||
(must be in upper case) as a log level.This will log to the NFLOG
|
(must be in upper case) as a log level.This will log to the NFLOG
|
||||||
target for routing to a separate log through use of ulogd (<ulink
|
target for routing to a separate log through use of ulogd (<ulink
|
||||||
url="http://www.netfilter.org/projects/ulogd/index.html">http://www.netfilter.org/projects/ulogd/index.html</ulink>).</para>
|
url="shorewall-logging.html">shorewall-logging.htm</ulink>).</para>
|
||||||
|
|
||||||
<para>Actions specifying logging may be followed by a log tag (a
|
<para>Actions specifying logging may be followed by a log tag (a
|
||||||
string of alphanumeric characters) which is appended to the string
|
string of alphanumeric characters) which is appended to the string
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user