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

mac2024-06-02  37

目录

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

他写的很全面。

最新回复(0)