命令记不住

登陆

Iptables 实现共享上网方法

Iptables实现共享上网方法

iptables常用企业案例

1.linux主机防火墙(表:FILTER 链:INPUT)
2.局域网机器共享上网(表:NAT 链:POSTROUTING)

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.7

3.外部地址和端口,映射为内部地址和端口(表:NAT 链:PREROUTING)

iptables -t nat -A PREROUTING -d 10.0.0.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.8:9000

1.实现共享上网架构图规划

实际企业办公上网场景逻辑图:


1


对应实际IDC内网机器上网场景逻辑图:


2


2.实验环境的配置需求准备

服务器网关需具备如下条件
1)物理条件是具备双网卡,
建议eth0配置外网地址(这里是10.0.0.52,gw 10.0.0.254)
建议eth1配置内网地址(这里是172.16.1..52,内网卡不配GW)

eth0:10.0.0.52
MASK:255.255.255.0
gw:10.0.0.254
eth1:172.16.1..52
MASK:255.255.255.0
gw:不配

2)确保服务器网关要可以上网(上网才能代理别的机器上网)。可以通过ping baidu.com或ping 223.5.5.5测试
3)内核文件/etc/sysctl.conf里开启转发功能
在服务器网关 172.16.1..52机器上开启路由转发功能。编辑/etc/sysctl.conf修改内容为net.ipv4.ip_forward = 1,然后执行sysctl -p使修改生效。

[root@x86cloud ~]# sysctl -p
net.ipv4.ip_forward = 1

4)iptables的filter表的FORWARD链允许转发(防止策略iptables -P FORWARD DROP)

[root@x86cloud ~]# iptables -P INPUT ACCEPT
[root@x86cloud ~]# iptables -P FORWARD ACCEPT

5)不要filter防火墙功能,共享上网,因此,最好暂时停掉防火墙测试

3.防火墙内核模块确认加载

1)载入iptables内核模块,执行并放入rc.local中

[root@x86cloud ~]# lsmod | egrep ^ip
iptable_filter				2793	1 
ip_tables					17831	2		iptable_nat,iptable_filter
ipt_REJECT				2351	2 
ipv6						336282	290		bridge,lockd
载入内核模块
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state			<- centos6版本系统中可忽略此模块的加载

# 模块加载完成后,在进行查看
[root@x86cloud ~]# lsmod | egrep ^ip
iptable_nat				5923	0 
iptable_filter				2793	1 
ip_tables					17831	2		iptable_nat,iptable_filter
ipt_REJECT				2351	2 
ipv6						336282	290		bridge,lockd 
说明:实现共享上网必须要有iptables_nat模块

4.共享上网局域网机器配置

  1. 局域网的机器有一块网卡即可,确保局域网的机器,默认网关设置了网关服务器的eth1内网卡IP(172.16.1..52)。把局域网机器的gateway设置为B的内网卡172网段的网卡IP,即172.16.1.53
  2. 检查手段
    分别ping网关服务器的内外网卡IP,都应该是通的就对了
  3. 出公网检查除了PING网站域名外,也要PING下外网IP,排除DNS故障。
  4. ping 10.0.0.254 网关也是不通的

如上,请准备两台虚拟机A和B,其中A要有双网卡。A的内网卡的网段和B的网段一样。
网关服务器A:假设10.0.0.0/24为外部IP,172.16.1.0/24为内部IP

eth0:10.0.0.52
MASK:255.255.255.0
gw:10.0.0.254
eth1:172.16.1..52
MASK:255.255.255.0
gw:不配
内部服务器B:
eth1:172.16.1.53
MASK:255.255.255.0
gw:172.16.1..52		<- 网关B的内网卡IP

1.准备工作:
01)将内部服务器主机的外网网卡关闭

ifdown eth0
2.部署共享上网环境
2.1 内网服务器配置:
1) 添加默认网关路由:172.16.1..52 eth1

  • a 开启NetworkManage -- nmtui
  • b 修改网卡配置文件
  • c 临时添加:
      centos7: ip route add default via 172.16.1..52 
   	  centos6: route add default gw 172.16.1..52
  1. 检查确认网关是否能够访问

ping 172.16.1..52
2.2 iptables服务器配置:

  1. 修改内核信息,让不同网段数据包可以穿过
[root@iptables ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

[root@iptables ~]# sysctl -p
net.ipv4.ip_forward = 1

2)实现nat映射配置(SNAT)
方法0:指定某个IP进行共享

iptables -t nat -A POSTROUTING -s 172.16.1.53 -o eth0 -j SNAT --to-source 10.0.0.52
方法1:适合于有固定外网地址的环境

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT -to-source 10.0.0.52
-s	192.168.1.0/24				指定办公室或IDC内网网段
-o	eth0						为网关的外网卡接口
-j	SNAT --to-source 10.0.0.52		是网关外网卡IP地址

方法2:适合变化外网地址(ADSL)

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE		<- 伪装

补充:搞破坏

iptables -P FORWARD DROP -- 修改链上面默认策略
问题:到底默认策略怎么改

INPUT   
FORWARD 
默认策略都配置为白名单 都改为DROP	   

OUTPUT 
默认策略都配置为黑名单 都改为ACCEPT

解决问题方式:

#对角线方式允许策略
iptables -A FORWARD -s 172.16.1.53 -i eth1 -j ACCEPT
iptables -A FORWARD -d 172.16.1.53 -i eth0 -j ACCEPT

iptables -A FORWARD -s 172.16.1.53 -o eth0 -j ACCEPT
iptables -A FORWARD -d 172.16.1.53 -o eth1 -j ACCEPT

3.实验部署的测试步骤记录

  1. 登录B主机172.16.1.53看是否能访问外部页面(配好DNS)。如ping www.baidu.com
    正确结果:当前情况不通
  2. 在笔记本上分别测试telnet 172.16.1..52 22 看是否能连通。
  3. 在笔记本上分别测试ping 172.16.1..52 看是否能连通。
  4. 测试登录10.0.0.52看是否能访问外部页面。如ping www.baidu.com
  5. 在笔记本上分别测试telnet B 主机 172.16.1.53 22
  6. 在笔记本上分别测试ping 172.16.1.53 看是否能连通

4.根据逻辑图实现如下要求

1)实现B可经过A,通过A主机访问互联网
提示:注意主机防火墙功能的影响。可以尝试在GW上先/etc/init.d/iptables stop后再加命令
2)实际处理的局域网共享上网的NAT命令
网关服务器A实现局域网共享上网的两条命令
方法1:适合于有固定外网地址的环境

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT -to-source 10.0.0.52
-s	192.168.1.0/24				指定办公室或IDC内网网段
-o	eth0						为网关的外网卡接口
-j	SNAT --to-source 10.0.0.52		是网关外网卡IP地址

方法2:适合变化外网地址(ADSL)

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE		<- 伪装
  • 为什么用POSTROUTING?
    企业共享上网:
  1. 办公网共享上网(网关要有外网IP,否则用路由(zebra))
  2. IDC内网机器上网
  • 企业上网到底需要不需要linux网关?
  1. 如果企业里有企业级路由器的情况下,可以不需要上网网关。使用网关只是解决路由器无法解决的需要(如 上网行为,IP及端口的映射 网关杀毒)
  2. IDC机房,大厦有固定外网IP的宽带,直接用网关解决上网及控制问题。

5.iptables实现端口映射访问

企业应用场景:
1)把访问外网IP及端口的请求映射到内网某个服务器及端口(企业内部)
2)硬件防火墙,把访问LVS nginx 外网VIP及80端口的请求映射到IDC负载均衡服务器内部IP及端口上(IDC机房的操作)


实现外网访问内网IP地址主机的方法:

  • a 给内网主机设置一个公网IP
  • b 利用vpn技术
  • c 利用nat映射技术

实现 访问 10.0.0.81:9000 == 172.16.1.51:22
把外部IP地址及端口映射到内部服务器地址及端口(和共享上网环境一样)

在10段主机可以通过访问A 10.0.0.7:80,即访问到172.16.1.19:9000,B提供的web服务,也可SSH(10.0.0.7:222--->172.16.1.7:52113),利用PREROUTING
B服务器配置web服务
1)在172.16.1.19服务器上开启http服务监听9000端口,然后在网关服务器A上可以访问

curl http://172.16.1.19:9000
x86cloudedu

2)具体转换命令

iptables -t nat -A PREROUTING -d 10.0.0.52 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.53:22
-d	10.0.0.7						指定提供访问的网关服务器外网接口地址
-dport	eth0					为网关的外网卡接口
-j DNAT --to-destination 10.0.0.7	将访问目标地址做映射
何清老师可执行命令
iptables nat映射策略
iptables -t nat -A PREROUTING -d 10.0.0.52 -p tcp --dport 9000 -i eth0 -j DNAT --to-destination 172.16.1.53:22

6.iptables实现地址一对一映射

实现10网段外网IP和内网192段IP一对一映射
老男孩教育企业内部局域网生产映射案例:实现外部IP 124.42.34.112 一对一映射到内部server 10.0.0.8
网关服务器地址:eth0_124.42.60.109 eth1_10.0.0.254
a)在路由器网关上绑定124.42.34.112,可以是别名的方式

# 配置别名IP实践:
ifconfig eth0:1 124.42.34.112 netmask 255.255.255.0 up
ifconfig eth0:1 124.42.34.112/24 up
b)在路由器网关上配置地址映射策略
-A PREROUTING -d 124.42.34.112 -j DNAT --to-destination 10.0.0.8
-A POSTROUTING -s 10.0.0.8 -o eth0 -j SNAT --to-source 124.42.34.112
-A POSTROUTING -s 10.0.0.0/255.255.240.0 -d 124.42.34.112 -j SNAT --to-source 10.0.0.254

# linux网关路由器实践操作
iptables -t nat -A PREROUTING -d 10.0.0.29 -j DNAT --to-destination 192.168.1.8
iptables -t nat -A POSTROUTING -s 192.168.1.8 -o eth0 -j SNAT --to-source 10.0.0.29
telnet 10.0.0.29 多端口测试
说明:实现192端机器和10网段机器互相访问

iptables实现跨不同网段通讯
1)生产环境大于254台机器网段划分及路由解决方案详解01
http://v.youku.com/v_show/id_XNTAyMjAwMzI0.html
2)linux router命令深入浅出与实战案例精讲
http://oldboy.blog.51cto.com/2561410/1119453
http://oldboy.blog.51cto.com/2561410/974194

7.iptables防火墙生产应用场景总结

1)局域网共享上网
适合做企业内部局域网上网网关,以及IDC机房内网的上网网关(nat POSTROUTING)
2)服务器主机防火墙
适合IDC机房具有外网IP的服务器(主要是fileter INPUT的控制)
3)把外部IP地址及端口映射到局域网内部
可以一对一IP映射,也可以针对某一个端口映射
也可能是IDC把网站的外网VIP及网站端口映射到负载均衡器上(硬件防火墙nat PERROUTING)
4)办公路由器+网关功能(zebra路由+iptables过滤及NAT+squid正向透明代理80+ntop/iftop/iptraf流量查看+tc流量控制限速)
5)邮件的网关

问题1:生产环境应用
a)用于办公网PC共享上网,所有内部电脑地址通过网关公网IP或PPPOE共享上网
局域网共享上网的两种方法:
方法1:适合于有固定外网地址进行共享上网:

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT -to-source 10.0.0.7
-s	192.168.1.0/24				指定办公室或IDC内网网段
-o	eth0						为网关的外网卡接口
-j	SNAT --to-source 10.0.0.7		是网关外网卡IP地址

方法2:适合变化外网地址(ADSL),当然有固定地址也可以用

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE <- 伪装
b)IDC机房内网服务器通过网关出网
内部服务器时间同步及出网抓取内容等

问题2:生产环境应用
用于没有外网地址的内网服务器,映射为公网IP后对外提供服务,也包括端口的映射
问题3:IP地址一对一映射
用于没有外网地址的内网服务器,映射为公网IP后对外提供服务。例如:ftp服务需要一对一映射
共享上网封IP方法:

iptables -I FORWARD -s 10.0.0.26 -j DROP
iptables ${deal} FORDWARD -m mac --mac-source ${strIPmac} -j DROP

iptables防护墙应用:
1)主机防火墙
2)网关的应用(IP映射,端口映射)
3)过滤信息,监控限制流量及员工上网行为(squid正向代理缓存加过滤+ntop图形流量监控+tc流量限制+iptraf/iftop流量查看)
如果IPTABLES的服务器升级内核可以实现类似squid的过滤的功能
4)网关装杀毒软件监听9999端口(网关杀毒)

-A PREROUTING -i eth0 -d 211.167.253.109 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.10.6:9025
5)结合zebra配置企业级路由器

8. iptables映射多个外网IP上网

iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.240 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16
iptables -t nat -A POSTROUTING -s 172.16.1.0/255.255.240 -o eth0 -j SNAT --to-source 124.42.60.103-124.42.60.106
iptables -t nat -A POSTROUTING -s 192.168.1.0/22 -o eth0 -j SNAT --to-source 10.0.0.241-10.0.0.249

解决问题:

  1. 2000人访问可能被封
  2. 65535 端口资源有限
推荐阅读