ipf, ipnat and Bittorrent
    Paul 
    paul at theharbour.eclipse.co.uk
       
    Wed Feb 16 13:04:11 GMT 2005
    
    
  
I am trying to forward bittorrent ports on FreeBSD 5.3 with ipf and ipnat.
But the bittorrent indicator stays yellow which means it isn't set up
correctly.  Also, I don't get as many connections to peers as I should and
download speeds are very poor.  My ipnat.rules and ipf.rules files are shown
below:
 
ipnat.rules:
 
#Rules for ipnat
 
#This line says to map outbound traffic to your public IP address
map tun0 192.168.0.0/24 -> 0/32 portmap tcp/udp auto
 
#bittorrent
rdr tun0 0/32 port 6881 -> 192.168.0.3 port 6881 tcp/udp
rdr tun0 0/32 port 6882 -> 192.168.0.3 port 6882 tcp/udp
rdr tun0 0/32 port 6883 -> 192.168.0.3 port 6883 tcp/udp
rdr tun0 0/32 port 6884 -> 192.168.0.3 port 6884 tcp/udp
rdr tun0 0/32 port 6885 -> 192.168.0.3 port 6885 tcp/udp
rdr tun0 0/32 port 6886 -> 192.168.0.3 port 6886 tcp/udp
rdr tun0 0/32 port 6887 -> 192.168.0.3 port 6887 tcp/udp
rdr tun0 0/32 port 6888 -> 192.168.0.3 port 6888 tcp/udp
rdr tun0 0/32 port 6889 -> 192.168.0.3 port 6889 tcp/udp
rdr tun0 0/32 port 6890 -> 192.168.0.3 port 6890 tcp/udp
 
 
 
 
 
ipf.rules:
 
#####################################################################
#
# IP packet filtering rules (firewall)
#
 
# If you change this file, run
#    ipf -Fa -f /etc/ipf.rules
# to update kernel tables
 
# All rules are "quick" so go strictly top to bottom
 
#  Don't bug loopback
#
pass out quick on lo0
pass in quick on lo0
 
#  Don't bother the inside interface either
#
pass out quick on sis0
pass in quick on sis0
 
#####################################################################
#
#  First, we deal with bogus packets.
#
 
#  Block any inherently bad packets coming in from the outside world.
#  These include ICMP redirect packets and IP fragments so short the
#  filtering rules won't be able to examine the whole UDP/TCP header.
#
block in log quick on tun0 proto icmp from any to any icmp-type redir
block in log quick on tun0 proto tcp/udp all with short
 
#  Block any IP spoofing atempts.  (Packets "from" non-routable
#  addresses shouldn't be coming in from the outside).
#
block in quick on tun0 from 192.168.0.0/16 to any
block in quick on tun0 from 127.0.0.0/8    to any
block in quick on tun0 from 172.16.0.0/12  to any
block in quick on tun0 from 10.0.0.0/8     to any
block in quick on tun0 from 0.0.0.0/8      to any
block in quick on tun0 from 169.254.0.0/16 to any
block in quick on tun0 from 192.0.2.0/24   to any
block in quick on tun0 from 204.152.64.0/23 to any
block in quick on tun0 from 224.0.0.0/3    to any
block in quick on tun0 from 255.255.255.255/32 to any
 
#  Kill all source-routed packets
#
block in quick on tun0 all with opt lsrr
block in quick on tun0 all with opt ssrr
 
#  Don't allow non-routable packets to leave our network
#
block out quick on tun0 from any to 192.168.0.0/16
block out quick on tun0 from any to 127.0.0.0/8
block out quick on tun0 from any to 172.16.0.0/12
block out quick on tun0 from any to 10.0.0.0/8
block out quick on tun0 from any to 0.0.0.0/8
block out quick on tun0 from any to 169.254.0.0/16
block out quick on tun0 from any to 192.0.2.0/24
block out quick on tun0 from any to 204.152.64.0/23
block out quick on tun0 from any to 224.0.0.0/3
block out quick on tun0 from any to 255.255.255.255/32
 
#
#####################################################################
 
 
#####################################################################
#
#  Now the normal filtering rules
#
 
#  ICMP: allow incoming ping and traceroute only
#
pass in quick on tun0 proto icmp from any to any icmp-type echorep
pass in quick on tun0 proto icmp from any to any icmp-type echo
pass in quick on tun0 proto icmp from any to any icmp-type timex
pass in quick on tun0 proto icmp from any to any icmp-type unreach
block in log quick on tun0 proto icmp from any to any
 
#  TCP: Allow various incoming services. Only match
#  SYN packets, and allow the state table to handle the rest of the
#  connection.
#
pass in quick on tun0 proto tcp from any to any port = ssh flags S keep
frags keep state
pass in quick on tun0 proto tcp from any to any port = http flags S keep
frags keep state
pass in quick on tun0 proto tcp from any to any port = 443 flags S keep
frags keep state
pass in quick on tun0 proto tcp from any to any port = ftp keep state
pass in quick on tun0 proto tcp from any to any port = 3306 flags S keep
frags keep state
pass in quick on tun0 proto tcp from any to any port 6880 >< 6891 flags S
keep state
pass in quick on tun0 proto udp from any to any port 6880 >< 6891 keep state
 
#  Of course we need to allow packets coming in as replies to our
#  connections so we keep state. Strictly speaking, with packets
#  coming from our network we don't have to only match SYN,
#  and it's rather unlikely that there will be any fragments. But
#  what the hell.
#
pass out quick on tun0 proto tcp  from any to any flags S keep frags keep
state
pass out quick on tun0 proto udp  from any to any keep state
pass out quick on tun0 proto icmp from any to any keep state
 
#  End of rules. Block everything to all ports, all protocols and return
#  RST (TCP) or ICMP/port-unreachable (UDP). Don't forget to rewrite the
#  source address of the "port unreachable" message, hence -as-dest
#
block return-rst in log quick on tun0 proto tcp from any to any
block return-icmp-as-dest in log quick on tun0 proto udp from any to any
block in quick all
 
#
#  End of file
#
#####################################################################
    
    
More information about the freebsd-questions
mailing list