利用iptables把外网端口全部映射到内网一台主机上,有具体的操作过程:
etc/init.d/iptables start 启动iptables
初始化iptables,删除之前的规则,
iptables -F
iptables -X
iptables -Z
iptables -F -t nat
iptables -X -t nat
iptables -Z -t nat
允许SSH进入,要不然等下就连不上去了
iptables -A INPUT -p TCP --dport 22 -j ACCEPT
设置默认出入站的规则
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
载入相应的模块
modprobe ip_tables
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
配置默认的转发规则
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
允许内网连接
iptables -A INPUT -i 内网网卡名(比如eth1) -j ACCEPT
启用转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward
配置源NAT,允许内网通过主机nat上网,即所谓的网络共享
iptables -t nat -A POSTROUTING -s 内网网卡名 -o 外网网卡名 -j MASQUERADE
把FTP服务器映射到外网
iptables -t nat -A PREROUTING -p tcp -d 58.222.1.3 --dport 21 -j DNAT --to 192.168.0.211:21
结束,别忘了保存
service iptables save
192.168.0.211的网关应该设成这成主机192.168.0.1。这样就行了。iptables -t nat -A PREROUTING -d XXX.XXX.XXX.XXX -p tcp --dport 8767 -j dnat --to 192.168.1.3:?? OUTPUT 二个 chain 作用。
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT
#p#
IP 伪装
使内部网路的封包经过伪装之后,使用对外的 eth0 网卡当作代表号,对外连线。作法如下∶
###-----------------------------------------------------###
# 启动内部对外转址
###-----------------------------------------------------###
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/16 -j SNAT --to-source $FW_IP
上述指令意指∶把 172.16.0.0/16 这个网段,伪装成 $FW_IP 出去。
虚拟主机
利用转址、转 port 的方式,使外部网路的封包,可以到达内部网路中的伺服主机,俗称虚拟主机。这种方式可保护伺服主机大部份的 port 不被外界存取,只开放公开服务的通道(如 Web Server port 80),因此安全性甚高。
作法如下∶
###-----------------------------------------------------###
# 启动外部对内部转址
###-----------------------------------------------------###
# 凡对 $FW_IP:80 连线者, 则转址至 172.16.255.2:80
iptables -t nat -A PREROUTING -i eth0 -p tcp -d $FW_IP --dport 80 -j DNAT --to-destination 172.16.255.2:80
开放内部主机可以 telnet 至外部的主机
开放内部网路,可以 telnet 至外部主机。
作法如下∶(预设 policy 为 DROP)
###-----------------------------------------------------###
# open 外部主机 telnet port 23
###-----------------------------------------------------###
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 23 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 23 -d $FW_IP --dport 1024:65535 -j ACCEPT
开放邮包转递通道
开放任意的邮件主机送信包给你的 Mail Server,而你的 Mail Server 也可以送信包过去。
作法如下∶(预设 policy 为 DROP)
###-----------------------------------------------------###
# open SMTP port 25
###-----------------------------------------------------###
# 以下是∶别人可以送信给你
iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 1024:65535 -d $FW_IP --dport 25 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 25 -d any/0 --dport 1024:65535 -j ACCEPT
# 以下是∶你可以送信给别人
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 25 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 25 -d $FW_IP --dport 1024:65525 -j ACCEPT
开放对外离线下载信件的通道
开放内部网路可以对外部网路的 POP3 server 取信件。
作法如下∶(预设 policy 为 DROP)
###-----------------------------------------------------###
# open 对外部主机的 POP3 port 110
###-----------------------------------------------------###
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 110 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 110 -d $FW_IP --dport 1024:65535 -j ACCEPT
开放观看网页的通道
开放内部网路可以观看外部网路的网站。
作法如下∶(预设 policy 为 DROP)
###-----------------------------------------------------###
# open 对外部主机的 HTTP port 80
###-----------------------------------------------------###
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 80 -d $FW_IP --dport 1024:65535 -j ACCEPT#p#
#p#
开放查询外部网路的 DNS 主机
开放内部网路,可以查询外部网路任何一台 DNS 主机。
作法如下∶(预设 policy 为 DROP)
###-----------------------------------------------------###
# open DNS port 53
###-----------------------------------------------------###
# ***次会用 udp 封包来查询
iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT
# 若有错误,会改用 tcp 封包来查询
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 53 -d $FW_IP --dport 1024:65535 -j ACCEPT
# 开放这台主机上的 DNS 和外部的 DNS 主机互动查询∶使用 udp
iptables -A OUTPUT -o eth0 -p udp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT
# 开放这台主机上的 DNS 和外部的 DNS 主机互动查询∶使用 tcp
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 53 -d any/0 --dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! -y -s any/0 --sport 53 -d $FW_IP --dport 53 -j ACCEPT
开放内部主机可以 ssh 至外部的主机
开放内部网路,可以 ssh 至外部主机。
作法如下∶(预设 policy 为 DROP)
###-----------------------------------------------------###
# open 外部主机 ssh port 22
###-----------------------------------------------------###
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1024:65535 -j ACCEPT
# 以下是 ssh protocol 比较不同的地方
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1020:1023 -d any/0 --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 22 -d $FW_IP --dport 1020:1023 -j ACCEPT
开放内部主机可以 ftp 至外部的主机
开放内部网路,可以 ftp 至外部主机。
作法如下∶(预设 policy 为 DROP)
###-----------------------------------------------------###
# open 对外部主机 ftp port 21
###-----------------------------------------------------###
# 以下是打开命令 channel 21
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 21 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 21 -d $FW_IP --dport 1024:65535 -j ACCEPT
# 以下是打开资料 channel 20
iptables -A INPUT -i eth0 -p tcp -s any/0 --sport 20 -d $FW_IP --dport 1024:65535 -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp ! --syn -s $FW_IP --sport 1024:65535 -d any/0 --dport 20 -j ACCEPT
# 以下是打开 passive mode FTP 资料通道
iptables -A OUTPUT -o eth0 -p tcp -s $FW_IP --sport 1024:65535 -d any/0 --dport 1024:65535 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -s any/0 --sport 1024:65535 -d $FW_IP --dport 1024:65535 -j ACCEPT
开放 ping
可以对外 ping 任何一台主机。
作法如下∶(预设 policy 为 DROP)
iptables -A OUTPUT -o eth0 -p icmp -s $FW_IP --icmp-type 8 -d any/0 -j ACCEPT
iptables -A INPUT -i eth0 -p icm -s any/0 --icmp-type 0 -d $FW_IP -j ACCEPT 、
通过上文的文章的描写和例子的说明,我们可以清楚了解到把iptables外网端口全部映射到内网一台主机上的具体过程!