sh/bash/dash/ksh/zsh等Shell脚本
-
ghostry
- 帖子: 1532
- 注册时间: 2008-07-23 20:08
- 来自: http://www.ghostry.cn
-
联系:
#1
帖子
由 ghostry » 2008-08-22 10:36
感谢论坛的各位友人,感谢google。感谢我自己,感谢我老婆,问题解决了,现把代码贴出,大家随便享用。放到/bin下边,一条命令实现网关。
代码: 全选
#!/bin/bash
#文件名firewall
#此网关由狂风寞寞制作,规则比较松。
#检查用户权限
if [ $UID != "0" ]
then
echo "不是root用户"
elif [ "$1" = "-h" ] #检查参数
then
echo "nat 联网出口 要代理的网段"
echo " 联网出口 链接外网的网卡接口"
echo " 要代理的网段 格式为‘192.168.15.0’"
elif [ "$1" = "" ]
then
echo "缺少端口参数"
echo "使用-h获取帮助"
echo "nat 联网出口 要代理的网段"
echo " 联网出口 链接外网的网卡接口"
echo " 要代理的网段 格式为‘192.168.15.0’"
elif [ "$2" = "" ]
then
echo "缺少网段参数"
echo "使用-h获取帮助"
echo "nat 联网出口 要代理的网段"
echo " 联网出口 链接外网的网卡接口"
echo " 要代理的网段 格式为‘192.168.15.0’"
else
#变量传递
eth=$1
wangduan=$2
#开启nat
echo 1 > /proc/sys/net/ipv4/ip_forward
#清除现有的规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
#设置为$2网段的网关。
iptables -t nat -A POSTROUTING -s $wangduan/24 -o $eth -j MASQUERADE
###################################### Filter段开始 #####################################
#防止网络上其它计算机使用Ping命令探测本机:
iptables -A INPUT -p icmp --icmp-type echo-request -i $eth -j DROP
#
# 防止广播包从IP代理服务器进入局域网:
iptables -A INPUT -s 255.255.255.255 -i $eth -j DROP
iptables -A INPUT -s 224.0.0.0/224.0.0.0 -i $eth -j DROP
iptables -A INPUT -d 0.0.0.0 -i $eth -j DROP
# 屏蔽掉以下的TCP和UDP端口:
# iptables -A INPUT -i $eth -p udp -m udp --dport 3 -j DROP
# iptables -A INPUT -i $eth -p tcp -m tcp --dport 3 -j DROP
# iptables -A INPUT -i $eth -p tcp -m tcp --dport 111 -j DROP
# iptables -A INPUT -i $eth -p udp -m udp --dport 111 -j DROP
# iptables -A INPUT -i $eth -p udp -m udp --dport 587 -j DROP
# iptables -A INPUT -i $eth -p tcp -m tcp --dport 587 -j DROP
###################################### Filter段结束 #####################################
fi
以下是原问题。
代码: 全选
#!/bin/bash
#文件名firewall
#此防火墙由狂风寞寞制作,规则比较松,可以做网关(不需要的注释掉),使用前请根据实际情况设置WAN端口。
#设置WAN端口
if [ "$1" = "-h" ]
then
echo "nat 联网出口 要代理的网段"
echo " 联网出口 链接外网的网卡接口"
echo " 要代理的网段 格式为‘192.168.15.0’"
elif [ "$1" = "" ]
then
echo "缺少网段参数"
echo "使用-h获取帮助"
elif [ "$2" = "" ]
then
echo "缺少网段参数"
else
eth=$1
wangduan=$2
#开启nat
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
#清除现有的规则
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
#设置为$2网段的网关。
sudo iptables -t nat -A POSTROUTING -s $wangduan/24 -o $eth -j MASQUERADE
###################################### Filter段开始 #####################################
#防止网络上其它计算机使用Ping命令探测本机:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -i $eth -j DROP
#
# 防止广播包从IP代理服务器进入局域网:
sudo iptables -A INPUT -s 255.255.255.255 -i $eth -j DROP
sudo iptables -A INPUT -s 224.0.0.0/224.0.0.0 -i $eth -j DROP
sudo iptables -A INPUT -d 0.0.0.0 -i $eth -j DROP
# 屏蔽掉以下的TCP和UDP端口:
#sudo iptables -A INPUT -i $eth -p udp -m udp --dport 3 -j DROP
#sudo iptables -A INPUT -i $eth -p tcp -m tcp --dport 3 -j DROP
#sudo iptables -A INPUT -i $eth -p tcp -m tcp --dport 111 -j DROP
#sudo iptables -A INPUT -i $eth -p udp -m udp --dport 111 -j DROP
#sudo iptables -A INPUT -i $eth -p udp -m udp --dport 587 -j DROP
#sudo iptables -A INPUT -i $eth -p tcp -m tcp --dport 587 -j DROP
###################################### Filter段结束 #####################################
fi
目前出这个错误。
$ nat eth0 192.168.0.0
/home/momo/bin/nat: line 21: /proc/sys/net/ipv4/ip_forward: Permission denied
也希望大虾看看有没有不严谨的地方/[/code]
上次由
ghostry 在 2008-08-23 18:24,总共编辑 1 次。
-
bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
-
联系:
#2
帖子
由 bones7456 » 2008-08-22 11:35
脚本里不应该写sudo.
执行前就判断是不是root身份,不是就退出,并给提示.
-
ghostry
- 帖子: 1532
- 注册时间: 2008-07-23 20:08
- 来自: http://www.ghostry.cn
-
联系:
#3
帖子
由 ghostry » 2008-08-22 11:59
代码: 全选
#!/bin/bash
#文件名firewall
#此防火墙由狂风寞寞制作,规则比较松,可以做网关(不需要的注释掉),使用前请根据实际情况设置WAN端口。
#设置WAN端口
if [ `logname` != "root" ]
then
echo "不是root用户"
echo `logname`
elif [ "$1" = "-h" ]
then
echo "nat 联网出口 要代理的网段"
echo " 联网出口 链接外网的网卡接口"
echo " 要代理的网段 格式为‘192.168.15.0’"
elif [ "$1" = "" ]
then
echo "缺少网段参数"
echo "使用-h获取帮助"
elif [ "$2" = "" ]
then
echo "缺少网段参数"
else
eth=$1
wangduan=$2
#开启nat
echo 1 > /proc/sys/net/ipv4/ip_forward
#清除现有的规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
#设置为$2网段的网关。
iptables -t nat -A POSTROUTING -s $wangduan/24 -o $eth -j MASQUERADE
###################################### Filter段开始 #####################################
#防止网络上其它计算机使用Ping命令探测本机:
iptables -A INPUT -p icmp --icmp-type echo-request -i $eth -j DROP
#
# 防止广播包从IP代理服务器进入局域网:
iptables -A INPUT -s 255.255.255.255 -i $eth -j DROP
iptables -A INPUT -s 224.0.0.0/224.0.0.0 -i $eth -j DROP
iptables -A INPUT -d 0.0.0.0 -i $eth -j DROP
# 屏蔽掉以下的TCP和UDP端口:
# iptables -A INPUT -i $eth -p udp -m udp --dport 3 -j DROP
# iptables -A INPUT -i $eth -p tcp -m tcp --dport 3 -j DROP
# iptables -A INPUT -i $eth -p tcp -m tcp --dport 111 -j DROP
# iptables -A INPUT -i $eth -p udp -m udp --dport 111 -j DROP
# iptables -A INPUT -i $eth -p udp -m udp --dport 587 -j DROP
# iptables -A INPUT -i $eth -p tcp -m tcp --dport 587 -j DROP
###################################### Filter段结束 #####################################
fi
这样sudo之后还是说不是root。返回值仍然是我的用户名。

`logname`这个不行的话能用哪个呢?
-
cnkilior
- 论坛版主
- 帖子: 4984
- 注册时间: 2007-08-05 17:40
#4
帖子
由 cnkilior » 2008-08-22 12:07
試試檢查環境變量:UID
我用su,UID會變成root的UID
logname 還是原用戶!
-----------------
[/code]
-
ghostry
- 帖子: 1532
- 注册时间: 2008-07-23 20:08
- 来自: http://www.ghostry.cn
-
联系:
#5
帖子
由 ghostry » 2008-08-22 14:58

谢谢,解决了。
代码: 全选
#!/bin/bash
#文件名firewall
#此防火墙由狂风寞寞制作,规则比较松,可以做网关(不需要的注释掉),使用前请根据实际情况设置WAN端口。
#设置WAN端口
if [ $UID != "0" ]
then
echo "不是root用户"
elif [ "$1" = "-h" ]
then
echo "nat 联网出口 要代理的网段"
echo " 联网出口 链接外网的网卡接口"
echo " 要代理的网段 格式为‘192.168.15.0’"
elif [ "$1" = "" ]
then
echo "缺少网段参数"
echo "使用-h获取帮助"
elif [ "$2" = "" ]
then
echo "缺少网段参数"
else
eth=$1
wangduan=$2
#开启nat
echo 1 > /proc/sys/net/ipv4/ip_forward
#清除现有的规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
#设置为$2网段的网关。
iptables -t nat -A POSTROUTING -s $wangduan/24 -o $eth -j MASQUERADE
###################################### Filter段开始 #####################################
#防止网络上其它计算机使用Ping命令探测本机:
iptables -A INPUT -p icmp --icmp-type echo-request -i $eth -j DROP
#
# 防止广播包从IP代理服务器进入局域网:
iptables -A INPUT -s 255.255.255.255 -i $eth -j DROP
iptables -A INPUT -s 224.0.0.0/224.0.0.0 -i $eth -j DROP
iptables -A INPUT -d 0.0.0.0 -i $eth -j DROP
# 屏蔽掉以下的TCP和UDP端口:
# iptables -A INPUT -i $eth -p udp -m udp --dport 3 -j DROP
# iptables -A INPUT -i $eth -p tcp -m tcp --dport 3 -j DROP
# iptables -A INPUT -i $eth -p tcp -m tcp --dport 111 -j DROP
# iptables -A INPUT -i $eth -p udp -m udp --dport 111 -j DROP
# iptables -A INPUT -i $eth -p udp -m udp --dport 587 -j DROP
# iptables -A INPUT -i $eth -p tcp -m tcp --dport 587 -j DROP
###################################### Filter段结束 #####################################
fi