文章目录
linux的火墙管理
两种管理方式
iptables ##接近原始
firewalld ##企业7之后
firewalld 和 iptables service 之间最本质的不同是 :
iptables service 在 /etc/sysconfig/iptables 中储存配置.
firewalld 将配置储存在 /usr/lib/firewalld/ 和/etc/firewalld/ 中的各种 XML 文件里 .
1. firewalld
动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙, 用以支持网络 “ zones” , 以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥 , 并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口.
系统提供了图像化的配置工具 firewall-config 、 system-config-firewall, 提供命令行客户端 firewall-cmd, 用于配置 firewalld 永久性或非永久性运行时间的改变 : 它依次用iptables 工具与执行数据包筛选的内核中的 Netfilter 通信.
ipp 打印机
block有回显
drop没有
1.1 图形化管理
firewall-config
1.2命令管理
1.2.1 启用 firewalld
yum install -y firewalld firewall-config
systemctl start firewalld
systemctl enable firewalld
1.2.2 关闭
systemctl disable firewalld
systemctl stop firewalld
注意:当主机之间互相ping时,可能机器网卡的问题(虚拟机出现这种问题占多)
1.3 配置文件
/usr/lib/firewalld/service ##所有服务的存储文件,可以自己定义添加(service)
/etc/firewalld/zones ##火墙设置的数据存储文件(permanent)
如何添加一个文件中没有的服务
cp -p /usr/lib/firewalld/service/xxx.xml /usr/lib/firewalld/service/xxx.xml
vim /usr/lib/firewalld/service/xxx.xml
名字、描述、协议、端口
reload
firewall-cmd --get-services
就有了
当永久修改火墙中某些设置时,/etc/firewalld/zones/下对应的域就会生成新的配置文件,同时原来的会自动变成xxx.xml.old
1.4 使用命令行接口配置防火墙
firewall-cmd --state ##查看状态
firewall-cmd --get-active-zones ##查看运行中的域
firewall-cmd --get-default-zone ##查看默认域
firewall-cmd --get-zones ##查看所有域
firewall-cmd --zone=public --list-all ##查看pubilc域的状态
firewall-cmd --get-services ##查看所有服务
firewall-cmd --list-all-zones ##查看所有域的状态
firewall-cmd --set-default-zone=xxx ##修改默认域
firewall-cmd --permanent --zone=internal --add-source=ip ##往internal域添加一个源地址(给这个机子这个域对应的权限)
firewall-cmd --permanent --zone=internal --remove-source=172.25.0.0/24 ##删除
firewall-cmd --permanent --zone=internal --add-interface=eth0 ##添加网卡设备
firewall-cmd --permanent --zone=internal --change-interface=eth0 ##更换网卡设备
firewall-cmd --permanent --zone=internal --remove-interface=eth0 ##删除
firewall-cmd --permanent --zone=public --add-service=smtp ##添加服务
firewall-cmd --permanent --zone=public --remove-service=smtp ##删除
firewall-cmd --zone=public --list-ports ##列出打开的端口
firewall-cmd --permanent --zone=public --add- port=8080/tcp ##添加端口
firewall-cmd --permanent --zone=public --remove-port=8080/tcp ##删除
firewall-cmd reload #不终止已连接的服务;ssh的话就不受影响
firewall-cmd complete-reload #终止;ssh的话就会断掉;complete-reload停止的服务需要用它打开
1.4 参数描述
source
指定源地址 , 可以是一个 ipv4/ipv6 的地址或网段 , 不支持使用主机名。
destination
指定目的地址 , 用法和 source 相同。
service
服务名称是 f irewalld 提供的其中一种服务。要获得被支持的服务的列
表 , 输入以下命令 :
firewall-cmd --get-services 命令为以下形式 :
service name=service_name
port
端口既可以是一个独立端口数字 , 又或者端口范围 , 例如 ,5060-5062 。协议可以指定为 tcp 或udp
protocol
协议值可以是一个协议 ID 数字 , 或者一个协议名。预知可用协议 , 请查阅 /etc/protocols 。
icmp-block
用这个命令阻绝一个或多个 ICMP 类型。 IC MP 类型是 firewalld 支持的 ICMP 类型之一。
要获得被支持的 ICMP 类型列表 , 输入以下命令 : firewall-cmd --get-icmptypes
icmp-block 在内部使用 reject 动作 , 因此不允许指定动作。命令为以下形式 :
icmp-block name=icmptype_name
masquerade
打开规则里的 IP 伪装。用源地址而不是目的地址来把伪装限制在这个区域内。不允许指定动作。
forward-port
从一个带有指定为 tcp 或 udp 协议的本地端口转发数据包到另一个本地端口 , 或另一台机器 , 或
另一台机器上的另一个端口。 port 和 to-port 可以是一个单独的端口数字 , 或一个端口范围。而
目的地址是一个简单的 IP 地址。不允许指定动作 , 命令使用内部动作accept 命令为以下形式 :
forward-port port=number_or_range protocol=protocol / to-port=number_or_range to-addr=address
Direct Rules
通过 firewall-cmd 工具 , 可以使用 --direct 选项在运行时间里增加或者移除链。如果不熟悉 iptables , 使用直接接口非常危险 , 因为您可能无意间导致防火墙被入侵。直接端口模式适用于服务或者程序 , 以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用
1.5 三张表,五条链
防火墙的工作机制
filter表里的内容是与访问内核相关的
input:到不了内核
forward: 内核
output:经过内核
input—>forward—>output
nat表不访问内核
intput
prerouting:路由之前
postrouting:路由之后,做源地址转换
此处的路由之前与路由之后相对方向不一样
output:
maggle表是备用表格
intput:
prerouting:
forward:
postrouting:
output:
direct
s #source ip
p #协议
dport #端口
j #访问的回应
REJECT DROP ACCEPT
rules从上到下一次读取
REJECT > DROP
remove
get
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 172.xxxxx -p tcp --dport 80 -j DROP
##让172.xxxxx这台主机访问本机80端口服务时被拒绝且没有回应
———————————————————————————————————
1.6 firewall的地址伪装,端口转发
伪装
firewall-cmd --permanent --add-masquerade
端口转发 :
firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=22:toaddr=172.25.254.207
客户端:网关
masquerade ##伪装
add-forward-port=port=22:proto=tcp:toport=22:toaddr=ip ##地址转换,端口转发
2. iptables
关闭火墙,下载服务并打开
-t ##指定表
-n ##不做解析
-l ##列出表中策略
iptables -nL ##不做解析列出表中策略
iptables -t filter -nL
默认filter表
表中策略也是默认从上到下读取
2.1 iptables的相关命令
man iptables
iptables table chain rule
iptables -t [table] -A|C|D|R|S|N|X [chain] rule-specification
S ##列出策略
A ##怎加策略(在最后加)
I ##插入策略(在最前面加)
R ##修改策略
D ##删除策略
P ##修改默认策略
N ##增加链
X ##删除链
E ##修改链名称
iptables -F ##清除所有策略
service iptables save
iptables-save > /etc/sysconfig/iptables
##保存策略
filter
nat
2.2 iptables的伪装与转发
伪装:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.107
转发:
iptables -t nat -A PREROUTING -i eth0-ptcp--dport 22 -j DNAT --to-dest192.168.0.207:22
客户端:网关
2.3 更改服务的标签
由于服务在读取策略的时候是从上往下读取这样会浪费时间,所以我们就可以改变服务的标签(NEW——>ESTABLSHED/RELAED),使其不用检测,提高效率
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
##对ESTABLSHED和RELAED标签的服务直接通过检测
iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
##对NEW标签内部接口的服务也直接通过检测
iptables -A INPUT -m state --state NEW -p tcp --dport 3128 -j ACCEPT
##NEW标签ip连接squid服务 检测3128端口
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
##检测22端口
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
##检测53端口
iptables -A INPUT -j REJECT
其余的服务都拒绝
3. 给服务添加端口
即管理 SELinux 端口标签
列出端口标签 :
semanage port -l
添加端口标签 :
semanage port -a -t http_port_t -p tcp 8888
删除端口标签 :
semanage port -d -t http_port_t -p tcp 8888