Lesson34 linux中防火墙iptables的使用
文章目录
- 1. 什么是iptables
- 2. iptables的基本命令管理
- 3. iptables的地址伪装(SNAT)和端口转发(DNAT)
- 3.1 iptables的SNAT和DNAT含义
- 3.2 iptables的权限策略编写
- 3.3 iptables的SNAT 源地址转换(POSTROUTING—地址伪装)
- 3.4 iptables的DNAT 源地址转换(PREROUTING—端口转发)
1. 什么是iptables
iptables(网络过滤器)是一个工作于用户空间的防火墙应用软件,是与3.5版本Linux内核集成的IP信息包过滤系统。如果Linux系统连接到因特网或LAN、服务器或连接LAN和因特网的代理服务器,则该系统有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。
Iptables是用来设置、维护和检查Linux内核的IP包过滤规则的。它可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配,每条规则指定应当如何处理与之相匹配的包。这被称作"target"(目标),也可以跳向同一个表内的用户定义的链。
2. iptables的基本命令管理
实验准备:
1. desktop作为服务器端,配置为双网卡主机:
eth0:172.25.254.114
eth1: 192.168.0.114
2. server测试端:eth0: 192.168.0.214
3. 真机测试端:ip:172.25.254.14
在desktop服务器端配置好yum源
实验步骤:
在desktop服务器端:
安装iptables服务
发现这个服务已经安装好,开启iptables服务, 并且设置为开机启动
-nL # 表示不做解析列出防火墙策略
-L # 表示做解析列出防火墙策略
-t # 表示列出指定表的策略信息,不加-t默认为filter
保存策略方法一
保存策略方法二
-A #将策略追加在已经存在的表后面,按顺序执行(第一个符合行为后便不会读取第二个)
添加策略允许ip为172.25.254.15的主机通过ssh服务连接进服务器
-I #插入 加数字表示添加的位置 默认为1,表示插入到最前边
-R #替换规则要加数字(将172.25.54.250的规则修改为丢弃)
-D #删除第二条规则
-N # 添加新链名称为redhat
-E #重命名链(将名称为redhat的链重命名为WESTOS)
-X #删除WESTOS链
-P # 修改policy DROP ACCEPT 不能修改为REJECT 链的默认属性
清除策略(刷新iptable服务后,原策略会恢复)
-j #行为动作
-S #查看策略详细信息,包括操作
-Z # 清除数据包
3. iptables的地址伪装(SNAT)和端口转发(DNAT)
3.1 iptables的SNAT和DNAT含义
SNAT和DNAT(由连接的发起者是谁来区分)
源地址转换:SNAT
内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。
目的地址转换:DNAT
当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。
3.2 iptables的权限策略编写
实验题目要求:新建火墙策略:squid+sshd+dns
举一个生活中的例子:去电影院看电影的时候,第一次用户需要检票入场,若中途有事离开了观影厅,在电影结束前还可以凭票根再次入场,无需重新再次检票
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #建立过状态和建立完成中途断开重新连接的都允许
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT #通过回环接口的所有数据都接收
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT #允许ssh服务
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT #允许dns服务
iptables -A INPUT -m state --state NEW -p tcp --dport 3128 -j ACCEPT ##允许squid服务
iptables -A INPUT -j REJECT #拒绝其他主机通过任何服务连接
iptables -nL #查看新建的火墙策略
查看iptables火墙策略
不做解析查看策略
可以看到,已经成功添加ssh, squid和dns服务进策略信息
将新建的策略保存
iptables-save > /etc/sysconfig/iptables
刷新
iptables -F
重启iptables服务
再次查看策略信息依然存在
3.3 iptables的SNAT 源地址转换(POSTROUTING—地址伪装)
> /etc/sysconfig/iptables #清空策略信息
iptables -nL #查看策略信息已经不存在
`这个实验必须开启路由功能 `
iptables -t nat -nL #查看nat表的策略
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.114 #把要从eth0出去的数据的源地址改为172.25.254.114
iptables -t nat -nL
将192.168.0.214测试机网关设为192.168.0.114
route -n #查看网关
把要从eth0出去的数据的源地址改为172.25.254.114
iptables -t nat -nL #查看是否添加策略(必不可少)
在server虚拟机进行测试:
ping 172.25.254.14,发现可以ping通(如果不添加网关,则无法ping通)
3.4 iptables的DNAT 源地址转换(PREROUTING—端口转发)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 192.168.0.214:22 #从eth0的22端口进来的数据,目的地转为 192.168.0.214的22端口
iptables -t nat -nL
将从eth0的22端口进来的数据,目的地转为 192.168.0.214的22端口
iptables -t nat -nL #查看是否添加策略(必不可少)
在真机端进行测试:
ssh root@172.25.254.114 输入的密码是转到的ip的主机密码
查看登陆服务器的ip为192.168.0.214, 端口转发成功