版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_41729148/article/details/89323021
防火墙讲解
centos7默认使用的防火墙是firewalld,但是同样也是支持iptables,在当今许多的企业中
使用的最多的是还是centos6的系统,所以为了能更好的服务于这些使用centos6的公司
我们首先学习的是iptables。最后学习firewalld。
iptables
netfilter/iptables:IP信息包过滤系统,由2个组件构成,分别是:netfilter和iptables。
netfilter:称之为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表用来控制信息包过滤处理的规则集。
iptables:是一种工具,为了更好的操作信息包过滤表中的规则。
netfilter/iptables简称iptables
特点:
因为iptables是基于内核的防火墙,内置3表5链,所以所有的规则一旦经过配置后,就会生效,不需要重启启动服务。
3表5链(最后一表了解即可)
3表
表名 | 说明 | 包括的规则链 |
---|---|---|
filter | 过滤数据包 | INPUT,OUTPUT,FORWARD |
nat | 网络地址转换 | PEROUTING,POSTROUTING,OUTPUT |
mangle | 修改数据包内容 | 所有链 |
Raw | 处理异常 | PREROUTING,OUTPUT |
5链
规则链名字 | 说明 |
---|---|
OUTPUT | 数据包的出口 |
FORWARD | 匹配流经本机的数据包 |
PREROUTING | 修改目的地址,用来做DNAT |
POSTROUTING | 修改源地址用来做SNAT |
INPUT | 匹配目标IP是本机的数据包 |
防火墙顺序:表->链->规则
数据包的2种流向
发送给防火墙的:
PREROUTING-------->INPUT---------------->OUTPUT---------------->POSTROUTING
需要经过防火墙:
PREROUTING-------->FORWARD------------>POSTROUTING
命令的简单使用
为了更好的使用iptables,我们首先关闭firewalld,然后安装iptables,然后进行以下的命令的示例
安装
[root@break ~]# systemctl stop firewalld.service
[root@break ~]# yum install -y iptables-services
[root@break ~]# systemctl start iptables.service
配置文件存放的位置
[root@break ~]# ls -al /etc/sysconfig/iptables
-rw------- 1 root root 1178 4月 15 19:25 /etc/sysconfig/iptables
iptables
1不指定表名字时候,默认使用filter
2不指定规则链名字,默认表示所有的规则链
3只有设置默认的规则,才可以不写-j的参数
iptables语法大全
command的使用
A:append,追加一条规则(放置在最后)
在 filter 表的 INPUT 链里追加一条规则(作为最后一条规则)
匹配所有访问本机 IP 的数据包,匹配到的丢弃
[root@break ~]# iptables -t filter -A INPUT -j DROP
-I :insert,插入一条规则(默认第一条规则)
在 filter 表的 INPUT 链里插入一条规则(插入成第 1 条)
[root@break ~]# iptables -I INPUT -j DROP
在 filter 表的 INPUT 链里插入一条规则(插入成第 3 条)
[root@break ~]# iptables -I INPUT 3 -j DROP
-R :replays,替换或者修改规则
-D:delete,删除一条规则
[root@break ~]# iptables -D INPUT 1
-F:flush,清空规则
flush清空规则,但是不代表会修改默认的规则,我们清空的规则仅仅只是我们设置的规则,而不是默认的规则。
[root@break ~]# iptables -F
-P:设置默认的规则,不需要加-j
扫描二维码关注公众号,回复:
5911030 查看本文章
[root@break ~]# iptables -P INPUT ACCEPT
-L : list,列出规则
[root@break ~]# iptables -L
[root@break ~]# iptables -nvL
匹配条件
流入、流出接口(-i、-o)
-i eth0
匹配是否从网络接口 eth0 进来
-o eth0
匹配是否从网络接口 eth0 出去
来源、目的地址(-s、-d)
-s 192.168.0.1
-d 202.106.0.20
协议类型 (-p)
-p tcp
来源、目的端口(–sport、–dport)
--sport 1000 匹配源端口是 1000 的数据包
--dport 80 匹配目的端口是 80 的数据包
动作
-j ACCEPT:通过,允许数据包通过本链而不拦截它
-j DROP:丢弃,阻止数据包通过本链而丢弃它
-j SNAT :源地址转换
-j DNAT:目的地址转换
-j MASQUERADE:动态源地址转换,简称伪装
模块匹配
按包状态匹配 (state)
按来源 MAC 匹配(mac)
按包速率匹配 (limit)
多端口匹配 (multiport)
包状态匹配
包状态 | 说明 |
---|---|
NEW | 初始化包 |
ESTABLISHED | 建立 |
RELATED | 多重连接 |
INVALID | 无状态 |
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP
iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.0.1 -j DROP
iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT
保存
services iptables save
使用iptables防火墙防护公司的web服务器
#服务器
[root@break ~]# iptables -A INPUT -i lo -j ACCEPT
[root@break ~]# iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT
[root@break ~]# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[root@break ~]# systemctl restart httpd
[root@break ~]# cat /var/www/html/index.html
123
#客户端
[root@break ~]# curl 192.168.1.63
123
使用iptables搭建路由器,通过SNAT功能,使内网PC机,可以上网
#客户机新建一块网卡,为vmnet0模式,设置新网卡的ip:192.168.2.10 网关:192.168.2.1
#服务器:新建的网卡为vmnet0模式,设置新的网卡ip:192.168.2.1
服务器:
[root@break ~]# ifconfig ens37 192.168.2.1
[root@break ~]# ifconfig ens37
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::2adf:6a89:990a:5993 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:37:4f:df txqueuelen 1000 (Ethernet)
RX packets 18260 bytes 1396674 (1.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 441 bytes 48608 (47.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@break ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.63
启用内核路由转发功能:临时生效
临时生效:
echo "1" > /proc/sys/net/ipv4/ip_forward
永久生效:
vim /etc/sysctl.conf
改:#net.ipv4.ip_forward = 0
客户端:修改ip和网关。直接从配置文件中修改。
刚开始ping g.cn 不通,当服务器配置了防火墙,就可以通了。
把64的80端口映射到63的80端口,客户端访问192.168.1.63:80 即可访问192.168.2.2:80的内容
服务器:
iptables -t nat -A PREROUTING -d 192.168.1.63 -p tcp --dport 80 -j DAT --to 192.168.2.10
客户端:通过culr访问192.168.1.63,得到的是192.168.1.64的内容。
firewalld:FirewallD 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具。
动态防火墙与静态防火墙
iptables service 管理防火墙规则的模式:(静态防火墙)
用户使用命令添加防火墙的规则,如果想让规则永久保存,还需要再执行命令 service iptables reload
使变更的规则保存到配置文件里。在这整个过程的背后,会对防火墙的规则列表全部重读一次,加载到内核.
firewalld 所提供的模式就可以叫做动态防火墙:
它的出现就是为了解决这一问题,任何规则的变更都不需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新到运行中的 iptables 即可。
firewalld与iptables的关系
都是用来操作防火墙规则的工具,核心是内核中的filternat,只是用来操作的方法不一样而已。
firewalld小点
9zone:block ,dmz ,drop external, home, internal ,public , trusted , work.
简单来讲就是为用户预先准备了几套规则集合,我们可以根据场景的不同选择合适的规矩集合,而默认区域是public。
默认的配置文件:/usr/lib/firewalld/services/
修改的配置文件:/etc/firewalld/services/
9zone介绍:
zone | 说明 |
---|---|
drop | 任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。 |
block | 任何接收的网络连接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒绝。 |
public | 在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接。 |
external | 特别是为路由器启用了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接。 |
dmz | 用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接。 |
work | 用于工作区。您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接。 |
home | 用于家庭网络。您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接。 |
internal | 用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机。仅仅接受经过选择的连接。 |
trusted | 可接受所有的网络连接。 |
庞大的命令体系
firewall-cmd --get-services #列出所有支持的 service
firewall-cmd --list-services #查看当前 zone 种加载的 service
firewall-cmd --version #查看版本
firewall-cmd --help #查看帮助
firewall-cmd --state #查看状态
firewall-cmd --get-active-zones #查看区域信息
firewall-cmd --get-zone-of-interface=eth0 #查看指定接口的所属区域
firewall-cmd --panic-on #拒绝所有包
firewall-cmd --panic-off #取消拒绝所有包
firewall-cmd --query-panic #查看是否拒绝
firewall-cmd --reload #动态添加规则
firewall-cmd --complete-reload #断开连接的同时,重启服务
firewall-cmd --zone=dmz --list-ports #查看所有打开的端口
firewall-cmd --zone=dmz --add-port=8080/tcp #加入一个端口到区域
动态添加一条规则