1、IPtables的使用
1、安装iptables
yum install iptables* -y
2、启动iptables
systemctl start iptables
3、关闭firewalld
systemctl disable --now firewalld
补充:查看当前服务运行的状态(例:防火墙,网络管理等)
systemctl status firewalld
iptables语法格式:
iptables -t 表名 选项 链名称 条件 动作
参数介绍:
1.基本参数:
-t: 指定操作的表(后跟表名)
-L / --list: 列出当前防火墙的相关规则
-v: 列出数据包和数据包的大小
-n: 不反解地址 # 例:0.0.0.0表示任意ip地址,可反解为anywhere
# 查看当前防火墙的相关规则
iptables -L -V -n
2.选项:选项后跟链名
-A / --append 追加一条规则到链中(尾部)
-I / --insert 插入一条规则到链中,插入至顶部
-F / --flush 清空链中的规则
-Z / --zero 清空计数器(包数量、包大小)
-D / --delete 删除链中的规则
-R / --replace 修改
-S / --list-rules 列出所有的规则
-N / --new-chain 创建一个自定义链
-X / --delete-chain 删除一个自定义链
-P / --policy 指定链的默认策略
2、iptables基本的条件匹配
条件后跟相应的协议
参数:-p
TCP(HTTP)
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协 议,也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要 经过三次“对话”才能建立起来,其中的过程非常复杂, 只简单的描述下这三次对 话的简单过程:
1)主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是 第一次对话;
2)主机B向主机A发送同意连接和要求同步 (同步就是两台主机一个在发 送,一个在接收,协调工作)的数据包 :“可以,你什么时候发?”,这是第二次 对话;
3)主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着 吧!”, 这是第三次对话。
UDP
UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传 送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。 在发 送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、 计算机的能力和传 输带宽的限制; 在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中 读一个消息段
ICMP(PING)
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常, 其 实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据 包, 如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
ping命令是用来探测主机到主机之间是否可通信,如果不能ping到某台主 机,表明不能和这台主机建立连接。ping命令是使用 IP 和网络控制信息协议 (ICMP),因而没有涉及到任何传输协议(UDP/TCP) 和应用程序。它发送icmp回送 请求消息给目的主机
ALL(所有)
3、iptables的相关动作
接收动作的参数:
-i :进来的网卡 (一般是网卡名,eth0/eth1)
-o : 出去的网卡 (一般是网卡名,eth0/eth1)
-m : 指定的模块 (可以借用模块从而实现我们的需求,大大减少工作量)
-p :指定协议 (接收匹配的相关条件协议)
-j : 转发动作
# 相关转发动作
ACCEPT 数据包放行,进行完该动作以后,将不再比对其他规则, 直接跳到下一个规则
REJECT 阻拦数据包,并将数据包传给对方并通知对方
DROP 丢弃包不予处理(可以理解为拒绝访问),进行完该处理 动作后,将不再比对其他规则,直接终端过滤程序
REDIRECT 将包重新导向到另外一个端口,进行完该处理动作后,将 会继续比对其他规则
4、源地址、源端口、目标地址、目标端口
# 在进行网络传输的时候,涉及到两个对象,发送请求的一方,和接收请求的一方。
源地址:发送请求的地址/一方(一般遇到允许xxx访问,一般是对源地址进行限制)
参数:-s [源地址] # 和匹配条件相关协议连用
# 端口:可以认为是设备与外界通讯交流的出口
源端口:发送请求的一方的端口号
参数:--sport [源端口号] # 和源地址连用
目标地址:接收请求的地址/一方(一般遇到访问xxx或者使用xxx访问时,一般是对目标 地址进行限制)
参数:-d [目标地址] # 和匹配条件相关协议连用
目标端口:接收请求的一方的端口号
参数:--dport [目标端口号] # 和目标地址连用
5、模块
在iptables网路传输里也存在有模块的概念
作用:扩展iptables的功能
模块:具有一系列功能的集合体
如何导入模块:-m [模块名]
1、multiport模块:连续匹配多个端口号
--sport / --dport :指定多个端口,不同端口之间用逗号隔开,连续端口使用冒号分割
2、iprange模块:指定一段连续的ip地址范围
--src-range from [-to] :源地址范围
--dst-range from [-to] :目标地址范围
3、string模块: 匹配指定字符串
--string pattern # 指定要匹配的字符串
--algo {bm|kmp} # 匹配的查询算法
4、time模块: 根据时间匹配报文
--timestart hh:mm[:ss] # 开始时间
--timestop hh:mm[ss:] # 结束时间
--monthdays day[,day...] # 指定一个月的某一天
--weekdays day[,day...] # 指定周还是周天
5、禁ping,默认本机无法ping别人、别人无法ping自己
--icmp-type {type[/code]|typename}
echo-request (8)请求
echo-reply (0)回应
6、connlimit模块:限制连接数,并发链接数
--connlimit-upto n # 如果现有链接数小于或等于n则匹配
--connlimit-above n # 如果现有链接数大于n则匹配
7、针对报文速率进行限制。 秒、分钟、小时、天
--limit rate [/second/minute|/hour|day] # 报文数量
即我们平时在基于网络传输文件时的传输速度:例:100kb/s
--limit-burst number # 报文数量(默认:5)