linux配置防火墙开放端口(linux服务器配置ip地址)

linux配置防火墙开放端口(linux服务器配置ip地址)

1 Linux防火墙概述

Linux防火墙实际指的是Linux下的Netfilter/Iptables。Netfilter/Iptables是2.4.x/2.6.x版本Linux内核集成的IP信息包过滤系统。

查看Linux内核版本

Netfilter/Iptables 信息包过滤系统可以当成一个整体,netfilter是内核的模块实现,iptables是对上层操作工具。

Netfilter是Linux核心中的一个通用架构,工作于内核空间。

Netfilter支持一下方式对数据包进行分类:

使用接口

使用协议

端口号

连接状态

其提供了一系列的表(tables),每个表由若干个链(chains)组成,每条链可以由一条或若干条规则(rules)组成,其规则由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。

chain的本质是Netfilter定义的不同过滤点。总共定义了5个过滤点。INPUT,FORWARDING,OUTPUT,PREROUTING,POSTROUTIONG。

Table的本质是Netfilter定义的不同功能的划分。

filter用于执行基本过滤。

nat是对数据IP进行修改。

mangle是对数据包进行高级修改。

不同的Table只能用于特定的Chain。

Iptables 是一个管理内核包过滤的工具,可以用来配置核心包过滤表格中的规则。运行于用户空间。

1.1 Linux防火墙的应用

Linux防火墙在企业应用中非常有用,举例如下:

中小企业与网吧里有iptables作为企业的NAT路由器,可以用来代替传统路由器,而节约成本。

IDC机房一般没有硬件防火墙,IDC机房的服务器可以用Linux防火墙代替硬件防火墙。

iptables可以结合squid作为企业内部上网的透明代理。传统代理需要在浏览器里配置代理服务器信息,而iptables squid的透明代理则可以把客户端的请求重定向到代理服务器的端口。客户端不要作任何设置,而感觉不到代理的存在。

将iptables作为企业NAT路由器时,可以使用iptables的扩展模块屏蔽P2P流量,还可以禁止非法网页。

iptables可以用于外网IP向内网IP映射。

iptables可以轻松防止轻量级DOS攻击,比如ping攻击及SYN洪水攻击。

综述,Iptables有两种应用模式:主机防火墙,NAT路由器。

1.2 iptables的基本组件1.2.1 规则

1.2.2 链

链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

每个链上都有默认的规则。

INPUT:通过路由表后目的地为本机。

FORWARDING:通过路由表后,目的地不为本机。可以用于转发数据。

OUTPUT:由本机产生,向外转发。

POSTROUTIONG:通过路由表后,发送到网卡接口之前。可以用于转发数据(SNAT,MASQUERADE)

1.2.3 表

filter表

主要用于数据报文过滤。该表根据系统管理员预定义的一组规则过滤符合条件的数据包。对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤。filter表是默认的表,如果没有指定哪个表,iptables 就默认使用filter表来执行所有命令,filter表包含了INPUT链,RORWARD链,OUTPUT链。在filter表中只能允许对数据包进行接受,丢弃的操作,而无法对数据包进行更改。

nat表

mangle表

主要用作功能修改数据报文的属性。比如TCP报文的6个标志位。在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)

mangle表主要用于对指定数据包进行更改,在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)。

raw表

规则表之间的优先顺序:

raw > mangle > nat > filter

1.3 Linux防火墙基本原理

Linux防火墙的原理主要是对数据包的控制,看下图(以下图片均来自互联网):netfilter五条链相互关系,即iptables数据包转发流程图。

(1)数据包进入网卡时,先进入PREROUTING(路由前)链,之后做路由判断数据包应发往何处,本机或其他机器。

(3)本机程序发送出数据包,数据包会经过OUTPUT链,然后到达POSTROUTING链输出。

Netfilter在五个链上,使用HOOK技术做规则检查。

1.4 iptables规则执行

iptables执行规则时,是从规则表中从上至下顺序执行的。

若没遇到匹配的规则,就一条一条往下匹配;

若完全没有匹配的规则,则执行该链上的默认规则;

若遇到匹配的规则,则执行规则,执行后根据本规则的动作(accept,reject,log,drop等),决定下一步执行的情况,后续执行一般有三种情况:

继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则。

中止当前规则队列的执行,转到下一条规则队列。比如从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行。

中止所有规则队列的执行。

透过这种机制所带来的好处是,可以进行复杂、多重的封包过滤,简单的说,iptables可以进行纵横交错式的过滤(tables)而非链状过滤(chains)。

1.5 数据包的状态

包的状态依据IP所包含的协议不同而不同,但在内核外部,也就是用户空间里,只有4种 状态:NEW,ESTABLISHED,RELATED 和INVALID。它们主要是和状态匹配一起使用。

数据包在用户空间的状态:

NEW:表示信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连接相关联。若主机向远程机器发送一个连接请求,这个数据包的状态是NEW。

ESTABLISHED:状态指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包并且完全有效。在连接建立之后(完成TCP的三次握手之后),远程主机和主机通信数据状态为ESTABLISHED。

RELATED:和现有联机相关的新联机封包。像FTP这样的服务,用21端口传送命令,而用20端口(port模式)或其他端口(PASV模式)传送数据。在已有的21端口上建立好连接后发送命令,用20或其他端口传送的数据(FTP-DATA),其状态是RELATED。

INVALID:状态指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数据或头。即无效的数据包,不能被识别属于哪个连接或没有任何状态,通常这种状态的数据包会被丢弃。

这些状态可以一起使用,以便匹配数据包。这可以使防火墙非常强壮和有效。

2 iptables实战概述

iptables的实验请尽量在虚拟机或非远程的系统中操作,避免不小心的误操作可能导致ssh无法使用。

一般来讲,iptables防火墙已经内置于CentOS 6及其他Linux版本中,而且iptables服务默认都是启动的。 iptables应用于IPv4, 如果要用IPv6,需要使用ip6tables。

iptables和ip6_tables、arp_tables一同都是建构在Xtables的架构下,这个方案让系统管理员定义“表(tables)”、“链(chain)”、“规则(rules)”三个数据来处理数据包的运送。每一个“表”都和不同的数据包处理有关、决定数据包是否可以穿越的是“链”、而一条“规则”在键里面则可以决定是否送往下一条链(或其它的动作),这个处理可以在嵌套的结构里面重复使用。每一个网络数据包从抵达到离开该计算机至少会经过一个链(亦即转送或本机路由)。

查看有没有安装iptables:rpm -qa | grep iptables

若机器上安装了man命令。则使用man iptables查看iptables的帮助文档。

2.1 iptables服务相关2.1.1 开启iptables服务service iptables start
#或/etc/init.d/iptables start2.1.2 关闭iptables服务service iptables stop
#或/etc/init.d/iptables stop2.1.3 设置iptables开机时默认启动#启动时开启
chkconfig iptables on

#启动时关闭
chkconfig iptables off2.1.4 使用setup设置防火墙

在终端运行 setup,选择 firewall 回车。

按Tab键切换到Enablede项,然后按空格键选择。然后再按Tab键切换到OK,按空格键或回车键选择。按Tab键切换到quit,退出setup。

嵌入式Linux中文站

最专业的中文嵌入式Linux网站,8年磨剑,注册用户数万人!

分享 嵌入式 & Linux 技术干货、教程、资讯、高薪职位

投稿admin@embeddedlinux.org.cn

发表评论

登录后才能评论