本文主要是介绍iptables防火墙,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本章结构
Linux防火墙基础
编写防火墙规则
- 基本语法、控制类型
- 添加、查看、删除规则
- 规则的匹配条件
Linux包过滤防火墙概述
netfilter
- 位于Linux内核中的包过滤功能体系
- 称为Linux防火墙的“内核态”
iptables
- 位于/sbin/iptables,用来管理防火墙规则的工具
- 称为Linux防火墙的“用户态”
- 位于最底层,也属于用户态
注: 以上2中称呼都可以表示Linux防火墙
包过滤的工作层次
- 主要是网络层,针对IP数据包
- 体现在对包内的IP地址、端口等信息的处理上
iptables的表、链结构
规则表
- 表的作用:容纳各种规则链
- 表的划分依据:防火墙规则的作用相似
默认包括4个规则表
- raw表:确定是否对该数据包进行状态跟踪
- mangle表:为数据包设置标记
- nat表:修改数据包中的源、目标IP地址或端口
- filter表:确定是否放行该数据包(过滤)
规则链
- 规则的作用:对数据包进行过滤或处理
- 链的作用:容纳各种防火墙规则
- 链的分类依据:处理数据包的不同时机
默认包括5中规则链
- INPUT:处理入站数据包
- OUTPUT:处理出站数据包
- FORWARD:处理转发数据包
- POSTROUTING链:在进行路由选择后处理数据包
- PREROUTING链:在进行路由选择前处理数据包
默认的表、链结构示意图
其中nat 表还包括 input链 ,功能的转换
- raw表:关闭nat表上启用的连接追踪机制;iptable_raw
- mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
- nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
- filter表:负责过滤功能,防火墙;内核模块:iptables_filter
数据包过滤的匹配流程
- 规则表之间的顺序
raw——mangle——nat——filiter - 规则链之间的顺序
入站:PREROUTING→INPUT
出站:OUTPUT>POSTROUTING
转发:PREROUTING→FORWARD→POSTROUTING - 规则链内的匹配顺序
按顺序一次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理
数据包过滤的匹配流程示意图
iptable安装
- 关闭firewalld防火墙
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
centos7 默认使用firewalld防火墙,若想要使用iptables防火墙,必须线关闭firewalld防火墙 - 安装iptables防火墙
[root@localhost~]#yum -y install iptables iptables-services - 设置iptables开机启动
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl enable iptables.service
iptables的基本语法
- 语法构成
iptables [-t表名] 选择 [链名] [条件] [-j控制类型]
[root@localhost ~]# iptables -t filter -l INPUT -p icmp -j REJECT
注:阻止ping测试
iptables -l 新增
iptables -p 指定协议 - 注意事项
不指定表名时,默认指filiter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写 - 数据包的常见控制类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配
注:Log:只记录日志不处理
常用
- 控制选项(需要大写)
ACCEPT:允许数据包通过
REJECT:拒绝数据包通过,必要时会给数据包发送一个响应信息
DROP:直接丢弃数据包,不给任何回应
LOG:在/var/log/message文件中记录日志信息,然后将数据包给下一条规则,它本身不处理数据包
例:
[root@localhost~]# iptables -t filter -L iptables -L 查看filter表里面的规则
[root@localhost~]# iptables -t net -L 查看net表里面的规则
[root@localhost~]# iptables -t filter -S 查看filter表所有规则
[root@localhost~]# iptables -t filter -S INPUT 查看INPUT链的规则
[root@localhost~]# iptables -t filter -S INPUT 4 查看INPUT链的第四个规则
[root@localhost~]# iptables -t filter -L --line-number 查看filter表的规则编号
[root@localhost~]# iptables -t filter -L -N 以数字显示
[root@localhost~]# iptables -vnL 以数字显示并显示详情
[root@localhost~]# iptables -t filter -F 清空
[root@localhost~]# iptables -t filter -X 清除自定义的链
[root@localhost~]# iptables -t filter -Z -Z清空链的计数器
[root@localhost~]# iptables -t filter -A INPUT -j REJECT 拒绝入站的所有数据包
[root@localhost~]# iptables -I INPUT -j ACCEPT 在表的最前面增加一条允许规则
[root@localhost~]# iptables -D INPUT -j REJECT 删除INPUT链中拒绝的规则
[root@localhost~]# iptables -D INPUT 1 指定标号删除
[root@localhost~]# iptables -A OUTPUT -j REJECT 拒绝出站
[root@localhost~]# iptables -P INPUT DROP 默认规则拒绝
[root@localhost~]# iptables -P INPUT ACCEPT 默认拒绝接受
[root@localhost~]# iptables -R INPUT 1 -j DROP 修改第一条 //修改的时候必须把编号加上
[root@localhost~]# iptables -A INPUT -s 192.168.80.1 -p tcp --dport 80 -j DROP 禁止访问80端口 //定义端口的时候必须指定协议
[root@localhost~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[root@localhost~]# iptables -A INPUT -p tcp -m multiport --dport 80,22,23 -s 192.168.80.1 -j DROP 多端口
[root@localhost~]# iptables -A INPUT -p tcp -m multiport --dport 20:80 -s 192.168.80.1 -j DROP 指定端口范围
[root@localhost~]# iptables -A INPUT -p icmp -m mac --mac-source 00:0c:29:b3:61:84 -j DROP 指定MAC地址
[root@localhost~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 已建立连接和以前建立过连接
[root@localhost~]# iptables-save > /etc/sysconfig/iptables 保存到配置文件
这篇关于iptables防火墙的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!