分类: LINUX
2005-12-15 09:43:47
linux共享上网
iptable and shell
Iptables -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
#在crontab 方式下要注意的几个问题如下: Q1:为何可以手工执行,加入crontab后却不能正确执行 Crontab -e
01-59/3 * * * * root /usr/sbin/adsl-start > /dev/null 2>&1
加载ppp0自动拔号:(前五个单位为:分钟小时日月星期)
還記得 iptables 的行為習慣嗎﹕它會自上而下的對比規則﹐找到符合的就不再往下找了。根據這樣的特性﹐我們可以將 NAT 外部界面進入的某些連線﹐在那行 syn 過濾規則之前 ACCEPT 進來。不過﹐就要非常小心別漏了必要的限制元素﹐有可能的話﹐盡您想象把規則設得嚴密又嚴密吧。
1、 网卡配置。 两块网卡,eth0为拨号网卡,IP:192.168.1.1(其他的地址也可);eth1为内网网卡,IP:192.168.0.1。掩码均为255.255.255.0。 局域网网段为192.168.0.0。 注意:此处两块网卡均不能设网关。
2、 PPPoE软件的升级与安装 1) 在 默认安装已安装上) 下载 2) 安装rp-pppoe。以root身份执行 rpm -Uvh rp-pppoe-3.5-1.i386.rpm 3、 修改/etc/ sysctl.conf 将其中的 net.ipv4.ip_forward = 0 改为 net.ipv4.ip_forward = 1 4、 去除ipchains模块,只选择iptables方法如下: 1)setup 2)选择system service 3)去除ipchains 4)选中iptables 5)重启机器 5、 PPPoE客户端配置 在rp-pppoe-3.5-1.i386.rpm安装完毕后,接下来就可进行PPPoE客户端配置了。过程如下。 #/usr/sbin/adsl-setup >>> Enter your PPPoE user name: --此处输入拨号帐号的用户名 >>> Enter the Ethernet interface connected to the ADSL modem For Solaris, this is likely to be something like /dev/hme0. For Linux, it will be ethn, where n is a number. (default eth0): --输eth0 >>> Enter the demand value (default no): --输no >>> Enter the DNS information here: --输210.52.149.2(视当地运营商的DNS服务器IP而定) >>> Please enter your PPPoE password: --输网通用户口令 >>> Choose a type of firewall (0-2): --输0 (0代表无防火墙,防火墙就用IPTABLES去吧) >>> Accept these settings and adjust configuration files (y/n)? --输y 6、 启动拨号连接 /usr/sbin/adsl-start 成功连接后,屏幕显示Connected。 此时这台linux已可以上网浏览了。 7、 IP伪装 为了使局域网中的其他机器能通过Linux服务器共享上网,至少须执行下面的命令: iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 完成后,在192.168.0.0网段(网关为192.168.0.1)的PC机就可透过Linux上网了! 8、 开机自启动 为了使Linux服务器能够自动拨号,执行下面步骤。 1)chkconfig --add adsl 2)setup 3)选择system services 4)选中ADSL 5)OK退出 6)打开/etc/rc.d/rc.local,在该文件的末尾添上下面语句 echo "[OK]" echo "Drop ICMP form anywhere" echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all echo "[OK]" iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 说明:前面四句用于关闭ICMP,防止别人Ping。 9、 至此,一切OK,一个简单的拨号建成了。重启机器后,发现linux的internet共享连接 echo 1 > /proc/sys/net/ipv4/ip_forward
通知linux 启动IP转发! iptables -A POSTROUTING -t nat -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 61.156.35.114
#把来自192.168.100.0子网并通过eth0出去的访问请求做NAT,把数据包的源地址修改为61.156.35.114。
如果你的ISP没有分配给你固定的公网地址,那么这一行可以写成:
iptables -A POSTROUTING -t nat -s 192.168.100.0/24 -o eth0 -j MASQUERADE
modem或isdn等拨号方式上网,假如是通过ppp0拨号上网,可以这样写:
iptables -A POSTROUTING -t nat -s 192.168.100.0/24 -o ppp0 -j MASQUERADE
这里是针对一个子网(192.168.100.0/24)做NAT,也可以具体到某台主机:
iptables -A POSTROUTING -t nat -s 192.168.100.9 -o eth0 -j MASQUERADE
iptables a output –s 200.200.200.1 –j drop/accept/deny iptable.sh echo 1 > /proc/sys/net/ipv4/ip_forward ipaddress.sh #!/bin/bash
A:1.如果crontab执行失败,会发送email给你,请在mail中查找出错原因
2.crontab中的PATH变量设置与交互式shell环境中不同,要执行的命令必须有正确路径
3.在crontab中%字符被认为是换行,所以你的命令中有%时,在crontab中要加\转义
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
#localhost ftp
modprobe ip_conntrack_ftp
#nat ftp
modprobe ip_nat_ftp
/sbin/iptables -F -t filter
/sbin/iptables -F -t nat
#
#input to DROP
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
#/sbin/iptables -I INPUT -i ppp0 -p TCP --syn -j DROP
#/sbin/iptables -I FORWARD -i ppp0 -p TCP ! --syn -j ACCETP
#
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
#
# ALLOW loopback NET and PRIVATE
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -j ACCEPT
#FORWARD
#/sbin/iptables -A FORWARD -p tcp --dport 80 -j ACCEPT
#/sbin/iptables -A FORWARD -P udp --dprot 53 -j ACCEPT
#/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# FTP
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# KEEP CONNECTIONS
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# NAT
/sbin/iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
# DNAT
#/sbin/iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.9:80 此脚本理论是可以的为什么在我这不行我也不知道耶!
/sbin/iptables -t nat -A PREROUTING -d -p tcp --dport 80 -j DNAT --to 192.168.0.9:80
/sbin/iptables -t nat -A PREROUTING -d -p tcp --dport 1080 -j DNAT --to 192.168.0.7:1080
/sbin/iptables -t nat -A PREROUTING -d -p tcp --dport 888 -j DNAT --to 192.168.0.4:888
cd /etc/rc.d
P=`/etc/rc.d/ifconfig ppp0 | grep "inet addr" | awk '{print $2}'`
#echo $p
P=`echo $P | sed 's/addr://g'`
#echo $P
TXT=`sed '1,$s//sbin/iptables -t nat -A PREROUTING -d .* -p tcp --dport 80 -j DNAT --to 192.168.0.9:80//sbin/iptables -t nat -A PREROUTING -d '$P' -p tcp --dport 80 -j DNAT --to 192.168.0.9:80/g' iptable.sh`
echo "$TXT" > iptable.sh
TXT=`sed '1,$s//sbin/iptables -t nat -A PREROUTING -d .* -p tcp --dport 1080 -j DNAT --to 192.168.0.7:1080//sbin/iptables -t nat -A PREROUTING -d '$P' -p tcp --dport 1080 -j DNAT --to 192.168.0.7:1080/g' iptable.sh`
echo "$TXT" > iptable.sh
TXT=`sed '1,$s//sbin/iptables -t nat -A PREROUTING -d .* -p tcp --dport 888 -j DNAT --to 192.168.0.4:888//sbin/iptables -t nat -A PREROUTING -d '$P' -p tcp --dport 888 -j DNAT --to 192.168.0.4:888/g' iptable.sh`
echo "$TXT" > iptable.sh
TXT=`sed '1,$s//sbin/iptables -t nat -A PREROUTING -d .* -p tcp --dport 23 -j DNAT --to 192.168.0.15:23//sbin/iptables -t nat -A PREROUTING -d '$P' -p tcp --dport 23 -j DNAT --to 192.168.0.15:23/g' iptable.sh`
echo "$TXT" > iptable.sh
TXT=`sed '1,$s//sbin/iptables -t nat -A PREROUTING -d .* -p tcp --dport 1503 -j DNAT --to 192.168.0.111:1503//sbin/iptables -t nat -A PREROUTING -d '$P' -p tcp --dport 1503 -j DNAT --to 192.168.0.111:1503/g' iptable.sh`
echo "$TXT" > iptable.sh
TXT=`sed '1,$s//sbin/iptables -t nat -A PREROUTING -d .* -p tcp --dport 8080 -j DNAT --to 192.168.0.20:8080//sbin/iptables -t nat -A PREROUTING -d '$P' -p tcp --dport 8080 -j DNAT --to 192.168.0.20:8080/g' iptable.sh`
echo "$TXT" > iptable.sh