规则的导出、导入
重启主机或者重启服务后,会重置规则,之前的配置都不会保存。
默认配置
重启主机或者重启服务后,会重置规则,该规则内容就在/etc/sysconfig/iptables。每当重启服务,就会读取该文件内容,恢复配置。
导出规则
iptables-save > 保存位置/保存文件名
配置内容被保存到该文件
导入规则
iptables-restore < 保存位置/保存文件名
但每次重启后,依然会变回默认配置。如果要每次启动都会自动变成自己配置的规则,就需要将备份的文件覆盖过去,或者直接将配置的规则备份重定向输出到默认配置的文件中,之后每次重启都会是自己所配置规则。
SNAT
SNAT应用环境
- 局域网主机共享单个公网IP地址接入Internet
SNAT策略的原理
- 源地址转换
- 修改数据包的源地址
SNAT应用
前提条件
- 局域网各主机正确设置IP地址/子网掩码
- 局域网各主机正确设置默认网关地址
- Linux网关支持IP路由转发
编写SNAT转换规则
iptables -t nat -A POSTROUTING -s 192.168.44.0/24 -o ens36 -j SNAT --to-source 12.0.0.254
#-A POSTROUTING:路由选择后再处理
#-s 192.168.44.0/24:局域网段的地址
#-o ens36:外网接口的名称
#--to-source 12.0.0.254:外网接口的IP地址
SNAT的实现
-
配置网关服务器,需要两块网卡,并对两块网卡各自配置,ens33位于vmnet1,ens36位于vmnet2
-
网关服务器ens33配置
-
复制ens33配置文件为ifcfg-ens36,网关服务器ens36配置
-
配置完后重启网卡服务,查看配置结果
-
-
内网主机配置,配置完后重启网卡服务
-
外网服务器配置,配置完后重启网卡服务,并且安装httpd,启动服务
- 访问自己地址测试是否能正常访问
- 访问自己地址测试是否能正常访问
-
网关服务器测试
-
网关服务器测试是否能ping通内网主机和外网服务器地址
-
在网关服务器测试是否能正常访问
-
-
网关服务器在内核配置文件/etc/sysctl.conf添加配置,配置完后sysctl -p加载配置,此配置用于开启服务器ip的路由转发功能
- 加载完配置后,内网主机原本不能ping通外网服务器地址,现在可以ping通
- 加载完配置后,内网主机原本不能ping通外网服务器地址,现在可以ping通
-
打开外网服务器httpd日志文件/var/log/httpd,tail -f追踪查看。用内网主机访问外网服务器,发现可以访问到。到此IP转发实现完成
-
在网关服务器设置iptables规则
-
内网主机清除完缓存后重新访问外网服务器,不清楚缓存可能无法看到正常返回结果
-
外网服务器查看会发现,访问外网服务器的地址是网关服务器的外网接口IP地址
DNAT
DNAT应用环境
- 在Internet中发布位于企业局域网内的服务器
DNAT策略的原理
- 目标地址转换
- 修改数据包的目标地址
注意:使用DNAT时,同时一般要配合SNAT使用,才能实现响应数据包的正确返回
DNAT应用
前提条件
- 局域网的Web服务器能够访问Internet
- Linux网关支持IP路由转发
编写DNAT转换规则
iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to-destination 192.168.44.30:80
#-A PREROUTING:路由选择之前处理
#-d 12.0.0.254:外网接口的IP地址
#-p tcp:服务需要的协议
#--dport 80:发布的服务端口
#--to-destination 192.168.44.30:80:Web主机的内网IP地址及端口号,如果端口号不变可不带
DNAT的实现
-
配置网关服务器,需要两块网卡,并对两块网卡各自配置,ens33位于vmnet1,ens36位于vmnet2
-
网关服务器ens33配置
-
网关服务器ens36配置
-
-
内网服务器配置,配置完后重启网卡服务,内网安装httpd,并启动服务
-
外网客户机配置,配置完后重启网卡服务
-
网关服务器测试
-
网关服务器测试是否能ping通内网服务器和外网客户机地址
-
在网关服务器测试是否能正常访问
-
-
网关服务器在内核配置文件/etc/sysctl.conf添加配置,配置完后sysctl -p加载配置,此配置用于开启服务器ip的路由转发功能
-
内网与外网通信,首先要做SNAT
-
进行DNAT设置
-
打开内网服务器httpd日志文件/var/log/httpd,tail -f追踪查看。用外网客户机访问网关服务器地址,发现可以访问到,并且地址为客户机外网地址
tcpdump抓包
首先需要安装tcpdump
例:
tcpdump tcp -i ens33 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
- tcp:ip、icmp、arp、rarp和tcp、udp、icmp这些协议选项等都要放到第一个参数的位置,用来过滤数据包的类型
- -i ens33:只抓经过接口ens33的包
- -t:不显示时间戳
- -s 0:抓取数据包时默认抓取长度为68字节,加上-s 0后可以抓到完整的数据包
- -c 100“只抓取100个数据包
- dst port ! 22:不抓取目标端口是22的数据包,源端口用src prot
- src net 192.168.1.0/24:数据包的源网络地址为192.168.1.0/24,目的地址用dst net
- -w ./target.cap:保存成cap文件,方便用ethereal (即wireshark)分析
导出的文件可在wireshark查看内容。
搜索栏输入内容可进行过滤。
| 过滤指令 | 作用 |
|---|---|
| ip.addr == IP地址 | 查找源地址或目的地址为该地址的包 |
| ip.dst == IP地址 | 查找目的地址为该地址的包 |
| ip.src == IP地址 | 查找源地址为该地址的包 |
| tcp.port == 80 | 查找端口为tcp80的包 |
| tcp.dstport == 80 | 查找目的端口为tcp80的包 |
| 查找端口可用不等号,如>=80即查找大于等于80的端口 | |
| http | 查找服务类型为http类型的包 |
| tcp | 查找协议类型为tcp的包 |
| arp | 查找协议类型为arp的包 |
| && | 且 |
| || | 或 |