环境:三台主机,一台双网卡172网段和192网段,一台单网卡192网段,一台单网卡172网段,互相可以ping通
1、火墙介绍
netfilter:内核上有个安全插件netfilter(访问控制列表),这个列表里有许多详细的规则,当对这个规则允许或拒绝时,可以控制其他主机是否能访问,极大的提高了安全性。
iptables:管理netfilter的工具,通过iptables往netfilter表格里面写网络安全策略
iptables / firewalld:对iptables进行管理,用iptables / firewalld手段来写网络安全策略。
用iptables / firewalld这两个上层的管理工具去管理iptables,往iptables写网络安全策略时,iptables会把策略通过netfilter存在控制表格里。
2、火墙的工具切换
在rhel8中默认使用的是firewalld
iptables #用来管理内核是它的插件,只可开启一个
#可用iptables和firewalld来管理
firewalld--------->iptables #切换
systemctl disable --now firewalld
systemctl mask firewalld #锁上
dnf install iptables-services -y #安装iptables插件
systemctl enable --now iptables
iptables -nL #查看iptables策略
iptables------->firewalld
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl unmask firewalld #解锁
systemctl enable --now firewalld
firewall-cmd --list-all #查看firewalld策略
3、firewalld的使用
firewalld的开启
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl unmask firewalld
systemctl enable --now firewalld
关于firewalld的域
trusted #接受所有的网络连接
home #用于家庭网络,允许接受ssh mdns ipp-client samba-client dhcp-client
work #工作网络 ssh dhcp-client ipp-client
public #公共网络 ssh dhcp-client
dmz #军级网络 ssh
block #拒绝所有
drop #丢弃 所有数据全部丢弃无任何回复
internal #内部网络 ssh mdns ipp-client samba-client dhcp-client
external #ipv4网络地址伪装转发 sshd
关于firewalld的设定原理及数据存储
/etc/firewalld #火墙配置目录
/lib/firewalld #火墙模块目录
firewalld的管理命令
firewall-cmd --state #查看火墙的状态
firewall-cmd --get-active-zones #查看当前火墙中生效的域
firewall-cmd --get-default-zone #查看默认域
firewall-cmd --list-all-zones #查看所有的域
firewall-cmd --list-all #查看默认域中的火墙策略
firewall-cmd --list-all --zone=work #查看指定域中的火墙策略
firewall-cmd --set-default-zone=trusted #设定默认域
firewall-cmd --get-zones
firewall-cmd --get-services #查看所有可以设定的服务
firewall-cmd --permanent --remove-service=cockpit #移除服务
firewall-cmd --reload
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block #指定数据来源访问域
systemctl enable --now firewalld #开启防火墙
firewall-cmd --get-services | grep http #在防火墙所有服务中筛选http
firewall-cmd --permanent --remove-sercive=http #永久移除http服务
firewall-cmd --add-service=http #临时添加http服务,reload之后仍没有
firewall-cmd --permanent --add-service=http #永久添加http服务
vim /etc/httpd/conf/httpd.conf #编辑http的配置文件,将端口号改为8080
systemctl restart httpd #重启
firewall-cmd --permanent --add-port=8080/tcp #永久增加8080端口的开放
此时才可通过8080端口访问到apache界面
firewall-cmd --permanent --remove-port=8080/tcp #永久移除8080端口的开放
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block #将172网段的主机加入黑名单
执行完毕之后,172网段的主机将无法访问双网卡主机的172,但192网段的主机可以访问双网卡主机的192
firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block #在黑名单中将172网段的主机移除
firewall-cmd --reload
firewall-cmd --list-all --zone=block #展示block域的所有内容
执行完毕之后,172网段的主机将可以访问双网卡主机的172
firewall-cmd --permanent --remove-service=http
firewall-cmd --permanent --remove-interface=ens192 --zone=public #将网卡ens192移除public域
firewall-cmd --permanent --add-interface=ens192 --zone=trusted #将网卡ens192添加到trusted域
firewall-cmd --reload
firewall-cmd --list-all --zone=trusted #展示trusted域中所有的内容
此时,apache虽然已经关闭,但172网段的主机将可以访问双网卡主机的172
firewall-cmd --permanent --change-interface=ens192 --zone=public #更改ens192的域为public
firewall高级规则
目的:让172.25.254.216主机无法访问
服务端(双网卡主机端):
firewall-cmd --permanent --add-service=http #开启apache服务
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 80 -s 172.25.254.216 -j REJECT
#添加防火墙规则:input 指定操作
-p 协议
-d 端口
-s ip
-j 拒绝
firewall-cmd --reload
firewall-cmd --direct --get-all-rules #查看所有防火墙规则
测试:
单网卡172网段的主机ip为172.25.254.216时无法访问
firewalld中的NAT转换
服务端(双网卡主机):
SNAT(源地址转换)
IP为172.25.254.113和192.168.1.116
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
sysctl -a | grep ip_forward #可观察到net.ipv4.ip_forward = 1,若没有,vim /etc/sysctl.conf,在最后一行添加net.ipv4.ip_forward=1(1前后无空格)
客户端:
单网卡主机,ip为172.25.254.213
ip route add default via 172.25.254.113 #临时添加网关
ssh root@192.168.1.113
w -i #此时可以观察到进入主机192.168.1.113的是192.168.1.116
服务端(双网卡主机):
DNAT(目的地地址转换)
firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=22:toaddr=192.168.1.113
#将连接此主机的客户机直接转接到192.168.1.113中
firewall-cmd --reload
客户端(单网卡网段为172的主机):
ssh root@192.168.1.116 #此时可观察到虽然连接的是116,但最终连接到的是113
4、iptables的使用
systemctl disable --now firewalld
systemctl mask firewalld
dnf install iptables-services
systemctl enable --now iptables
iptables的策略记录文件:
/etc/sysconfig/iptables
永久保存策略
iptables -F #刷新
iptables-save > /etc/sysconfig/iptables
service iptables save
systemctl restart iptables.service
火墙的默认策略
默认策略中的五条链
input #输入
output #输出
forward #转发
postrouting #路由之后
prerouting #路由之前
默认的三张表
filter #经过本机内核的数据(input\output\forward)
nat #不经过内核的数据(postrouting\prerouting\input\output)
mangle #当filter和nat表不够使用时(input\output\forward\postrouting\prerouting)
iptables命令
-t #指定表名称
-n #不做解析
-L #查看
-A #添加策略
-P #协议
--dport #目的地端口
-s #来源
-j #动作
ACCEPT #允许
DROP #丢弃
REJECT #拒绝
SNAT #源地址转换
DNAT #目的地地址转换
-N #新建链
-E #更改链名称
-X #删除链
-D #删除规则
-I #插入规则
-R #更改规则
-P #更改默认规则
iptables -t nat -nL
iptables -t filter -nL
iptables -t mangle -nL
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT #策略每增加一个,下面多一个
##注意:火墙策略是一个匹配规则,如果第一项匹配到了就不读下面的了
iptables -I INPUT 2 -s 172.25.254.225 -p tcp --dport 22 -j REJECT
#在第二行插入
iptables -N WESTS #新建
iptables -E WESTS WESTOS #修改
iptables -X WESTOS #删除
iptables -D INPUT 3 #删除第三行策略
iptables -R INPUT 2 -s 172.25.254.100 -p tcp --dport 22 -j REJECT
#修改第二行策略
iptables -P INPUT DROP #修改默认为DROP
tcp 端口
80 #httpd
3260 #iSCSI
139 #smb
445 #smb
22 #sshd
数据包状态
RELATED #建立过连接的
ESTABLISHED #正在连接的
NEW #新的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #建立过连接的,正在连接的,都允许
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT #新的回环接口允许
iptables -A INPUT -m state --state NEW -p tcp --dport 3260 -j ACCEPT #iscsi允许
iptables -A INPUT -m state --state NEW -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 445 -j ACCEPT #smb允许
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT #sshd允许
iptables -A INPUT -m state --state NEW -j REJECT #其余的都拒绝
iptables中的NAT
服务端(双网卡):
SNAT(源地址转换)
iptables -t nat -A POSTROUTING -o ens192 -j SNAT --to-source 192.168.1.113
#将这块网卡出去的ip都伪装成192.168.1.113上出去的
DNAT(目的地地址转化)
iptables -t nat -A PRSTROUTING -i ens192 -j DNAT --to-dest 172.25.254.213
#访问这块网卡的所有数据都转到172.25.254.213
客户端(172网段主机):
(192网段主机)
iptables -t nat -D PREROUTING 1 #删除PRSTROUTING的第一行