iptables内网外网
『壹』 iptables允许指定IP访问内网,其它全部拒绝,允许内网访问全部外网,请大虾帮忙写出完整命令行,谢谢
# 内网网口
lan_if=eth0
# 外网网口
wan_if=cloudbr0
wan_vip_ip="192.168.1.102/24 192.168.10.0/24" #外网可以访问内网的IP或IP网段,如果没有,可以为""。
# 特定外网IP可以访问内网,其余外网IP不能访问内网
for vip_ip in $wan_vip_ip; do
iptables -A FORWARD -i $wan_if -o $lan_if -s $vip_ip -j ACCEPT iptables -A FORWARD -i $wan_if -o $lan_if -s $vip_ip -j ACCEPT
iptables -A FORWARD -i $wan_if -o $lan_if -s $vip_ip -j ACCEPT
done
iptables -A FORWARD -i $wan_if -o $lan_if -j DROP
# 内网可以访问外网
iptables -A FORWARD -i $lan_if -o $wan_ip -j ACCEPT
『贰』 如何把iptables外网端口全部映射到内网一台主机上
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
『叁』 IPTABLES中SNAT和MASQUERADE的区别
MASQUERADE和SNAT都是用于将内网地址出局时转变为外部地址的方式,但MASQ本质上还是SNAT,只不过特殊一点。
网络出口为动态分配IP时,MASQ是唯一的选择,它先判断当前系统的默认网关,再根据默认网关找到本机对应的出口IP地址,再做SNAT出局。所以理论上来讲,使用MASQ的时候,iptables可以不指定-o的参数。
网络出口为固定IP时,MASQ和SNAT都是可选项,但是推荐使用SNAT。
SNAT不像MASQ管那么多,它比MASQ傻,管理员的意思就是它的意思,它不做判断只做处理。而且,SNAT的时候,iptables要加上-o的参数,否则无论向内网还是外网访问,源地址都是POSTROUTING链里SNAT后面那个地址,不熟悉iptables的人会很崩溃。MASQ和SNAT是没有缓存的,每一个数据包的到达、转换、送出都要靠CPU处理,所以,当出口是固定IP的时候,使用SNAT,既不用考虑出口地址的变化,也不用考虑出口的方向,自然也就更加高效。
所以,MASQ是智能型的SNAT,看起来高级一点,但高级一点也就代表它是多吃多占型的,不是什么时候都适用的。