SlackwareThis Forum is for the discussion of Slackware Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
here's my contribution on the mac address thing...
i've put the relevant changes in bold... i'll try to contribute something for the other issues soon...
i think this should work fine, but i haven't been able to test it yet... let me know how it goes...
Code:
#!/bin/sh
IPT="/usr/sbin/iptables"
LOOPBACK_INTERFACE="lo"
LOOPBACK_IP="127.0.0.1"
EXTERNAL_INTERFACE="eth1"
EXTERNAL_IP="81.196.55.xxx"
LOCAL_INTERFACE="eth0"
LOCAL_IP="192.168.0.2"
LOCAL_NETWORK="192.168.0.0/24"
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ipt_mac
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -X -t nat
$IPT -X -t mangle
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -A INPUT -p ALL -m state --state INVALID -j DROP
$IPT -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p ALL -i $LOOPBACK_INTERFACE -j ACCEPT
$IPT -A INPUT -p TCP ! --syn -m state --state NEW -j DROP
$IPT -A INPUT -p ALL -i $LOCAL_INTERFACE -s ! $LOCAL_NETWORK -j DROP
$IPT -A INPUT -p ALL -i $EXTERNAL_INTERFACE -s $LOCAL_NETWORK -j DROP
$IPT -A INPUT -p UDP -i $LOCAL_INTERFACE -s 192.168.0.5 -m mac \
--mac-source xx.xx.xx.xx.xx.xx --dport 53 -j ACCEPT
$IPT -A INPUT -p UDP -i $LOCAL_INTERFACE -s 192.168.0.9 -m mac \
--mac-source xx.xx.xx.xx.xx.xx --dport 53 -j ACCEPT
$IPT -A INPUT -p UDP -i $LOCAL_INTERFACE -s 192.168.0.19 -m mac \
--mac-source xx.xx.xx.xx.xx.xx --dport 53 -j ACCEPT
#$IPT -A INPUT -p TCP -i $LOCAL_INTERFACE --dport 22 -j ACCEPT
#$IPT -A INPUT -p ICMP -i $LOCAL_INTERFACE --icmp-type 8 -j ACCEPT
$IPT -A INPUT -m limit --limit 12/minute --limit-burst 12 -j LOG \
--log-prefix "INPUT DROP: "
$IPT -A OUTPUT -p ALL -o $LOOPBACK_INTERFACE -j ACCEPT
$IPT -A OUTPUT -p ALL -s $LOOPBACK_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LOCAL_INTERFACE -j ACCEPT
$IPT -A OUTPUT -p ALL -s $LOCAL_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $EXTERNAL_INTERFACE -j ACCEPT
$IPT -A OUTPUT -p ALL -s $EXTERNAL_IP -j ACCEPT
$IPT -A FORWARD -p ALL -m state --state INVALID -j DROP
$IPT -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
$IPT -A FORWARD -p ALL -i $LOCAL_INTERFACE -s ! $LOCAL_NETWORK -j DROP
$IPT -A FORWARD -p ALL -i $EXTERNAL_INTERFACE -s $LOCAL_NETWORK -j DROP
$IPT -A FORWARD -p ALL -i $LOCAL_INTERFACE -o $EXTERNAL_INTERFACE \
-s 192.168.0.5 -m mac --mac-source xx.xx.xx.xx.xx.xx -j ACCEPT
$IPT -A FORWARD -p ALL -i $LOCAL_INTERFACE -o $EXTERNAL_INTERFACE \
-s 192.168.0.9 -m mac --mac-source xx.xx.xx.xx.xx.xx -j ACCEPT
$IPT -A FORWARD -p ALL -i $LOCAL_INTERFACE -o $EXTERNAL_INTERFACE \
-s 192.168.0.19 -m mac --mac-source xx.xx.xx.xx.xx.xx -j ACCEPT
$IPT -A FORWARD -p ALL -i $EXTERNAL_INTERFACE -o $LOCAL_INTERFACE \
-m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -A POSTROUTING -o $EXTERNAL_INTERFACE -j SNAT \
--to-source $EXTERNAL_IP
PS: what is greater? the things you want to allow or the things you want to block?
i ask because, for example, if you only want to allow people on those mac addresses to SURF THE WEB, then you could accomplish that with one rule which would block any traffic that isn't WEB traffic, without having to block other things one by one... like, you could block everything, and then allow only certain things... let me know where you stand here please...
i think it's better to use a chain for each of your mac-allowed hosts... it makes it simpler to manage everything, and the packets will have to travel less rules...
you can manage the mac address verification in two locations: INPUT_MACS for input and FORWARD_MACS for routing...
you can easily control the allowed traffic for each host from the "HOST" chains...
in the commented examples in chains INPUT_HOST_C and FORWARD_HOST_C, you'll see how easily host (192.168.0.19) can be made "special", where it not only gets to connect to the dns daemon on the gateway and web servers on the internet, but also to ssh and ftp daemons on the internet (as well as ping internet IPs), and it gets to connect to the ssh daemon on the gateway, while hosts 192.168.0.5 and 192.168.0.9 can only connect to internet web servers...
Code:
#!/bin/sh
IPT="/usr/sbin/iptables"
LO_IFACE="lo"
LO_IP="127.0.0.1"
INET_IFACE="eth1"
INET_IP="81.196.55.xxx"
LAN_IFACE="eth0"
LAN_IP="192.168.0.2"
LAN="192.168.0.0/24"
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ipt_mac
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -X -t nat
$IPT -X -t mangle
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
###############################################################################
### Let's make some chains...
###############################################################################
$IPT -N BAD_PACKETS
$IPT -N INPUT_MACS
$IPT -N INPUT_HOST_A
$IPT -N INPUT_HOST_B
$IPT -N INPUT_HOST_C
$IPT -N FORWARD_MACS
$IPT -N FORWARD_HOST_A
$IPT -N FORWARD_HOST_B
$IPT -N FORWARD_HOST_C
###############################################################################
### INPUT
###############################################################################
$IPT -A INPUT -p ALL -j BAD_PACKETS
$IPT -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPT -A INPUT -p ALL -j INPUT_MACS
#$IPT -A INPUT -p TCP -i $INET_IFACE --dport 22 -j ACCEPT
#$IPT -A INPUT -p ICMP -i $INET_IFACE --icmp-type 8 -j ACCEPT
$IPT -A INPUT -m limit --limit 12/minute --limit-burst 12 -j LOG \
--log-prefix "INPUT DROP: "
###############################################################################
### OUTPUT
###############################################################################
$IPT -A OUTPUT -p ALL -m state --state INVALID -j DROP
$IPT -A OUTPUT -p ALL -o $LO_IFACE -s $LO_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LAN_IFACE -s $LAN_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $INET_IFACE -s $INET_IP -j ACCEPT
$IPT -A OUTPUT -m limit --limit 12/minute --limit-burst 12 -j LOG \
--log-prefix "OUTPUT DROP: "
###############################################################################
### FORWARD
###############################################################################
$IPT -A FORWARD -p ALL -j BAD_PACKETS
$IPT -A FORWARD -p ALL -i $INET_IFACE -o $LAN_IFACE -m state --state \
ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p ALL -j FORWARD_MACS
$IPT -A FORWARD -m limit --limit 12/minute --limit-burst 12 -j LOG \
--log-prefix "FORWARD DROP: "
###############################################################################
### POSTROUTING
###############################################################################
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP
###############################################################################
### INPUT_MACS
###############################################################################
$IPT -A INPUT_MACS -p ALL -i $LAN_IFACE -s 192.168.0.5 -m mac --mac-source \
aa:xx:xx:xx:xx:xx -j INPUT_HOST_A
$IPT -A INPUT_MACS -p ALL -i $LAN_IFACE -s 192.168.0.9 -m mac --mac-source \
bb:xx:xx:xx:xx:xx -j INPUT_HOST_B
$IPT -A INPUT_MACS -p ALL -i $LAN_IFACE -s 192.168.0.19 -m mac --mac-source \
cc:xx:xx:xx:xx:xx -j INPUT_HOST_C
$IPT -A INPUT_MACS -p ALL -j RETURN
###############################################################################
### INPUT_HOST_A
###############################################################################
$IPT -A INPUT_HOST_A -p UDP --dport 53 -j ACCEPT
$IPT -A INPUT_HOST_A -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_HOST_A -p ALL -j RETURN
###############################################################################
### INPUT_HOST_B
###############################################################################
$IPT -A INPUT_HOST_B -p UDP --dport 53 -j ACCEPT
$IPT -A INPUT_HOST_B -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_HOST_B -p ALL -j RETURN
###############################################################################
### INPUT_HOST_C
###############################################################################
$IPT -A INPUT_HOST_C -p UDP --dport 53 -j ACCEPT
$IPT -A INPUT_HOST_C -p ICMP --icmp-type 8 -j ACCEPT
#$IPT -A INPUT_HOST_C -p TCP --dport 22 -j ACCEPT
$IPT -A INPUT_HOST_C -p ALL -j RETURN
###############################################################################
### FORWARD_MACS
###############################################################################
$IPT -A FORWARD_MACS -p ALL -i $LAN_IFACE -o $INET_IFACE -s 192.168.0.5 -m \
mac --mac-source aa:xx:xx:xx:xx:xx -j FORWARD_HOST_A
$IPT -A FORWARD_MACS -p ALL -i $LAN_IFACE -o $INET_IFACE -s 192.168.0.9 -m \
mac --mac-source bb:xx:xx:xx:xx:xx -j FORWARD_HOST_B
$IPT -A FORWARD_MACS -p ALL -i $LAN_IFACE -o $INET_IFACE -s 192.168.0.19 -m \
mac --mac-source cc:xx:xx:xx:xx:xx -j FORWARD_HOST_C
$IPT -A FORWARD_MACS -p ALL -j RETURN
###############################################################################
### FORWARD_HOST_A
###############################################################################
$IPT -A FORWARD_HOST_A -p TCP --dport 80 -j ACCEPT
$IPT -A FORWARD_HOST_A -p ALL -j RETURN
###############################################################################
### FORWARD_HOST_B
###############################################################################
$IPT -A FORWARD_HOST_B -p TCP --dport 80 -j ACCEPT
$IPT -A FORWARD_HOST_B -p ALL -j RETURN
###############################################################################
### FORWARD_HOST_C
###############################################################################
$IPT -A FORWARD_HOST_C -p TCP --dport 80 -j ACCEPT
#$IPT -A FORWARD_HOST_C -p TCP --dport 22 -j ACCEPT
#$IPT -A FORWARD_HOST_C -p TCP --dport 21 -j ACCEPT
#$IPT -A FORWARD_HOST_C -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A FORWARD_HOST_C -p ALL -j RETURN
###############################################################################
### BAD_PACKETS
###############################################################################
$IPT -A BAD_PACKETS -p ALL -m state --state INVALID -j DROP
$IPT -A BAD_PACKETS -p TCP ! --syn -m state --state NEW -j DROP
$IPT -A BAD_PACKETS -p ICMP --fragment -j DROP
$IPT -A BAD_PACKETS -p ALL -i $LAN_IFACE -s ! $LAN -j DROP
$IPT -A BAD_PACKETS -p ALL -i $LAN_IFACE -s $LAN_IP -j DROP
$IPT -A BAD_PACKETS -p ALL -i $INET_IFACE -s $LAN -j DROP
#$IPT -A BAD_PACKETS -p ALL -d 255.255.255.255 -j DROP
$IPT -A BAD_PACKETS -p ALL -j RETURN
echo "So let it be written, so let it be done..."
###############################################################################
### Let's make some chains...
###############################################################################
$IPT -A FORWARD_MACS -p ALL -i $LAN_IFACE -o $INET_IFACE -s 192.168.0.4 -m \
mac --mac-source 11:22:33:44:55:66 -j FORWARD_HOST_C
$IPT -A FORWARD_MACS -p ALL -j RETURN
$IPT -A BAD_PACKETS -p ALL -m state --state INVALID -j DROP
$IPT -A BAD_PACKETS -p TCP ! --syn -m state --state NEW -j DROP
$IPT -A BAD_PACKETS -p ICMP --fragment -j DROP
$IPT -A BAD_PACKETS -p ALL -i $LAN_IFACE -s ! $LAN -j DROP
$IPT -A BAD_PACKETS -p ALL -i $LAN_IFACE -s $LAN_IP -j DROP
$IPT -A BAD_PACKETS -p ALL -i $INET_IFACE -s $LAN -j DROP
#$IPT -A BAD_PACKETS -p ALL -d 255.255.255.255 -j DROP
$IPT -A BAD_PACKETS -p ALL -j RETURN
welllllll, the script doesn't work, i mean on my machine with ip: 192.168.0.4 and MAC ADRESS 11:22:33:44:55:66 no more browse, no more pings, no more ftp.....
here's my contribution on the ftp port forwarding issue... i've put the relevant stuff in bold, as usual...
Code:
#!/bin/sh
IPT="/usr/sbin/iptables"
LO_IFACE="lo"
LO_IP="127.0.0.1"
INET_IFACE="eth1"
INET_IP="81.196.55.xxx"
LAN_IFACE="eth0"
LAN_IP="192.168.0.2"
LAN="192.168.0.0/24"
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ipt_mac
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -X -t nat
$IPT -X -t mangle
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
###############################################################################
### Let's make some chains...
###############################################################################
$IPT -N BAD_PACKETS
$IPT -N INPUT_MACS
$IPT -N INPUT_SERVER1
$IPT -N INPUT_HOST_A
$IPT -N INPUT_HOST_B
$IPT -N INPUT_HOST_C
$IPT -N FORWARD_MACS
$IPT -N FORWARD_SERVER1
$IPT -N FORWARD_HOST_A
$IPT -N FORWARD_HOST_B
$IPT -N FORWARD_HOST_C
###############################################################################
### INPUT
###############################################################################
$IPT -A INPUT -p ALL -j BAD_PACKETS
$IPT -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPT -A INPUT -p ALL -j INPUT_MACS
#$IPT -A INPUT -p TCP -i $INET_IFACE --dport 22 -j ACCEPT
#$IPT -A INPUT -p ICMP -i $INET_IFACE --icmp-type 8 -j ACCEPT
$IPT -A INPUT -m limit --limit 12/minute --limit-burst 12 -j LOG \
--log-prefix "INPUT DROP: "
###############################################################################
### OUTPUT
###############################################################################
$IPT -A OUTPUT -p ALL -m state --state INVALID -j DROP
$IPT -A OUTPUT -p ALL -o $LO_IFACE -s $LO_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LAN_IFACE -s $LAN_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $INET_IFACE -s $INET_IP -j ACCEPT
$IPT -A OUTPUT -m limit --limit 12/minute --limit-burst 12 -j LOG \
--log-prefix "OUTPUT DROP: "
###############################################################################
### FORWARD
###############################################################################
$IPT -A FORWARD -p ALL -j BAD_PACKETS
$IPT -A FORWARD -p ALL -i $INET_IFACE -o $LAN_IFACE -m state --state \
ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p TCP -i $INET_IFACE -o $LAN_IFACE -d 192.168.0.4 \
--dport 1415 -j ACCEPT
$IPT -A FORWARD -p ALL -j FORWARD_MACS
$IPT -A FORWARD -m limit --limit 12/minute --limit-burst 12 -j LOG \
--log-prefix "FORWARD DROP: "
###############################################################################
### PREROUTING
###############################################################################
$IPT -t nat -A PREROUTING -p TCP -i $INET_IFACE --dport 21 -j DNAT \
--to-destination 192.168.0.4:1415
###############################################################################
### POSTROUTING
###############################################################################
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP
###############################################################################
### INPUT_MACS
###############################################################################
$IPT -A INPUT_MACS -p ALL -i $LAN_IFACE -s 192.168.0.4 -m mac --mac-source \
zz:xx:xx:xx:xx:xx -j INPUT_SERVER1
$IPT -A INPUT_MACS -p ALL -i $LAN_IFACE -s 192.168.0.5 -m mac --mac-source \
aa:xx:xx:xx:xx:xx -j INPUT_HOST_A
$IPT -A INPUT_MACS -p ALL -i $LAN_IFACE -s 192.168.0.9 -m mac --mac-source \
bb:xx:xx:xx:xx:xx -j INPUT_HOST_B
$IPT -A INPUT_MACS -p ALL -i $LAN_IFACE -s 192.168.0.19 -m mac --mac-source \
cc:xx:xx:xx:xx:xx -j INPUT_HOST_C
$IPT -A INPUT_MACS -p ALL -j RETURN
###############################################################################
### INPUT_SERVER1
###############################################################################
#$IPT -A INPUT_SERVER1 -p UDP --dport 53 -j ACCEPT
#$IPT -A INPUT_SERVER1 -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_SERVER1 -p ALL -j RETURN
###############################################################################
### INPUT_HOST_A
###############################################################################
$IPT -A INPUT_HOST_A -p UDP --dport 53 -j ACCEPT
$IPT -A INPUT_HOST_A -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_HOST_A -p ALL -j RETURN
###############################################################################
### INPUT_HOST_B
###############################################################################
$IPT -A INPUT_HOST_B -p UDP --dport 53 -j ACCEPT
$IPT -A INPUT_HOST_B -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_HOST_B -p ALL -j RETURN
###############################################################################
### INPUT_HOST_C
###############################################################################
$IPT -A INPUT_HOST_C -p UDP --dport 53 -j ACCEPT
$IPT -A INPUT_HOST_C -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_HOST_C -p ALL -j RETURN
###############################################################################
### FORWARD_MACS
###############################################################################
$IPT -A FORWARD_MACS -p ALL -i $LAN_IFACE -o $INET_IFACE -s 192.168.0.4 -m \
mac --mac-source zz:xx:xx:xx:xx:xx -j FORWARD_SERVER1
$IPT -A FORWARD_MACS -p ALL -i $LAN_IFACE -o $INET_IFACE -s 192.168.0.5 -m \
mac --mac-source aa:xx:xx:xx:xx:xx -j FORWARD_HOST_A
$IPT -A FORWARD_MACS -p ALL -i $LAN_IFACE -o $INET_IFACE -s 192.168.0.9 -m \
mac --mac-source bb:xx:xx:xx:xx:xx -j FORWARD_HOST_B
$IPT -A FORWARD_MACS -p ALL -i $LAN_IFACE -o $INET_IFACE -s 192.168.0.19 -m \
mac --mac-source cc:xx:xx:xx:xx:xx -j FORWARD_HOST_C
$IPT -A FORWARD_MACS -p ALL -j RETURN
###############################################################################
### FORWARD_SERVER1
###############################################################################
$IPT -A FORWARD_SERVER1 -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD_SERVER1 -p ALL -j RETURN
###############################################################################
### FORWARD_HOST_A
###############################################################################
$IPT -A FORWARD_HOST_A -p TCP --dport 80 -j ACCEPT
$IPT -A FORWARD_HOST_A -p ALL -j RETURN
###############################################################################
### FORWARD_HOST_B
###############################################################################
$IPT -A FORWARD_HOST_B -p TCP --dport 80 -j ACCEPT
$IPT -A FORWARD_HOST_B -p ALL -j RETURN
###############################################################################
### FORWARD_HOST_C
###############################################################################
$IPT -A FORWARD_HOST_C -p TCP --dport 80 -j ACCEPT
$IPT -A FORWARD_HOST_C -p ALL -j RETURN
###############################################################################
### BAD_PACKETS
###############################################################################
$IPT -A BAD_PACKETS -p ALL -m state --state INVALID -j DROP
$IPT -A BAD_PACKETS -p TCP ! --syn -m state --state NEW -j DROP
$IPT -A BAD_PACKETS -p ICMP --fragment -j DROP
$IPT -A BAD_PACKETS -p ALL -i $LAN_IFACE -s ! $LAN -j DROP
$IPT -A BAD_PACKETS -p ALL -i $LAN_IFACE -s $LAN_IP -j DROP
$IPT -A BAD_PACKETS -p ALL -i $INET_IFACE -s $LAN -j DROP
#$IPT -A BAD_PACKETS -p ALL -d 255.255.255.255 -j DROP
$IPT -A BAD_PACKETS -p ALL -j RETURN
echo "So let it be written, so let it be done..."
here's the only things that are allowed in the script FYI, AFAIK:
machine SERVER1:
- tcp traffic from the internet to $INET_IP:21 (ftp) is forwarded to 192.168.0.4:1415*
- established and related traffic from 192.168.0.4 to the internet
*this is the only traffic that isn't MAC verified for obvious reasons...
machine A:
- established and related traffic from the internet
- web traffic to the internet
- dns traffic to the gateway
- icmp 8 (ping) to the gateway
machine B:
- established and related traffic from the internet
- web traffic to the internet
- dns traffic to the gateway
- icmp 8 (ping) to the gateway
machine C:
- established and related traffic from the internet
- web traffic to the internet
- dns traffic to the gateway
- icmp 8 (ping) to the gateway
none of the hosts can ping the internet, they can only ping the gateway, except SERVER1, which can't ping or surf or anything, it can only receive traffic for the ftp daemon and respond to it... it can't establish a connection to a host on the internet on it's own... this is in sync with the security methodology of the rest of the script (allowing only the wanted traffic, denying everything else)...
i haven't been able to test the forwarding, but it should work... let me know how it goes...
i'll try to contribute something for the dc++ issue soon, but i can't make any promises...
i made some improvements to the script once more...
with this new scheme, every host on your lan has two chains assigned: one controls traffic from the host to the gateway (INPUT_LAN2GATE_*), and the other controls traffic from the host to the internet (FORWARD_LAN2INET_*)...
there's also chains to easily control traffic from the internet to the gateway (INET2GATE) and from the internet to the lan (INET2LAN)...
Code:
#!/bin/sh
IPT="/usr/sbin/iptables"
LO_IFACE="lo"
LO_IP="127.0.0.1"
INET_IFACE="eth1"
INET_IP="xxx.xxx.xxx.xxx"
LAN_IFACE="eth0"
LAN_IP="192.168.0.2"
LAN="192.168.0.0/24"
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_irc
/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ipt_mac
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -X -t nat
$IPT -X -t mangle
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
###############################################################################
### Let's make some chains...
###############################################################################
$IPT -N INPUT_LAN2GATE
$IPT -N INPUT_LAN2GATE_SERVER1
$IPT -N INPUT_LAN2GATE_HOST_A
$IPT -N INPUT_LAN2GATE_HOST_B
$IPT -N INPUT_LAN2GATE_HOST_C
$IPT -N INPUT_INET2GATE
$IPT -N FORWARD_LAN2INET
$IPT -N FORWARD_LAN2INET_SERVER1
$IPT -N FORWARD_LAN2INET_HOST_A
$IPT -N FORWARD_LAN2INET_HOST_B
$IPT -N FORWARD_LAN2INET_HOST_C
$IPT -N FORWARD_INET2LAN
$IPT -N BAD_PACKETS
###############################################################################
### INPUT
###############################################################################
$IPT -A INPUT -p ALL -m state --state INVALID -j DROP
#$IPT -A INPUT -p UDP -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT
$IPT -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPT -A INPUT -p ALL -j BAD_PACKETS
$IPT -A INPUT -p ALL -i $INET_IFACE -j INPUT_INET2GATE
$IPT -A INPUT -p ALL -i $LAN_IFACE -j INPUT_LAN2GATE
$IPT -A INPUT -m limit --limit 12/minute --limit-burst 12 -j LOG \
--log-prefix "INPUT DROP: "
###############################################################################
### OUTPUT
###############################################################################
$IPT -A OUTPUT -p ALL -m state --state INVALID -j DROP
$IPT -A OUTPUT -p ALL -o $LO_IFACE -s $LO_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $LAN_IFACE -s $LAN_IP -j ACCEPT
$IPT -A OUTPUT -p ALL -o $INET_IFACE -s $INET_IP -j ACCEPT
$IPT -A OUTPUT -m limit --limit 12/minute --limit-burst 12 -j LOG \
--log-prefix "OUTPUT DROP: "
###############################################################################
### FORWARD
###############################################################################
$IPT -A FORWARD -p ALL -m state --state INVALID -j DROP
$IPT -A FORWARD -p ALL -j BAD_PACKETS
$IPT -A FORWARD -p ALL -i $INET_IFACE -o $LAN_IFACE -j FORWARD_INET2LAN
$IPT -A FORWARD -p ALL -i $LAN_IFACE -o $INET_IFACE -j FORWARD_LAN2INET
$IPT -A FORWARD -m limit --limit 12/minute --limit-burst 12 -j LOG \
--log-prefix "FORWARD DROP: "
###############################################################################
### PREROUTING
###############################################################################
$IPT -t nat -A PREROUTING -p TCP -i $INET_IFACE -d $INET_IP --dport 21 \
-j DNAT --to-destination 192.168.0.4:1415
$IPT -t nat -A PREROUTING -p TCP -i $INET_IFACE -d $INET_IP --dport 555 \
-j DNAT --to-destination 192.168.0.4:555
$IPT -t nat -A PREROUTING -p UDP -i $INET_IFACE -d $INET_IP --dport 555 \
-j DNAT --to-destination 192.168.0.4:555
###############################################################################
### POSTROUTING
###############################################################################
$IPT -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP
###############################################################################
### INPUT_LAN2GATE
###############################################################################
$IPT -A INPUT_LAN2GATE -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT_LAN2GATE -p ALL -s 192.168.0.4 -m mac --mac-source \
zz:xx:xx:xx:xx:xx -j INPUT_LAN2GATE_SERVER1
$IPT -A INPUT_LAN2GATE -p ALL -s 192.168.0.5 -m mac --mac-source \
aa:xx:xx:xx:xx:xx -j INPUT_LAN2GATE_HOST_A
$IPT -A INPUT_LAN2GATE -p ALL -s 192.168.0.9 -m mac --mac-source \
bb:xx:xx:xx:xx:xx -j INPUT_LAN2GATE_HOST_B
$IPT -A INPUT_LAN2GATE -p ALL -s 192.168.0.19 -m mac --mac-source \
cc:xx:xx:xx:xx:xx -j INPUT_LAN2GATE_HOST_C
$IPT -A INPUT_LAN2GATE -p ALL -j RETURN
###############################################################################
### INPUT_LAN2GATE_SERVER1
###############################################################################
#$IPT -A INPUT_LAN2GATE_SERVER1 -p UDP --dport 53 -j ACCEPT
#$IPT -A INPUT_LAN2GATE_SERVER1 -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_LAN2GATE_SERVER1 -p ALL -j RETURN
###############################################################################
### INPUT_LAN2GATE_HOST_A
###############################################################################
$IPT -A INPUT_LAN2GATE_HOST_A -p UDP --dport 53 -j ACCEPT
$IPT -A INPUT_LAN2GATE_HOST_A -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_LAN2GATE_HOST_A -p ALL -j RETURN
###############################################################################
### INPUT_LAN2GATE_HOST_B
###############################################################################
$IPT -A INPUT_LAN2GATE_HOST_B -p UDP --dport 53 -j ACCEPT
$IPT -A INPUT_LAN2GATE_HOST_B -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_LAN2GATE_HOST_B -p ALL -j RETURN
###############################################################################
### INPUT_LAN2GATE_HOST_C
###############################################################################
$IPT -A INPUT_LAN2GATE_HOST_C -p UDP --dport 53 -j ACCEPT
$IPT -A INPUT_LAN2GATE_HOST_C -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_LAN2GATE_HOST_C -p ALL -j RETURN
###############################################################################
### INPUT_INET2GATE
###############################################################################
$IPT -A INPUT_INET2GATE -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
#$IPT -A INPUT_INET2GATE -p TCP --dport 22 -j ACCEPT
#$IPT -A INPUT_INET2GATE -p ICMP --icmp-type 8 -j ACCEPT
$IPT -A INPUT_INET2GATE -p ALL -j RETURN
###############################################################################
### FORWARD_LAN2INET
###############################################################################
$IPT -A FORWARD_LAN2INET -p ALL -s 192.168.0.4 -m mac --mac-source \
zz:xx:xx:xx:xx:xx -j FORWARD_LAN2NET_SERVER1
$IPT -A FORWARD_LAN2INET -p ALL -s 192.168.0.5 -m mac --mac-source \
aa:xx:xx:xx:xx:xx -j FORWARD_LAN2NET_HOST_A
$IPT -A FORWARD_LAN2INET -p ALL -s 192.168.0.9 -m mac --mac-source \
bb:xx:xx:xx:xx:xx -j FORWARD_LAN2NET_HOST_B
$IPT -A FORWARD_LAN2INET -p ALL -s 192.168.0.19 -m mac --mac-source \
cc:xx:xx:xx:xx:xx -j FORWARD_LAN2NET_HOST_C
$IPT -A FORWARD_LAN2INET -p ALL -j RETURN
###############################################################################
### FORWARD_LAN2INET_SERVER1
###############################################################################
$IPT -A FORWARD_LAN2INET_SERVER1 -p ALL -m state --state \
ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD_LAN2INET_SERVER1 -p ALL -j RETURN
###############################################################################
### FORWARD_LAN2INET_HOST_A
###############################################################################
$IPT -A FORWARD_LAN2INET_HOST_A -p TCP --dport 80 -j ACCEPT
$IPT -A FORWARD_LAN2INET_HOST_A -p ALL -j RETURN
###############################################################################
### FORWARD_LAN2INET_HOST_B
###############################################################################
$IPT -A FORWARD_LAN2INET_HOST_B -p TCP --dport 80 -j ACCEPT
$IPT -A FORWARD_LAN2INET_HOST_B -p ALL -j RETURN
###############################################################################
### FORWARD_LAN2INET_HOST_C
###############################################################################
$IPT -A FORWARD_LAN2INET_HOST_C -p TCP --dport 6660:6669 -j ACCEPT
$IPT -A FORWARD_LAN2INET_HOST_C -p TCP --dport 80 -j ACCEPT
$IPT -A FORWARD_LAN2INET_HOST_C -p ALL -j RETURN
###############################################################################
### FORWARD_INET2LAN
###############################################################################
$IPT -A FORWARD_INET2LAN -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD_INET2LAN -p TCP -d 192.168.0.4 --dport 1415 -j ACCEPT
$IPT -A FORWARD_INET2LAN -p TCP -d 192.168.0.4 --dport 555 -j ACCEPT
$IPT -A FORWARD_INET2LAN -p UDP -d 192.168.0.4 --dport 555 -j ACCEPT
$IPT -A FORWARD_INET2LAN -p ALL -j RETURN
###############################################################################
### BAD_PACKETS
###############################################################################
$IPT -A BAD_PACKETS -p TCP ! --syn -m state --state NEW -j DROP
$IPT -A BAD_PACKETS -p ICMP --fragment -j DROP
$IPT -A BAD_PACKETS -p ALL -i $LAN_IFACE -s ! $LAN -j DROP
$IPT -A BAD_PACKETS -p ALL -i $LAN_IFACE -s $LAN_IP -j DROP
$IPT -A BAD_PACKETS -p ALL -i $INET_IFACE -s $LAN -j DROP
$IPT -A BAD_PACKETS -p ALL -i $INET_IFACE -s $LO_IP -j DROP
$IPT -A BAD_PACKETS -p ALL -d 255.255.255.255 -j DROP
$IPT -A BAD_PACKETS -p ALL -j RETURN
echo "So let it be written, so let it be done..."
so far so gut aber i have..... how should i say...
i want to create acces groups
on my lan there are 28 persons who have acces to net and another 70 no acces members
so let say group1_full_net_acces (from the 28 persons only 20 hav full acces to net no restriction applied)
ip: 192.168.0.5 and mac 11:22:33:44:55:66
ip: 192.168.0.7 and mac 11:22:33:44:55:61
ip: 192.168.0.4 and mac 11:22:33:44:55:64
ip: 192.168.0.12 and mac 11:22:33:44:55:69
.
.
.
.
.
ip: 192.168.0.37 and mac 11:22:33:44:55:21
full access ftp, http, irc, messenger, ssh, pop3, imap...and so on
group2_limited_net_acces (for the rest of 8 persons)
ip: 192.168.0.33 and mac 11:22:33:44:55:26
ip: 192.168.0.71 and mac 11:22:33:44:55:51
ip: 192.168.0.45 and mac 11:22:33:44:55:14
ip: 192.168.0.112 and mac 11:22:33:44:55:59
they will only have acces to http, yahoo messenger and IRC
now how to set up the firewall to create this kind of rules
i try to modify last script but didn't figure out how to create the new rules...
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.