Any other recomendations are also welcome#!/sbin/runscript
opts="${opts} showoptions showstatus panic rules restore save flush"
depend() {
need net procparm
use logger
}
rules() {
ebegin "Starting FIREWALL:"
$IPTABLES -N invalid
$IPTABLES -F invalid
$IPTABLES -A invalid -m state --state INVALID -m limit --limit 3/minute --limit-burst 2 -j LOG --log-level $LOGLEVEL --log-prefix "Firewall: INVALID packet: "
$IPTABLES -A invalid -m state --state INVALID -j DROP
$IPTABLES -N bad_tcp
$IPTABLES -F bad_tcp
$IPTABLES -A bad_tcp -p tcp ! --syn -m state --state NEW -m limit --limit 3/minute --limit-burst 1 -j LOG --log-prefix "Firewall: BAD TCP packet:"
$IPTABLES -A bad_tcp -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -N fragmented
$IPTABLES -F fragmented
$IPTABLES -A fragmented -f -m limit --limit 3/minute -j LOG --log-level $LOGLEVEL --log-prefix "Firewall: Fragmented packet: "
$IPTABLES -A fragmented -f -j DROP
$IPTABLES -N flagscan
$IPTABLES -F flagscan
$IPTABLES -A flagscan -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 3/minute --limit-burst 5 -j LOG --log-level alert --log-prefix "FIREWALL: NMAP-XMAS:"
$IPTABLES -A flagscan -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A flagscan -p tcp --tcp-flags ALL ALL -m limit --limit 3/minute --limit-burst 5 -j LOG --log-level 1 --log-prefix "FIREWALL: XMAS:"
$IPTABLES -A flagscan -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A flagscan -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 3/minute --limit-burst 5 -j LOG --log-level 1
--log-prefix "FIREWALL: XMAS-PSH:"
$IPTABLES -A flagscan -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A flagscan -p tcp --tcp-flags ALL NONE -m limit --limit 3/minute --limit-burst 5 -j LOG --log-level 1 --log-prefix "FIREWALL: NULL-SCAN:"
$IPTABLES -A flagscan -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A flagscan -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 3/minute --limit-burst 5 -j LOG --log-level 5 --log-prefix "FIREWALL: SYN/RST:"
$IPTABLES -A flagscan -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A flagscan -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 3/minute --limit-burst 5 -j LOG --log-level 5 --log-prefix "FIREWALL: SYN/FIN:"
$IPTABLES -A flagscan -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -N fingerprint
$IPTABLES -F fingerprint
$IPTABLES -A fingerprint
$IPTABLES -A fingerprint -p tcp --dport 0 -m limit --limit 6/hour --limit-burst 1 -j LOG --log-level $LOGLEVEL --log-prefix "Firewall: TCP fingerprint: "
$IPTABLES -A fingerprint -p udp --dport 0 -m limit --limit 6/hour --limit-burst 1 -j LOG --log-level $LOGLEVEL --log-prefix "Firewall: UDP fingerprint: "
$IPTABLES -A fingerprint -j DROP
$IPTABLES -N portscan
$IPTABLES -F portscan
$IPTABLES -A portscan -p tcp --dport 7 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: echo test: "
$IPTABLES -A portscan -p tcp --dport 7 -j DROP
$IPTABLES -A portscan -p udp --dport 7 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: echo test: "
$IPTABLES -A portscan -p udp --dport 7 -j DROP
$IPTABLES -A portscan -p tcp --dport 11 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: sysstat test:
"
$IPTABLES -A portscan -p tcp --dport 11 -j DROP
$IPTABLES -A portscan -p tcp --dport 15 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: netstat test:
"
$IPTABLES -A portscan -p tcp --dport 15 -j DROP
$IPTABLES -A portscan -p tcp --dport 19 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: chargen test:
"
$IPTABLES -A portscan -p tcp --dport 19 -j DROP
$IPTABLES -A portscan -p udp --dport 19 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: chargen test:
"
$IPTABLES -A portscan -p udp --dport 19 -j DROP
$IPTABLES -A portscan -p tcp --dport 23 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: telnet test: " $IPTABLES -A portscan -p tcp --dport 23 -j DROP
$IPTABLES -A portscan -p tcp --dport 69 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: tftpd test: "
$IPTABLES -A portscan -p tcp --dport 69 -j DROP
$IPTABLES -A portscan -p tcp --dport 79 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: finger test: " $IPTABLES -A portscan -p tcp --dport 79 -j DROP
$IPTABLES -A portscan -p tcp --dport 87 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: link test: "
$IPTABLES -A portscan -p tcp --dport 87 -j DROP
$IPTABLES -A portscan -p tcp --dport 98 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: linuxconf test: "
$IPTABLES -A portscan -p tcp --dport 98 -j DROP
$IPTABLES -A portscan -p tcp --dport 111 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: sun-rpc test: "
$IPTABLES -A portscan -p tcp --dport 111 -j DROP
$IPTABLES -A portscan -p tcp --dport 520 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: route test: " $IPTABLES -A portscan -p tcp --dport 520 -j DROP
$IPTABLES -A portscan -p tcp --dport 540 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: uucp test: "
$IPTABLES -A portscan -p tcp --dport 540 -j DROP
$IPTABLES -A portscan -p tcp --dport 1080 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: socks test:
"
$IPTABLES -A portscan -p tcp --dport 1080 -j DROP
$IPTABLES -A portscan -p tcp --dport 1114 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: sql test: "
$IPTABLES -A portscan -p tcp --dport 1114 -j DROP
$IPTABLES -A portscan -p tcp --dport 2000 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: openwin test: "
$IPTABLES -A portscan -p tcp --dport 2000 -j DROP
$IPTABLES -A portscan -p tcp --dport 10000 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: webmin test: "
$IPTABLES -A portscan -p tcp --dport 10000 -j DROP
$IPTABLES -A portscan -p tcp --dport 6000:6063 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: X-Windows test: "
$IPTABLES -A portscan -p tcp --dport 6000:6063 -j DROP
$IPTABLES -A portscan -p udp --dport 33434:33523 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: Traceroute: "
$IPTABLES -A portscan -p udp --dport 33434:33523 -j DROP
$IPTABLES -N trojanscan
$IPTABLES -F trojanscan
$IPTABLES -A trojanscan -p tcp --dport 6670 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: Deepthroat scan: "
$IPTABLES -A trojanscan -p tcp --dport 6670 -j DROP
$IPTABLES -A trojanscan -p tcp --dport 1243 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: Subseven scan: "
$IPTABLES -A trojanscan -p tcp --dport 1243 -j DROP
$IPTABLES -A trojanscan -p udp --dport 1243 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: Subseven scan: "
$IPTABLES -A trojanscan -p udp --dport 1243 -j DROP
$IPTABLES -A trojanscan -p tcp --dport 6711:6713 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: Subseven scan: "
$IPTABLES -A trojanscan -p tcp --dport 6711:6713 -j DROP
$IPTABLES -A trojanscan -p udp --dport 6711:6713 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: Subseven scan: "
$IPTABLES -A trojanscan -p udp --dport 6711:6713 -j DROP
$IPTABLES -A trojanscan -p tcp --dport 27374 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: Subseven
scan: "
$IPTABLES -A trojanscan -p tcp --dport 27374 -j DROP
$IPTABLES -A trojanscan -p udp --dport 27374 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: Subseven
scan: "
$IPTABLES -A trojanscan -p udp --dport 27374 -j DROP
$IPTABLES -A trojanscan -p tcp --dport 12345:12346 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: Netbus scan: "
$IPTABLES -A trojanscan -p tcp --dport 12345:12346 -j DROP
$IPTABLES -A trojanscan -p tcp --dport 20034 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: Netbus scan: "
$IPTABLES -A trojanscan -p tcp --dport 20034 -j DROP
$IPTABLES -A trojanscan -p tcp --dport 31337:31338 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: BackOrifice scan: "
$IPTABLES -A trojanscan -p tcp --dport 31337:31338 -j DROP
$IPTABLES -A trojanscan -p udp --dport 28431 -m limit --limit 3/minute -j LOG --log-level info --log-prefix "FIREWALL: HackAtak2000 scan: "
$IPTABLES -A trojanscan -p udp --dport 28431 -j DROP
$IPTABLES -N drop-icmp
$IPTABLES -F drop-icmp
$IPTABLES -A drop-icmp -p icmp -j LOG --log-prefix "FIREWALL: Bad ICMP traffic:"
$IPTABLES -A drop-icmp -p icmp -j DROP
$IPTABLES -N accept-icmp
$IPTABLES -F accept-icmp
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type source-quench -j drop-icmp
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type redirect -j drop-icmp
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type router-advertisement -j drop-icmp
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type router-solicitation -j drop-icmp
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type parameter-problem -j drop-icmp
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type timestamp-request -j drop-icmp
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type timestamp-reply -j drop-icmp
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type address-mask-request -j drop-icmp
$IPTABLES -A accept-icmp -m state --state NEW -p icmp --icmp-type address-mask-reply -j drop-icmp
$IPTABLES -N allow-ping
$IPTABLES -F allow-ping
$IPTABLES -A allow-ping -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -N allow-ftp
$IPTABLES -F allow-ftp
$IPTABLES -A allow-ftp -p tcp --dport 20 -j ACCEPT
$IPTABLES -A allow-ftp -p tcp --dport 21 -j ACCEPT
$IPTABLES -N allow-ssh
$IPTABLES -F allow-ssh
$IPTABLES -A allow-ssh -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport 22 -j ACCEPT
$IPTABLES -A allow-ssh -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport 22 -j ACCEPT
$IPTABLES -A allow-ssh -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport 22 -j ACCEPT
$IPTABLES -A allow-ssh -p tcp --dport 22 -j ACCEPT
$IPTABLES -N allow-www
$IPTABLES -F allow-www
$IPTABLES -A allow-www -p tcp --dport 80 -j ACCEPT
$IPTABLES -A allow-www -p tcp --dport 443 -j ACCEPT
$IPTABLES -A allow-www -p tcp --dport 8080 -j ACCEPT
einfo "Setting secure policies"
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
if [ "$ENABLE_MSS" == "1" ]; then
$IPTABLES -t nat -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
$IPTABLES -A OUTPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
fi
einfo "Accept all packets from loopback device"
$IPTABLES -A INPUT -i $LOOPBACK_INTERFACE -j ACCEPT
einfo "Enable traffic for internal interface"
$IPTABLES -A INPUT -i $LAN_INTERFACE -j ACCEPT
if [ "$NAT" == "1" ]; then
$IPTABLES -A FORWARD -i $LAN_INTERFACE -j ACCEPT
fi
einfo "Blocking hosts that should never be able to connect to machine"
for host in $BLOCK_HOST; do
$IPTABLES -A INPUT -s $host -j DROP
$IPTABLES -A FORWARD -s $host -j DROP
done
einfo "Obvious spoofing protection"
for ip in $SPOOFED; do
$IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -s ${ip} -j DROP
$IPTABLES -A FORWARD -i $EXTERNAL_INTERFACE -s ${ip} -j DROP
done
einfo "Block IANA reserved address"
for ip in $RESERVED_NET; do
$IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -s ${ip} -j DROP
$IPTABLES -A FORWARD -i $EXTERNAL_INTERFACE -s ${ip} -j DROP
done
einfo "Allow established and related traffic"
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
einfo "Drop bad packets"
if [ "$INVALID_PACKETS_PROTECTION" == "1" ]; then
$IPTABLES -A INPUT -j invalid
$IPTABLES -A FORWARD -j invalid
fi
if [ "$BAD_TCP_PACKETS_PROTECTION" == "1" ]; then
$IPTABLES -A INPUT -j bad_tcp
$IPTABLES -A FORWARD -j bad_tcp
fi
if [ "$FRAGMENTED_PACKETS_PROTECTION" == "1" ]; then
$IPTABLES -A INPUT -j fragmented
$IPTABLES -A FORWARD -j fragmented
fi
einfo "Enable portscan detection"
if [ "$FLAGSCAN_PROTECTION" == "1" ]; then
$IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -j flagscan
$IPTABLES -A FORWARD -i $EXTERNAL_INTERFACE -j flagscan
fi
if [ "$PORTSCAN_PROTECTION" == "1" ]; then
$IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -j portscan
$IPTABLES -A FORWARD -i $EXTERNAL_INTERFACE -j portscan
fi
if [ "$TROJANSCAN_PROTECTION" == "1" ]; then
$IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -j trojanscan
$IPTABLES -A FORWARD -i $EXTERNAL_INTERFACE -j trojanscan
fi
if [ "$FINGERPRINT_PROTECTION" == "1" ]; then
$IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -j fingerprint
$IPTABLES -A FORWARD -i $EXTERNAL_INTERFACE -j fingerprint
fi
einfo "Enable some ICMP"
$IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -j accept-icmp
$IPTABLES -A FORWARD -i $EXTERNAL_INTERFACE -j accept-icmp
if [ "$ALLOW_SSH" == "1" ]; then
einfo "Allow SSH incoming traffic"
$IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -j allow-ssh
fi
if [ "$ALLOW_WWW" == "1" ]; then
einfo "Accept WWW connections"
$IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -j allow-www
fi
if [ "$ALLOW_FTP" == "1" ]; then
einfo "Allow FTP"
$IPTABLES -A INPUT -i $EXTERNAL_INTERFACE -j allow-ftp
fi
if [ "$NAT" == "1" ]; then
$IPTABLES -A FORWARD -i $EXTERNAL_INTERFACE -o $LAN_INTERFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $LAN_INTERFACE -o $EXTERNAL_INTERFACE -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -o $EXTERNAL_INTERFACE -s $LAN_SPACE -j SNAT --to-source $EXTERNAL_INTERFACE_IP
fi
if [ "$ENABLE_PORTFORWARD" == "1" ]; then
einfo "Portforwarding enabled"
for port in $TCP_PORT_FORWARD; do
$IPTABLES -t nat -A PREROUTING -p tcp -d $EXTERNAL_INTERFACE_IP --dport $port -j DNAT --to-destination $WORKSTATION_IP:$port
$IPTABLES -A FORWARD -p tcp -o $LAN_INTERFACE -d $WORKSTATION_IP --dport $port -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
done
for port in $UDP_PORT_FORWARD; do
$IPTABLES -t nat -A PREROUTING -p udp -d $EXTERNAL_INTERFACE_IP --dport $port -j DNAT --to-destination $WORKSTATION_IP:$port
$IPTABLES -A FORWARD -p udp -o $LAN_INTERFACE -d $WORKSTATION_IP --dport $port -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
done
else
einfo "Portforwarding disabled"
fi
if [ "$MANGLE_TOS" == "1" ]; then
einfo "Enabling TOS mangle"
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 20 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 21 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 23 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 25 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -p udp --dport 53 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 67 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 80 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 110 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 113 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 123 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 143 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 443 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 993 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 995 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 1080 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -p tcp --dport 6000:6063 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 20 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 21 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 22 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 23 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 25 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p udp --dport 53 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 67 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 80 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 110 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 113 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 123 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 143 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 443 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 993 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 995 -j TOS --set-tos Maximize-Throughput
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 1080 -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport 6000:6063 -j TOS --set-tos Maximize-Throughput
fi
eend $?
}
Thank you in advance.

