Linux 防火墙端口开放 屏蔽,IP开放屏蔽,协议开关 详解Linux 防火墙

目录

Linux 防火墙的概述 IPtables概述

Linux防火墙

IPtables

IPtables 表的概念 与链的概念

IPtables 应用 操作方法

对匹配的值进行的处理动作表

限制端口

限制IP地址

限制IP地址段

限制协议

根据报文内容的限制

centos7 的改动



最近使用到了 IPtables 开放Linux 端口 ,但是遇到了坑,索性把Linux 防火墙基本知识进行一次学习

进行总结,看完这篇文章,你会用基础的iptables 操作命令,屏蔽端口,开放端口,屏蔽ip、地址段

以及协议的屏蔽,还有可以帮你排除一些可能遇到的坑,掌握contos6 contos7 的 iptables 命令区别 

我哦哦哦

 

Linux 防火墙的概述 IPtables概述

Linux防火墙

从逻辑上来讲分为

主机防火墙:针对於单个主机进行防护

网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。

从物理结构上来讲有

硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。

软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。

IPtables

其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫netfilter。

IPtables只是来操作这个框架的命令行工具我们知道iptables是按照规则来办事的,我们就来说说规则(rules),规则其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

IPtables 表的概念 与链的概念

我们先来说说 链的概念,当客户端向服务端发送一个数据包,客户端会向服务端网卡发送报文,而TCP/IP协议属于内核的一部分,所以我们想让防火墙达到防火和屏蔽的作用,需要在内核处设置关卡,将经过的报文进行检查后在决定是否放行,这就出现了input 关卡 ,和 output 关卡  。这些关卡实际上就是“ 链 “ 。

在实际的使用过程中我们还需要了解几个概念 prerouting (路由前),forward (转发),postouting(路由后)。

报文的流向:

流向本机的报文 : prerouting -> input

由本机转发的报文:prerouting -> forward -> postouting

有本机发出的报文:output -> postouting

再来说说表的概念,我们说的这些链上可能会有一些雷同的规则,我们就可以把这些规则总结到一起,,这就引出了表的概念,

表分为4种filter 、nat 、mangle、raw他们分别存储这不同的规则:

filter :负责过滤功能 ,防火墙进出的一些规则(我们使用iptables 最常指定的就是这个表,如果不指定,默认为这个表

nat :network address translation 服务网络地址翻译的规则

mangle :负责拆解报文,修改报文

raw:关闭nat表上启用的连接追踪机制。

IPtables 应用 操作方法

对匹配的值进行的处理动作表

ACCEPT 允许数据包通过。
DROP 直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT 源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE 是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT 目标地址转换。
REDIRECT 在本机做端口映射。
LOG 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

限制端口

iptables -t filter -A INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,36,80  -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

示例表示,禁止来自146的主机上的tcp报文访问本机的22号端口、36号端口以及80号端口。

"-m multiport --dports 22,36,80"表示使用了multiport扩展模块的--dports扩展条件,以同时指定了多个离散的端口,每个端口之间用逗号隔开。

-- dports 就是表示 目标端口 

-- sports 表示远程访问的 源端口

iptables -t filter -A INPUT -s 192.168.1.146 -p tcp -m multiport --sports 22,36,80  -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

示例表示,禁止来自146的主机上的tcp从22号端口、36号端口以及80号端口发出的报文

限制IP地址

例子 :

iptables -t filter -A INPUT -s 192.168.1.146 -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

使用-I选项,指明将"规则"插入至哪个链中,-I表示insert,即插入的意思,所以-I INPUT表示将规则插入于INPUT链中,即添加规则之意。这里要注意的 是 -A  -I 的区别 -A是家到规则表中的末尾,追加。而-I是追加到第一条。

这里就有坑了 因为它读取配置表是从上而下的 所以你得保证前面的规则中没有过滤掉这个IP 否者就不生效。

使用-s选项,指明"匹配条件"中的"源地址",即如果报文的源地址属于-s对应的地址,那么报文则满足匹配条件,-s为source之意,表示源地址。

使用-j选项,指明当"匹配条件"被满足时,所对应的动作,上例中指定的动作为DROP,在上例中,当报文的源地址为192.168.1.146时,报文则被DROP(丢弃)

多个IP地址可以用 ,号隔开依次类推 例子:

iptables -t filter -A INPUT -s 192.168.1.146,192.168.145 -j DROP

限制IP地址段

iptables -t filter -A INPUT -s 10.0.0.0/16 -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

限制协议

iptables -t filter -A INPUT -s 192.168.1.146 -p tcp -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

此时我们用ping命令 由146 ping 本机发现可以ping 通 因为我们ping 命令是基于icmp协议

我们把tcp换成icmp就不能了

centos6中,-p选项支持如下协议类型

tcp, udp, udplite, icmp, esp, ah, sctp

centos7中,-p选项支持如下协议类型

tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh

根据报文内容的限制

/sbin/iptables -t filter -A INPUT -m string --alog bm --string "OOXX" -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

'-m string'表示使用string模块,'--algo bm'表示使用bm算法去匹配指定的字符串,' --string "OOXX" '则表示我们想要匹配的字符串为"OOXX" 设置完上图中的规则后,由于index.html中包含"OOXX"字符串,所以,146的回应报文无法通过126的INPUT链,所以无法获取到页面对应的内容。

--algo:用于指定匹配算法,可选的算法有bm与kmp,此选项为必须选项,我们不用纠结于选择哪个算法,但是我们必须指定一个。

--string:用于指定需要匹配的字符串。

centos7 的改动

centos7已经不再使用init风格的脚本启动服务,而是使用unit文件,所以,在centos7中已经不能再使用类似service iptables start这样的命令了,所以service iptables save也无法执行,同时,在centos7中,使用firewall替代了原来的iptables service,不过不用担心,我们只要通过yum源安装iptables与iptables-services即可(iptables一般会被默认安装,但是iptables-services在centos7中一般不会被默认安装),在centos7中安装完iptables-services后,即可像centos6中一样,通过service iptables save命令保存规则了,规则同样保存在/etc/sysconfig/iptables文件中。

配置好yum源以后安装iptables-service
 yum install -y iptables-services
停止firewalld
 systemctl stop firewalld
禁止firewalld自动启动
 systemctl disable firewalld
启动iptables
 systemctl start iptables
将iptables设置为开机自动启动,以后即可通过iptables-service控制iptables服务
 systemctl enable iptables

详细的内容学习移步 :http://www.zsythink.net/archives/1544

他写的很全面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章