netfilter工作在主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则作匹配检测,对于能够被规则所
匹配到的报文做出相应的处理
防火墙的种类:
- 软件防火墙:软件技术实现数据包过滤
- 硬件防火墙:硬件设备,实现数据包过滤
防火墙类型:
- 主机型防火墙:保护自己本机应用程序
- 网络防火墙:保护内部其他服务器应用程序
软件型防火墙:netfilter是Linux内核自带一个模块,网络过滤器
firewall-cmd --get-default-zone查看默认区域 #--get=查看 default=默认 zone=区域
firewall-cmd --set-default-zone=block #设置block #将默认区域修改为block,--set 设置指定区域规则
firewall-cmd --zone=public --add-service=http #为public添加http协议 #临时端口
firewall-cmd --zone=public --list-all#查看public规则
--list-all查看指定区域规则
firewall-cmd --permanent--zone=public --add-service=http #为public添加http协议,永久生效,- permanent #让规则永久生效
firewall-cmd --reload#永久修改需重新加载防火墙配置
--get=查看 default=默认 zone=区域 set设置指定区域规则 -permanent #让规则永久生效
firewall-cmd --zone=block --add-source=192.168.163.20 #--在block添加禁用规则
--add=添加 #单独拒绝某一个IP
firewall-cmd --zone=block --remove-source=192.168.163.20 #在block解除禁用规则
--remove-source#删除block区域的指定IP
防火墙端口映射
firewall-cmd --zone=public --add-forward-port=port=5432:proto=tcp:toport=80
测试http经过firewall-cmd规则能否正常访问
yum install -y httpd server#安装httpd服务
/var/www/html/index.html#网页路径
systemctl start httpd vsftpd #启动
- CentOS7系统:默认使用的防火墙管理工具firewalld
- CentOS6系统:默认使用的防火墙管理工具iptables
firewall-cmd命令
- 管理工具:firewalld-cmd
- 防火墙预设安全区域
- public:仅允许访问本机的sshd、DHCP、ping等少量服务
- trusted:允许任何访问
- block:拒绝任何来访请求,有明确回应
- drop:丢弃任何来访的数据包,没有任何回应
1.drop:xshell退出的时候,再发出请求就会被拒绝
2.添加选项的时候get+default+zone=查看默认区域
3.--zone=public --list-all
4.两者的区别是一个是先查看,因为他的区域是当前默认的,所以不需要指定
5.后者需要先指定区域,再去添加选项--list-all查看
开启防火墙禁用后,需要给指定的区域添加规则再次进行访问
IPtables防火墙
iptables框架
iptables的4表
filter:是iptables的默认表,用于对数据包进行过滤
包含三个链:INPUT,OUTPUT,FORWARD
nat:地址转换表,不能过滤数据包,用于修改数据包中的源IP与目的IP和端口映射
包含三个链:PREROUTING,POSTROUTING,OUTPUT
mangle:包标记表, 主要功能是修改数据包的一些标志位,以便对数据包进行策略路由
包含五个链:PREROUTING,FORWARD,POSTROUTING,INPUT,OUTPUTr决定是否跟踪数据包
raw:状态跟踪表,用于跟踪数据包
包含两个链:OUTPUT,PREROUTING
iptables的5链
PREROUTING链:用于处理刚到达本机并在路由转发前的数据包,它会转换数据包中的目标IP地址,通常用于DNAT(destination NAT)目标地址转换
POSTROUTING链:用于处理即将离开本机的数据包,它会转换数据包中的源IP地址,通常用于SNAT(source ipaddress)源地址转换
FORWARD链:用于将数据包转发到本机的另外一个网络所需要的链
INPUT链:入站规则,限制客户端数据包目地地址是防火墙主机的上层应用所需要的链
OUTPUT链:出站规则,限制防火墙主机上层应用产生的数据包是否可以出站需要的链
通用匹配 | iptables 防火墙规则的条件 |
协议匹配 | -p #协议名称;如tcp/ip协议等 |
地址匹配 | -s 源地址是目标地址、-d 目标地址是本机 如192.168等 |
接口匹配 | -i 接受数据的网卡、-o发送数据的网卡 网卡名字 |
端口匹配 | --sport 源端口号是目标端口、dport 目标端口号是本机 |
-t 指定表名,4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。
iptables命令格式 | |
命令格式 | iptables -t表名 选项 链名 条件 -j目标操作 |
添加规则 | |
-A | 追加一条防火墙规则至链的末尾 |
-I | 插入一条防火墙规则至链的开头 |
-L | #查看iptables所有规则,与-n连用 |
-n | #以数字形式显示地址、端口等信息,与-L连用 --line-numbers #查看规则时,显示规则的行号 |
--line-numbers | #查看规则时,显示规则的行号 |
目标操作 | |
ACCEPT | 允许通过;放行 |
DROP | 直接丢弃,不给出任何回应 |
REJECT | 拒绝通过,有明确回应 |
LOG | 记录日志,然后传给下一条日志 |
删除规则 | |
-D | 删除链内指定的序号(或内容)的一条规则 |
-F | 清空指定表的所有规则 |
[root@localhost ~]# iptables -D FORWARD 1
iptables防火墙规则的条件
- 通用匹配:
- 协议匹配:-p #协议名称
- 地址匹配:-s 源地址、-d 目标地址
- 接口匹配:-i 接受数据的网卡、-o 发送数据的网卡
- 端口匹配:--sport 源端口号、--dport 目标端口号
yum -y install iptables-services #安装iptables
iptables -nL --line-numbers#-查看规则
iptables -IINPUT -pall -jACCEPT # 设置INPUT的规则-p ACCEPT允许通过;放行
iptables -IINPUT -s192.168.163.20 -d192.168.163.30 -jREJECT # 指定IP拒绝访问
iptables -IINPUT -s192.168.163.20 -ptcp --dport80-jREJECT #指定IP拒绝访问某个端口
iptables -IINPUT -ptcp --dport80-jACCEPT#放行80端口
target =目标操作 prot=条件 source=源IP destination=目标IP
iptables -t表名 选项 链名 条件 -j目标操作 不指定表,默认是filter
![](https://img-blog.csdnimg.cn/7d6f4920eef34b2b883b4bb7c38c4fbf.png)
1.客户端通过网络型防火墙去访问网站,通过防火墙的公网网卡,然后再由防火墙的内网网卡把请求转到网站的内网网卡,网站接收到请求后,发送数据给防火墙的内网网卡,防火墙内网网卡再转给防火墙公网网卡,最后再由防火墙公网网卡把数据发送给客户端
2.要注意的是本地网卡要做好配置,然后虚拟网络编辑器一个是NAT一个是仅主机
这里实验用到的是三台虚拟机
Host20 、iptables10、 web60
3.这里host公网IP是192.168.163.20 iptables的公网IP是192.168.163.10 内网IP是192.168.165.40、web内网IP是192.168.165.60
iptables节点配置
#开启路由转发功能
[root@iptables ~]# echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
[root@iptabels ~]# sysctl -p //加载配置立即生效
net.ipv4.ip_forward = 1
#查看路由转发
[root@iptables ~]# cat /proc/sys/net/ipv4/ip_forward
1
Web节点
#安装httpd服务
[root@web26 ~]# yum -y install httpd
#修改默认首页
[root@web26 ~]# echo web26 > /var/www/html/index.html
[root@web26 ~]# systemctl start httpd
[root@web26 ~]# systemctl status httpd
要注意的是关掉防火墙,因为这里用的是iptables来测试
host节点测试:192.168.163.20
访问测试:curl http://192.168.165.60
iptables节点配置
[root@iptables ~]# iptables -I FORWARD -s 192.168.163.20 -p tcp --dport 80 -j DROP
#拒绝所有客户端地址访问内网80端口
[root@iptables ~]# iptables -t filter -I FORWARD -p tcp --dport 80 -j REJECT
[root@iptables ~]# iptables -F
ok,到这里就结束了,有其他问题可以自行查找资料继续去补充,也可以在下方留言