防火墙服务
文章目录
1.配置
在服务端:
添加两块网卡:
eth0 172.25.254.228
eth1 192.168.0.228
在客户端:
配置与服务端相同网络段的网卡
eth0 192.168.0.128
2.Firewalld的域
trusted(信任) | 可接受所有网络连接 |
---|---|
home(家庭) | 用于家庭网络,仅接受ssh、mdns、ipp-client或dhcpv6-client服务 |
internal(内部) | 用于内部网络,仅接收ssh、mdns、ipp-client、samba-client、dhcpv6-client服务连接 |
work(工作) | 用于工作区,仅接收ssh、ipp-client或dhcpv6-client服务连接 |
public(公共) | 在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域 |
external(内部) | 出去的ipv4网络连接通过此区域伪装和转发,仅接收ssh服务连接 |
dmz(非军事区) | 仅接收ssh服务连接 |
block(限制) | 拒绝所有网络连接 |
drop(丢弃) | 任何接收的网络数据包都被丢弃,没有任何回复 |
3.Firewalld设置
firewall-cmd --stat 查看防火墙的状态
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 --list-service 查看当前火墙开启的服务
firewall-cmd --set-default-zone=public 设置系统默认域为public
firewall-config 图形化管理防火墙
firewall-cmd --reload 刷新火墙状态
相关文件
/usr/lib/firewalld/services/ 火墙工作时访问的策略
/etc/firewalld/zones/ 封装了服务所开启的数据
4.Firewalld中网卡与ip设置
(1)网卡设置:
firewall-cmd --permanent --add-interface=eth0 --zone=trusted 永久添加eth0网卡为信任接口
firewall-cmd --permanent --remove-interface=eth0 --zone=public 永久将eth0网卡从信任接口中移除
firewall-cmd --permanent --change-interface=eth0 --zone=public 永久改变eth0为public域
测试:
在服务端:
firewall-cmd --list-all 查看防火墙信息
firewall-cmd --permanent --zone=public --remove-interface=eth1 将eth1(192.168.0.228)从public域移除
firewall-cmd --reload 刷新火墙状态
systemctl restart firewalld.service 重启火墙服务
在服务端:
firewall-cmd --list-all 查看防火墙信息
firewall-cmd --permanent --zone=trusted --add-interface=eth1 添加eth1(192.168.0.228)为信任接口
firewall-cmd --reload 刷新火墙状态
systemctl restart firewalld.service 重启火墙服务
在服务端:
firewall-cmd --permanent --zone=public --change-interface=eth1 将eth1(192.168.0.228)变为public域
firewall-cmd --reload 刷新火墙状态
systemctl restart firewalld.service 重启火墙服务
(2)ip设置
firewall-cmd --permanent --add-source=172.25.254.28/24 --zone=trusted 永久添加172.25.254.28为信任ip
firewall-cmd --permanent --remove-source=172.25.254.28/24 --zone=trusted 永久将172.25.254.28从信任ip中移除
测试:
在服务端:
关闭火墙中的http、https服务
firewall-cmd --permanent --remove-service=http 关闭火墙中http服务
firewall-cmd --permanent --remove-service=https 关闭火墙中https服务
firewall-cmd --reload 刷新火墙状态
在测试机浏览器访问http://192.168.0.228进行测试,此时无法访问
在服务端:
systemctl restart httpd 重启httpd服务
firewall-cmd --add-source=172.25.254.28/24 --zone=trusted 添加172.25.254.28为信任ip
在真机浏览器访问http://172.25.254.228进行测试
在服务端:
firewall-cmd --remove-source=172.25.254.28/24 --zone=trusted 将172.25.254.28从信任名单中删除
在真机浏览器访问http://172.25.254.228进行测试,此时无法访问
5.火墙添加服务:
当默认使用的域为public时:
命令添加:
firewall-cmd --permanent --add-service=http 在火墙中永久添加http服务
firewall-cmd --reload 刷新当前的状态
firewall-cmd --list-all 查看火墙信息
文件添加:
vim /etc/firewalld/zones/public.xml 编辑public域配置文件,添加https服务
<service name="https"/>
firewall-cmd --reload 重启火墙
firewall-cmd --list-all 查看火墙信息
6.火墙中的端口修改
(1)临时修改
firewall-cmd --list-ports 查看火墙上开启的端口
firewall-cmd --add-port=8080/tcp 添加端口
firewall-cmd --list-ports 再次查看,此时已开启
firewall-cmd --remove-port==8080/tcp 删除端口
firewall-cmd --list-ports 再次查看,此时已删除
(2)永久修改
命令修改:
firewall-cmd --permanent --add-port=8080/tcp 永久添加端口
systemctl restart firewalld.service 重启服务
firewall-cmd --list-ports 查看端口
文件修改:
vim /etc/firewalld/zones/public.xml 编辑public域配置文件
<port protocol="tcp" port="8080"/> 添加8080端口(协议、端口)
firewall-cmd --list-ports 查看端口
firewall-cmd --permanent --remove-port=8080/tcp 永久删除端口
systemctl restart firewalld.service 重启服务
firewall-cmd --list-ports 查看端口
7.火墙的刷新
fiewall-cmd --reload 刷新当前火墙状态,但不会断掉已有连接
firewall-cmd --complete-reload 刷新当前火墙状态,但会断掉当前连接
测试:
在客户端:
ssh root@172.25.254.228 此时可以正常连接
在服务端:
firewall-cmd --permanent --remove-service=ssh 从火墙中删除ssh服务
fiewall-cmd --reload reload刷新火墙状态
在客户端:
touch file 尝试建立文件,此时可以建立文件
服务端:
firewall-cmd --complete-reload complete-reload刷新火墙状态
客户端:
此时客户端已经断开连接,不能进行任何操作
8、火墙的三表五链
(1)filter表
input forward output filter表的三条链
内核上开启服务时需要inout从外边传输数据给内核,然后ouput从内核将结果传送出来
而forward时指从本机进来绕过本机服务,从本机出来,经过了内核,但不使用内核服务,不是把数据给内核,只是做转换。
(2)nat表
input postouting prerouting output nat表的三条链
input和output都不经过内核
postouting 路由之后,做原地址封装,数据访问目的地主机output时在路由端口做NAT转换,发生在路由之后
prerouting 路由之前,数据从目的地主机传回时经过路由,在路由端口转换
(3)mangle表
input prerouting forward postrouting output
mangle表的五条链
**数据传输:**数据input—>prerouting做NAT转换—>forward内核操作—>postrouting—>output
-s | 数据来源 |
---|---|
-o | 协议 |
-dport | 目的地端口 |
-sport | 数据端口 |
-j | 行为 |
–direct | 后边跟规则 |
–add-rule | 添加规则 |
filter | 表 |
INPUT | 表中规则 |
1 | 排在第一个 |
DROP | 拒绝不提醒 |
ACCEPT | 接收 |
REJECT | 拒绝提醒,不停加载,不提示 |
9、地址伪装和端口转发
在服务端:
firewall-cmd --permanent --add-masquerade 开启地址伪装功能
success
firewall-cmd --reload 刷新
success
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.29 设置ssh身份转换,即在客户端使用ssh服务访问服务端时自动转移到172.25.254.29的主机
success
firewall-cmd --list-all 查看火墙信息
public (default, active)
interfaces: eth0 eth1
sources:
services: dhcpv6-client http ssh
ports:
masquerade: yes
forward-ports: port=22:proto=tcp:toport=22:toaddr=172.25.254.29 此时功能已开启
icmp-blocks:
rich rules:
对以下文件进行编辑:
vim /etc/sysctl.conf
在此文件的最后一行输入:
net.ipv4.ip_forward=1 打开路由器功能
在客户机:
配置一个与服务端相同ip的网关
GATEWAY=192.268.0.228
ping 192.168.0.228 可以ping服务端第一个网卡
ping 172.25.254.228 可以Ping服务端第二个网卡
ssh root@172.25.254.228或者ssh root@192.168.0.228 尝试连接到服务端主机,但是此时已经被服务端转至172.25.254.29主机。因此输入密码时应输入172.25.254.29的root用户登录密码。
10.iptables火墙服务
(1)安装部属
systemctl stop firewalld 关闭firewalld服务
systemctl disable firewalld 关闭自启动
systemctl mask firewalld 锁住firewalld服务
systemctl start iptables 开启iptables服务
systemctl enable iptables 开启自启动
iptables -nL 默认查看filter
iptables -t filter -nL 查看filter
iptables -t nab -nL 查看nab
(2)相关命令
【1】连接命令
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT(REJECT|DROP) 指定filter表添加输入,遵循tcp协议,目的地端口为22,接收(拒绝|丢弃)连接
-t 指定表 -p 协议 -j 指定行为
iptables -nL 查看防火墙策略
【2】防火墙iptables命令参数
-A 添加
-D 删除
-C 检查策略
-I 插入
-R 替换
-F 刷新,清除所有
-N 添加新链
-X 删除链
-E 替换名称
-S 查看规则中的命令
-P 修改默认规则,无REJECT
-Z 刷新
测试:
iptables -D 1 删除第一条策略
iptables -t filter -A INPUT -s 172.25.254.28 -p tcp --dport 22 -j ACCEPT 指定主机可ssh连接
iptables -nL 查看策略
iptables -t filter -I INPUT 1 -p tcp --dport 22 -j ACCEPT 允许所有主机可以通过ssh连接,并且将此条策略插入到第一位
iptables -nL 查看策略
iptables -S INPUT 查看INPUT中的所有使用过的命令
iptables -N redhat 添加新链,并默认添加到filter表中
iptables -nL 查看策略
iptables -E redhat westos 修改链名
iptables -nL 查看策略
iptables -X westos 删除westos链
iptables -nL 查看策略
iptables -P INPUT DROP 修改filter表中的INPUT链的规则为DROP(丢弃)
iptables -nL 查看策略
iptables -F 删除所有策略
【3】调整查询速度
设置原来连接过的连接时不需要依次读取,新的依次查找
netstat -antlupe #查看所有可开启的端口
-i 接口
-p 协议
-m 状态
state
【4】iptables服务火墙的地址伪装与转换
在服务端:
vim /etc/sysctl.conf 编辑配置文件开启路由功能
net.ipv4.ip_forward=1 设置路由功能开启
sysctl -p 查看路由功能是否开启
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.228 将封装后来自eth0网卡的连接转到172.25.254.228上(开启地址伪装)(先将来自客户端(192.168.0网端)的连接信号在内核进行封装,转换为172.25.254.228,然后将从内核出来的连接信号传输到172.25.254.228网卡上,实现客户端连接服务端172.25.254网端的连接)
iptables -t nat -nL 查看nat表策略
在客户端:
ssh root@172.25.254.228 尝试ssh连接服务端172.25.254网段的IP,可以成功连接
在服务端:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 192.168.0.128:22 将来自eth0的ssh连接转到192.168.0.128主机上
iptables -t nat -nL 查看nat表策略
在真机:
ssh root@172.25.254.228 尝试ssh连接服务端,但是会连接到客户端(192.168.0.128)上
w -i 查看连接信息