Day66-企业级防火墙iptables精讲2
- 1. iptables项目案例2:局域网共享上网:
- 2. iptables项目案例3:外网IP的端口映射到内网IP的端口
- 3. 老男孩教育iptables项目案例4:IP一对一映射(DMZ)
- 4. 老男孩教育iptables项目案例5:映射多个外网IP上网(1200人)
- 5. 老男孩教育iptables项目案例6:企业级Linux系统路由器的配置
- 6. Linux抓包命令tcpdump是一个抓包工具,用于抓取互联网上传输的数据包
链接: http://www.netfilter.org/projects/iptables/index.html
1. iptables项目案例2:局域网共享上网:
做网关环境准备:
1、只保留内网卡172.16.1.51 db01
ifdown eth0
route add default gw 172.16.1.8
# 测试上网:
ping www.baidu.com
ping 203.81.19.1
结果应该都不通。
2、网关服务器 172.16.1.8 web02
eth0:10.0.0.8
eth1:172.16.1.8
gw: 10.0.0.254
测试:ping www.baidu.com 结果通。
3、网关172.16.1.8开启内核路由转发:
内核文件/etc/sysctl.conf里开启转发功能。
在服务器网关B 172.16.1.8机器上开启路由转发功能。
编辑/etc/sysctl.conf修改内容为net.ipv4.ip_forward = 1,然后执行sysctl -p使修改生效。
[root@oldboy ~]# sysctl -p
net.ipv4.ip_forward = 1
4、调整iptables FORWARD默认规则为许可
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -nL -t nat
iptables -nL -t filter
5、生产案例:共享上网iptables命令 路由器的NAT命令
iptables -t nat -A POSTROUTING -o eth0 -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.8
局域网共享上网的两种iptables方法:
方法1:适合于有固定外网地址的:
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.8
(1)-s 172.16.1.0/24 ##办公室或IDC内网网段。
(2)-o eth0 ##为网关的外网卡接口。
(3)-j SNAT --to-source 10.0.0.8 ###是网关外网卡IP地址。
方法2:适合变化外网地址(拨号上网):
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE ##伪装。
买带宽的时候:
- 来根上连线,接到我们自己的外网交换机上,就可以配置外网地址。
上网网关:共享上网。 - 光猫—拨号(用户名密码)路由器(Linux)—网关
- 见iptables项目案例6:企业级Linux系统路由器的配置
一台 linux 服务器 IP 为:192.168.0.8 ,只希望开放 TCP 80 端口,请写出 iptables 的设置命令
iptables -P INPUT DROP
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
2. iptables项目案例3:外网IP的端口映射到内网IP的端口
需求:将网关的IP和9000端口映射到内网服务器的22端口
端口映射 10.0.0.8:9000 -->172.16.1.51:22
源:10.0.0.1:520
目:10.0.0.8:22
源:10.0.0.1:520
目:172.16.1.51:22
实现命令:
iptables -t nat -A PREROUTING -d 10.0.0.8 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.51:22
(1)-d 10.0.0.8目标地址。
(2)-j DNAT 目的地址改写。
3. 老男孩教育iptables项目案例4:IP一对一映射(DMZ)
辅助IP:
ip addr add 10.0.0.81/24 dev eth0 label eth0:0 #<==辅助IP
iptables -t nat -I PREROUTING -d 10.0.0.81 -j DNAT --to-destination 172.16.1.51
iptables -t nat -I POSTROUTING -s 172.16.1.51 -o eth0 -j SNAT --to-source 10.0.0.81
适合内网的机器访问NAT外网的IP
iptables -t nat -I POSTROUTING -s 172.16.1.0/255.255.240.0 -d 10.0.0.81 -j DNAT --to-destination 172.16.1.51
检查:
ping 10.0.0.81 -t
tcpdump -i eth0 -p icmp(两台机器上分别监测)
telnet 10.0.0.81 873(51上提前配好)
4. 老男孩教育iptables项目案例5:映射多个外网IP上网(1200人)
方法1:
10.0.1.0/24 gw:10.0.1.1
10.0.2.0/24 gw:10.0.2.1
10.0.3.0/24 gw:10.0.3.1
10.0.4.0/24 gw:10.0.4.1
10.0.5.0/24 gw:10.0.5.1
三层交换机或路由器,基于端口划分VLAN。
iptables -t nat -A POSTROUTING -s 10.0.1.0/255.255.240.0 -o eth0 -j SNAT --to-source 124.42.60.11-124.42.60.16
出口IP:124.42.60.11-124.42.60.16
方法2:
iptables -t nat -A POSTROUTING -s 10.0.1.0/22 -o eth0 -j SNAT --to-source 124.42.60.11
iptables -t nat -A POSTROUTING -s 10.0.2.0/22 -o eth0 -j SNAT --to-source 124.42.60.12
扩大子网主机个数,会加重广播风暴问题。
课外阅读:
(1)生产环境大于254台机器网段划分及路由解决方案详解01
链接: http://v.youku.com/v_show/id_XNTAyMjAwMzI0.html
(2) linux route命令深入浅出与实战案例精讲
链接: http://oldboy.blog.51cto.com/2561410/1119453
链接: http://oldboy.blog.51cto.com/2561410/974194
必看3遍以上。
负载均衡器开启iptables,报错误了。。。
老男孩教育iptables项目案例4:iptables故障案例及内核参数优化
有关iptables的内核优化
调整内核参数文件/etc/sysctl.conf
以下是我的生产环境的某个服务器的配置:
#dmesg里面显示 ip_conntrack: table full, dropping packet.的错误提示,什么原因?如何解决?
iptables优化
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
----------------------------------------
cat /proc/sys/net/nf_conntrack_max
ls /proc/sys/net/netfilter/
[root@web01 ~]# cat /proc/1/net/nf_conntrack
ipv4 2 tcp 6 125 ESTABLISHED src=10.0.0.1 dst=10.0.0.8 sport=1851 dport=9000 src=172.16.1.52 dst=10.0.0.1 sport=22 dport=1851 [ASSURED] mark=0 secmark=0 use=2
ipv4 2 udp 17 135 src=10.0.0.8 dst=223.5.5.5 sport=56910 dport=53 src=223.5.5.5 dst=10.0.0.8 sport=53 dport=56910 [ASSURED] mark=0 secmark=0 use=2
ipv4 2 tcp 6 35 SYN_SENT src=172.16.1.8 dst=172.16.1.61 sport=50659 dport=10051 [UNREPLIED] src=172.16.1.61 dst=172.16.1.8 sport=10051 dport=50659 mark=0 secmark=0 use=2
ipv4 2 tcp 6 179 ESTABLISHED src=10.0.0.1 dst=10.0.0.8 sport=1275 dport=22 src=10.0.0.8 dst=10.0.0.1 sport=22 dport=1275 [ASSURED] mark=0 secmark=0 use=2
ipv4 2 udp 17 137 src=10.0.0.8 dst=51.15.41.135 sport=123 dport=123 src=51.15.41.135 dst=10.0.0.8 sport=123 dport=123 [ASSURED] mark=0 secmark=0 use=2
ipv4 2 tcp 6 98 SYN_SENT src=172.16.1.8 dst=172.16.1.61 sport=50661 dport=10051 [UNREPLIED] src=172.16.1.61 dst=172.16.1.8 sport=10051 dport=50661 mark=0 secmark=0 use=2
ipv4 2 udp 17 137 src=10.0.0.8 dst=202.118.176.2 sport=123 dport=123 src=202.118.176.2 dst=10.0.0.8 sport=123 dport=123 [ASSURED] mark=0 secmark=0 use=2
重点:
0、老男孩教育iptables项目案例1:主机防火墙
1、老男孩教育iptables项目案例2:局域网共享上网*****
2、老男孩教育iptables项目案例3:外网IP的端口映射到内网IP的端口*****
3、老男孩教育iptables项目案例4:IP一对一映射
4、老男孩教育iptables项目案例5:iptables生产故障及对应内核优化
5、老男孩教育iptables项目案例6:企业级Linux系统路由器的配置
5. 老男孩教育iptables项目案例6:企业级Linux系统路由器的配置
路由连接地址为10.1.34.81/24
默认路由:10.1.34.1
分配的公网ip地址:110.233.24.96/27 255.255.255.224
要求:购买企业级路由器:
用zebra(quagga)替代企业级路由器:
Linux上配置zebra(quagga)路由:
client(config)#int eth0
client(config-if)#ip add 10.1.34.81 255.255.255.0
client(config-if)#int eth1
client(config-if)#ip add 110.233.24.96 255.255.255.224
client(config)#ip route 0.0.0.0 0.0.0.0 10.1.34.1
client(config)#ip route 110.233.24.96/27 eth1
6. Linux抓包命令tcpdump是一个抓包工具,用于抓取互联网上传输的数据包
tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具
tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
常用选项
-i #监听哪一个网卡 -i eth0
-n #不把ip解析成主机名
-nn #不把端口解析成应用层协议
-c #指定抓包的数量
-v #输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
-vv #输出详细的报文信息。
#实例
1、默认启动
tcpdump -vv #普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
2、过滤主机
tcpdump -i eth1 host 192.168.1.1 #抓取所有经过eth1,目的或源地址是192.168.1.1的网络数据
tcpdump -i eth1 src host 192.168.1.1 #指定源地址,192.168.1.1
tcpdump -i eth1 dst host 192.168.1.1 #指定目的地址,192.168.1.1
3、过滤端口
tcpdump -i eth1 port 80 #抓取所有经过eth1,目的或源端口是80的网络数据
tcpdump -i eth1 src port 80 #指定源端口
tcpdump -i eth1 dst port 80 #指定目的端口
4、协议过滤
tcpdump -i eth1 arp
tcpdump -i eth1 ip
tcpdump -i eth1 tcp
tcpdump -i eth1 udp
tcpdump -i eth1 icmp
tcpdump -i eth1 -p icmp
#抓tcp某端口的数据包
tcpdump -i eth0 tcp port 21 -nn
5、常用表达式
非 : ! or “not” (去掉双引号)
且 : && or “and”
或 : || or “or”
#抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数
tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
#抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据
tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
#抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据
tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'