赞
踩
firewalld域(zones)
基于用户对网络所给与的信任程度,防火墙可以将网络分割成不同的9个区域 。
firewall-config
#进入图形界面设置防火墙策略
1 Runtime 设置临时策略,当即生效,但是系统重启或者重新加载防火墙设配置后失效
2 Permanent 永久设置,设置完成后需要重新加载防火墙配置,一旦设定永久生效
为了避免firewlld和iptables产生冲突,再进行实验时候,先关闭iptables,开启firewalld。
systemctl stop iptables
#关闭iptables服务
systemctl mask iptables.service
#锁定iptables服务
systemctl disable iptables
#设置iptables开机不自启动
systemctl start firewalld
#启动firewalld服务
systemctl enable firewalld
#设置firewalld开机自启动
systemctl status firewalld.service
# 查看firewalld 服务状态
firewall-cmd --get-zones
#查看所有的域
firewall-cmd --get-default-zone
#查看默认的域
firewall-cmd --set-default-zone=trusted
#设置默认的域
firewall-cmd --state
#查看防火墙状态,开启为running 关闭为 not running。
firewall-cmd --list-all
#查看默认域的所有防火墙策略,没有指定域就是查看默认域
firewall-cmd --list-all --zone=trusted
# 查看指定域的所有防火墙策略
firewall-cmd --list-services --zone=public
#查看指定域的某一项策略(services)
firewall-cmd --list-ports --zone=public
# 查看指定域的某一项策略(ports)
firewall-cmd --list-all-zones
# 查看所有域的所有防火墙策略
firewall-cmd --get-services
# 查看防火强可以添加的所有的服务
firewall-cmd --add-service=ftp
#临时添加ftp服务到默认域,立即生效
firewall-cmd --add-service=http --permanent
#永久添加http服务到默认域,加载后生效
firewall-cmd --reload
#重新加载配置,临时添加的服务失效,永久添加的服务生效。
firewall-cmd --add-port=8080/tcp
#添加端口8080/tcp到默认域
firewall-cmd --add-port=5423/tcp --permanent
#永久添加端口5423/tcp到默认域
firewall-cmd --reload
# 重新加载防火墙配置
实验需要虚拟机添加两块网卡eth0 以及 eth1
ifconfig eth0
#查看网卡eth0的ip
ifconfig eth1
# 查看网卡eth1 的ip
firewall-cmd --list-all
#查看默认域的策略 eth0以及eth1 都在默认域中
firewall-cmd --remove-interface=eth1 --zone=public
#将接口eth1 从默认域中移出
firewall-cmd --add-interface=eth1 --zone=block
# 将接口 eth1 添加到指定的block域
测试:使用统一网段的主机 可以成功和eth0 通讯,无法和 eth1 进行通讯。
firewall-cmd --change-interface=eth1 --zone=public
# 修改网络接口的域
目前防火墙默认的域为public 但是该域中允许的服务没有ssh
使用主机 172.25.47.250 无法通过ssh服务连接到该主机
firewall-cmd --add-source=172.25.47.250/24 --zone=trusted
# 将固定ip添加到trusted域中
该主机通过该该域的策略可以成功的连接系统。
firewall-cmd --reload
# 重新加载防火墙配置,对于加载以后失效的但是正在使用的策略,仍旧可以使用
firewall-cmd --complete-reload
#重新加载防火墙配置,对于加载以后失效的但是正在使用的策略会中断服务。
/etc/firewalld/zones/
#有关域的策略都存储在该目录下的xml文件中
/usr/lib/firewalld/services/
# 有关服务的策略设置都存储在该目录下的xml文件中。
修改文件中的内容,同样可以起到修改防火墙策略的作用。
在访问本机的某一端口的时候,自动转换到去访问另一个端口。
示例:访问5423端口的时候,自端转换到80端口。
firewall-cmd --add-forward-port=port=5423:proto=tcp:toport=80
#将访问本机5423端口自动转换成访问本机的80端口。
实验环境:
客户主机:ip 8.8.8.8/24 网关8.8.8.10/24
路由器主机:ip1 172.25.47.204/24 ip2 8.8.8.10/24
目标主机:ip 172.25.47.250/24
设置路由主机防火墙策略:
打开地址伪装功能,开启路由转发功能
使用客户主机 8.8.8.8 直接连接目标主机 172.25.47.250 连接成功 ,并且在目标主机上查看登陆的主机ip为 172.25.47.204 。成功客户主机不在同一个网段的ip进行了伪装。
由于上面所说的,目标主机认为连接自己的主机为172.25.47.204,并不知道客户主机的存在,所以需要返回数据的时候,会直接数据包发送给172.25.47.204 主机。但是该数据包本来应该是给客户主机8.8.8.8的。
需要设置端口转发,将目标主机访问 172.25.47.204 主机的 端口时候 自动转发到访问客户主机的相应端口。
没有设置的时候 目标主机只能连接到 172.25.47.204
充当路由器的主机进行端口转发设置
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=8.8.8.8
#设置将方位本机22端口的数据包全部转发到8.8.8.8主机的22端口。
再次使用目标主机连接 172.25.47.204 可以被成功转发到8.8.8.8 主机上去
filter 表:一般的过滤功能,对发送给本机的数据进行过滤处理。
该表中存在三条链:
INPUT :通过路由之后数据包目的地为为本机。
FORWARD :通过路由表之后数据包目的地不为本机。
OUTPUT :由本机产生的,向外进行转发。
nat 表 :用于nat功能(端口转换,地址伪装等)
该表中存在四条链:
INPUT :数据包进入本机,但是目的地不为本机。
PREROUTING :数据包进入路由表之前
POSTOUTING :数据包进入路由表之后,发送到网卡接口之前
OUTPUT :不由本机产生,向外进行转发。
mangle 表 : 备用表
使用设置filter表对数据包进行筛选限制,一般在INPUT 链上进行设置,直接对进入本机的数据包权限进行设置。
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.47.250 -j ACCEPT
# 添加高级规则到 filter 表 INPUT 链 的第一条 允许 ip 172.25.47.250 主机访问22 端口。
首先查看高级规则,对高级规则中存在的设置,按照高级规则进行执行,对于没有在高级规则中进行设定的,按照默认策略进行。
下图中默认域允许ssh服务 并且高级规则中允许特定的ip访问22端口,造成的结果就是所有的主机都可以通ssh服务的22端口连接该主机。
可以在默认域中取消允许ssh服务 只在高级规则中指定特定ip主机可以访问22端口,做到只允许特定的主机使用ssh服务对本机进行连接
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.47.250 -j ACCEPT
# 移除一条高级规则,该规则之中限制的主机,将会按照默认域的策略进行
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 ! -s 172.25.47.250 -j ACCEPT
#添加高级规则到 filter 表 INPUT 链 的第一条 允许除过 ip 172.25.47.250 之外的所有主机访问22 端口。
使用iptables可以对 filter 表 nat 表 中对应链上的规则进行查看 增加 修改 删除等操作。
iptables命令常用的参数详解
iptable -t ##指定表的名称 -n ##不做解析,默认作解析 -L ##列出指定表格的策略 -A ##增加策略 -p ##网络协议 --dport ##端口 -s ##数据来源 -j ##动作 ACCEPT ##允许 REJECT ##拒绝 DROP ##丢弃 -N ##增加链 -E ##修改链的名称 -X ##删除链 -D ##删除指定策略 -I ##插入 -R ##修改策略 -P ##修改默认策略
systemctl unmask iptables.service
# 解锁iptables服务
systemctl start iptables.service
# 开启iptables服务
systemctl enable iptables.service
#设置服务开机自动启动
systemctl status iptables.service
# 查看iptables状态 显示开启
systemctl status firewalld.service
# 开启iptables之后 firewlld 自动关闭。
iptables -t filter -L
# 查看filter 表中的规则 -t 指定表 -L 查看规则
iptables -t filter -nL
# 带地址解析查看filter 表中的规则 -n 带解析
会显示表中包含的所有链上的规则。
iptables -t filter
-F # 清除filter 表中的所有规则。 -F 清除
保存规则 :
iptables-save
# 保存规则
iptables-save > /iptables
# 将保存的规则保存在指定的文件
service iptables save
# 将保存的规则 保存在默认的文件 /etc/sysconfig/iptables
注意: 以上保存的规则 内容全部都是一致的
1 添加规则
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许22 端口访问
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
# 对22端口访问不与回应
iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT
# 拒绝22端口访问
添加的规则按照先后顺序排列,当对同一个目标添加多条规则之后,按照最靠前的规则进行执行,后面的将会无效,以上三条中ACCEPT 生效。
2 插入规则
iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT
# -I 插入 默认插入到第一条规则
iptables -t filter -I INPUT 3 -p tcp --dport 80 -j REJECT
# 指定插入到第三条规则
3 设置表中的链
iptables -N toto
# 增加新的链 toto
iptables -E toto TOTO
# 修改toto 链的名称为 TOTO
iptables -X TOTO
# 删除表中的链 TOTO
iptables -P INPUT DROP # 修改默认链的状态
iptables -P INPUT ACCEPT # 修改默认链的状态
注意 : 只能修改成 DROP 或者 ACCEPT
4 删除以及修改某一个链中的规则
iptables -R INPUT 1 -p tcp --dport 80 -j DROP
# -R 修改
iptables -D INPUT 1
# -D 删除
5 设置 只允许特定的首次访问以及已经访问过本机的可以再次访问
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state NEW -j REJECT
第一条:允许状态为之前访问过的或者正在访问的可以连接本主机
第二条:允许访问本机数据回环接口的新连接
第三条:允许访问本机22端口的新连接
第四条:剩余所有新的访问均拒绝。
一个新的访问80端口被拒绝:
实验环境:
客户主机:ip 8.8.8.8/24 网关8.8.8.10/24
路由器主机:ip1 172.25.47.204/24 ip2 8.8.8.10/24
目标主机:ip 172.25.47.250/24
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.47.204
#在经过路由之后将输出到eth0的数据包ip转换成172.25.47.204
使用客户主机 8.8.8.8 直接连接目标主机 172.25.47.250 连接成功 ,并且在目标主机上查看登陆的主机ip为 172.25.47.204 。成功将客户主机不在同一个网段的ip进行了伪装。
iptables -t nat -A PREROUTING -i eth0 -j DNAT -p tcp --dport 22 --to-dest 8.8.8.8
#将从eth0进入本机的数据包在路由之前转发到ip8.8.8.8 的主机
使用目标主机连接 172.25.47.204 可以被成功转发到8.8.8.8 主机上去
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。