QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1778|回复: 14

Linux上用iptables做NAT+端口映射

[复制链接]
发表于 2004-4-5 20:36:26 | 显示全部楼层 |阅读模式
原文:http://www.ourlinux.net/wz/Article_show.php?id=1037
花了一个下午,从开始装系统开始
我的系统:
网关服务器:RedHat 8.0
web/ftp服务器:win2k,其中web用iis,ftp用serv-U

系统安装过程就不介绍了,简单的写一下我所用到的脚本程序。
为了能通俗点,我把NAT和端口映射分开了写单独的shell,不过后面再加上一个2个合并的脚本,仅供参考,当然也欢迎各位大虾给我意见和建议,在此先3Q!同时感谢CU的帮助。

下面是我的nat.sh
#!/bin/sh
# Name: nat.sh
# Author: Bixuan
# Date: 2003/04/04

echo "Your user the iptables firewall.";
#eth1_IP="192.168.1.1" #内网IP地址
SRC="192.168.1.0/24" # 内网地址段


case $1 in
   start)
       echo 1 > /proc/sys/net/ipv4/ip_forward
       /sbin/modprobe ip_tables
       /sbin/modprobe iptable_filter
        /sbin/modprobe iptable_nat
        /sbin/modprobe ip_conntrack
        /sbin/modprobe ip_conntrack_ftp
        /sbin/modprobe ip_nat_ftp
        /sbin/iptables -F INPUT
        /sbin/iptables -F FORWARD
        /sbin/iptables -F POSTROUTING -t nat
        /sbin/iptables -P FORWARD DROP
        /sbin/iptables -t nat -A POSTROUTING -o eth0 -s $SRC -j MASQUERADE
        /sbin/iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
        /sbin/iptables -A FORWARD -s $SRC -j ACCEPT
        echo "Nat is strating ...... [ OK ]"
        ;;
   stop)
echo 0 > /proc/sys/net/ipv4/ip_forward
       ;;
    *)
        echo $"Usage: $0 {start|stop}";
esac

也可以看本站的文章:http://www.ourlinux.net/wz/Article_show.php?id=919 这是一份去年的文档。

端口映射的脚本DNAT.sh:
#!/bin/sh
#Name: DNAT.sh

IP="192.168.2.165"         # 外网IP
SIP="192.168.1.2"          #内网IP
GATE_WAY="192.168.1.1"         #内网网关

#iptables -t nat -A PREROUTING -d ..IP -p tcp --dport 80 -j DNAT --to ..IP
#iptables -t nat -A POSTROUTING -d ..IP -p tcp --dport 80 -j SNAT --to ......
#iptables -A FORWARD -o eth1 -d ..IP -j ACCEPT
#iptables -A FORWARD -i eth1 -s..IP -m state --state ESTABLISHED -j ACCEPT

####################### pub 部分 ##############################
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state

iptables -F
iptables -t nat -F
iptables -F INPUT
iptables -F FORWARD

iptables -F POSTROUTING -t nat
iptables -P FORWARD DROP

############## 端口映射 Start ###########################
#Web
iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -d $IP -p tcp --dport 80 -j DNAT --to $SIP:80
iptables -t nat -A POSTROUTING -d $SIP -p tcp --dport 80 -j SNAT --to $GATE_WAY
#iptables -A FORWARD -d $SIP -j ACCEPT
#iptables -A FORWARD -s $SIP -m state --state ESTABLISHED -j ACCEPT

#FTP
iptables -t nat -A PREROUTING -d $IP -p tcp --dport 21 -j DNAT --to $SIP:21
iptables -t nat -A POSTROUTING -d $SIP -p tcp --dport 21 -j SNAT --to $GATE_WAY
iptables -A FORWARD -d $SIP -j ACCEPT
iptables -A FORWARD -s $SIP -m state --state ESTABLISHED -j ACCEPT

############## 端口映射 End ###########################

为了方便,下面是2大功能合并的脚本NAT_DNAT.sh:
#!/bin/sh
#Name: NAT_DNAT.sh

IP="192.168.2.165"
SIP="192.168.1.2"
GATE_WAY="192.168.1.1"
SRC_NAT="192.168.1.0/24"
#

####################### pub 部分 ##############################
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state

iptables -F
iptables -t nat -F
iptables -F INPUT
iptables -F FORWARD

iptables -F POSTROUTING -t nat
iptables -P FORWARD DROP

####################### NAT 部分 ##############################

iptables -t nat -A POSTROUTING -o eth0 -s $SRC_NAT -j MASQUERADE
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s $SRC_NAT -j ACCEPT

################################## 端口映射 Start ####################################

#iptables -t nat -A PREROUTING -d 外部IP -p tcp --dport 80 -j DNAT --to 内部IP
#iptables -t nat -A POSTROUTING -d 内部IP -p tcp --dport 80 -j SNAT --to 内部网关地址
#iptables -A FORWARD -o eth1 -d 内部IP -j ACCEPT
#iptables -A FORWARD -i eth1 -s内部IP -m state --state ESTABLISHED -j ACCEPT


#Web
#iptables -F
#iptables -t nat -F
iptables -t nat -A PREROUTING -d $IP -p tcp --dport 80 -j DNAT --to $SIP:80
iptables -t nat -A POSTROUTING -d $SIP -p tcp --dport 80 -j SNAT --to $GATE_WAY
#iptables -A FORWARD -d $SIP -j ACCEPT
#iptables -A FORWARD -s $SIP -m state --state ESTABLISHED -j ACCEPT

#FTP
iptables -t nat -A PREROUTING -d $IP -p tcp --dport 21 -j DNAT --to $SIP:21
iptables -t nat -A POSTROUTING -d $SIP -p tcp --dport 21 -j SNAT --to $GATE_WAY

# Forward rules
iptables -A FORWARD -d $SIP -j ACCEPT
iptables -A FORWARD -s $SIP -m state --state ESTABLISHED -j ACCEPT

################################## 端口映射 End ###########################################

脚本写的很粗糙,希望其他朋友能修改成简单的脚本,最好是可以定制的,当然有时候自己也修改一下。以上是自己的一点小“聪明”欢迎指正批评,谢谢!
发表于 2004-4-5 21:34:33 | 显示全部楼层
顶,好文,收藏!!   
回复

使用道具 举报

发表于 2004-5-20 15:07:28 | 显示全部楼层
映射后的ftp支持被动传输吗?
回复

使用道具 举报

 楼主| 发表于 2004-5-20 15:54:30 | 显示全部楼层
[quote:e8e7432bdd="xiongxw"]映射后的ftp支持被动传输吗?[/quote]
这个倒没试过哦!要不朋友你试试了!
主要考虑到我的FTPserver本身就不支持被动模式 :-(
回复

使用道具 举报

发表于 2004-5-21 12:06:48 | 显示全部楼层
老实说,你锝方法不知道你试过没有?
我用了你锝ftp映射部分,明显是错误锝。连语法都是错误锝。
回复

使用道具 举报

发表于 2004-5-21 12:09:05 | 显示全部楼层
iptables -t nat -A POSTROUTING -d $SIP -p tcp --dport 21 -j SNAT --to $GATE_WAY

这句话锝语法明显错误,再linux redhat 9.0提示是invalid argumeng!

希望那个成功过锝人能吧自己锝贴出来。
回复

使用道具 举报

 楼主| 发表于 2004-5-21 13:57:40 | 显示全部楼层
啊?我在RH8都可以呀!
回复

使用道具 举报

发表于 2004-5-21 21:37:44 | 显示全部楼层
我已经放弃了用映射建立服务器了。
干脆用linux做服务器,用smb将局域网中装有windows的盘映射到liiux下来
不知道可以不
回复

使用道具 举报

 楼主| 发表于 2004-5-22 00:22:04 | 显示全部楼层
说说你的要求,应该是可以的!
回复

使用道具 举报

发表于 2004-5-22 00:52:17 | 显示全部楼层
我的经验使用samba建立共享,利用逻辑卷功能来添加磁盘这样比ftp更直接,比windows下的文件共享要更抗病毒。但还是能染毒的

[quote:a3e55edb95="xiongxw"]我已经放弃了用映射建立服务器了。
干脆用linux做服务器,用smb将局域网中装有windows的盘映射到liiux下来
不知道可以不[/quote]
回复

使用道具 举报

发表于 2004-6-1 17:27:56 | 显示全部楼层
感谢bixuan大兄,我按照你的方法已经搞定局域网nat上网和web,ftp映射到局域网内部机器了。很不错啊,谢谢你了。
回复

使用道具 举报

发表于 2004-6-1 18:11:49 | 显示全部楼层
我如果运行这个脚本文件?
回复

使用道具 举报

发表于 2004-6-3 14:45:18 | 显示全部楼层
sh  filenam.sh
回复

使用道具 举报

发表于 2004-6-10 09:30:17 | 显示全部楼层
为什么我无法用ssh登陆我得服务器主机了?你得这些规则怎么这么严密了?
还有我要用vnc登陆主机也不能,telnet主机也不能。
回复

使用道具 举报

发表于 2004-6-10 09:31:56 | 显示全部楼层
bixuan用你得方法还要一个地方就是再服务器上居然什么都不能做,无法上网,无法ping出去,再局域网内部机器上也不能ping 服务器。是不是要新增加一些规则让别人能够ping通?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 09:40 , Processed in 0.110129 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表