1 | #!/bin/bash |
#!/bin/bash
#written by 新浪微博@小山best 2013/6/24
#1.只有经过该脚本绑定的MAC才可通过本机访问外网,其余MAC一律被拒绝访问外网。
#2.该脚本的$1和$2为新添加的MAC和描述,且重定向到allowmac.txt中。
#3.除该脚本中默认允许通过的MAC外,脚本还从allowmac.txt中读取允许通过的MAC。
#4.该脚本还进行WEB重定向,即凡是访问本机外网网卡地址的80端口请求转向web服务器192.168.0.30.
#打开IP转发功能,相当于让内核做路由
echo "1" > /proc/sys/net/ipv4/ip_forward
###清除iptables规则
iptables -F
iptables -X
iptables -Z
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
###清除iptables规则
###设置默认规则
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP #只有FORWARD链默认DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
###设置默认规则
###设置访问本机规则(注意INPUT默认规则和上面默认规则冲突,二者选其一)
#iptables -P INPUT DROP
#以下为允许访问本机的MAC,分别为FengYangshanEthernet/LapTopWireless
#iptables -s 219.245.89.201 -d 219.245.89.102 -p udp --dport 177 -j ACCEPT
#iptables -A INPUT -s 219.245.89.201 -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp --dport 177 -j ACCEPT
#iptables -A INPUT -m mac --mac-source 20:6a:8a:43:ba:e3 -j ACCEPT
#iptables -A INPUT -m mac --mac-source 20:7c:8f:6b:e6:7c -j ACCEPT
###设置访问本机规则(注意INPUT默认规则和上面默认规则冲突,二者选其一)
###web重定向用到的语句。
#下面两条命令保证外网主机可以访问WEB服务器。
#将到达网关的目的地址是219.245.89.0/24、端口为80的包重定向到192.168.0.30.(即DNAT,将目的地址是219.245.89.0/24:80的包的目的地址改为192.168.0.30)
iptables -t nat -A PREROUTING --dst 219.245.89.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.30
iptables -t nat -A PREROUTING --dst 219.245.89.0/24 -p udp --dport 80 -j DNAT --to-destination 192.168.0.30
#只有上面的命令,局域网内部主机在浏览器里输入网关外网地址是不能访问WEB服务器的,必须添加下面两条命令。
#将到达网关的目的地址是192.168.0.30:80的包将其源地址替换为192.168.0.1.
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.0.30 --dport 80 -j SNAT --to-source 192.168.0.1
iptables -t nat -A POSTROUTING -p udp --dst 192.168.0.30 --dport 80 -j SNAT --to-source 192.168.0.1
#下面两条命令使得网关在浏览器里输入网关外网地址时重定向到WEB服务器。没有这两条命令,在网关浏览器输入网关外网地址时将访问网关自己的WEB服务器(如果网关主机上架设了WEB服务器)。
iptables -t nat -A OUTPUT --dst 219.245.89.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.30
iptables -t nat -A OUTPUT --dst 219.245.89.0/24 -p udp --dport 80 -j DNAT --to-destination 192.168.0.30
###web重定向用到的语句。
###启动nat转发及FORWARD state允许转发外网对内网请求响应的包
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
###启动nat转发及FORWARD state允许转发外网对内网请求响应的包
###本脚本默认允许访问外网的MAC(其余允许通过的MAC在~/桌面/addmac.txt中)
iptables -A FORWARD -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
iptables -A FORWARD -m mac --mac-source 22:33:44:55:66:77 -j ACCEPT
###本脚本默认允许访问外网的MAC(其余允许通过的MAC在~/桌面/addmac.txt中)
###重定向脚本的$1 $2
#eg:sudo MyFireWall.sh 00:00:00:00:00:00 ZhangSan
#意思是将00:00:00:00:00:00 ZhangSan作为一行添加到addmac.txt中
#if else 避免将空行赋到allowmac.txt中
#当前用户桌面上是否存在allowmac.txt,不存在则创建
if [ -a ~/桌面/AllowMAC.txt ];then
:
else
/bin/touch ~/桌面/AllowMAC.txt
chmod 766 ~/桌面/AllowMAC.txt
fi
if [ $1 ];then
echo $1 $2 >> ~/桌面/AllowMAC.txt
else
:
fi
###重定向脚本的$1 $2
###从AllowMAC.txt读取用户添加的MAC,并允许其访问外网
#管道|read即读取cat显示的文件的每一行,并将以行存在LINE变量中。
cat ~/桌面/AllowMAC.txt | while read LINE
do
usermac=`echo $LINE | awk '{print $1}'`
#username=`echo $LINE | awk '{print $2}'`
#echo \# $username >> /bin/MyFireWall.sh
#if else 语句的作用是避免将读到的空行作为MAC赋给iptables语句。
if [ $usermac ];then
iptables -A FORWARD -m mac --mac-source $usermac -j ACCEPT
else
:
fi
done
###从AllowMAC.txt读取用户添加的MAC,并允许其访问外网
#written by 新浪微博@小山best 2013/6/24
#1.只有经过该脚本绑定的MAC才可通过本机访问外网,其余MAC一律被拒绝访问外网。
#2.该脚本的$1和$2为新添加的MAC和描述,且重定向到allowmac.txt中。
#3.除该脚本中默认允许通过的MAC外,脚本还从allowmac.txt中读取允许通过的MAC。
#4.该脚本还进行WEB重定向,即凡是访问本机外网网卡地址的80端口请求转向web服务器192.168.0.30.
#打开IP转发功能,相当于让内核做路由
echo "1" > /proc/sys/net/ipv4/ip_forward
###清除iptables规则
iptables -F
iptables -X
iptables -Z
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
###清除iptables规则
###设置默认规则
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP #只有FORWARD链默认DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
###设置默认规则
###设置访问本机规则(注意INPUT默认规则和上面默认规则冲突,二者选其一)
#iptables -P INPUT DROP
#以下为允许访问本机的MAC,分别为FengYangshanEthernet/LapTopWireless
#iptables -s 219.245.89.201 -d 219.245.89.102 -p udp --dport 177 -j ACCEPT
#iptables -A INPUT -s 219.245.89.201 -j ACCEPT
#iptables -A INPUT -i eth0 -p tcp --dport 177 -j ACCEPT
#iptables -A INPUT -m mac --mac-source 20:6a:8a:43:ba:e3 -j ACCEPT
#iptables -A INPUT -m mac --mac-source 20:7c:8f:6b:e6:7c -j ACCEPT
###设置访问本机规则(注意INPUT默认规则和上面默认规则冲突,二者选其一)
###web重定向用到的语句。
#下面两条命令保证外网主机可以访问WEB服务器。
#将到达网关的目的地址是219.245.89.0/24、端口为80的包重定向到192.168.0.30.(即DNAT,将目的地址是219.245.89.0/24:80的包的目的地址改为192.168.0.30)
iptables -t nat -A PREROUTING --dst 219.245.89.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.30
iptables -t nat -A PREROUTING --dst 219.245.89.0/24 -p udp --dport 80 -j DNAT --to-destination 192.168.0.30
#只有上面的命令,局域网内部主机在浏览器里输入网关外网地址是不能访问WEB服务器的,必须添加下面两条命令。
#将到达网关的目的地址是192.168.0.30:80的包将其源地址替换为192.168.0.1.
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.0.30 --dport 80 -j SNAT --to-source 192.168.0.1
iptables -t nat -A POSTROUTING -p udp --dst 192.168.0.30 --dport 80 -j SNAT --to-source 192.168.0.1
#下面两条命令使得网关在浏览器里输入网关外网地址时重定向到WEB服务器。没有这两条命令,在网关浏览器输入网关外网地址时将访问网关自己的WEB服务器(如果网关主机上架设了WEB服务器)。
iptables -t nat -A OUTPUT --dst 219.245.89.0/24 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.30
iptables -t nat -A OUTPUT --dst 219.245.89.0/24 -p udp --dport 80 -j DNAT --to-destination 192.168.0.30
###web重定向用到的语句。
###启动nat转发及FORWARD state允许转发外网对内网请求响应的包
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
###启动nat转发及FORWARD state允许转发外网对内网请求响应的包
###本脚本默认允许访问外网的MAC(其余允许通过的MAC在~/桌面/addmac.txt中)
iptables -A FORWARD -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
iptables -A FORWARD -m mac --mac-source 22:33:44:55:66:77 -j ACCEPT
###本脚本默认允许访问外网的MAC(其余允许通过的MAC在~/桌面/addmac.txt中)
###重定向脚本的$1 $2
#eg:sudo MyFireWall.sh 00:00:00:00:00:00 ZhangSan
#意思是将00:00:00:00:00:00 ZhangSan作为一行添加到addmac.txt中
#if else 避免将空行赋到allowmac.txt中
#当前用户桌面上是否存在allowmac.txt,不存在则创建
if [ -a ~/桌面/AllowMAC.txt ];then
:
else
/bin/touch ~/桌面/AllowMAC.txt
chmod 766 ~/桌面/AllowMAC.txt
fi
if [ $1 ];then
echo $1 $2 >> ~/桌面/AllowMAC.txt
else
:
fi
###重定向脚本的$1 $2
###从AllowMAC.txt读取用户添加的MAC,并允许其访问外网
#管道|read即读取cat显示的文件的每一行,并将以行存在LINE变量中。
cat ~/桌面/AllowMAC.txt | while read LINE
do
usermac=`echo $LINE | awk '{print $1}'`
#username=`echo $LINE | awk '{print $2}'`
#echo \# $username >> /bin/MyFireWall.sh
#if else 语句的作用是避免将读到的空行作为MAC赋给iptables语句。
if [ $usermac ];then
iptables -A FORWARD -m mac --mac-source $usermac -j ACCEPT
else
:
fi
done
###从AllowMAC.txt读取用户添加的MAC,并允许其访问外网