try ipchains

my sample for ipchains rules set for lan and wan connection 

<<< begin 2 cut

#!/bin/sh

#############
# Variables #
#############

CLASS_A="10.0.0.0/8"
CLASS_B="172.16.0.0/12"
CLASS_C="192.168.0.0/16"

LOOPBACK="127.0.0.0/8"

MULTICAST="240.0.0.0/3"

BROADCAST_0="0.0.0.0"
BROADCAST_1="255.255.255.255"

PRIVILEGED_PORTS="0:1023"
UNPRIVILEGED_PORTS="1024:65535"

SSH_PORTS="1020:1023"

########################################
# Set the system location of ipchains. #
########################################

IPCHAINS=`which ipchains`

##############################################################################
# Enter the device you use to connect to the Internet (ppp0, eth0, etc.) for #
# your external interface, and the card you use for your internal network.   #
##############################################################################

EXTERNAL_INTERFACE="eth0"
INTERNAL_INTERFACE="eth1"
LOOPBACK_INTERFACE="lo"

ANYWHERE="0.0.0.0/0"

######################
# Media One Servers. #
######################

DHCP_SERVERS="24.128.0.0/16"
SMTP_SERVERS="smtp.ne.mediaone.net/31"
POP_SERVER="pop.ne.mediaone.net"
NEWS_SERVER="news.ne.mediaone.net"

##############################################################################
# Cut out the IP Address of the machine from the ifconfig listing.  We       #
# assume that this script for the firewall is being run after the Internet   #
# connection has been made.  Therefore, we should already have an IP Address #
# at this point.  First we grab the Internet IP Address on eth0 ...          #
##############################################################################


IP_ADDRESS_0=`ifconfig $EXTERNAL_INTERFACE | grep inet | cut -d : -f 2`
IP_ADDRESS_0=`echo $IP_ADDRESS_0 | cut -d \  -f 1`

NETMASK_0=`ifconfig $EXTERNAL_INTERFACE | grep Mask | cut -d : -f 4`

EXTERNAL_NETWORK="$IP_ADDRESS_0/$NETMASK_0"

##############################################################################
# ... and then we grab the IP Address of our internal network on eth1.  The  #
# nice thing about this script is that even if we make changes to our eth1   #
# and how we mask out our internal network, we don't have to amke any        #
# changes here in the script.                                                #
##############################################################################

IP_ADDRESS_1=`ifconfig $INTERNAL_INTERFACE | grep inet | cut -d : -f 2`
IP_ADDRESS_1=`echo $IP_ADDRESS_1 | cut -d \  -f 1`

NETMASK_1=`ifconfig $INTERNAL_INTERFACE | grep Mask | cut -d : -f 4`

INTERNAL_NETWORK="$IP_ADDRESS_1/$NETMASK_1"

##############################################################################
# Now, grab the IP Addresses of the nameservers and assign them to the       #
# apprpriate variables.  This will make it easy to allow these machines      #
# through, even if they change.                                              #
##############################################################################

NAMESERVER_1=24.128.232.6
NAMESERVER_2=24.126.16.6
NAMESERVER_3=24.128.1.81
NAMESERVER_4=199.0.65.2
NAMESERVER_5=199.0.65.8
NAMESERVER_6=199.0.65.9

##############################################################################
# Turn on anti-spoofing on all interfaces because we do not have any         #
# asymetric routing.                                                         #
##############################################################################

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 1 > $f; done

##############################################################################
# Flush all of the old rules from the firewall, if any exist.  Start with a  #
# clean slate.                                                               #
##############################################################################

$IPCHAINS -F input
$IPCHAINS -F output
$IPCHAINS -F forward

###########################
# Set the default policy. #
###########################

$IPCHAINS -P input DENY
$IPCHAINS -P output ACCEPT
$IPCHAINS -P forward DENY

##########################################################################
# Deny any packets claiming to be from one of the non-routable networks. #
##########################################################################

$IPCHAINS -A input -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY
$IPCHAINS -A input -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY
$IPCHAINS -A input -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY
$IPCHAINS -A input -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY
$IPCHAINS -A input -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY
$IPCHAINS -A input -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY

$IPCHAINS -A output -i $EXTERNAL_INTERFACE -s $CLASS_A -j REJECT
$IPCHAINS -A output -i $EXTERNAL_INTERFACE -d $CLASS_A -j REJECT
$IPCHAINS -A output -i $EXTERNAL_INTERFACE -s $CLASS_B -j REJECT
$IPCHAINS -A output -i $EXTERNAL_INTERFACE -d $CLASS_B -j REJECT
$IPCHAINS -A output -i $EXTERNAL_INTERFACE -s $CLASS_C -j REJECT
$IPCHAINS -A output -i $EXTERNAL_INTERFACE -d $CLASS_C -j REJECT

$IPCHAINS -A input -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY
$IPCHAINS -A input -i $EXTERNAL_INTERFACE -d $LOOPBACK -j DENY

$IPCHAINS -A output -i $EXTERNAL_INTERFACE -s $LOOPBACK -j REJECT
$IPCHAINS -A output -i $EXTERNAL_INTERFACE -d $LOOPBACK -j REJECT

$IPCHAINS -A input -i $EXTERNAL_INTERFACE -s $BROADCAST_1 -j DENY
$IPCHAINS -A input -i $EXTERNAL_INTERFACE -d $BROADCAST_0 -j DENY

$IPCHAINS -A input -i $EXTERNAL_INTERFACE -s $MULTICAST -j DENY

#######################
# Allow incoming ICMP #
#######################

$IPCHAINS -A input -p icmp -s $ANYWHERE -d $IP_ADDRESS_0 -j ACCEPT

#######################
# Allow outgoing ICMP #
#######################

$IPCHAINS -A output -p icmp -s $IP_ADDRESS_0 -d $ANYWHERE -j ACCEPT
$IPCHAINS -A output -p icmp -s $INTERNAL_NETWORK -d $ANYWHERE -j ACCEPT

##############################################################################
# Allow full communication on our internal network between all machines on   #
# the internal network.                                                      #
##############################################################################

$IPCHAINS -A input -i $INTERNAL_INTERFACE -s $INTERNAL_NETWORK -j ACCEPT
$IPCHAINS -A output -i $INTERNAL_INTERFACE -d $INTERNAL_NETWORK -j ACCEPT

##########################################
# Allow access for the loopback adapter. #
##########################################

$IPCHAINS -A input -i $LOOPBACK_INTERFACE -j ACCEPT
$IPCHAINS -A output -i $LOOPBACK_INTERFACE -j ACCEPT

###################
# DNS Client (53) #
###################

$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $NAMESERVER_1 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT
$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $NAMESERVER_2 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT
$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $NAMESERVER_3 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT
$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $NAMESERVER_4 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT
$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $NAMESERVER_5 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT
$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $NAMESERVER_6 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE -s $NAMESERVER_1 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT
$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE -s $NAMESERVER_2 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT
$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE -s $NAMESERVER_3 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT
$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE -s $NAMESERVER_4 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT
$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE -s $NAMESERVER_5 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT
$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE -s $NAMESERVER_6 53 \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

$IPCHAINS -A output -p udp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_1 53 -j ACCEPT
$IPCHAINS -A output -p udp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_2 53 -j ACCEPT
$IPCHAINS -A output -p udp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_3 53 -j ACCEPT
$IPCHAINS -A output -p udp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_4 53 -j ACCEPT
$IPCHAINS -A output -p udp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_5 53 -j ACCEPT
$IPCHAINS -A output -p udp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_6 53 -j ACCEPT

$IPCHAINS -A output -p tcp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_1 53 -j ACCEPT
$IPCHAINS -A output -p tcp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_2 53 -j ACCEPT
$IPCHAINS -A output -p tcp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_3 53 -j ACCEPT
$IPCHAINS -A output -p tcp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_4 53 -j ACCEPT
$IPCHAINS -A output -p tcp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_5 53 -j ACCEPT
$IPCHAINS -A output -p tcp -i $EXTERNAL_INTERFACE \
          -s $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -d $NAMESERVER_6 53 -j ACCEPT

###################
# DNS Server (53) #
###################

$IPCHAINS -A input -p tcp -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE $UNPRIVILEGED_PORTS -d $IP_ADDRESS_0 53 -j ACCEPT

$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE $UNPRIVILEGED_PORTS -d $IP_ADDRESS_0 53 -j ACCEPT

########################
# FTP Client (20 & 21) #
########################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE 21 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE 20 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE $UNPRIVILEGED_PORTS \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

########################
# FTP Server (20 & 21) #
########################

$IPCHAINS -A input -p tcp -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE $UNPRIVILEGED_PORTS -d $IP_ADDRESS_0 21 -j ACCEPT

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE $UNPRIVILEGED_PORTS -d $IP_ADDRESS_0 20 -j ACCEPT

$IPCHAINS -A input -p tcp -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE $UNPRIVILEGED_PORTS \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

####################
# SSH Client (22) #
####################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE 22 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE 22 -d $IP_ADDRESS_0 $SSH_PORTS -j ACCEPT

######################
# Telnet Client (23) #
######################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE 23 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

######################
# Telnet Server (23) #
######################

$IPCHAINS -A input -p tcp -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE $UNPRIVILEGED_PORTS -d $IP_ADDRESS_0 23 -j ACCEPT

####################
# SMTP Client (25) #
####################

$IPCHAINS -A input -p tcp -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE $UNPRIVILEGED_PORTS -d $IP_ADDRESS_0 25 -j ACCEPT

####################
# SMTP Server (25) #
####################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $SMTP_SERVERS 25 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

#####################
# Whois Client (43) #
#####################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE 43 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

#########################
# DHCP Client (67 & 68) #
#########################

$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $DHCP_SERVERS 67 \
          -d $IP_ADDRESS_0 68 -j ACCEPT

$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $DHCP_SERVERS 67 \
          -d $BROADCAST_1 68 -j ACCEPT

$IPCHAINS -A output -p udp -i $EXTERNAL_INTERFACE \
          -s $BROADCAST_0 68 -d $DHCP_SERVERS 67 -j ACCEPT

$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $BROADCAST_0 67 \
          -d $BROADCAST_1 68 -j ACCEPT

$IPCHAINS -A output -p udp -i $EXTERNAL_INTERFACE \
          -s $BROADCAST_0 68 -d $BROADCAST_1 67 -j ACCEPT

$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $DHCP_SERVERS 67 \
          -d $ANYWHERE 68 -j ACCEPT

$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE -s $ANYWHERE 67 \
          -d $IP_ADDRESS_0 68 -j DENY

######################
# Finger Client (79) #
######################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE 79 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

####################
# HTTP Client (80) #
####################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE 80 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

####################
# HTTP Server (80) #
####################

$IPCHAINS -A input -p tcp -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE $UNPRIVILEGED_PORTS -d $IP_ADDRESS_0 80 -j ACCEPT

####################
# POP Client (110) #
####################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $POP_SERVER 110 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

#####################
# Auth client (113) #
#####################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE 113 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

#####################
# Auth server (113) #
#####################

$IPCHAINS -A input -p tcp -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE -d $IP_ADDRESS_0 113 -j REJECT

#####################
# News Client (119) #
#####################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $NEWS_SERVER 119 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

######################
# HTTPS Client (119) #
######################

$IPCHAINS -A input -p tcp ! -y -i $EXTERNAL_INTERFACE \
          -s $ANYWHERE 443 -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j ACCEPT

####################
# Trusted Networks #
####################


$IPCHAINS -A input -s 209.113.135.0/24 -d $IP_ADDRESS_0 -j ACCEPT
$IPCHAINS -A input -s frith.ne.mediaone.net -d $IP_ADDRESS_0 -j ACCEPT
$IPCHAINS -A input -s danclark.ne.mediaone.net -d $IP_ADDRESS_0 -j ACCEPT
$IPCHAINS -A input -s dunamis.ne.mediaone.net -d $IP_ADDRESS_0 -j ACCEPT

#############################################################################
# Set telnet, www and FTP for minimum delay - This section manipulates the  #
# Type Of Service (TOS) bits of the packet. For this to work, you must have #
# CONFIG_IP_ROUTE_TOS enabled in your kernel.                               #
#############################################################################

$IPCHAINS -A output -p tcp -d $ANYWHERE www -t 0x01 0x10
$IPCHAINS -A output -p tcp -d $ANYWHERE telnet -t 0x01 0x10
$IPCHAINS -A output -p tcp -d $ANYWHERE ftp -t 0x01 0x10

#############################################################################
# Set FTP data for maximum throughput - This section manipulates the Type   #
# Of Service (TOS) bits of the packet. For this to work, you must have      #
# CONFIG_IP_ROUTE_TOS enabled in your kernel.                               #
#############################################################################

$IPCHAINS -A output -p tcp -d $ANYWHERE ftp-data -t 0x01 0x08

#################################################
# Deny everything else hitting the input chain. #
#################################################

$IPCHAINS -A input -p tcp -i $EXTERNAL_INTERFACE -d $IP_ADDRESS_0 -j DENY

$IPCHAINS -A input -p udp -i $EXTERNAL_INTERFACE \
          -d $IP_ADDRESS_0 $UNPRIVILEGED_PORTS -j DENY

$IPCHAINS -A output -p icmp -i $EXTERNAL_INTERFACE -s $IP_ADDRESS_0 5 -j DENY

#$IPCHAINS -A input -p icmp -i $EXTERNAL_INTERFACE \
#          -s $ANYWHERE 5 13 14 15 16 17 18 -d $IP_ADDRESS_0 -j DENY

##############################################
# Allow everything else on the output chain. #
##############################################

$IPCHAINS -A output -i $EXTERNAL_INTERFACE -s $IP_ADDRESS_0 -j ACCEPT

#############################################################################
# Masquerade the internal network so we have access to the Internet through #
# our connection on the $EXTERNAL_INTERFACE.                                # 
#############################################################################
 
$IPCHAINS -A forward -i $EXTERNAL_INTERFACE -s $INTERNAL_NETWORK -j MASQ


<<< end


mail main at : [EMAIL PROTECTED]
web f51.w3.to
linux project LinuxMelayu.w3.to
web mail f51.i-p.com
icq #781787



-----Original Message-----
From:   "[EMAIL PROTECTED]" 
<[EMAIL PROTECTED]> on behalf of    "Sheridan Hawken" 
<[EMAIL PROTECTED]>
Sent:   Friday, November 03, 2000 6:08 AM
To:     "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
Cc:     "[EMAIL PROTECTED]" <[EMAIL PROTECTED]>
Subject:        Re: [expert] IP Masquerading

Hi Jon,

I would use port forwarding.  The rule in ipchains looks like this:

/usr/sbin/ipmasqadm portfw -a -p tcp -L InternetIP  Port -R InternalIP Port

/usr/sbin/ipmasqadm portfw -a -p tcp -L xxx.xxx.xxx.xxx 80 -R xxx.xxx.xxx.xxx 80 ( 
this allows http through to an internal machine )

There are some good how to docs on Ipchains at www.linuxdoc.org that can tell you more 
about it.

Sheridan


Jon Greisz wrote:

> I'm a linux newbie.  I've set up a machine with Mandrake 7.1 that I'm about to 
>convert to 7.2.  I want to use it as a firewall between my internal network and my 
>outside T1.  I've got a firewall script set up using IPChains that seems to work 
>pretty well.  I created and used internal network IP addresses.
>
> I've got several machines where I would like certain ports to get through the 
>firewall.  I have assigned internet IP addresses for these machines that I would like 
>to translate to my internal IP's, and reverse it going out.  But only on certain 
>ports.
>
> What is the best approach for this?
>
> Thanks,
>
> Jon Greisz
>
> *********** REPLY SEPARATOR  ***********
>
> On 11/2/00 at 8:45 AM Mark Johnson wrote:
>
> >Yes, this looks like another eruption of off-topic posts...  IMHO, VB should
> >be ported because that is the only way to achieve portability for MS Office
> >documents.  StarOffice is really cool but ultimately not feasible if you are
> >exchanging documents with a group of MS Office folks.  Unfortunately, VB
> >would bring office products closer to managing that feasiblity.
> >Unfortunately, VB is not an elegant language but it suits it's purpose.  Too
> >bad tcl, perl, python, java, or javascript wasn't used for building these
> >dynamic docs.  But those languages present quite a learning curve, this was
> >VB strength.  Also, it enabled MS to lock in a lot of folks to it's
> >proprietary ways of doing things.
>
>   ------------------------------------------------------------------------
> Keep in touch with http://mandrakeforum.com:
> Subscribe the "[EMAIL PROTECTED]" mailing list.

Keep in touch with http://mandrakeforum.com: 
Subscribe the "[EMAIL PROTECTED]" mailing list.

Reply via email to