基于linux的iptables策略管理服务

iptables概述

iptables 并不是真正的防火墙,可以理解为一个客户端代理。用户通过iptables这个代理,将用户的安全设定执行到对应的“安全框架”(netfilter).所以说,iptables其实是一个命令行工具,位于用户空间,我们用iptables操作整整的框架。
iptables是按照规则办事的,即rules,规则一般制订了源地址、目的地址、传输协议(tcp、udp)等。当数据包与规则匹配时,iptables就会根据定义的规则来处理数据包,如accept(接受)、reject(拒绝)、drop(丢弃)三种动作。
iptables具有filter、nat、mangle、raw四种内建表,各个表中又有内建链,有各自不同的功能。

iptables常用内建表与链


1、filter表:filter表示iptables的默认表,如果没有自定义表,则默认为filter表,具有三种内建链
INPUT:处理来自外部的数据;
OUTPUT:处理往外发送的数据;
FORWARD链:将数据转发至本机的其他网卡上。

2、nat表:nat表中有三种内建链:
PREROUTING:处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址、
POSTROUTING:处理即将离开本机的数据包。它会转换数据包中的源IP地址
OUTPUT:处理本机产生的数据包

3、mangle表:Mangle表用于指定如何处理数据包。具有五种内建链
PREROUTING、OUTPUT、POSTROUTING、FORWARD、INPUT

4、raw表:用于处理异常,具有两种内建链:PREROUTING、OUTPUT
https://img-blog.csdnimg.cn/20181218040017271

这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。       

制定iptables表规则的语法

iptables的策略

制作防火墙规则通常有两种基本策略。一是黑名单策略;二是白名单策略。

    黑名单策略指没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐。

    白名单策略指没有被允许的流量都要拒绝,这种策略比较保守,根据需要,逐渐开放,目前一般都采用白名单策略,推荐。

iptables详解http://www.zsythink.net/archives/1199

iptables的基本使用

实验准备:

[root@shareserver ~]# systemctl stop firewalld            ##关闭firewalld服务,以免对此实验造成影响
[root@shareserver ~]# systemctl disable firewalld
[root@shareserver ~]# systemctl start iptables.service

查看管理命令  iptables -L

附加子命令

 -n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名

 -v:显示详细信息

-t 后面接内建表的名称:显示该内建表的信息

链管理命令

iptables  -P 修改默认规则

[root@shareserver ~]# iptables  -P INPUT DROP

##默认规则给拒绝了。并且没有定义哪个动作,所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了。

iptables  -F: FLASH 刷新,清空规则链(注意每个链的管理权限)

iptables -N:NEW   增加自定义的链

[root@shareserver ~]# iptables  -N mine        ##在默认表filter中新建名为mine的链

iptables -E:修改链名称

[root@shareserver ~]# iptables  -E mine redhat     ##将链mine名称改为redhat

iptables -X: 删除用户自定义的链,使用该参数删除链时,链必须是空的,

[root@shareserver ~]# iptables  -F redhat        ##清空链

[root@shareserver ~]# iptables  -X redhat       ##删除链     

规则管理命令

iptables -I num : 插入,把当前规则插入为第几条

[root@shareserver ~]# iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

iptables -A:追加,在当前链的最后新增一个规则

iptables -R num:Replays  替换/修改第几条规则

[root@shareserver ~]# iptables -R INPUT 3 -j DROP   ##将原来编号为3的规则动作改为DROP

iptables -D num:删除,明确指定删除第几条规则

[root@shareserver ~]# iptables -D INPUT 3         ##删除第3条规则

iptables -D 规则内容:删除,明确指定内容的规则

[root@shareserver ~]# iptables -D INPUT -p tcp --dport 80 -j ACCEPT

匹配标准

-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP IP | IP/MASK 而且地址可以取反,加一个“!”表示除了哪个IP之外

 -d:表示匹配目标地址

 -p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)

 -i eth0:从这块网卡流入的数据 流入一般用在INPUT和PREROUTING上

 -o eth0:从这块网卡流出的数据 流出一般在OUTPUT和POSTROUTING上

--dport:匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围

--sport:匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 

-j  ACTION

 常用的ACTION:

 DROP:丢弃,不回应 一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表

 REJECT:明示拒绝

 ACCEPT:接受

custom_chain:转向一个自定义的链

 DNAT

 SNAT

 MASQUERADE:源地址伪装

 REDIRECT:重定向:主要用于实现端口重定向

 MARK:打防火墙标记的

 RETURN:返回

规则的读取顺序

规则是从上到下依次读取的,如果上面的满足了,就不读取下面的规则

如图,上述第一条规则显示拒绝所有服务,后又添加了172.25.254.81这台主机允许访问httpd服务;实际上生效的是第一条规则,第二条的规则不会被读取;所以172.25.254.81通过浏览器访问时,依然看不到内容

地址伪装

实验环境:

服务端主机:配置双网卡,ip地址分别为172.25.254.100与1.1.1.100

客户端:ip为1.1.1.200的主机,网关为1.1.1.100

服务端配置:

[root@shareserver ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100 ##在路由后,进行源地址转换SNAT

客户端测试:

[root@client Desktop]# ping 172.25.254.81                   ##可以ping通

[root@client Desktop]# ssh [email protected]                   ##可以连接到不同网段的主机

利用w -i 查询真正登陆172.25.254.81主机的ip,可以看出实际上是172.25.254.100登陆172.25.254.81,而不是1.1.1.200登陆172.25.254.81;这里也就完成了地址伪装。

端口转发

服务端设置:

[root@shareserver ~]# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 1.1.1.200 当ssh链接到172.25.254.100将会跳转到IP为1.1.1.200的主机

测试:

在ip为172.25.254.81主机上进行测试:

在该主机上利用ssh服务连接172.25.254.100这台主机,会发现这台主机将会自动跳转到1.1.1.200,输入的密码也是跳转到的主机的密码。效果如图所示:

猜你喜欢

转载自blog.csdn.net/weixin_40172997/article/details/85059063
今日推荐