| verzia 2.78, 2011/07/14 13:13:22 |
verzia 2.79, 2011/07/20 19:05:12 |
|
|
| # Licensed under terms of GNU General Public License. |
# Licensed under terms of GNU General Public License. |
| # All rights reserved. |
# All rights reserved. |
| # |
# |
| # $Platon: scripts/shell/firewall/fw-universal.sh,v 2.77 2011-01-24 20:26:04 rajo Exp $ |
# $Platon: scripts/shell/firewall/fw-universal.sh,v 2.78 2011-07-14 13:13:22 nepto Exp $ |
| # |
# |
| # Changelog: |
# Changelog: |
| # 2003-10-24 - created |
# 2003-10-24 - created |
| |
# 2011-07-20 - implemented XEN_MODE |
| # |
# |
| |
|
| ### BEGIN INIT INFO |
### BEGIN INIT INFO |
| Riadok 229 set_default_policy() |
|
| Riadok 230 set_default_policy() |
|
| # Set default policy |
# Set default policy |
| for chain in INPUT OUTPUT FORWARD; do |
for chain in INPUT OUTPUT FORWARD; do |
| if [ "X$XEN_MODE" = "Xon" -a "$chain" = "FORWARD" ]; then |
if [ "X$XEN_MODE" = "Xon" -a "$chain" = "FORWARD" ]; then |
| |
print_info "XEN_MODE enabled: default policy for FORWARD forced to ACCEPT"; |
| $IPTABLES -P $chain ACCEPT; |
$IPTABLES -P $chain ACCEPT; |
| continue; |
continue; |
| fi |
fi |
|
|
| remove_chains() |
remove_chains() |
| { # {{{ |
{ # {{{ |
| |
|
| for table in filter nat mangle; do |
if [ "X$XEN_MODE" = "Xon" ]; then |
| $IPTABLES -t $table -F # clear all chains |
print_info "XEN_MODE enabled: not clearing FORWARD chain"; |
| $IPTABLES -t $table -X # remove all chains |
$IPTABLES --flush INPUT |
| $IPTABLES -t $table -Z # zero counts |
$IPTABLES --flush OUTPUT |
| done |
$IPTABLES --flush spoof |
| |
# TODO!!! |
| |
else |
| |
for table in filter nat mangle; do |
| |
$IPTABLES -t $table -F # clear all chains |
| |
$IPTABLES -t $table -X # remove all chains |
| |
$IPTABLES -t $table -Z # zero counts |
| |
done |
| |
fi |
| |
|
| } # }}} |
} # }}} |
| |
|
| Riadok 280 nmap_scan_filter() |
|
| Riadok 290 nmap_scan_filter() |
|
| print_info -en "Turning on nmap scan filter " |
print_info -en "Turning on nmap scan filter " |
| |
|
| for chain in INPUT FORWARD; do |
for chain in INPUT FORWARD; do |
| |
if [ "X$XEN_MODE" = "Xon" -a "$chain" = "FORWARD" ]; then |
| |
print_info -ne " XEN_MODE "; |
| |
continue; |
| |
fi |
| |
|
| # Nie je nastaveny ziaden bit |
# Nie je nastaveny ziaden bit |
| $IPTABLES_LOG -A $chain -p TCP --tcp-flags ALL NONE $LOG_LIMIT "nmap scan $chain ALL NONE: " |
$IPTABLES_LOG -A $chain -p TCP --tcp-flags ALL NONE $LOG_LIMIT "nmap scan $chain ALL NONE: " |
| print_info -en "." |
print_info -en "." |
| |
|
| $IPTABLES -A $chain -p TCP --tcp-flags ALL NONE -j DROP |
$IPTABLES -A $chain -p TCP --tcp-flags ALL NONE -j DROP |
| print_info -en "." |
print_info -en "." |
| |
|
| Riadok 290 nmap_scan_filter() |
|
| Riadok 306 nmap_scan_filter() |
|
| for flags in SYN,FIN SYN,RST FIN,RST ; do |
for flags in SYN,FIN SYN,RST FIN,RST ; do |
| $IPTABLES_LOG -A $chain -p TCP --tcp-flags $flags $flags $LOG_LIMIT "nmap scan $chain $flags: " |
$IPTABLES_LOG -A $chain -p TCP --tcp-flags $flags $flags $LOG_LIMIT "nmap scan $chain $flags: " |
| print_info -en "." |
print_info -en "." |
| |
|
| $IPTABLES -A $chain -p TCP --tcp-flags $flags $flags -j DROP |
$IPTABLES -A $chain -p TCP --tcp-flags $flags $flags -j DROP |
| print_info -en "." |
print_info -en "." |
| done |
done |
| Riadok 298 nmap_scan_filter() |
|
| Riadok 315 nmap_scan_filter() |
|
| for flags in FIN PSH URG ; do |
for flags in FIN PSH URG ; do |
| $IPTABLES_LOG -A $chain -p TCP --tcp-flags ACK,$flags $flags $LOG_LIMIT "nmap scan $chain ACK,$flags: " |
$IPTABLES_LOG -A $chain -p TCP --tcp-flags ACK,$flags $flags $LOG_LIMIT "nmap scan $chain ACK,$flags: " |
| print_info -en "." |
print_info -en "." |
| |
|
| $IPTABLES -A $chain -p TCP --tcp-flags ACK,$flags $flags -j DROP |
$IPTABLES -A $chain -p TCP --tcp-flags ACK,$flags $flags -j DROP |
| print_info -en "." |
print_info -en "." |
| done |
done |
| Riadok 312 invalid_packet_filter() |
|
| Riadok 330 invalid_packet_filter() |
|
| { # {{{ |
{ # {{{ |
| |
|
| print_info -en "Turning on INVALID packet filter " |
print_info -en "Turning on INVALID packet filter " |
| |
|
| for chain in INPUT OUTPUT FORWARD; do |
for chain in INPUT OUTPUT FORWARD; do |
| |
if [ "X$XEN_MODE" = "Xon" -a "$chain" = "FORWARD" ]; then |
| |
print_info -ne " XEN_MODE "; |
| |
continue; |
| |
fi |
| $IPTABLES_LOG -A $chain -m state --state INVALID $LOG_LIMIT "INVALID $chain: " |
$IPTABLES_LOG -A $chain -m state --state INVALID $LOG_LIMIT "INVALID $chain: " |
| print_info -en "." |
print_info -en "." |
| $IPTABLES -A $chain -m state --state INVALID -j DROP |
$IPTABLES -A $chain -m state --state INVALID -j DROP |
| Riadok 369 anti_spoof_filter() |
|
| Riadok 392 anti_spoof_filter() |
|
| |
|
| for iface in $ANTISPOOF_IFACE; do |
for iface in $ANTISPOOF_IFACE; do |
| print_info -en " $iface" |
print_info -en " $iface" |
| $IPTABLES -A FORWARD -i $iface -j spoof |
|
| |
if [ "X$XEN_MODE" = "Xon" ]; then |
| |
print_info -ne " XEN_MODE "; |
| |
else |
| |
$IPTABLES -A FORWARD -i $iface -j spoof |
| |
fi |
| $IPTABLES -A INPUT -i $iface -j spoof |
$IPTABLES -A INPUT -i $iface -j spoof |
| done |
done |
| print_info " done." |
print_info " done." |
| Riadok 417 mangle_output() |
|
| Riadok 445 mangle_output() |
|
| |
|
| } # }}} |
} # }}} |
| |
|
| # Masquerade local subnet |
|
| masquerade() |
masquerade() |
| { # {{{ |
{ # {{{ |
| |
if [ "X$XEN_MODE" = "Xon" ]; then |
| |
print_info "XEN_MODE enabled: masquerade is not supported in this mode"; |
| |
return; |
| |
fi |
| if [ ! -z "$NAT_LAN_IFACE" ]; then |
if [ ! -z "$NAT_LAN_IFACE" ]; then |
| print_info -en "NAT: Enabling packet forwarding..." |
print_info -en "NAT: Enabling packet forwarding..." |
| echo 1 > /proc/sys/net/ipv4/ip_forward |
echo 1 > /proc/sys/net/ipv4/ip_forward |
|
|
| localnet="$ip/${!netmask}" |
localnet="$ip/${!netmask}" |
| |
|
| lan_ip="`get_first_ip_addr IP_$NAT_LAN_IFACE`" |
lan_ip="`get_first_ip_addr IP_$NAT_LAN_IFACE`" |
| |
|
| # alow packets from private subnet |
# alow packets from private subnet |
| $IPTABLES -A FORWARD -s ! $localnet -i $NAT_SUBNET_IFACE -j DROP |
$IPTABLES -A FORWARD -s ! $localnet -i $NAT_SUBNET_IFACE -j DROP |
| for client_ip in $NAT_CLIENT_DROP; do |
for client_ip in $NAT_CLIENT_DROP; do |
|
|
| print_info -en "$riface: Dropping outgoing packets from ports:" |
print_info -en "$riface: Dropping outgoing packets from ports:" |
| for port in $DROP_OUTPUT_TCP; do |
for port in $DROP_OUTPUT_TCP; do |
| print_info -en " $port" |
print_info -en " $port" |
| $IPTABLES -A FORWARD -p TCP --sport $port -o $riface -j DROP |
|
| |
if [ "X$XEN_MODE" = "Xon" ]; then |
| |
print_info -ne " XEN_MODE "; |
| |
else |
| |
$IPTABLES -A FORWARD -p TCP --sport $port -o $riface -j DROP |
| |
fi |
| $IPTABLES -A OUTPUT -p TCP --sport $port -o $riface -j DROP |
$IPTABLES -A OUTPUT -p TCP --sport $port -o $riface -j DROP |
| done |
done |
| print_info " done." |
print_info " done." |
|
|
| print_info -en "$riface: Dropping outgoing packets from ports:" |
print_info -en "$riface: Dropping outgoing packets from ports:" |
| for port in $DROP_OUTPUT_UDP; do |
for port in $DROP_OUTPUT_UDP; do |
| print_info -en " $port" |
print_info -en " $port" |
| $IPTABLES -A FORWARD -p UDP --sport $port -o $riface -j DROP |
|
| |
if [ "X$XEN_MODE" = "Xon" ]; then |
| |
print_info -ne " XEN_MODE "; |
| |
else |
| |
$IPTABLES -A FORWARD -p UDP --sport $port -o $riface -j DROP |
| |
fi |
| $IPTABLES -A OUTPUT -p UDP --sport $port -o $riface -j DROP |
$IPTABLES -A OUTPUT -p UDP --sport $port -o $riface -j DROP |
| done |
done |
| print_info " done." |
print_info " done." |
| Riadok 674 bann_ip_adresses() |
|
| Riadok 715 bann_ip_adresses() |
|
| for banned_ip in $BANNED_IP; do |
for banned_ip in $BANNED_IP; do |
| print_info -en " $banned_ip" |
print_info -en " $banned_ip" |
| $IPTABLES -A INPUT -s $banned_ip -j DROP |
$IPTABLES -A INPUT -s $banned_ip -j DROP |
| $IPTABLES -A FORWARD -s $banned_ip -j DROP |
|
| |
if [ "X$XEN_MODE" = "Xon" ]; then |
| |
print_info -ne " XEN_MODE "; |
| |
else |
| |
$IPTABLES -A FORWARD -s $banned_ip -j DROP |
| |
fi |
| done |
done |
| print_info " done." |
print_info " done." |
| fi |
fi |
| Riadok 687 allow_accept_all() |
|
| Riadok 733 allow_accept_all() |
|
| for iface in $IFACE_ACCEPT_ALL; do |
for iface in $IFACE_ACCEPT_ALL; do |
| print_info -en " $iface" |
print_info -en " $iface" |
| $IPTABLES -A INPUT -i $iface -j ACCEPT |
$IPTABLES -A INPUT -i $iface -j ACCEPT |
| $IPTABLES -A FORWARD -i $iface -j ACCEPT |
|
| $IPTABLES -A OUTPUT -o $iface -j ACCEPT |
$IPTABLES -A OUTPUT -o $iface -j ACCEPT |
| |
if [ "X$XEN_MODE" = "Xon" ]; then |
| |
print_info -ne " XEN_MODE "; |
| |
else |
| |
$IPTABLES -A FORWARD -i $iface -j ACCEPT |
| |
fi |
| done |
done |
| print_info " done." |
print_info " done." |
| fi |
fi |
| Riadok 1003 allow_input() |
|
| Riadok 1053 allow_input() |
|
| ip="`get_first_ip_addr IP_$ANTISPOOF_IFACE`"; |
ip="`get_first_ip_addr IP_$ANTISPOOF_IFACE`"; |
| print_info -en "Accepting traceroute:" |
print_info -en "Accepting traceroute:" |
| |
|
| $IPTABLES -A OUTPUT -o $ANTISPOOF_IFACE -p UDP \ |
if [ "X$XEN_MODE" = "Xon" ]; then |
| --sport $TRACEROUTE_SRC_PORTS --dport $TRACEROUTE_DEST_PORTS \ |
print_info -ne " XEN_MODE "; |
| -s $ip -d $ANYWHERE -j ACCEPT |
else |
| |
$IPTABLES -A OUTPUT -o $ANTISPOOF_IFACE -p UDP \ |
| for iface in $TRACEROUTE_IFACE; do |
--sport $TRACEROUTE_SRC_PORTS --dport $TRACEROUTE_DEST_PORTS \ |
| $IPTABLES -A FORWARD -p UDP -i $iface --sport $TRACEROUTE_SRC_PORTS \ |
-s $ip -d $ANYWHERE -j ACCEPT |
| --dport $TRACEROUTE_DEST_PORTS -j ACCEPT |
|
| done |
for iface in $TRACEROUTE_IFACE; do |
| |
|
| |
$IPTABLES -A FORWARD -p UDP -i $iface --sport $TRACEROUTE_SRC_PORTS \ |
| |
--dport $TRACEROUTE_DEST_PORTS -j ACCEPT |
| |
done |
| |
fi |
| print_info " done." |
print_info " done." |
| fi |
fi |
| |
|
| Riadok 1151 do_ip_accounting() |
|
| Riadok 1206 do_ip_accounting() |
|
| $IPTABLES -I INPUT -i $NAT_LAN_IFACE -j $IPACCT_IN_NAME |
$IPTABLES -I INPUT -i $NAT_LAN_IFACE -j $IPACCT_IN_NAME |
| $IPTABLES -I OUTPUT -o $NAT_LAN_IFACE -j $IPACCT_OUT_NAME |
$IPTABLES -I OUTPUT -o $NAT_LAN_IFACE -j $IPACCT_OUT_NAME |
| |
|
| $IPTABLES -I FORWARD -s $localnet -o $NAT_LAN_IFACE -j $IPACCT_NAME |
if [ "X$XEN_MODE" = "Xon" ]; then |
| $IPTABLES -I FORWARD -d $localnet -i $NAT_LAN_IFACE -j $IPACCT_NAME |
print_info -ne " XEN_MODE "; |
| |
else |
| |
$IPTABLES -I FORWARD -s $localnet -o $NAT_LAN_IFACE -j $IPACCT_NAME |
| |
$IPTABLES -I FORWARD -d $localnet -i $NAT_LAN_IFACE -j $IPACCT_NAME |
| |
fi |
| |
|
| for client_ip in $IP_ACCT_CLIENTS; do |
for client_ip in $IP_ACCT_CLIENTS; do |
| $IPTABLES -A $IPACCT_NAME -s $client_ip |
$IPTABLES -A $IPACCT_NAME -s $client_ip |