美食网站php源码,免费建网站最新视频教程,foxplayer wordpress,湘潭seo 推广快湘潭磐石网络华子目录 什么是防火墙分类netfilter#xff08;数据包过滤#xff09;定义netfilter分析内容 防火墙无法完成的任务netfilter策略管理工具netfilter的5类hook函数防火墙规则策略匹配原则iptablesiptables流量处理动作iptables表5种规则表 安装iptablesiptables策略文件 ipta… 华子目录 什么是防火墙分类netfilter数据包过滤定义netfilter分析内容 防火墙无法完成的任务netfilter策略管理工具netfilter的5类hook函数防火墙规则策略匹配原则iptablesiptables流量处理动作iptables表5种规则表 安装iptablesiptables策略文件 iptables命令的语法格式以及常用参数格式参数示例查看策略iptables -nL --line清空规则修改策略修改默认策略添加链修改链名删除链部署nginx拒绝访问80端口拒绝来源为172.25.254.100访问80端口只能让来源为172.25.254.100访问80端口iptables的状态跟踪(只能访问22和80端口)利用iptables搭建Linux路由器 什么是防火墙
防火墙时位于内部网和外部网之间的屏障它按照系统管理员预先定义好的规则来控制数据包的进出 火墙是系统内核上的一个模块netfilter数据包过滤机制通过netfilter来管理kernel space内核空间的策略 没有火墙时流量直接访问内核管理的服务有火墙时会在内核上开一个内核空间记录了什么流量可以通过什么流量不可以通过。负责往内核空间里面写东西的是netfilter一个linux内核上有2个网卡只有开启内核路由转发功能2个网卡才能通信 #临时开启内核路由转发
[rootserver1 ~]# echo 1 /proc/sys/net/ipv4/ip_forward分类
硬件防火墙由厂商设计好的主机硬件其操作系统主要以提供数据包数据的过滤机制为主并去掉不必要的功能软件防火墙保护系统网络安全的一套软件
netfilter数据包过滤
定义
netfilter是一个工作在Linux内核的网络数据包处理框架用于分析进入主机的网络数据包将数据包的头部数据硬件地址软件地址TCPUDPICMP等提取出来进行分析来决定该连接为放行还是抵挡netfilter分析OSI七层协议的234层
netfilter分析内容
拒绝让Internet的数据包进入主机的某些端口拒绝某些来源IP的数据包进入拒绝让带有某些特殊标志flag的数据包进入如带有SYN的主动连接标志分析硬件地址MAC地址决定是否连接可以做nat地址转换
防火墙无法完成的任务
防火墙并不能杀毒或清除木马程序假设主机开放了www服务那么防火墙的设置一定是要将www服务的port开放给client端。假设www服务器有漏洞或者请求www服务的数据包本身就是病毒的一部分时防火墙时阻止不了的防火墙无法阻止来自内部的攻击防火墙对于内部的规则设置通常比较少所以就很容易造成内部员工对于网络滥用的情况
netfilter策略管理工具
netfilter这个内核网络栈过滤框架的使用需要通过iptables或nftables来进行
与netfilter进行交互工具常用种类
iptables服务使用iptables交互rhel6之前系统默认使用此服务管理手段丰富配置比较复杂firewalld服务使用nftables交互rhel6之后的版本默认使用此服务配置类似windows火墙功能模块度高使用简单 iptables与firewalld都不是真正的防火墙它们都只是用来定义防火墙策略的管理工具即只是一种服务而真正使用规则干活的是内核的netfilter
netfilter的5类hook函数
hook函数也叫规则链 电脑是客户端 input链位于流量经过路由之后并且目的ip是本机ipoutput链由本机发出的流量并且在路由之前forward链位于在流量路由之后目的ip不是本机ipprerouting链位于路由之前流量一致性检查之后postrouting链所有即将离开本机的流量 防火墙规则
通放行堵阻止拒绝 拒绝返回信息后拒绝阻止直接丢包
策略匹配原则
防火墙会从上至下的顺序来读取配置的策略在找到匹配项后就立即结束配置工作并去执行匹配项中定义的行为即放行或阻止如果在读取完所有的策略后没有匹配项就去执行默认的策略
iptables
iptables会从上至下的顺序来读取配置的策略在找到匹配项后就立即结束配置工作并去执行匹配项中定义的行为即放行或阻止如果在读取完所有的策略后没有匹配项就去执行默认的策略iptables的规则默认保存在内存中如果需要永久保存需要把策略保存到/etc/sysconfig/iptables中
#永久保存
[rootserver1 ~]# service iptables saveiptables流量处理动作
当规则链匹配后应采用以下几种动作来处理匹配的流量
accept允许流量通过reject拒绝流量通过拒绝后回复拒绝信息log记录日志信息drop拒绝流量通过流量丢弃不回复
iptables表 表中可以有多种hook函数每个规则链中里可以有多个策略 5种规则表
raw表第一优先级的表不会对数据包进行跟踪和nat转换使用outputprerouting对应的动作为notrackmangle表第二优先级的表主要用于修改数据包的TOS(Type Of Service服务类型)、TTL(Time To Live生存周期)值以及为数据包设置Mark标记以实现Qos以及策略路由等 由于需要相应的路由设备支持因此应用并不广泛包含全部5个规则链 nat表第三优先级的表网络地址转换表用于修改源和目的地址分snat源地址转换和dnat目的地址转换。包含三个规则链outputpreroutingpostrouting和内核无关的数据包主要做地址转换filter表第四优先级的表用于对数据包过滤外网进入内网时根据具体的规则决定是否放行该数据包如dropacceptreject包含三个规则链inputforwardforward经过内核处理过的所有网络包inputoutputforward 所谓的防火墙其实基本上是指这张表上的过滤规则常用 security表最不常用的表 通常我们说的iptables只有4张表security表是新加入的特性用于在数据包上应用selinux
安装iptables
RHEL9Centos7中默认使用的是firewalld且与iptables之间有冲突如果需要使用iptables需要先停止firewalld再进行安装
[rootserver1 ~]# systemctl stop firewalld[rootserver1 ~]# systemctl disable firewalld#锁服务解锁服务使用unmask
[rootserver1 ~]# systemctl mask firewalld.service[rootserver1 ~]# yum install iptables-services -y[rootserver1 ~]# systemctl enable --now iptables[rootserver1 ~]# systemctl is-active iptables
activeiptables策略文件
规则链存储文件在/etc/sysconfig/iptables
前三行为注释显示的是filter表的规则链
[rootserver1 ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-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 -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMITiptables命令的语法格式以及常用参数
永久保存策略
[rootserver1 ~]# service iptables save #保存设置的规则
# 注意保存设置的规则否则重启后会恢复默认设置格式
[rootserver1 ~]# iptables -t 表名 -A/I/D/R 规则链名 [规则号] -i/o 网卡名 -p 协议名 -s 源IP/源子网 --sport 源端口 -d 目标IP/目标子网 --dport 目标端口 -j 控制动作#-A添加策略
#-I在指定位置添加策略
#-D删除策略
#-R修改策略
#-j控制动作参数
参数作用-t对指定的表进行操作表必须是rawnatfiltermanglesecurity中的一个默认是filter-p指定要匹配的数据包协议类型-s匹配源地址ip/mask当后面没有mask源ip是一个地址比如192.168.1.1当有mask时表示一个网段比如192.168.1.0/24-d匹配目的地址ip/mask-i 网卡名匹配从这块网卡流入的数据只对inputforwardprerouting链起作用。如果没有指定此选项则表示可以流入任何一个网卡-o 网卡名匹配从这块网卡流出的数据只对nat表中的链起作用。如果没有指定此选项则表示可以从任何一个网卡流出-L列出规则链chain上的所有规则如果没有指定链列出表上所有链的所有规则-A在指定规则链的末尾加入新策略-I num在指定规则链的指定位置插入策略如果num为1表示在头部插入num为2表示在第二条策略位置处插入-D num删除指定位置的策略-R num替换/修改第几条策略-P设置指定链的默认策略只有内置的链才可以设置用户自定义的链不允许设置-F清空所有策略-N创建新链-X删除指定的链这个链必须没有被其它任何策略引用而且这条链上必须没有任何策略。如果没有指定链名则会删除该表中所有非内置的链-E修改链名-Z把指定链或者表中的所有链上的所有计数器清零-j满足某条件时该执行什么样的动作-h显示帮助信息
示例
查看策略iptables -nL --line
[rootserver1 ~]# iptables -t filter -nL --line# -n显示源# -L写在最后列出所有规则# --line增加行号[rootserver ~]# iptables -nvxL --line
# 参数释义# -n显示源# -v详细信息# -x单位自动转换为KB\MB# -L写在最后列出所有规则# --line增加行号[rootserver ~]# iptables -nvxL --line
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source
destination
1 159 24271 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT 1 -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT 0 -- lo * 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT 6 -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 19 1843 REJECT 0 -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source
destination
1 0 0 REJECT 0 -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitedChain OUTPUT (policy ACCEPT 143 packets, 12422 bytes)
num pkts bytes target prot opt in out source
destination# 显示释义# num规则的行号# pkts数据包数量# bytes数据包字节数# target动作放行、拒绝# port端口# in入站网卡# out出站网卡清空规则
# 清空内存中的规则清空所有表的所有链
[rootserver ~]# iptables -F 修改策略
-R修改策略
[rootserver1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- !172.25.254.100 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable[rootserver1 ~]# iptables -R INPUT 1 -p tcp -s 172.25.254.100 --dport 80 -j REJECT[rootserver1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 172.25.254.100 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable修改默认策略
-P修改默认策略
[rootserver1 ~]# iptables -nL[rootserver1 ~]# iptables -P FORWARD DROP[rootserver1 ~]# iptables -nL添加链
-N添加链
[rootserver1 ~]# iptables -N huazi[rootserver1 ~]# iptables -nL修改链名
-E修改链名
[rootserver1 ~]# iptables -E huazi HUAZI[rootserver1 ~]# iptables -nL删除链
-X删除链
[rootserver1 ~]# iptables -X HUAZI[rootserver1 ~]# iptables -nL部署nginx拒绝访问80端口
[rootserver1 ~]# yum install nginx -y#先清空策略
[rootserver1 ~]# iptables -F#添加策略
[rootserver1 ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT[rootserver1 ~]# iptables -nL[rootserver1 ~]# echo hello world /usr/share/nginx/html/index.html[rootserver1 ~]# systemctl enable --now nginx[rootserver1 ~]# curl 172.25.254.100
curl: (7) Failed to connect to 172.25.254.100 port 80: 拒绝连接#删除策略后
[rootserver1 ~]# iptables -D INPUT 1[rootserver1 ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destinationChain FORWARD (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destination[rootserver1 ~]# curl 172.25.254.100
hello world拒绝来源为172.25.254.100访问80端口
#先清空
[rootserver1 ~]# iptables -F[rootserver1 ~]# iptables -A INPUT -p tcp -s 172.25.254.100 --dport 80 -j REJECT[rootserver1 ~]# iptables -nL[rootserver1 ~]# curl 172.25.254.100
curl: (7) Failed to connect to 172.25.254.100 port 80: 拒绝连接#删除策略
[rootserver1 ~]# iptables -D INPUT 1[rootserver1 ~]# curl 172.25.254.100
hello world只能让来源为172.25.254.100访问80端口
!取反
[rootserver1 ~]# iptables -F[rootserver1 ~]# iptables -A INPUT -p tcp ! -s 172.25.254.100 --dport 80 -j REJECT[rootserver1 ~]# iptables -nL[rootserver1 ~]# curl 172.25.254.100
hello world#删除
[rootserver1 ~]# iptables -D INPUT 1[rootserver1 ~]# curl 172.25.254.100
hello worldiptables的状态跟踪(只能访问22和80端口)
在没有状态跟踪之前
[rootserver1 ~]# iptables -F
[rootserver1 ~]# iptables -A INPUT -i lo -j ACCEPT
[rootserver1 ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[rootserver1 ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
[rootserver1 ~]# iptables -A INPUT -j REJECT[rootserver1 ~]# iptables -F但是这样写会消耗大量的cpu等资源我们应该对流量进行状态跟踪只对第一次访问的流量做检测 [rootserver1 ~]# iptables -F[rootserver1 ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[rootserver1 ~]# iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
[rootserver1 ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
[rootserver1 ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
[rootserver1 ~]# iptables -A INPUT -j REJECT[rootserver1 ~]# iptables -nL利用iptables搭建Linux路由器
准备2台主机
一台server1一个nat网卡一个仅主机网卡一台server2一个仅主机网卡 server1充当server2的路由器 server1ip配置 [rootserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
ideth0
uuid3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
typeethernet
interface-nameeth0[ethernet][ipv4]
address172.25.254.100/24,172.25.254.2
dns114.114.114.114;
methodmanual[ipv6]
addr-gen-modedefault
methodauto[proxy][rootserver1 ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
ideth1
typeethernet
interface-nameeth1[ethernet][ipv4]
address192.168.0.100/24
methodmanual[ipv6]
addr-gen-modedefault
methodauto[proxy][rootserver1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.25.254.2 0.0.0.0 UG 100 0 0 eth0
172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 101 0 0 eth1server2ip配置
[rootserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
ideth0
uuid3fe4f788-e5f3-4046-8a3e-6cdfb8098aab
typeethernet
interface-nameeth0[ethernet][ipv4]
address192.168.0.200/24,192.168.0.100
dns114.114.114.114;
methodmanual[ipv6]
addr-gen-modedefault
methodauto[proxy][rootserver2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0server1开启内核路由功能
#临时开启
[rootserver1 ~]# echo 1 /proc/sys/net/ipv4/ip_forward内网访问外网
[rootserver1 ~]# iptables -F
[rootserver1 ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100[rootserver1 ~]# iptables -t nat -nL#这时server2就可以上网了
[rootserver2 ~]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) 比特的数据。
64 比特来自 110.242.68.4 (110.242.68.4): icmp_seq1 ttl127 时间106 毫秒
64 比特来自 110.242.68.4 (110.242.68.4): icmp_seq2 ttl127 时间35.3 毫秒
64 比特来自 110.242.68.4 (110.242.68.4): icmp_seq3 ttl127 时间70.6 毫秒外网访问内网
[rootserver1 ~]# iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-dest 192.168.0.200[rootserver1 ~]# iptables -t nat -nL