浅析 linux防火墙 iptables

浅析linux防火墙iptables

iptables是用C语言实现的,并以GNU许可协议发布。其包括两部分,netfilter 和 iptables,iptbles是linux管理防火墙规则的命令行工具,处于用户空间。管理员通过iptables工具集和内核打交道,将防火墙规则写入内核。netfilter执行报文过滤规则,处于linux内核空间。通常用iptables来统称linux防火墙。

iptables中的表

iptables根据不同的表来处理不同的功能逻辑,当前包含5个表,分别是:filter表,nat表,mangle表,raw表和security表。其中经常用到的是filter表,nat表和mangle表。后面两个表是新版本才添加进来的,很少用到。

filter表(过滤表)

  
  filter是iptables的默认表,主要用于报文过滤,在这里根据报文的内容对报文进行丢弃或者接收。它包含有3个内置规则链。

  • INPUT输入链,处理目标地址为本机IP地址的报文
  • OUTPUT输出链,处理本机IP地址产生的报文。
  • FORWARD转发链,处理经过本机路由的报文。
     

这样每一个IP报文只经过这3个内置链中的一个,便于进行数据报文匹配和处理这里是真正实现防火墙处理的地方。

注意:

  • 经过本机转发的报文经过FORWARD链,不经过INPUT链和OUTPUT链;
  • 本机产生的报文经过OUTPUT链,其他的链不经过;
  • 去往主机的报文经过该主机的INPUT链,其他的链不经过。

nat表(网络地址转换表)

nat表用来完成源/目的地址的转换,当一个报文在创建一个新的连接时进入该表。nat表有三个内置的规则链。

  • PREROUTING:用于修改到来的报文,只用来做网络地址转换。
  • OUTPUT:用于修改本机产生的并且在路由处理之前的报文。
  • POSTROUTING:用于修改准备出去的报文的地方。

通过目的地址转换,可以将服务器放在防火墙后面,并使用私有IP地址。网络地址转换在路由前后都有可能发生,源地址转换是在数据包通过路由之后在POSTROUTING规则链进行风吹吹转换。目的地址是在路由之前,在PREROUTING规则链进行地址转换。

mangle表(修改表)

mangle表主要用来对报文进行修改,内置5个规则链。

  • PREROUTING:针对到来的报文,在路由之前修改的地方。
  • INPUT:针对目的地址为网关本身的报文;
  • FORWARD:针对通过网关路由器转发的报文;
  • POSTROUTING:将要发送出去的报文的地方;
  • OUTPUT:本机产生的报文在路由之前修改的地方。

通常使用该表进行报文修改,以便进行Qos和策略路由。通常每一个报文都进入该表,但不适用它来做报文过滤。

raw表(原始表)

这个表是新版本才有的,很少用到该表。主要用于配置连接跟踪相关内容,在ip_conntrack之前调用。它提供了两个内置的规则链。

  • PREROUTING:到达本机的报文。
  • OUTPUT:本机进程产生的报文

这里是能够在链接生效前处理报文的地方,可以标记符合某种条件的报文不被连接跟踪,一般很少使用。

防火墙处理数据包的四种方式

ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

iptables的基本语法格式

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]






iptables
tablecommadndchainparaementtarget



-t filter
- A
- D
- I
- R
- L
- F
- Z
- N
- X
- P


INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING
-p
-s
-d
-i
-o
- -sport
- - dport



-j ACCEPT
-j DROP
-j REJECT

条件匹配

parameter specified
-p TCP
UDP
ICMP
A protocal name from /etc/protocol
-s
-d
network name
hostname
subnet
IP address
-i
-o
interface name (eth0, wlan0)
interface name ends in a “+”(eth+)
- -sport
- - dport
service name
port number
port range ( 1024 : 65535 )

表名、链名用于指定 iptables命令所操作的表和链,命令选项用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;条件匹配用于指定对符合什么样 条件的数据包进行处理;目标动作或跳转用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

iptables命令参数控制选项

  • -A 在指定链的末尾添加(append)一条新的规则
  • -D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
  • -I 在指定链中插入(insert)一条新的规则,默认在第一行添加
  • -R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
  • -L 列出(list)指定链中所有的规则进行查看
  • -E 重命名用户定义的链,不改变链本身
  • -F 清空(flush)
  • -N 新建(new-chain)一条用户自己定义的规则链
  • -X 删除指定表中用户自定义的规则链(delete-chain)
  • -P 设置指定链的默认策略(policy)
  • -Z 将所有表的所有链的字节和数据包计数器清零
  • -n 使用数字形式(numeric)显示输出结果
  • -v 查看规则表详细信息(verbose)的信息
  • -V 查看版本(version)
  • -h 获取帮助(help)

如前面做路由器用到的命令:

/*所有去往internet的流量进行地址伪装,即将源地址改为eth0*/
>:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/*对内转发,数据包从eth0流向wlan0*/
>: iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISH -j ACCEPT 
/*对外转发,数据包从wlan0流向eth0*/
>: iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值