Centos 6.6上 netfilter/iptables防火墙的基本用法

友情提醒:本文实验环境 vmware 10 + Centos 6.6 X86_64,文件命令请谨慎使用

1 事前必知:

1)什么是防火墙?

防火墙:工作于主机或网络边缘,对于进出的报文根据事先定义的规则做检查,被匹配到的报文作出相应处理的组件。

所以:

(1)防火墙不是杀毒软件。

(2)既然是根据规则检查报文,存在2个问题:规则定义严格了,使用者觉着别扭;定义松散了形同虚设,还占用内核资源。

2)centos6.6上防火墙的组件:

netfilter:过滤器,内核中工作在tcp/ip网络协议栈上的框架
       iptables:过滤规则的编写工具,定义的规则通过内核接口直接送至内核,因此,会立即生效,但不会永久有效;iptables可以自动实现规则语法检查。

所以:

(1)非专业叫法中的iptables防火墙,全名是 netfilter/iptables 防火墙,是个软件防火墙,所以性能嘛,你懂的。

(2)只要内核中编译有netfilter它就在内核中存在,我们所说的停止防火墙服务,其实是清除被加载到内存中的iptables定义的规则。没有了过滤规则,netfilter就像没有牙齿的老虎。将来在定制服务器OS内核时就不要选netfileter模块,还有selinux通通去掉,让服务器在外围硬件防火墙,IPS,IDS保护下“裸奔”。

3)网络协议栈和硬件驱动管理都是OS内核的工作。

所以:

(1)网卡上报文的接受和发出都受OS内核的管理

(2)报文的路由处理和报文的合法合理性检查也在内核的TCP/IP协议栈上进行

(3)主机提供的资源服务如httpd 是在用户空间的事务,而跟该资源服务相关的报文的接收和投递是内核空间的事务。接收的资源请求报文在内核空间,对报文的合法合理性检查后,根据报文中定义的传输层端口号找到用户空间中的进程来进行后续的处理。

2 netfilter/iptables是检查报文的卡点和功能表

netfilter框架可以对进出的报文实施3种功能:过滤,修改,追踪。为了完成这3项功能,准备了5个卡点对报文进行影响。卡点,专业叫法为钩子函数,为了好理解,这里称为卡点。

1)检查报文的卡点:

网卡进--->prerouting------>路由判断----->forward------->postrouting---->网卡出
                                             |                                                  |
                                             |                                             output
                                             |                                                   |
                                           input                                      (路由判断)
                                             |---->-------本地进程资源--->-----|

prerouting:路由判断之前
input:路由判断后要进入本机内部获取本地服务资源
output:路由判断后要送出本机
forward:路由判断后要途径本机转发
postrouting:路由判断后,即将要发出本机

根据报文的分类,要经过的卡点如下:

到本机内部:prerouting,input
由本机发出:output,postrouting
由本机转发:prerouting,forward,postrouting

这些卡点下文称为链,我们使用iptables工具定义的过滤规则在逻辑上附着在链上,对进出的数据包进行处理。

2)功能表:

上面已经提到 netfilter框架可以对进出的报文实施3种功能:过滤,修改,追踪。这3项功能在netfilter框架中通过4个功能表来代表:

过滤功能:filter表

使用的卡点(下文称为链):input ,forward,output

修改功能:net表:修改报文的源地址和目标地址。

使用的卡点(下文称为链):prerouting,output,postrouting

mangle表:修改报文IP,TCP报文首部的某些信息。

使用的卡点(下文称为链):prerouting,postrouting,input,output,forward

追踪功能:raw表

使用的卡点(下文称为链):prerouting,output

3)功能表的优先级:

可以看到在同一个卡点上存在多个功能表的现象,谁先谁后检查呢?它们存在一个优先级的问题:
         高--->低:raw--->mangle--->nat--->filter

所以内核调用netfilter框架中表,表要调用相应的链,链使用规则来处理报文,这就是netfilter/iptables防火墙的工作逻辑。

3 iptables规则的书写

iptables书写规则的格式:

#iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET

-t TABLE: -t 指定表,TABLE为表名称,当省略该选项时,默认后面定义的规则 指施加在filter表的规则链上。

[ ]中为可选内容,下同。

3.1)查看规则:

#iptables [-t TABLE] -L [ -n -v  -x  --line-numbers]

-t TABLE: -t 指定表,TABLE为表名称,当省略该选项时,默认后面定义的规则 指施加在filter表的规则链上。

-L:list,列出指定链上所有规则
                       -n:numeric,以数字格式显示地址和端口,而不反解为域名和端口服务名。
                       -v:verbose,详细格式
                       --line-numbers:显示规则编号
                       -x:exactly,显示计数器的精确值,不做单位换算。每个链上有2个计数器:1个记录当前规则所匹配到的报文个数,2记录当前规则匹配到的报文大小之和

举例:

1查看net表现有的规则:

2查看filter表的现有规则:

3.2)清除表已定义的规则

#iptables [-t TABLE]  -F  [chain [rulenum]]

#iptables [-t TABLE]  -X  [chain]

#iptables [-t TABLE]  -Z  [chain [rulenum]]

*当省略 -t TABLE时,默认为filter表。

-F:flush,清空指定链上的规则,当没有指定链名时,为该表中所有链上的说有规则
       -X:drop,删除用户自定义的空链,非空自定义链,系统内置链无法删除。当没有指定链名时,为该表中所有自定义的链。

-Z:zero,置0,每个链上有2个计数器:1个记录当前规则所匹配到的报文个数,2记录当前规则匹配到的报文大小之和。当没有指定链名时,为该表中所有链。

举例:

1)清除filter表中input链的规则:

2)清除filter表中所有已定义的规则:

3.3)定义新过滤规则:

既然是过滤规则,那么规则一般用在filter表的链上。

3.3.1)自定义链和重命名自定义链

自定义链只能作为表中默认链的跳转对象,即在默认链通过引用自定义链,来生效自定义链上的规则。

#iptables [-t TABLE] -N chain-name

#iptables [-t TABLE] -E old-chain-name new-chain-name

*当省略 -t TABLE时,默认为filter表。

-N:new,新建一个用户自定义的链

-E:rename,重命名自定义的链。自定义链被引用时无法被重命名。

举例:

1.在net表中定义一个名为webrules的新自定义链:

2.将net表自定义的链webrules重命名为httpdrules:

3.3.2)定义基本的规则

#iptables [-t TABLE] {-A|-I } CHAIN CRETERIA -j TARGET

*当省略 -t TABLE时,默认为filter表。

-A:append,在链尾追加一条规则
  -I:insert,在指定位置插入一条规则,

-I CHAIN n 为该规则在现有链规则中的位置编号,从1开始,自上而下。当n省略时,默认插入放在该链的第一条。

CHAIN:链名,要根据TABLE来决定,也可是表中自定义的链

CRETERIA:匹配条件
    主要是:IP首部,TCP,UDP或ICMP首部中信息。
    匹配条件:(匹配条件可以有多个,要同时都满足。)
         !-s: !表示取反。
         -s,--src,--source:检查报文中的源ip地址
         -d,--dst,--destination:检测报文中的目标IP地址
         -p,--protocol:检查报文中的协议,即IP报文中被protocols标识的协议 { tcp |udp|icmp}  
         -i,--interface:检测报文的流入的接口,通常只用于prerouting,input,forward链
         -o,--out-interface:检测报文的流出接口,通常只用于forward,output,postrouting链

--sport:指定源端口,必须存在-p 协议

--dport:指定目标端口,必须存在-p 协议

TARGET:处理动作

基本的规则中使用的有3个(需大写):

DROP:放弃数据包,无任何信息返回

ACCEPT:接受数据包

REJECT:拒绝数据包,有返回信息,不推荐使用,除了在内网或做测试时使用。

举例:

(1)接受来自192.168.100.0/24 网段,到达本地192.168.100.1/24 eth1 网卡的关于80端口的请求包,其它来源的全部拒绝。

(2)只接受icmp的ping返回包,其余的icmp包请求拒绝,这样我可以ping通别人,别人ping不通我。

3.3.3)规则的删除

#iptables [-t TABLE] -D CHAIN n

*当省略 -t TABLE时,默认为filter表。

-D:删除

CHAIN:链名

n:规则在链中位置编号,从1开始,自上而下。

举例:删除filter表中input链上第二条规则

3.3.4)替换现有的规则

#iptables [-t TABLE] -R CHAIN n NEW-RULE

*当省略 -t TABLE时,默认为filter表。

-R:replace,替换指定的规则

CHAIN:链名

n:规则在链中位置编号,从1开始,自上而下。

NEW-RULE:新的规则
 举例:修改现有关于80端口的拒绝规则为,拒绝其它所有到达本机任一网卡的请求。

3.3.5)定义默认规则:

每一个链中都应定义默认规则,用来处理该链中现有规则匹配不到的数据包,但是操作远程主机时,请注意不要因默认规则将自己挡在主机外。

#iptables [-t TABLE] -P CHAIN TARGET

*当省略 -t TABLE时,默认为filter表。

-P :设置默认处理规则

TARGET:处理动作,只有DROP和ACCEPT可选。

举例:将现有input链的默认规则定义为DROP

4 iptables规则书写的原则

1)链中规则从首至尾进行规则匹配,先匹配到的,数据包被处理,链中余下规则不在进行检测。
    2)同类规则,范围小的放上面
    3)不同类的规则,匹配几率大的放上面
    4)应该设置默认规则,处理被规则都不匹配的报文

好吧,这就是Centos 6.6上 netfilter/iptables防火墙的基本用法,下篇博文预计写下面的内容:

1)使用netfilter/iptables 将Linux主机做成nat服务器,

2)filter过滤规则的扩展匹配使用

3)iptables规则的优化

4)iptables规则的保存

5)给内核打补丁,使netfilter/iptables可过滤应用层内容。

时间过的真快, 写这篇小文又浪费半天,哥只有1天休息时间,余下的时间去玩mariadb,撸python啦!!除了喝酒吃肉的事不要想起我。

时间: 2024-08-01 19:05:55

Centos 6.6上 netfilter/iptables防火墙的基本用法的相关文章

Netfilter/iptables防火墙

http://os.51cto.com/art/201107/273443.htm [51CTO独家特稿]Linux系统管理员们都接触过Netfilter/iptables,这是Linux系统自带的免费防火墙,功能十分强大.在接下来的这个<深入浅出Netfilter/iptables防火墙框架>系列中,51CTO安全/Linux专家李洋将对Netfilter/iptables进行详尽的.条理的介绍.本文是基础篇,先介绍Netfilter/iptables框架的原理. 1.Netfilter/i

玩转Linux之- CentOS 7.0,启用iptables防火墙

原文 玩转Linux之- CentOS 7.0,启用iptables防火墙 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall:systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall开机启动 2.安装iptables防火墙yum install iptables-services #安装vi /etc/

CentOS 7告iptables防火墙提示Unit iptables.service failed to load

使用CentOS 7时发现使用iptables防火墙时提示错误Unit iptables.service failed to load,意思是防火墙运行启动失败了,那么要如何处理呢. 一直用CentOS 6 习惯了,一下没适应过来.防火墙配置后执行service iptables save 出现"Failed to restart iptables.service: Unit iptables.service failed to load: No such file or directory.&

安全的Web主机iptables防火墙脚本

下面以自己的Web服务器举例说明之,系统的默认策略是INPUT 为DROP,OUTPUT.FORWARD链为ACCEPT,DROP设置得比较宽松,因为我们知道出去的数据包比较安全:为了验证脚本的通用性,我特的 查看了服务器的内核及iptables版本,命令如下所示: 1 2 3 4 5 6 7 8 9 10 uname -a Linux ud50041 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:54:53 EST 2006 i686 i686 i386 GNU/Li

【linux】iptables防火墙SNAT和DNAT的简单演示

首先说明SNAT和DNAT都大致相当于网络中的NAT和PAT协议,本实验是通过用一台linxu虚拟机来模拟内网网关,并且利用linux上的iptables防火墙策略,达到地址转换和端口映射的目的. SNAT 实验结构: 真机----------------(v1)网关服务器s1(v2)--------------(v2)外网服务器s2 开2台虚拟机linux,分别模拟s1和s2. 其中,s1上另增加一块网卡,使用vmnet1与真机相连. 使用vmnet2与外网服务器的s2的vmnet2相连. I

CentOS下配置iptables防火墙 linux NAT(iptables)配置

CentOS下配置防火墙 配置nat转发服务CentOS下配置iptables防火墙 linux NAT(iptables)配置 CentOS下配置iptables 1,vim /etc/sysconfig/network   这里可以更改主机名称. NETWORKING=yesNETWORKING_IPV6=noHOSTNAME=BGI-TJ.localdomain GATEWAY=192.168.11.1(超算网关) 2.vim /etc/sysconfig/network-scripts/

linux设置iptables防火墙的详细步骤(centos防火墙设置方法)

我们 来讨论一下如何为你的CentOS 服务器来设置简单的防火墙. 这里我们以DigitalOcean的CentOS 6 VPS为基础来讨论的,同样也适用于 阿里云上其他类型的LINUX系统. (阿里云有个云盾系统,因此在你自己的VPS上不设置防火墙也是可以的) 需要说明的是: 本文只涉及最基础最常用的防火墙设置,能屏蔽一些常用的攻击,但并不能彻底保证你的服务器的安全. 系统的随时更新 以及 关闭不必要的服务 仍然是保证系统安全非常重要的步骤. 如果你需要更全面的了解iptables,阅读本文后

Linux上iptables防火墙的基本应用教程

1.安装iptables防火墙 如果没有安装iptables需要先安装,CentOS执行: yum install iptables Debian/Ubuntu执行: apt-get install iptables 2.清除已有iptables规则 iptables -F iptables -X iptables -Z 3.开放指定的端口 #允许本地回环接口(即运行本机访问本机) iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT # 允

CentOS系统配置 iptables防火墙

阿里云CentOS系统配置iptables防火墙 虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FORWORD都是ACCEPT的规则 一.检查iptables服务状态 首先检查iptables服务的状态 [[email protected] ~]# service iptables status iptables: Firewall is not running. 说明iptables服务是有安装的,