简介:
什么是防火墙:
其实就是一个软件/硬件,在软件/硬件中提前定义一套规则,来判断数据包是否为合法数据包,如果是合法数据包,则允许数据包通过,如果是非法数据包,则禁止通行
防火墙分为两类:
- 网络防火墙:一般都是用硬件防火墙来实现的,工作在网络的边缘,它的作用是用来保护内部的主机
- 主机防火墙:一般都是用软件防火墙来实现的,保护对象一般是当前安装了防火墙的主机
iptables基础理论
iptables是通过定义规则来判断收到的数据包是否合法,从而判断能否通过防火墙
iptables结构
四表:
filter表
作用:用于过滤数据包(禁止/允许通行),让合法的包通过,让非法的包禁止通过
链:INPUT
OUTPUT
FORWARD
nat表
作用:不能过滤数据包,但可以修改数据包的端口、ip
链:PREROUTING
POSTROUTING
OUTPUT
mangle表
作用:不能过滤数据包,但可以修改数据包的tos、ttl
链:INPUT
OUTPUT
FORWARD
POSTROUTING
PREROUTING
raw表
作用:可以设置对某些数据包不进行处理,这样做的好处是可以提高防火墙的工作效率
链:OUTPUT
POSTROUTING
五链
INPUT:保存的是,处理进入本机的数据包,所要检查的规则
OUTPUT:保存的是,从本机向外发送的数据包,所要检查的规则
FORWARD:保存的是,需要从本机进行转发的数据包,所要检查的规则
PREROUTING:保存的是,在判断数据包目标之前,所要检查的规则
POSTROUTING:保存的是,在判断数据包目标之后,所要检查的规则
iptables应用:
这里以centos7系统为例,centos7 的默认防火墙是 firewalld,要想使用 iptables,需要先关闭 firewalld
相关命令:
systemctl disable firewalld #永久关闭firewalld防火墙(下次开机不自启)
systemctl stop firewalld #关闭firewalld防火墙(下次开机自启动)
systemctl status firewalld #查看firewalld防火墙状态
出现 disabled 表示下次开机时,防火墙不会开机自启
出现 inactive(dead) 表示防火墙以关闭
安装iptables组件
centos7 中想要使用 iptables,需先安装组件 iptables-services,组件的作用是实现iptables的管理操作,如启动、关闭、重启等操作
注:安装组件之前需要先配置好yum源
安装的命令:yum install iptables-services -y
安装完成之后启动iptables防火墙
相关命令:
systemctl start iptables #启动iptables防火墙
systemctl stop iptables #关闭iptables防火墙
systemctl restart iptables #重启iptables防火墙
systemctl enable iptables #永久开启iptables防火墙
systemctl disable iptables #永久关闭iptables防火墙
systemctl status iptables #查看iptables防火墙状态
enabled表示开机自启动
active(exited)表示已经开启
基础语法
查看规则:
iptables -L -n --line -t 表名
清空规则
iptables -F -t 表名
添加规则
iptables -t 表名 -A 链名 规则内容 -j 执行的操作 (-A是在最后添加规则)
iptables -t 表名 -I 数字 链名 规则内容 -j 执行的动作 (-I是在指定位置添加规则)
删除规则
iptables -t 表名 -D 链名 规则编号
修改链的默认规则
iptables -t 表名 链名 -P 执行的动作
保存规则(默认是在内存中,如不保存,重启后,所有配置还原)
service iptables save
执行的动作:
ACCEPT:表示匹配到规则的数据包可以通行
DROP:表示匹配规则的数据包禁止通行,而且不会通知客户端
REJECT:表示匹配规则的数据包禁止通行,而且会通知客户端
DNAT:表示用nat来修改数据包中的目的地址信息
SNAT:表示用nat来修改数据包中的源地址信息
LOG:表示记录匹配到规则的数据包
操作方法:
-A 链名:在链中,追加新规则
-I 链名:在链中指定位置插入新的规则
-D 链名 编号:在链中,删除指定编号的规则
-R 链名 编号:在链中,修改指定编号的规则
-P 链名 编号:修改默认规则
-j:执行的动作
-t 表名:指定查看那个表中的规则(默认是filter)
-L :显示所有规则
-line:显示行号
-n:显示规则内容时,以数字方式显示(不用数字,显示速度慢)
-v:显示这个规则的详细信息
-vv:显示更详细信息
-vvv:显示更更详细信息
-F:清楚规则
基于地址写规则
-s:匹配数据包中的源ip
-d:匹配数据包中目的ip
-i:匹配数据包从那个网卡进入
-o:匹配数据包从那个网卡发出
案例:
禁止让x.x.x.x访问主机
ipconfig -t filter -A INPUT -s x.x.x.x -j DROP
允许x.x.x.x访问主机
ipconfig -t filter -A INPUT -s x.x.x.x -j ACCEPT
禁止主机访问x.x.x.x
ipconfig -t filter -A INPUT -d x.x.x.x -j DROP
允许主机访问x.x.x.x
ipconfig -t filter -A INPUT -d x.x.x.x -j ACCEPT
禁止所有通过【网卡名】来访问的数据包
ipconfig -t filter -A INPUT -i 网卡名 -j DROP
禁止所有通过【网卡名】来访问的数据包
ipconfig -t filter -A INPUT -i 网卡名 -j ACCEPT
基于端口写规则
其实就是匹配协议和端口、数据包的状态
匹配协议和端口:
匹配TCP协议:-p tcp --sport 源端口 --dport 目的端口
匹配UDP协议:-p udp --sport 源端口 --dport 目的端口
禁止x.x.x.x访问【端口】
iptables -t filter -A INPUT -s x.x.x.x -p tcp --dport 【端口】 -j DROP
允许x.x.x.x访问【端口】
iptables -t filter -A INPUT -s x.x.x.x -p tcp --dport 【端口】 -j ACCEPT
禁止ping主机
iptables -t filter -A INPUT -p icmp -j DROP
默认规则
当所有的规则都无效时,就会检查默认规则
规则顺序
进入到主机中的数据包,都会从上而下,依次来匹配规则,一旦匹配到某一条规则,则不在向下检查