1、定义:
防火墙是整个数据包进入主机前的第一道关卡。是一种位于内部网络与外部网络之间的网络安全系统,是一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。
2.管理防火墙的两种方式:
(1)firewalld管理火墙的工具,相对简单
(2)iptables复杂,功能强大
3.防火墙的三表五链
(1)INPUT链: 过滤所有目标地址是本机的数据包(对进入本机的数据包进行过滤)
(2)OUTPUT链:过滤所有本机产生的数据包(对源地址的数据包的过滤)
(3)FORWARD链:过滤所有路过本机的数据包(源地址和目标地址都不是本机的数据包)
如果第一个数据包允许经行NAT或Masquerade,那么其它数据包都会被做相同的动作,也就是其它数据包不会被一个一个的 NAT(属于一个流的包只会经过这个表一次)任何时候都不要在这个表的任何一条链进行过滤。
包含三个动作:
(1)DNAT:改变数据包的目的地址包能从路由到某台机器(使得公网能够访问局域网的服务器)
(2)SNAT:改变数据包的源地址(使得局域网能够访问公网)
(3)NASQUERADE:和SNAT一样使得局域网能访问公网,无固定ip使用PPP.PPPoE等拨号上网接入
Nat表包含三条链:
(1)PREROUTING链:数据包到达防火墙时改变包的目的地地址
(2)OUTPUT链:改变本地产生数据包的目标地址
(3)POSTROUTING:在数据包离开防火墙时改变数据包的源地址
mangle中的五条链:
(1)PREROUTING链
(2)POSTROUTING链
(3)OUTPUT链
(4)INPUT链
(5)FORWARD链
1、firewalld概述
动态防火墙后台程序firewalld提供了一个动态管理的防火墙,用以支持网络“zones”,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对ipv5和IP v6防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者英勇程序以直接增加防火墙规则的接口
2、firewalld配置方法
图像化:firewall-config进入图形化界面配置
命令行:firewall-cmd........
3.firewalld的域
4.firewalld的管理
实验准备:
两台reset的虚拟机。desktop单网卡,IP:192.168.0.123
server两个网卡:eth0:172.25.254.223 eth1:192.168.0.223
物理主机IP:172.25.254.23
(1)、firewalld的开启以及关闭
yum install -y firewalld firewall-config
systemctl start firewalld 开启
systemctl enable firewalld 设置开机自启
systemctl disable firewalld 开机自动关闭防火墙
systemctl stop firewalld 关闭防火墙
(2)、使用命令配置防火墙
firewall-cmd --state 查看防火墙状态
firewall-cmd --get-active-zones 查看防火墙正在使用的域
firewall-cmd --get-default-zone 查看防火墙默认域
firewall-cmd --get-zones 查看防火墙的域
firewall-cmd --zone=public --list-all 列出public域的所有设置
firewall-cmd --get-services 查看防火墙的服务
firewall-cmd --list-all-zones 列出所有域的详细信息
firewall-cmd --set-default-zone=*** 设置***为默认域
firewall-cmd --reload 重新加载防火墙设置
(3)、
server虚拟机下载httpd
yum install httpd -y
systemctl start httpd
步骤如下:
此时没有给防火墙添加http服务
主机访问:
通过浏览器访问172.25.254.223失败
server端:firewall-cmd --add-source=172.25.254.23 --zone=trusted,原因是添加到该信任域名
主机再次访问172.25.254.223成功
firewall-cmd --reload
firewall-cmd --add-source=172.25.254.23 --zone=public 该域下没有允许http服务
主机再次访问172.25.254.223 失败
实验二:将172.25.254.223IP放到可信任域里,此时该服务可以通过防火墙
server端:firewall-cmd --remove-interface=eth0 --zone=pubilc
firewall-cmd --add-interface=eth0 --zone=trusted
主机访问:
通过浏览器访问172.25.254.223 成功
移出该域,不能访问
server端:firewall-cmd --remove-interface=eth0 --zone=trusted 将eth0移出这个域
firewall-cmd --add-interface=eth0 --zone=pubilc
主机访问:
通过浏览器访问172.25.254.113 失败
server端:firewall-cmd --change-interface=eth0 --zone=trusted 将eth0修改成可信任域里
主机访问:
通过浏览器访问172.25.254.113 成功
(4)、给防火墙添加服务
查看本机防火墙已经允许的服务
firewall-cmd --list-services
查看本机已有的可以给防火墙添加的所有服务
firewall-cmd --get-services
文件方式给本机添加服务iscsi
cd /usr/lib/firewalld/
cd services/
ls 查看本机已有的所有服务的文件
firewall-cmd --permanent --add-service=iscsi 添加失败,本机无此服务文件,所以不能添加
首先应添加iscsi服务文件
cp -p http.xml iscsi.xml
vim iscsi.xml 修改配置,端口
firewall-cmd --get-services 查看本机已有的可以给防火墙添加的所有服务,iscsi添加成功
firewall-cmd --permanent --add-service=iscsi 或者进/etc/firewalld/zones添加
firewall-cmd --reload
firewall-cmd --list-all
文件的方式给本机防火墙添加服务httpd
cd /etc/firewalld/zones/
ls
vim public.xml 通过文件的方式给本机防火墙添加服务 添加http
======firewall-cmd --permanent --add-service=http 通过命令给本机防火墙永久添加服务
firewall-cmd --reload
firewall-cmd --list-all
permanent这个参数,也会生成public.xml.old这个备份文件,备份的是添加服务之前的信息。
命令方式添加服务:
firewall-cmd --permanent --add-service=服务名
firewall-cmd --reload 完毕重新加载
添加端口
firewall-cmd --list-ports 列出所有允许通过的端口
firewall-cmd --add-port=8080/tcp
firewall-cmd --list-ports 8080端口添加成功
firewall-cmd --remove-port=8080/tcp 移除
(5)、关于reload:
firewall-cmd --reload 和 firewall-cmd --complete-reload 的区别
firewall-cmd --reload 只重新加载防火墙列表服务,并不会暂停正在运行使用的服务
firewall-cmd --complete-reload 全部重新加载,会检测正在进行的服务
例子:如果删除了防火墙之前允许的服务,即使reload,不会影响被删除服务目前的使用
如果是--complete-reload,重新加载防火墙列表服务后,监测到没有了该服务,则禁止该服务的进行。
(6)、禁止某一ip通过ssh服务连接
server端:
firewall-cmd --list-all
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
systemctl start sshd
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.23 -p tcp --dport 22 -j REJECT允许除了该主机外,所有的主机进行通过22端口
主机ip:172.25.254.23
测试 ssh [email protected] 被拒绝
解除限制
server:
firewall-cmd --permanent --direct --get-all-rules 查看所有的规则
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.13 -p tcp --dport 22 -j REJECT 解除禁止
firewall-cmd --reload
systemctl restart firewalld
(7)、firewalld管理的地址伪装SNAT
问题导向:以此来解决不同网段下的主机通信
有两块网卡的虚拟机server ip:172.25.254.113 ip: 192.168.0.113
步骤如下:
firewall-cmd --list-all
firewall-cmd --permanent --add-masquerade 添加地址伪装
firewall-cmd --reload
在有一块网卡的虚拟机desktop ip:192.168.0.123
ping 172.25.254.223无法ping通
GATEWAY=192.168.0.223
systemctl restart network
route -n查看网关
测试
desktop: ip:192.168.0.123
ssh [email protected]
在主机上:
w -i 查看到的是 ip:172.25.254.223 连接的
(8)、firewalld管理的地址转发DNAT
server操作:
打开地址伪装,设置路由
firewall-cmd --list-all
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
firewall-cmd --list-all
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.23
转发的含义:当desktop连接172.25.254.223时的22端口时,转到主机
desktop 设置网关为server的同网段IP:
ssh连接server时,由于已经开启地址转换,连接时跳转到 172.25.254.23
23主机上查看w -i查看此时谁在使用,就是server的主机
1.iptables的概念
iptables(网络过滤器)是一个工作于用户空间的防火墙软件,防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在linux内核中。
2.iptables的启用
systemctl stop firewalld 关闭firewalld管理
systemctl disable firewalld 使其开机不自启
systemctl mask firewalld 锁住防火墙 我一般不索,因为老忘记
yum install iptables-services
systemctl start iptable 打开iptable
3、iptable的命令
iptables -t filter A INPUT -p tcp --dport 22 -j ACCEPT 在filter这个表上追加22端口
参数的作用
-t表的选择
A 追加
-p 采用tcp协议
-dport 22 目的端口号,22
-j 动作为ACCEPT
iptables -nL 显示表的信息,什么都不加,表示默认查看filter这个表的信息
-t filter -nL 显示filter这个表的信息
-F 删除所有表的信息
file:///E:/%E5%8D%9A%E5%AE%A2%E6%88%AA%E5%9B%BE/firewall%E5%8D%9A%E5%AE%A2%E6%88%AA%E5%9B%BE/Screenshot%20from%202019-08-17%2009-24-54.png
保存表的信息:
法1:service iptables save 保存所有表的信息,到/etc/sysconfig/iptables
法2:iptables-save > /etc/sysconfig/iptables
注意:没有相应表的名字,则默认是对filter这个表进行操作
iptables -N redhat 添加链
-E redhat hello 修改链的名字
-X hello 删除链
-P INPUT DROP 修改input默认的动作(police里的内容)
-S INPUT 查看链的内容
-nL 列出所有的信息 ,并且不做解析
iptables -D INPUT 1 ##删除INPUT链中的第一条策略
iptables -I INPUT -p tcp --dport 80 -j REJECT ##插入策略到INPUT中的第一条
iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT ##修改第一条策略
iptables -P INPUT DROP ##把INPUT表中的默认策略改为drop
只允许22和80端口可以通过
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
已经建立的连接和正在启动的新连接
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
设置状态为NEW但经过本地回环接口的连接允许
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
设置经过22端口的新状态允许连接
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
设置经过80端口的新状态允许连接
iptables -A INPUT -j REJECT拒绝其他的服务
service iptables save保存到配置文件里
iptables -Z 清空所有的状态
例题:只允许这三个服务通过防火墙squid sshd dns
3128 22 53 udp
4.iptables的伪装和转发
地址伪装
尝试在desktop ip:192.168.0.123
ping 主机 ip:172.25.254.23 失败
server
在server端 双网卡 eth0:ip:172.25.254.113 eth1: ip: 192.168.0.113
1
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.113
iptables -t nat -nL
desktop
再次尝试 ping 主机 ip:172.25.254.13 成功
地址转发
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 192.168.0.23:22
iptables -t nat -nL
desktop端测试
在selinux开启状态下
修改端口
yum install httpd -y
systemctl start httpd
netstat -antlupe | grep httpd
vim /etc/httpd/conf/httpd.conf 修改端口为8080
systemctl restart httpd
netstat -antlupe | grep httpd修改成功
vim /etc/httpd/conf/httpd.conf 修改端口为8888
systemctl restart httpd重启失败
setenforce 0 关闭selinux
systemctl restart httpd 成功
netstat -antlupe | grep httpd 端口为8888
setenforce 1
systemctl restart httpd重启失败
semanage port -l | grep http 对端口号有限制 不能任意更改,没有的需要手动添加
semanage port -a -t http_port_t -p tcp 8888 手动添加8888端口
systemctl restart httpd 成功
netstat -antlupe | grep httpd 端口为8888