iptables网络安全服务详细使用

iptables防火墙概念说明

开源的基于数据包过滤的网络安全策略控制工具。

centos6.9 --- 默认防火墙工具软件iptables

centos7 --- 默认防火墙工具软件firewalld(zone)

iptables主要工作在OSI七层的二、三、四层,如果重新编译内核,iptables也可以支持7层控制(squid代理+iptables)。

iptables工作流程(规则匹配流程)

iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。

iptables工作流程小结

1、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。

2、如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。

3、如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。

4、防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。

iptables四表五链概念

|-----------|-------------|-------------------------------------------------------------------------|
| 表(tables) | 链(chains) ||
| Filter | This is the default table (if no -t option is passed) 这是默认表 ||
| Filter | INPUT | for packets destined to local sockets 对于指定到本地套接字的包,即到达本地防火墙服务器的数据包 |
| Filter | FORWARD | for packets being routed through the box 路由穿过的数据包,即经过本地防火墙服务器的数据包 |
| Filter | OUTPUT | for locally-generated packets 本地创建的数据包 |
| NAT | This table is consulted when a packet that creates a new connection is encountered 当遇到新创建的数据包连接时将参考这个表 ||
| NAT | PREROUTING | for altering packets as soon as they come in 一进来就对数据包进行改变 |
| NAT | OUTPUT | or altering locally-generated packets before routing 本地创建的数据包在路由之前进行改变 |
| NAT | POSTROUTING | for altering packets as they are about to go out 在数据包即将出去时改变数据包信息 |
| Managle | This table is used for specialized packet alteration 这个表专门用于改变数据包 ||
| Managle | INPUT | for packets coming into the box itself 进入到设备本身的包 |
| Managle | FORWARD | for altering packets being routed through the box 对路由后的数据包信息进行修改 |
| Managle | PREROUTING | for altering incoming packets before routing 在路由之前更改传入的包 |
| Managle | OUTPUT | for altering locally-generated packets before routing 本地创建的数据包在路由之前进行改变 |
| Managle | POSTROUTING | for altering packets as they are about to go out 在数据包即将离开时更改数据包信息 |
| raw | 此表用处较少,可以忽略不计 ||

四表

复制代码
filter    (作用:主机防火墙) 默认的表。*****
nat        (作用:端口或IP映射或共享上网)*****
mangle    (配置路由标记 ttl tos mark)
raw        (忽略)

iptables的几个表以及每个表对应链的作用

复制代码
filter表(默认的表,作用:主机防火墙)
    INPUT:进入主机的数据包
    OUTPUT:本地创建的数据包
    FORWARD:路由穿过的数据包,即经过本地防火墙服务器的数据包

NAT表(作用:端口或IP映射或共享上网)
    PREROUTING:一进来就对数据包进行改变
    OUTPUT:本地创建的数据包在路由之前进行改变
    POSTROUTING:在数据包即将出去时改变数据包信息
    
mangle表(配置路由标记 ttl tos mark)
    INPUT:进入到设备本身的包
    FORWARD:对路由后的数据包信息进行修改
    PREROUTING:在路由之前更改传入的包
    OUTPUT:本地创建的数据包在路由之前进行改变
    POSTROUTING:在数据包即将离开时更改数据包信息

filter表信息详细介绍

|---------|------------------------------------------------------------------------------------------------------|
| filter表 | 强调:主要和主机自身相关,真正负责主机防火墙功能的(过滤流入流出,流经主机的数据包)filter表示iptables默认使用的表,这个表定义了三个链(chains ) 企业工作场景:主机防火墙 |
| INPUT | 负责过滤所有目标地址是本机地址的数据包 通俗来说:就是过滤进入主机的数据包 |
| FORWARD | 负责转发流经主机的数据包。起转发的作用,和NAT关系很大,后面会详细介绍 LVS NAT 模式,net ipv4.ip_forward=l |
| OUTPUT | 处理所有源地址是本机地址的数据包 通俗的讲:就是处理从主机发出去的数据包 |

NAT表信息详细介绍

|-------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| NAT表 | 负责网络地址转换的,即来源与目的IP地址和port的转换。 应用:和主机本身无关,一般用于局域网共享上网或者特殊的端□转换服务相关。 工作场票: 1. 用于企业路由(zebra )或网关(iptables),共享上网(POSTROUTING) 2. 做内部外部IP地址一对一映射(dmz),硬件防火墙映射IP到内部服务器,ftp服务 (PREROUTING ) 3. WEB,单个端口的映射,直接映射80端口( PREROUTING )这个表走义了3个链,nat功能相当于网络的acl控制。和网络交换机acl类似。 |
| OUTPUT | 和主机放出去的数据包有关,改变主机发出数据包的目的地址。 |
| PREROUTING | 在数据包到达防火墙时,进行路甶判断之前执行的规则,作用是改变数据包的目的地址、目的端□等就是收信时,根据规则重写收件人的地址。 例如:把公网IP : XXX.XXX.XXX.XXX映射到局域网的XX.XX.XX.XX服务器上。 如果是web服务,可以报80转换为局域网的服务器9000端□上 |
| POSTROUTING | 在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。 写好发件人的地址,要让家人回信时能够有地址可回。 例如。默认笔记本和虚拟机都是局域网地址,在出网的时候被路甶器将源地址改为了公网地址。 生产应用:局域网共享上网。 |

iptanles企业应用场景

1、主机防火墙(filter表的INPUT链)。

2、局域网共享上网(nat表的POSTROUTING链)。半个路由器,NAT功能。

3、端口及IP映射(nat表的PREROUTING链),硬防的NAT功能。

4、IP一对一映射。

iptables工作原理

iptables基本语法

-I(大写i 插入) -A(追加) -R(替换) -D(删除) -L(列表显示)

-I将会把规则放在第一行,-A将会放在最后一行。

例子:

复制代码
iptables --t filter  -A INPUT  -p  tcp  --dport  22  -j DROP    
iptables --t filter  -A INPUT  -p  tcp  --dport  3306  -j DROP
iptables --t filter  -I  INPUT  -p  tcp  --dport  80  -j DROP   
说明:前两句就算是先执行,第三句也会是第一行  
查看防火墙规则

-L 查看iptables控制策略列表信息

-n 查看iptables控制策略列表里面的ip地址和端口信息,不翻译,以数字表示

--line-number 查看iptables策略信息时,显示每条规则序号信息

-v 查看iptables策略详细信息(进出口)

复制代码
[root@iptables ~]# iptables -nL --line-number
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     icmp --  0.0.0.0/0            0.0.0.0/0           
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination  
清除防火墙规则

-F 清除所有规则,不会处理默认的规则

-X 删除用户自定义的链

-Z 清除链的计数器(数据包计数器与数据包字节计数器)

其余参数

-A 向指定链添加相应规则,默认从规则号结尾进行添加(添加最后)

-I 向指定链中插入规则,默认插入到第一条规则之上

-p 指定访问数据的协议类型(tcp、udp、icmp)

--dport 指定目标端口信息

--sport 指定源端口信息

-j 执行操作的动作(ACCEPT、DROP(丢弃)、REJECT(拒绝))

-D 删除指定链里面的规则策略

-i 指定数据流量进入接口信息(只能配置在INPUT链)

-o 指定数据流量流出接口信息(只能配置在OUTPUT链)

-s 指定数据流量源地址或网段信息

-d 指定数据流量目标地址或网段信息

! 表示控制策略取反

-m 表示增加扩展匹配功能

参数说明

禁止10.0.0.0网段连入:

复制代码
iptables -t filter -A INPUT -i eth0 -s 10.0.0.0/24 -j DROP 
可以不指定 -t filter 因为默认就是filter表

-i:流量进入的接口(从eth0进入)

-s:源地址

源地址不是10.0.0.150的单个IP的禁止连接:

复制代码
iptables -t filter -A INPUT -i eth0 !-s 10.0.0.150 -j DROP

禁用icmp协议:

复制代码
iptables -t filter -A INPUT -p icmp --icmp-type 8 -i eth0 -s 10.0.0.0/24 -j DROP

禁止访问响应服务端口:

以22端口为例

复制代码
iptables -A INPUT -p tcp --dport 22 -j DROP       在默认表中的INPUT链中追加策略:禁止22端口访问

删除某规则:

复制代码
iptables -D INPUT -p tcp --dport 22 -j ACCEPT   --- 删除指定规则
iptables -D INPUT 2     --- 根据规则行号,删除相应的规则

禁止网段连入:

例子:禁止192.168.17.0网段访问10.0.0.7主机

复制代码
iptables -A INPUT  -s 192.168.17.0/24 -d 10.0.0.7 -j DROP 

例子:禁止某个192.168.17.0网段不能访问服务器主机的22端口

复制代码
iptables -A INPUT -s 192.168.17.0/24 -d 10.0.0.7 -p tcp --dport 22 -j DROP

匹配指定协议以外的所有协议:

! 表示取反

复制代码
iptables -A INPUT ! --p tcp --s 10.0.0.0/24 -j DROP     centos6写法
复制代码
-p ! tcp      centos5写法

设置连续多端口控制策略:

复制代码
iptables -A INPUT -p tcp --dport 22:80 -j DROP

设置不连续多端口控制策略:

复制代码
iptables -A INPUT -p tcp -m multiport  --dport 22,80 -j DROP 

-m --- 表示增加扩展匹配功能 multiport 实现不连续多端口扩展匹配

对网络数据传输进行限速:

复制代码
iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT
iptables -I INPUT -s 10.0.0.7 -p icmp --icmp-type 8 -j DROP

--limit n/{second/minute/hour}:
解释:指定时间内的请求速率"n"为速率,后面为时间分别为:秒 分 时

--limit-burst [n]
解释:在同一时间内允许通过的请求"n"为数字,不指定默认为5

企业级防火墙部署案例

两种思想:对于默认策略为允许状态,防火墙规则就相当于黑名单;对于默认策略为禁止状态,防火墙规则就相当于白名单。

首先清空默认规则,然后设置远程连接规则,防止自己被踢出,更改默认规则

复制代码
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -p tcp --dport 22 -j ACCEPT   --- 防止被踢出门外
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

被指安全白名单策略

复制代码
iptables -A INPUT -i lo -j ACCEPT     --- 让自己可以ping自己
iptables -A INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT    --- 允许哪些网站服务可以访问
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT     --- 允许架构内部服务进行访问
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT       --- 允许一些合作企业的外网服务器进行访问

这几条就是最简单的企业防火墙部署

防火墙配置永久生效方法

第一种方式
复制代码
[root@iptables ~]# /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@iptables ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Wed Jan 17 16:12:23 2018
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [82:9632]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT 
-A INPUT -s 172.16.1.0/24 -j ACCEPT 
COMMIT
# Completed on Wed Jan 17 16:12:23 2018
第二种方式
复制代码
iptables-save >/etc/sysconfig/iptables

状态机制配置

允许关联的状态包通过(web服务不要使用FTP服务)

NEW

new说明这个包是我们看到的第一个包,意思就是,这是conntrack模块看到的某个连接的第一个包,它即将被匹配了。比如,我们看到一个SYN包,是我们所留意的连接的第一个包,就要匹配它。

表示新建立连接的数据包状态

ESTABLISHED

ESTABLISHED已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于ESTABLISHED状态的连接是非常容易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从new变为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。ICMP的错误和重定向信息包也被看作是ESTABLISHED,只要他们是我们所发出的信息的应答。
表示新建立连接数据包发送之后,回复响应的数据包状态

RELATED是个比较麻烦的状态,当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就会被认为是RELATED的了。换句话说,一个连接要想是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是RELATED的了,当然前提是conntarck模块要能理解RELATED。
表示借助已经建立的链路,发送新的连接数据包

INVALID

INVALID说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP错误信息。一般地,我们DROP这个状态的任何东西,因为防火墙任务这是不安全的东西。
无效无法识别的数据包

防火墙服务配置在FTP服务器上时,需要配置以下策略

复制代码
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables NAT实践过程

配置内网服务器利用iptables服务器外网网卡上网

复制代码
route add default gw 172.16.1.200    --- 首先在内网服务器设置网关(网关为拥有外网网卡的防火墙服务器内网地址)

在防火墙服务器开启路由转发功能

复制代码
[root@iptables ~]# vim /etc/sysctl.conf
[root@iptables ~]# sysctl -p
net.ipv4.ip_forward = 1

实现内网访问外网的NAT映射

复制代码
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.200
-s 172.16.1.0/24            --- 指定将哪些内网网段进行映射转换
-o eth0                     --- 指定在共享上网哪个网卡接口上做NAT地址转换
-j SNAT                     --- 将源地址进行转换变更
-j DNAT                     --- 将目标地址进行转换变更
--to-source ip地址           --- 将源地址映射为什么IP地址
--to-destination ip地址      --- 将目标地址映射为什么IP地址

iptables实现外网IP的端口映射到内网IP的端口

需求:将网关的IP和9000端口映射到内网服务器的22端口

端口映射 10.0.0.88:9000 -->172.16.1.8:22

实现命令:

复制代码
iptables -t nat -A PREROUTING -d 10.0.0.88 -p tcp --dport 9000 -i eth0 -j DNAT --to-destination 172.16.1.8:22
-d 10.0.0.8目标地址
-j DNAT 目的地址改写

效果:连接88服务器的9000端口,会自动跳转连接到8服务器的22端口

复制代码
[e:\~]$ ssh 10.0.0.88 9000

Connecting to 10.0.0.88:9000...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Wed Jan 17 09:48:56 2018 from 172.16.1.88
[root@web01 ~]#
相关推荐
Smile灬凉城66622 分钟前
robots协议
安全·php·robots
网络安全(king)2 小时前
网络安全攻防学习平台 - 基础关
网络·学习·web安全
李白你好2 小时前
家用无线路由器的 2.4GHz 和 5GHz
运维·网络
嵌入(师)2 小时前
嵌入式驱动开发详解21(网络驱动开发)
网络·驱动开发
Hacker_Nightrain2 小时前
网络安全与加密
安全·web安全
柒烨带你飞3 小时前
路由器的原理
网络·智能路由器·php
xserver23 小时前
ensp 基于EASY IP的公司出口链路配置
网络·tcp/ip·智能路由器
枫零NET3 小时前
学习思考:一日三问(学习篇)之匹配VLAN
网络·学习·交换机
手心里的白日梦3 小时前
UDP传输层通信协议详解
网络·网络协议·udp
红米饭配南瓜汤4 小时前
WebRTC服务质量(11)- Pacer机制(03) IntervalBudget
网络·网络协议·音视频·webrtc·媒体