iptables详解

IPtables

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。

  • netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
  • iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。
数据包发送原理

数据包在进入到我们的网卡没有经过路由决策时有PREROUTING链,在经过路由决策后可以经过INPUT链进入到本机应用层或者通过转发经由FORWARD链直接出去而不进入本机应用层,出去还需要经过POSTROUTING链,而进入本机后出来到达路由决策前具有OUTPUT链。
这里写图片描述

链是数据包流向经过的路径,那么如何使用这些链呢,防火墙规则里有多个表,而我们的链就是放在表里的规则上的。

规则的功能分为以下4种:
规则功能
filter过滤功能,定义是否允许通过防火墙,INPUT,OUTPUT,FORWARD都需要用到过滤的功能
nat地址转换,启用connection_track模块;PREROUTING,POSTROUTINIG,FORWARD都需要用到转换的功能
mangle用于对数据包相关字段的修改;PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING都可以用到
raw目标是关闭nat表上启用的连接追踪功能;PREROUTING, OUTPUT都需要用到此功能

一、NAT
1.SNAT

内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。

做SNAT转发,修改数据包来源报头:

客户端:172.16.18.5
NAT主机:172.16.18.6
公网:192.168.1.123
内部请求出去时:客户端所发出的封包表头中,来源会是172.16.18.5,然后传送到 NAT 这部主机; NAT 这部主机的内部接口 (172.16.18.6) 接收到这个封包后,会主动分析表头数据, 因为表头数据显示目的并非本机,所以开始经 过路由, 将此封包转到公网 IP 处(192.168.1.123); 主机透过 iptables 的 NAT table 内的 Postrouting 链将封包表头的来源伪装成为本机公网IP ,并且将两个不同来源 (172.16.18.5 及 公网IP) 的封包对应写入暂存内存当中, 然后将此封包传送出去了;

接受返回数据包时:在 Internet 上面的主机接到这个封包时,会将响应数据传送给那个公网IP的主机;当 NAT 服务器收到来自 Internet 的数据后,会分析该数据包的序号,并比对刚刚记录到内存当中的数据, 由于发现该封包为后端主机之前传送出去的,因此在 NAT Prerouting 链中,会将目标 IP 修改成为后端主机(172.16.18.5),然后发现目标已经不是本机, 所以开始透过路由分析封包流向;将数据传送到172.16.18.6 这个内部接口,然后再传送到最终目标主机上去!
这里写图片描述

2.DNAT

当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。

外部主机想要连接到目的端的WEB服务,则必须要连接到我们的 NAT 服务器上; 我们的 NAT 服务器设定 port 80转发 ,所以当 NAT 服务器接到这个封包后(源地址192.168.1.34|目标地址192.168.1.123), 会将目标地址在PREROUTING转为172.16.18.5,源地址不变 ,且将该封包相关信息记录下来,等待内部服务器的响应;172.16.18.5 会响应数据给192.168.1.34 ,当这个响应经过POSTROUTING时伪装源地址为192.168.1.123,目标地址不变(192.168.1.34)传送出去!

这里写图片描述


首先安装服务:
[root@foundation79 Desktop]# yum install iptables-services.x86_64 -y
iptables命令选项输入顺序:

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> –sport 源端口 <-d 目标IP/目标子网> –dport 目标端口 -j 动作

规则链名实现功能
INPUT处理输入数据包
OUTPUT处理输出数据包
PORWARD处理转发数据包
PREROUTING用于目标地址转换(DNAT)
POSTOUTING用于源地址转换(SNAT)
动作功能
accept接收数据包
DROP丢弃数据包
REDIRECT重定向、映射、透明代理
SNAT源地址转换
DNAT目标地址转换
MASQUERADEIP伪装(NAT),用于ADSL
LOG日志记录
1.添加规则:

将源地址是 172.25.254.0/24的数据包进行地址伪装

[root@localhost backup]# iptables -t nat -A POSTROUTING -s 172.25.254.0/24 -j MASQUERADE 
You have new mail in /var/spool/mail/root
[root@localhost backup]# iptables -t nat -vnL   #查看nat表

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      *       172.25.254.0/24      0.0.0.0/0  
iptables -t nat -vnL 查看nat表
-n:数字格式;
-v:verbose,详细格式信息;

–line-number可以显示规则序号,在删除的时候比较方便

2.删除规则
[root@localhost ~]# iptables -t nat -D POSTROUTING 1  #删除nat表中postrouting的第一条规则 
二、Filter
建立规则链:

规则链格式

pktsbytestargetprotoptinoutsourcedestination
包数字节数目标协议选项流入的接口流出的接口源地址目标地址
1.基于端口:

ptables [-AI 链] [-io 网络接口] [-p tcp,udp] [-s 来源 IP/网域] [–sport 端口范围] [-d 目标 IP/网域] [–dport 端口范围] -j [ACCEPT|DROP|REJECT]

[root@localhost ~]#iptables -A INPUT -p tcp --dport 22 -j ACCEPT    #允许ssh服务访问22端口
[root@localhost ~]#iptables -A INPUT -p tcp --dport 80 -j ACCEPT    #允许http服务访问80端口
[root@localhost ~]#iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许ftp服务的21端口
[root@localhost ~]#iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口

例子:
创建一条屏蔽tcp协议网段为172.25.254.0/24的主机来访问本机的80端口。

[root@localhost ~]# iptables -A INPUT -p tcp -s 172.25.254.0/24 -d 172.25.254.79 --dport 80 -j DROP
[root@localhost ~]# iptables -L -nv   #查看iptables的规则
Chain INPUT (policy ACCEPT 9 packets, 660 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       tcp  --  *      *       172.25.254.0/24      172.25.254.79        tcp dpt:80
2.基于数据包
iptables -A INPUT [-p icmp] [--icmp-type 类型] -j ACCEPT

常用的有 0: echo-reply, ping响应 、 8: echo-request, ping请求

拒绝被别人ping通:

[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost ~]# iptables -L -nv
Chain INPUT (policy ACCEPT 9 packets, 660 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8
3.基于状态创建规则

iptables -A INPUT [-m state] [–state 状态]

例子:创建一条规则,进入本机已建立的会话和与会话有关联关系的给与放行,其他的全拒绝

iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

[root@localhost ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@localhost ~]# iptables -L -nvChain INPUT (policy ACCEPT 1 packets, 94 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   17  1158 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
4.创建一条自定义防火墙规则

iptables [-t table] -N Chain

自定义链只可被应用。

iptables -t filter -N WEBChain

并被tcp 80端口出去的调用此规则。规则是拒绝192.168.1.123从tcp 80端口出去。

5.防火墙规则配置

(1)修改规则

[root@localhost backup]# iptables -R INPUT 2 -j REJECT 
[root@localhost backup]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

(2)删除规则

[root@localhost backup]# iptables -D INPUT 2   //删除input的第2条规则  
[root@localhost backup]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
[root@localhost backup]# iptables -F INPUT     #清空 filter表INPUT所有规则 
[root@localhost backup]# iptables -F           #清空所有规则
[root@localhost ~]# iptables -L -n --line-numbers 
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:20

(3)插入规则

插入规则到指定位置:

[root@localhost backup]# iptables -I INPUT 2 -p tcp -m tcp --dport 20 -j ACCEPT  
[root@localhost backup]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:20

(4)设置默认规则
设置默认规则为ACCEPT

[root@localhost backup]# iptables -P INPUT ACCEPT

传送门:
防火墙策略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值