iptables防火墙-----------漫漫秋夜长,烈烈北风凉

Iptables防火墙

参考:https://www.cnblogs.com/f-ck-need-u/p/7397146.html

一、防火墙概述

1.1、防火墙概念

在计算机领域,防火墙是用于保护信息安全的设备,其会依照用户定义的规则,运训或者限制数据的传输
1.用户保护内网安全的一种设备
2.依据规则进行防护
3.用户定义规则
4.允许或拒绝外部用户访问

2.2、防火墙分类

逻辑上划分,防火墙可以大体分为'主机'防火墙和'网络'防火墙

1.主机防火墙:针对单个主机进行防护
2.网络防火墙:针对网络进行防护,处于网络边缘,防火墙背后是本地局域网。
#物理上划分,防火墙可分为硬件防火墙和软件防火墙
1.硬件防火墙:在硬件级别实现防火墙功能,另一部分基于软件实现,其性能高,硬件成本高
2.软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,其性能较于硬件防火墙低,成本较低对于Linux系统自带,可以直接使用

防火墙性能

1.吞吐量
2.并发连接
3.新建连接
4.时延
5.抖动

二、Iptables

2.1、iptebles是什么?

1.iptables不是防火墙,是防火墙用户代理
2.用于把用户的安全设置添加到安全框架中
3.安全框架是netfilter
4.netfilter位于内核空间中,是Linux操作系统核心层内部的一个数据包处理模块
5.iptables是用于在用户空间对内核空间的netfilter进行操作的命令行工具

2.2、netfilter和iptables功能

netfiter和iptables可简称为iptables,为Linux平台下的过滤防火墙,是开源的,内核自带的,可以代替成本较高的企业级硬件防火墙,能够实现如下功能:
1.数据包过滤,即防火墙
2.数据包重定向,即转发
3.网络地址转换,即可NAT

2.3、iptables概念

iptables工作依据------规则(rules)

iptables是按照规则办事的,规则是由运维人员定义的条件。
规则存储在内核空间的数据包过滤表中,这些规则分别制定了源地址、目标地址,传输协议(TCP/UDP/ICMP)和服务类型(HTTP/FTP)等
当数据包与规则匹配时,iptables就根据规则定义的方法处理这些数据包,比如放行(ACCEPR)、拒绝(DORP/REJECT)、转发(FORWARD)等。

2.4、规则链----五链

规则链的概念

我们知道防火墙的作用在于对经过的数据报文进行规则匹配,然后执行对应的'动作',所以数据包经过这些关口时,必须匹配这个关口规则,但是关口规则可能不止一条,可能会很多,当我们把众多的规则放在一个关口里时,所有的数据包经常进行匹配,根据进来,还是出去,还是转发等等,进入到相应的关口'规则链'中进行匹配规则。
# 也就是放置多个规则的容器成为规则链

五链

1.INPUT: 处理流入的数据包
2.OUPUT: 处理流出的数据包
3.FORWARD: 处理转发数据包(主要是讲数据包转发至本机其他网卡)
4.PREROUTING: 在进行路由选择前处理数据包,修改到达防火墙数据包的目的IP地址,用于判断目标主机
5.POSTROUTING: 在进行路由选择后处理数据包,修改要离开防火墙数据包的源IP地址,判断经由那一接口送往下一跳。

2.5、四表

每个'规则链'上都设置了一串规则,我们可以把不同的规则链组合成能够完成某一特定功能集合分类,而这个结合分类我们就成为表,共四张表
# filter
过滤功能,确定是否放行该数据包,属于真正防火墙,内核模块:'iptables_filter'
# nat
网络地址转换功能,修改数据包中的源。目标IP地址或者端口;内核模块:'iptables_nat'
# raw
确定是否对数据包进行跟踪内核模块:'iptables_raw'
# mangle
对数据包进行重新封装功能,为数据包设置标记;内核模块'iptables_mangle'

2.5.1、filter表

过滤数据包,主要作用就是阻止和允许访问

1.INPUT链:过滤流入主机的数据包
2.OUTPUT链:过滤流出主机的数据包
3.FORWARD链:负责转发流经主机的数据包

2.5.2、nat表

用于网络地址转换,主要作用就是端口转发和ip转发

1.OUTPUT链:过滤流出主机的数据包
2.OREROUTING链:数据包到达防火墙时进行判断,改写数据包的地址或端口(进)
3.POSTROUNTING链:数据包到达防火墙时进行判断,改写数据包的地址或者端口(出)

2.6、iptables注意事项

1.匹配规则时从上往下依次执行
2.只要匹配上规则,就不会再往下执行(允许或拒绝)
3.没有明确允许或者拒绝的,向下匹配,直到默认。
4.执行默认规则
ps:iptables默认规则是ACCEPT全部允许
ps:很多时候设置iptables会把自己远程主机挡在外面,所以一定要注意,生效前反复检查。
# 可以设置定时任务,隔一段时间关闭一次iptables,不至于远程主机挡在外面,需要自己跑到机房去处理。

2.7、iptables常用的协议

-p 指定协议
1.UDP
2.TCP
3.ICMP
4.ALL

三、iptables的使用

3.1、命令及参数

命令 iptables

参数:

1.规则管理
-t 在指定表,默认是filter
-I 添加规则,拒绝类的规则添加
# -I INPUT 5 可以指定在第5行添加
-A 添加规则,允许类的规则添加
-D 删除规则
-j 满足条件后执行的动作
-p 指定协议 #指定端口时必须指定协议
--dport 指定端口,客户访问的目标
# --dport 20:50范围端口
#加上模块可以20:30,32:35
--sport 源端口,客户过来的端口
-s 源IP,客户过来的
-d 目标IP,访问的IP
-m 指定模块
-P 修改防火墙默认规则 -P ACCEPT
-F 清除所有规则
-X 删除自定义的链
-Z 计数器清零
-i 输入的时候从哪个网卡进来
-o 输出的时候从哪个网卡出去
-R 替换表中的规则

-SNAT 源地址转换
-DNAT 目的地址转换
-REDIRECT 端口重定向

2.查询管理
-L 显示表中的所有规则
-n 不把端口或ip反向解析为名字
--line-numbers 显示规则的序号#删除多个时一定要从下往上删除,序号会发生改变。

iptables-save #保存规则/etc/sysconfig/iptables
iptables-restore #恢复规则可以保存在另外自定义的文件中,因为重启iptables时会拂去配置文件中的规则。
iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/11111

3.2、iptables的动作

-j ACCEPT -j后指定动作

1.ACCEPT # 放行,接受
2.DROP # 拒绝、丢弃
3.REJECT #拒绝、并返回信息
4.MASQUERADE #地址伪装
5.LOG # 日志
6.MARK #标记

3.3、下载及启动iptables

3.3.1、下载安装

yum install -y iptables-services

Linux自带只有命令,需要下载,要不然只是个空壳

3.3.2、启动

开启iptables之前一定要关闭firewalld!

systemctl start iptables-service #开启
systemctl enable iptables-service #自启

四、iptables模块

4.1、multiport---端口

-m multiport --dport 22:50,8080:9090
# 添加模块可以指定多个规则不规则端口进行匹配

示例:22-50和8080-9090端口可以连接

iptables -t filter -I INPUT -p tcp -m multiport --dpotr 22:50,8080:9090 -j ACCEPT

4.2、iprange--连续IP

-m iprange --src-fange 192.168.207.22-192.168.207.80
# 可以指定连续有规则的IP范围进行匹配

示例:22-80IP可以连接

iptables -t filter -I INPUT -m iprange --src-range 192.168.207.22-192.168.207.80 -j ACCEPT

4.3、icmp---禁Ping

模块 icmp

参数 --icmp-type

echo-request 8 请求
echo-reply 0 回应
-p icmp --icmp-type 8
# 示例:禁止外部Ping本机,本机可以ping外部
iptables -t -filter -I INPUT -p icmp --icmp-type 8 -j DROP

4.4、connlimit---限制链接

模块 connlimit

参数

--connlimit-upto n
现有连接数小于或等于n就会匹配-限制链接
# 匹配到之后就会将已经连接的掉线
--connlimit-abov n
现有连接数大于n就会匹配-限制链接
# 规则设置后,如果新的连接在限制数量之外,则无法连接。如果现有连接已经超过了限制,然后设置了规则,则首先会断掉最后连接的主机,当在限制数量内的主机切换界面也会断掉。
-m --connlimit-abov 3
# 示例: 限制主机连接数量不能超过5个
iptables -t filter -I INPUT -m connlimit --connlimit-abov 5 -j DROP

4.5、limit--速率和并发限制

模块 limit 针对报文速率进行限制

参数 --limit-burst 限制并发,不写默认是5

s / m / h 秒、分、时
-m limit --limit 350/s --limit-burst 20
--limit 指定单位时间内发送多少个包
--limit-burst 10 指定单位时间内并发最大多少,不指定就默认为5

iptables -t filter -I INPUT -p icmp --icmp-type 8 -m limit --limit 350/s --limit-burst 50 -j DROP

设置这个后要看是否默认权限是否是禁止的,要不然就没起到作用

4.6、state--状态模块

模块 state 连接追踪机制

参数

--state : 链接的状态(多个用逗号隔开)
# 四个状态
NEW 表示新连接状态的第一个包状态
ESTABLISHED 表示已经连接过来的状态
RELATED

INVALID 表示不明状态的连接

iptables -t filter -I INPUT -m state --STATENEW,EATABLISHED -j ACCEPT
iptables -t filter -I INPUT -p tcp -j DROP

4.7、time--时间模块

模块 time 默认是时UTC时间

参数

--timestart hh:mm 开始时间
--timestop hh:mm 停止时间
--monthdays day[,day..] 指定一个月的某一天
--weekdays day [,day..] 指定周

iptables -t filter -I INPUT -m time --timestart 08:20 --timestop 10:30 -j DROP

time模块使用时UTC时间,系统使用的时CST时间,相隔8小时,所以需要自己往前推8小时

4.8、string--模块

string模块 #过滤数据包中包含某个字符串
--string pattern #指定要匹配的字符串
--algo {bm|kmp} #匹配的查询算法,两个算法用到再差吧,现在不懂
iptables -I INPUT -p tcp -m string --string "hello" --algo bm -j DORP

五、iptables命令的运用

5.1、基本命令

iptables -nL # 默认查看filter

iptables -nL -t nat #指定查看表

iptables -F #清除防火墙所有规则

iftables -t filter -I INPUT -s 192.168.207.2 -j DROP
# 禁止单个IP访问

iptables -t filter -I INPUT -p tcp --dport 23 -j DROP
# 禁止访问本机的23号端口,必须和-p协议一起使用

iptables -nL --line-numbers #查看所有规则及序号

iptables -D INPUT 2 #删除指定序号的规则,从下往上删除

六、防火墙配置示例

6.1、禁止端口访问

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

--dport 是指禁止访问本地端口
--sport 是指禁止源目标端口

6.2、禁止ip访问

iptables -t filter -I INPUT -s 192.168.207.8 -j DORP

-s 是指禁止源目标地址进行访问

6.3、禁止IP网段访问

iptables -t filter -I INPUT -s 192.168.207.0/24 -j DORP

指定网段需要加上位数

6.4、只允许某个IP访问

iptables -t -filter -I INPUT ! -s 192.168.207.5 -j DORP

或者先添加允许规则,在添加拒绝所有ip的规则。

6.5、IP转发

要实现iptables的NAT功能,我们首先需要启用网卡的IP转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward
#如果要永久生效,我们要编辑 /etc/sysctl.conf 文件,设置net.ipv4.ip_forward = 1 然后使用sysctl -p 命令生效

-SNAT 源地址转换
-DNAT 目的地址转换
-REDIRECT 端口重定向

在192.168.207.195上设置,对192.168.207.195的所有请求转到172.17.0.2并实现逆转

iptables -t nat -A PREROUTING -d 192.168.207.195 -j DNAT --to-destination 172.17.0.2

iptablrs -t nat -A POSTROPUTING -d 172.17.0.2 -j SNAT --to 195.168.207.195

6.6、端口转发

iptables -t nat -I PREROUTING -p tcp --dport 80 REDIRECT --to-port 8080

6.7、禁ping

1.iptables -t filter -I INPUT -p icmp -j DORP
2.iptables -t filter I INPUT -p -icmp-type 8 -j DROP

七、企业一般配置

7.1、配置前考虑一下

1.考虑防火墙开在哪台机器上
2.这台机器部署了哪些服务
3.服务对应的端口和协议
4.配置默认拒绝所有
# 配置好以后,不要随意清空防火墙规则,删除规则也要小心小再小心,因为我们最后一条配置是默认拒绝所有,而清空防火墙规则不会更改这个状态,还是默认拒绝所有,所以完犊子了!!!

7.2、防火墙规则永久生效

配置完防火墙,执行以下操作,将自己配置的规则添加到防火墙的配置文件中

[root@lb01 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

[root@lb01 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Wed Dec 16 15:39:15 2020
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:176]
:POSTROUTING ACCEPT [1:176]
COMMIT
# Completed on Wed Dec 16 15:39:15 2020
# Generated by iptables-save v1.4.21 on Wed Dec 16 15:39:15 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5168]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6379 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -s 10.0.0.1/32 -i eth0 -p tcp -j ACCEPT
-A INPUT -s 10.0.0.0/24 -i eth0 -p tcp -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Wed Dec 16 15:39:15 2020

posted @ 2021-08-25 21:31  郝怕怕  阅读(239)  评论(0)    收藏  举报