IPTABLES
IPTABLES 是3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
三张表五条链:
三张表:
防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。
我们现在用的比较多的表有3个:
filter 过滤规则表,根据域定义的规则过滤符合条件的数据包
nat 地址转换规则表
mangel 修改数据标记规则表
五条链
链:数据从进入到流出的五个环节,相当于源端到目的端的五道门
五条链也被成为五个钩子函数:
链名: 位置
prerouting 报文进入本机的路由前的位置
INPUT 到达本机内部的报文的位置
FORWARD 由本纪转发的报文的位置
OUTPUT 由本机内部发出的报文的位置
POSTROUTING 斑纹路由后流出本机的位置
这是NetFilter规定的五个数据链,任何一个数据包,只要经过本机,必经过这五个>链中的其中某一条链。
表与规则之间的关系:一个表中放的是一条条规则
规则与链之间的关系:一条规则只能作用在某个链上
表和链的对应关系
表名 链
filter INPUT,FORWARD,OUTPUT
nat PREROUTING(SNAT),POATROUTING(DNAT),OUTPUT
mangle PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
iptables相关管理命令:
基础命令:
iptables -n(不做解析)L(不接受当前火墙策略) ###查看iptables规则
iptables -F ###清除iptables规则
service iptables save ###保存修改过的iptables规则
相关参数
iptables -A -l -n -F -P -D -R
-A 添加(添加到iptables的最后一行)
-I 插入(可以指定插入到某一行)
-n 不做解析
-L 刷新当前的iptables
-P 设定当前默认表的默认动作
-D 删除某张表的某条链中的某条信息iptables -D INPUT 1 就是删除INPUT表中的第一条信息
-R 修改某条信息
iptables相关实验操作:
只让指定主机使用ssh连接本机:
1:将指定主机添加到本机的iptables规则
iptables -A INPUT -p tcp --dport 22 -s 172.25.254.6 -j ACCEPT
2.将filter表的默认操作更改为:DROP(DROP为丢掉所有发送过来的包,不会有回应)
此时用172.25.254.6使用ssh访问172.25.254.106主机:可以连接上:
用172.25.254.206主机连接172.25.254.106主机:(此时没有回应)
2.使允许过的服务或者正在连接的服务下次连接时直接通过(速度块)
只要不是第一次允许的服务,在下一次连接时直接通过,不用直接验证
1:清空表中信息
iptables -F
2.将已经连接过或者正在连接的服务的iptables策略设置为ACCEPT。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
此时的iptables里面写的是:
3.将新的创建的连接加入到iptables中:
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
将此时的iptables的配置保存,查看文件/etc/sysconfig/iptables(这个文件就是iptables 的策略文件):
service iptabls save ###将当前iptables的配置保存
vim /etc/sysconfig/iptables ###将此时的iptables的配置保存
此时只能有相应的被允许的端口可以进行访问。
nat地址转换
1.iptables -F ###将iptables中的设置清除:
2.SNAT源地址转换
nat网关将内网中客户机发出的数据包中的私有IP转换成对外的公有IP,然后将数据包发给服务端
服务端:
1.将本机网卡非别设置成172.25.254.106
eth1设置ip为:1.1.1.106
将另一台客户端主机设置:
ip:1.1.1.206
网关设置:1.1.1.106 网关设置可以设置全局网关地址是/etc/sysconfig/network
在服务端主机上设置:
iptables -t nat -A POSTROUTNG -o eth0 -s 1.1.1.0/24 -j SNAT --to-source 172.25.254.6
将iptables中写入一条规则:
nat表中的POSTROUTING 链中写入:eth0网卡接受到的1.1.1.0网段的信息进行源地址转换(SNAT):转换到172.25.254.106
测试:用用户端ssh 172.25.254.6的时候查看登录审计:(但是当前登录操作的主机是172.25.254.206,登录审计是106主机,这是因为:在206发送ssh命令的时候数据通过了106主机,106主机对于发送过来的主机的ip做了地址的转换,转换成了106的ip与6主机进行数据交流)
4.DNAT地址转换:
1.iptables -t nat -F ###将nat表里的信息刷掉
在服务端设置:eth0 172.25.254.106 eth1 1.1.1.106
在客户端设置: eth0 1.1.1.206
2.服务器端设置DNAT SNAT转换:
iptables -t nat -A PREROUTING -d 172.25.254.106 -j DNAT --to-dport 1.1.1.206
iptables -t nat -A POSTROUTING -d 1.1.1.206 -j SNAT --to-source 1.1.1.106
测试:用另外一台主机ssh 172.25.254.106,查看当前登录审计:
此时172.25.254.106主机的设置完成所有连接172.25.254.106主机的操作都会转移到1.1.1.206主机上。