linux之Iptables 主机防火墙规则(一)

时间:2024-03-18 07:50:03

Iptables  主机防火墙规则

1.概述  内外网防火墙  软硬件分类

Firewall:防火墙,工作在主机或网络的边缘。进出本主机或网络段的数据报文,根据规则做匹配,根据匹配的结果做处理。一种隔离技术,实现内网以及外网传输控制,最大限度阻止黑客破坏企业网络,加强企业网络安全。基于本机内核中的TCP/IP协议栈内核

 

防火墙根据作用对象分类

主机型防火墙单台主机上设置防火墙,保护主机数据安全控制的是网络用户 服务器数据的访问

网络型防火墙:管理整个企业的网络安全,内部主机也要设置防火墙   内网外网沟通是一定经过防火墙

 

 

 

 

防火墙根据软硬件分类

硬件防火墙:通过硬件的方式实现防火墙

软件防火墙:通过软件的形式实现防火墙

 

 

 

2.分为两部分iptables Netfilter  四表五链  匹配规则

iptables分为两部分为iptables/netfilter

 

1.iptables是属于应用程序,完成规则设置命令行工具,是一个防火墙的设置命令,/sbin/iptables,用于管理防火墙规则。

2.Netfilter:位于内核中包过滤功能体系,是实现防火墙的功能模块。

3.iptables 工作在网络层,通过规则对数据“包”进行过滤

 

 

 

 

 

 

 

 

 

 

 

 

 

 

注意:

CentOS 7前,默认启动的防火墙是iptablesCentOS 7之默认启动的是firewalld

firewalliptables的外壳,是基于iptables工作

1.)iptables规则链  规则定义:设置条件,进行数据包的匹配,依据匹配进行处理

规则的集合体   --规则链

对数据包进行过滤或处理。--规则的作用

容纳各种防火墙的规则--作用

处理数据包不同时机--链的分类依据:

 

默认的5种规则链分类依据按照时机来划分的)对数据包处理的不同时间

1、在进行路由选择前处理数据包--PREROUTING     路由选择前执行的规则 判别路由之前(NAT)

2、处理入站数据包--INPUT            处理发给本机的数据包

3:处理出站数据包  --OUTPUT   本机发出去的数据包

4、处理转发数据包--FORWORD        本机相当于转发路由,

5、在进行路由选择后处理数据包--POSTROUTING    路由判断选择之后,处理数据包

 

2.)规则表:容纳各种规则链  

(表是链的分类) 根据链对数据不同的操作,分为表

4个功能表:

filter对数据包进行过滤确认是否放行该数据包。

natnetwork address translation  网络地址转换(修改数据包中的源、目标IP地址或端口。)

Mangle拆解报文,做出修改,封装报文,主要为数据包设置标记

raw关闭nat表上启用的连接追踪机制,确定是否对该数据包进行状态跟踪

 

各个链的包含的功能、实现的位置:数据包  从左往右    一个表一个表流动

 

 

 

 

 

 

 

3.)总结:iptables 四表五链 规则匹配 编写顺序

1.四表:Raw(跟踪)、mangle标记)、nat(修改)、fliter(过滤)

2.五链:PREROUTINGINPUTOUTPUTFORWORDPOSTROUTING

 

3.规则链之间的顺序

流入:PREROUTING---> INPUT

流出:OUTPUT ---> POSTROUTING

转发:PREROUTING ---> FORWARD ---> POSTROUTING

优先级次序:Raw(跟踪)>mangle(标记)>nat(修改)>fliter(过滤)

 

4.规则匹配:

按顺序从上往下依次检查匹配即停止

找不到匹配规则,按照该链的默认策略处理。

 

5.链上规则编写次序注意事项:

1.规则编写的时候,同类(同一应用)规则,匹配范围小的放在上面。

2.不同类规则,访问频率的放最上面

3.设置默认策略

4.尽量将可以由一条规则描述多个规则合并一条规则

 

4.)iptables命令的使用  启动安装  

rpm -qa | grep iptables检查是否安装:

yum -y  install  iptables  iptables-services      --安装软件安装:

 

 

 

 

firewall转为iptables:

systemctl  unmask  iptables---解覆盖,即显现iptables

systemctl  mask  firewalld ---覆盖firewalld

 

systemctl  stop  firewalld

systemctl  disable  firewalld

 

systemctl  restart  iptables

systemctl  enable  iptables

 

iptables -v -L -n --line-numbers       --查看默认filter表上 所有链的信息 

1.)iptables格式规则:

Iptbales   [-t表名]   选项   [链名]  [条件]   [-j控制类型]

在什么表的 什么链  的哪个地方(选项)   添加一条防火墙规则(条件)  满足条件后执行 J

注意!

1.不指定表名时,默认指定filter

2.不指定链名时,默认指定表内的所有链

3.除非设置链默认策略否则必须指定匹配条

4.选项、链名、控制类型使用大写字母 其余均为小写

2.)  4个功能表:过滤,地址转换,标记,跟踪

filter对数据包进行过滤,确认是否放行该数据包。

nat(network address translation)  网络地址转换(修改数据包中的源、目标IP地址或端口。)

Mangle拆解报文,做出修改,封装报文,主要为数据包设置标记

raw关闭nat表上启用的连接追踪机制,确定是否对该数据包进行状态跟踪

3.)  5种规则链 (默认)   分类依据 对数据包处理的不同时间

1、在进行路由选择前处理数据包--PREROUTING     路由选择前执行的规则 判别路由之前(NAT)

2、处理入站数据包--INPUT            处理发给本机的数据包

3:处理出站数据包  --OUTPUT   本机发出去的数据包

4、处理转发数据包--FORWORD        本机相当于转发路由,

5、在进行路由选择后处理数据包--POSTROUTING    路由判断选择之后,处理数据包

 

 

5.)查看表 规则       -L  -n  -v  --line-numbers  

查看规则

-L:列出指定链上的所有规则,后面紧查看的链

-n:数字格式显示地址和端口号(不反解)

-v:  显示详细信息         -vv:更加详细信息

--line-numbers          行号

 

iptables -v -L -n --line-numbers       --查看默认filter表上 所有链的信息

iptables -t nat -n -L PREROUTING         --查看 nat表上的 PREROUTING链信

 

 

 

 

因为没有配置,所有为空

 

 

 

 

列表中的内容chain

police ACCEPT默认允许的意思

target控制类型

port端口类型

source源地址

destination目的地址

6.)链管理 设置远程登录  -F清除规则 -Z 重新计数-P链默认规则

-F 清除所有规则   

-P(大写)为指定的链设置  默认规则,

-Z     栈内流量数据重新计数

 

iptables -t filter -P INPUT DROP         -- -P设置默认类型为DROP直接丢弃

iptables  -L -n  -v --line-numbers       --查看所有防火墙

iptables  -P  INPUT   ACCEPT        --设置可以远程登录

 

 

 

 

 

这样可以远程登录

 

 

 

 

 

7..)链规则管理 -A末尾追加 -I 开头插入 -D删除 -R替换

-A 在链的末尾追加一条规则

-I  在链的开头或指定行插入一条规则

(在链名后面(例如INPUT)可以添入数字代表把写入的规则插入第几行。省略默认为第一行)

-D 删除指定链上的指定规则

-R 修改或替换指定链上的指定规则

1.在末尾增加一条规则  -A

iptables -A INPUT -s 192.168.10.100 -d 192.168.10.200 -j ACCEPT

末尾增加规则   收到来自10.100的数据包  发到10.200  做ACCEPT接受的动作

 

 

 

 

在增加一个  不接受DROP

iptables -A INPUT -s 192.168.10.111 -d 192.168.10.200 -j DROP

 

 

 

 

 

2.删除一条 规则  -D

iptables -D INPUT 2      删除INPUT的第二条规则

 

 

 

 

 

 

3.更改一条规则

iptables -R INPUT 1 -s 192.168.10.0/24 -d 192.168.10.200 -j ACCEPT

   更改什么链第几条          

 

 

 

 

例如下列例子:

iptables -t filter -P FORWARD DROP(要把转发关掉保证安全)

iptables -t filter -n -L --line-numbers(查看filter表的相关规则内容)

iptables -L FORWARD -n -v(查看指定规则链的内容)

iptables -P OUTPUT ACCEPT(一般默认出站不过滤)

iptables -D INPUT 1(删除INPUT链的第一条规则)

 

一般情况下 设置默认规则INPUT和FORWARD要设置成DROPOUTPUT一般设置为ACCEPT

8.)数据包的常见控制类型

ACCEPT:允许通过

DROP直接丢弃, 给出任何回应

REJECT:拒绝通过 必要时会给出提示

REDIRECT端口 重定向

LOG记录日志信息 然后传给下条规则 继续匹配

DNAT目标地址转换

SNAT源地址转换

MASQUERADE地址伪装

 

例如:

iptables -t filter -I INPUT -d 192.168.22.13 -p icmp -j DROP

设置规则 来自filter表的 input链  到目的地址22.13  -p端口协议为icmp  DROP不通过

 

iptables -t filter -I INPUT -p tcp --dport 22 -j ACCEPT

设置规则 来自filter表的 input链 端口为22的  则通过

 

 

 

 

iptables -A INPUT -p tcp --sport 22 -j ACCEPT

设置规则 filter表的 input链插入一个规则  端口协议为tcp  来源地址端口为22的包 通过

9.)匹配条件  ! -s d p i o 取非  ping

-s  IP|NETADDR 数据包的来源地址ip或网段  检查报文中源IP是否属于此处指定的地址范围

-d  IP|NETADDR  到目标ip或网段         检查报文中目标IP是否属于此处指定的地址范围

-p  {tcp|udp|icmp}支持三种协议      检查报文中的协议,IP首部中protocols所标识的协议

-i  {eth0/eth1/ens33} 从那个网卡进来    仅用于PREROUTING,INTPUT,FORWARD链

-o {eth0/eth1/ens33} 从那个网卡出去 仅用于FORWARD,OUTPUT,POSTROUTING链

 

例如:

1.使客户能连接22端口   input连接22     output回复

iptables -I INPUT -s 192.168.10.1 -d 192.168.10.200 -p tcp --dport 22 -j ACCEPT

I插入filter表的input链 来自10.1 到10.200 的ip  协议为tcp   目的端口为22  则通过

iptables -I OUTPUT -s 192.168.10.200 -d 192.168.10.1 -p tcp --dport 22 -j ACCEPT

-I插入 filter表的output链 来自10.200 到10.1 的ip  协议为tcp  目的端口为22  则通过

 

 

 

 

 

2. 10.100  和10.150  可ping

iptables -A INPUT -s 192.168.10.100 -d 192.168.10.150 -p icmp -j ACCEPT

input表 最后插入规则  来源10.100 目的10.150  协议为icmp  通过     

iptables -A OUTPUT -s 192.168.10.150 -d 192.168.10.100 -p icmp -j ACCEPT

input表 最后插入规则  来源10.150 目的10.100  协议为icmp  通过     

 

 

 

 

 

3.  -R 修改第一个

iptables -R INPUT 1 -s 192.168.10.1 -d 192.168.10.200 -p tcp --dport 22 -i ens33 -j ACCEPT     

R修改filter表的input链 来自10.1 到10.200 的ip  协议为tcp   目的端口为22 从ens33进来的  则通过

iptables -R OUTPUT 1 -s 192.168.10.200 -d 192.168.10.1 -p tcp --dport 22 -o ens33 -j ACCEPT  

R修改 filter表的output链 来自10.200 到10.1 的ip  协议为tcp  目的端口为22  从ens33进来的  则通过

 

 

 

 

 

4. 可以 ping    

iptables -A INPUT -p icmp -s 192.168.10.0/24 -d 192.168.10.20 -j ACCEPT

input链最后加入  来源10.0/24网段  目的ip 10.20   icmp的协议 即可ping 通   进

iptables -A OUTPUT -p icmp -s 192.168.10.20 -d 192.168.10.0/24 -j ACCEPT

output链最后加入  来源10.20  目的ip10.0/24  icmp协议     可通     

iptables -L     -查看

 

 

 

 

 

iptables -A INPUT -p icmp -s 192.168.10.20 -j ACCEPT

(允许192.168.10.20主机能Ping本机)

iptables -I INPUT -p tcp -d 192.168.22.13  -j ACCEPT

(允许所有主机能基于TCP访问192.168.22.13)

10.针对网卡接口流入限制匹配 网卡-i ens33 进入  -o出去

-i ens33:流入ens33网卡的数据流  -o ens33:流出ens33网卡的数据流

例如:

iptables -A INPUT -d 192.168.10.0/24 -i ens33 -j ACCEPT  

在最后插入  ens33进来的 目标网段使10.0网段的  通过

(所有22网段主机数据流入本机ens33网卡数据流允许)

iptables -A OUTPUT -s 192.168.10.0/24 -o ens33 -j ACCEPT

(响应22网段主机数据流出本机ens33网卡数据流允许)

11.)扩展匹配    

iptables支持的扩展模块

Centos7/usr/lib64/xtables/模块xxx.so

centos-6 :/lib64/xtable/xxx.so

显示扩展

必须指明扩展模块

获取扩展帮助文档的方式:①centos-6   man iptables

           ②Centos-7   man iptables-extensions

1.例如 --d /s port PORT目标端口 源端口

--dport PORT  目标端口,可以单个端口,可以是连续的端口(不能离散)

--sport PORT   源端口,

例如:

iptables -I OUTPUT -s 192.168.10.20 -d 192.168.10.0/24 -p tcp --sport 22 -j ACCEPT   

output链第一条前增加 当数据包来源ip10.20  目的10.0网段  协议为tcp 端口22  则通过

iptables -I INPUT -s 192.168.10.0/24 -d 192.168.10.20 -p tcp --dport 22 -j ACCEPT    

input链第一条前增加 当数据包来源ip10.0网段  目的10.20  协议为tcp 端口22  则通过

iptables -L         查看            22端口为ssh协议

 

 

 

 

 

2.三次握手--tcp-flags LIST1 LIST2

--tcp-flags LIST1 LIST2(较少使用):SYN 连接请求 ACK 应答  RST 重置  PSH数据传输       

例如:

iptables -I INPUT -i eth0 -p tcp --tcp-flags SYN,RST,ACK SYN -j DROP

--syn:检查TCP握手的第一次(其中只有SYN是1)

filter表 input链中 在第一行插入  如果有数据包从 eth0 接口来 协议为tcp 启动隐式模块

检查tcp三次握手的这些标志SYN,RST,ACK 如果只要SYN=1 其他为0  则不通过

 

3.Ping   -p icmp --icmp-type 0/8

-p icmp --icmp-type  0/8

0:ping响应

8:请求应答, Ping请求

例如:

iptables -A INPUT -s 192.168.10.0/24 -p icmp --icmp-type 8 -j ACCEPT     请求

input链最后加入 来源网段10.0   ping请求 为8  则通过

iptables -A OUTPUT -s 192.168.10.10 -d 192.168.10.0/24 -p icmp --icmp-type 0 -j ACCEPT  

input链最后加入 来源10.10   目的网段10.0      ping请求 为0  则通过         回应

 

 

 

 

12.)显示扩展  隐式扩展 -m(注意:如指明了协议可以省略-m)

1.)multiport  端口扩展:-m multiport --sports   s源端口   d目的端口

使用离散方式指明多个端口(最多15个)

多端口匹配: -m multiport --sports  端口列表

-m multiport --dports 目的 端口列表

例如:

iptables -I INPUT -s 192.168.10.0/24 -d 192.168.10.50 -m multiport -p tcp --dport 22,23,80 -j ACCEPT

Input链  源网段10.0  目的网段10.50  tcp协议  访问 目的端口22.23.80  则通过      进

iptables -I OUTPUT -s 192.168.10.50 -d 192.168.10.0/24 -m multiport -p tcp --sport 22,23,80 -j ACCEPT

Output链  源网段10.50 目的网段10.0  tcp协议  访问源端口22.23.80  则通过     

 

 

 

 

 

2.)iprange  连续ip扩展:指明连续的IP地址  -m iprange --src-range

-m iprange --src-range  指明连续的  IP地址范围

-m iprange --dst-range  指明连续的  目的IP地址范围

例如:

iptables -I INPUT -d 192.168.30.10 -p tcp -m multiport --dport 22:25,80,514 -m iprange --src-range 192.168.30.11-192.168.30.30 -j ACCEPT

Input链  目的地址30.10 协议为tcp   源端口为22.25.80.514    来源地址范围30.11-30满足则通过

iptables -I OUTPUT -s 192.168.30.10 -p tcp -m multiport --sport 22:25,80,514 -m iprange --dst-range 192.168.30.11-192.168.30.30 -j ACCEPT

Output链  目的地址30.10 协议为tcp   目标端口为22.25.80.514    目的地址范围30.11-30满足则通过

 

 

 

 

iptables -I INPUT -d 192.168.10.10 -p tcp -m multiport --dport 22:25,80,514 -m iprange --src-range 192.168.10.11-192.168.10.254 -j ACCEPT

iptables -I OUTPUT -d 192.168.10.10 -p tcp -m multiport --sport 22:25,80,514 -m iprange --dst-range 192.168.10.11-192.168.10.254 -j ACCEPT

3.)time     日期时间扩展:根据时间进行匹配  -m time --timestart

--datestart    日期开始

--datestop    日期结束

--timestart时间开始 时分

--timestop时间结束 时分

iptables -I INPUT -s 192.168.10.100 -d 192.168.10.200 -m time --timestart 15:30 --timestop 15:50 -m multiport -p tcp --dport 22,23,80 -j ACCEP      

来源于10.100  目的ip10.200 数据包在15.30-50发过来  协议tcp 目的端口22.23.80 则通过

iptables -I OUTPUT -s 192.168.10.200 -d 192.168.10.100 -m time --timestart 15:30 --timestop 15:50 -m multiport -p tcp --sport 22,23,80 -j ACCEPT

来源于10.200  目的ip10.100 数据包在15.30-50发过来  协议tcp  源端口22.23.80  则通过

iptables -L -n -v

 

 

 

 

4.)string    字符串模块扩展:只能对明文编码协议生效  根据7层字符进行匹配

--algo {bm|kmp}:指定字符串匹配的算法

[!] --string 参数

[!] --hex-string 参数

例如:

iptables -I INPUT -d 192.168.10.20 -m multiport -m string --algo kmp --string "kkk" -p tcp --dport 80 -j ACCEPT

Input链  目的ip10.20 启动multiport模块 目的端口80 启动匹配字符串模块  匹配kkk通过

iptables -I OUTPUT -d 192.168.10.20 -m multiport -m string --algo kmp --string "kkk" -p tcp --sport 80 -j ACCEPT

Input链 目的ip 10.20 启动multiport模块  源端口80 启动匹配字符串模块  匹配kkk通过

Iptables -L -v -n         --查看信息

 

 

 

 

 

 

5.)connlimit 限制请求数量扩展:限制单个IP并发请求数量进行匹配过滤

--connlimit-upto 请求数小于等于阈值时执行操作(centos-6不支持)

--connlimit-above: 请求数大于3时执行操作

例如:

iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT

(限制ssh并发连接最多3个)

iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-upto 3 -j ACCEPT

(限制ssh并发连接最多3个)

 

 

 

 

6.)limit     速率模块扩展:对响应  速率 进行过滤匹配

--limit-burst:空闲峰值数量

--limit #/minute:单位时间的速率

例如:

iptables -I INPUT -d 192.168.10.20 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT

input链 目的ip10.20  ping模块 8进  启动limit 速率模块 空闲峰值为5  一分钟30的频率 允许通过

iptables -I OUTPUT -s 192.168.10.20 -p icmp --icmp-type 0 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT

Output链 源ip10.20  ping模块 0出  启动limit 速率模块 空闲峰值为5  一分钟30的频率 允许通过

 

 

 

 

7.)state     连接状态扩展:检查连接的状态-m state --state ESTABLISHED,RELATED

所有的可追踪的连接状态:

NEW:与任何连接 无关的(新来的)

ESTABLISHD:响应请求  或已建立连接的

RELATED:与已有连接 有相关性的

INVALID:不被允许的类型

UNTRACKED:没有被跟踪的(不常用的)

例如:

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

 

 

 

 

13.) iptables规则保存  和重载

iptables的配置文件:/etc/sysconfig/iptables-config

1.保存在某个文本中,在需要的时候进行重载规则

iptables-save > /root/iptabls-rule      将规则保存至/root/iptabls-rule

cat  /root/iptabls-rule

iptables -F

iptables -L

iptables-restore < /root/iptabls-rule    重新加载

 

 

 

 

 

 

 

2.永久修改和保存    

service iptables save(centos-6)  (相当于iptables-save > /etc/sysconfig/iptables)

 

service iptables save

service iptables restart  生效