Linux下火墙的两种管理机制——Firewalld与Iptables
1.Firewalld概述
动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙,用以支持网络 “zones” ,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。
系统提供了图像化的配置工具firewall-config、system-config-firewall, 提供命令行客户端firewall-cmd, 用于配置 firewalld永久性或非永久性运行时间的改变:它依次用 iptables工具与执行数据包筛选的内核中的 Netfilter通信。
2.两者的切换
关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
打开iptables
systemctl unmask iptables
systemctl start iptables
systemctl enable iptables
3.两者的不同
- iptables service 在 /etc/sysconfig/iptables 中储存配置,而 firewalld将配置储存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML文件里.
- 使用 iptables service每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则,然而使用 firewalld却不会再创建任何新的规则;仅仅运行规则中的不同之处。因此,firewalld可以在运行时间内,改变设置而不丢失现行连接。
- iptables通过控制端口来控制服务,而firewalld则是通过控制协议来控制端口
4.网络区域的划分
5.selinux对端口的控制
以http为例
semanage port -l | grep http ##查看
semanage port -a -t http_port_t -p tcp 6666 ##添加新的端口
semanage port -d -t http_port_t -p tcp 6666 ##删除
6.firewalld 命令行管理
firewall-cmd --state ##状态
firewall-cmd --get-active-zones ##生效的网络域
firewall-cmd --get-default-zone ##默认网络域
firewall-cmd --get-zones ##所有网络域
firewall-cmd --zone=public --list-all ##公共网络域列表
firewall-cmd --get-services ##所有的服务
firewall-cmd --list-all-zones ##所有网络域列表
firewall-cmd --set-default-zone=dmz ##将默认网络域设置为非军事区
firewall-cmd --reload ##刷新,只改变当前状态,不影响当前正在连接的
firewall-cmd --complete-reload ##完全刷新,断开所有当前连接的
firewall-cmd --permanent --zone=internal --add-source=172.25.0.0/24 ##添加指定网络域的网段(–permanent参数表示永久生效设置,如果没有指定–zone参数,那么会加入默认区域)
firewall-cmd --permanent --zone=internal --remove-source=172.25.0.0/24 ##删除
firewall-cmd --permanent --zone=internal --add-interface=eth0 ##添加指定网络域的ip
firewall-cmd --permanent --zone=internal --remove-interface=eth0 ##删除
firewall-cmd --permanent --zone=internal --change-interface=eth0
firewall-cmd --permanent --zone=public --add-service=ssh ##给指定网络域添加服务
firewall-cmd --permanent --zone=public --remove-service=ssh ##删除
firewall-cmd --permanent --zone=public --add-port=8080/tcp ##给指定网络域添加端口
firewall-cmd --permanent --zone=public --remove-port=8080/tcp ##删除
firewall-config ##图形界面
/etc/firewalld/zones/public.xml ##火墙配置文件
7.Direct Rules
-
通过 firewall-cmd 工具,可以使用 –direct 选项在运行时间里增加或者移除链。如果不熟悉 iptables ,使用直接接口非常危险,因为您可能无意间导致防火墙被入侵。
-
直接端口模式适用于服务或者程序,以便在运行时间内增加特定的防火墙规则。
-
直接端口模式添加的规则优先应用。
firewall-cmd --direct --get-all-rules ##列出规则 firewall-cmd --permanent --remove-service=ssh -p tcp端口 --dport 端口 -s 访问来源 -j 动作 ##删除规则 firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 -s 172.25.254.20 -j ACCEPT ##添加规则,只允许20连接 firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -p tcp --dport 22 ! -s 172.25.254.20 -j ACCEPT ##只有20无法连接
目标主机没有sshd服务
250主机能够链接,但220主机无法链接,策略生效
改变策略允许除了250主机外的主机通过22端口连接本机,先删除原先策略
250无法连接120,220可以连接
8.伪装和端口转发
实验环境的搭建
准备一台双网卡主机为服务端
一台单网卡主机为客户端
在服务端开启地址伪装(路由后转换)
firewall-cmd --permanent --add-masquerade
查看内外网联系
测试
服务端设定为路由器,客户端通过路由连接目标主机
但我们发现连接目标主机的是220主机,并不是客户端主机,这就是开启了地址伪装的功能
如何查看到真正连接者的ip呢?这就需要在服务端开启端口转发(路由前转换)
在服务端
firewall-cmd --permanent --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.120 ##当目标主机通过22端口连接服务端,服务端会直接转到客户端
测试
用目标主机连接服务端,发现直接跳转到客户端
9.iptables基本参数
iptables火墙策略执行生效规则
-
策略即改即生效
-
iptables -nL 是从上到下短路规则查看权限,匹配了就直接通过,后面就不看了
10.iptables基本命令操作
iptables -nL ##列出指定表中的策略,并对来源地址进行反向解析
iptables -t filter -L ##查看filter表中的策略,不做解析
iptables -t filter -nL ##查看filter表中的策略,并做解析
service iptables save ##保存当前策略
iptable -F ##刷掉filter表中的所有策略,当没有用-t指定表名称时,默认为表filter
iptables -A INPUT -i lo -j ACCEPT ##允许lo
iptables -A INPUT -p tcp --dport 22 -j ACCEPT ##允许访问22端口
iptables -A INPUT -s 172.25.254.250 -j ACCEPT ##允许250主机访问本机所有端口
iptables -A INPUT -j REJECT ##拒绝所有主机的数据来源
iptables -N redhat ##增加链redhat
iptables -E redhat hello ##改变链名称
iptables -X hello ##删除链
iptables -D INPUT 1 ##删除INPUT链中的第一条策略
iptables -I INPUT 2 -p tcp --dport 80 -j REJECT ##插入策略到INPUT中的第二条(不写插入位置。默认第一条)
iptables -R INPUT 4 -p tcp --dport 80 -j ACCEPT ##修改第四条策略
iptables -P INPUT DROP ##把INPUT表中的默认策略改为drop
11.利用iptables 实现地址伪装和端口转发
地址伪装
在服务端
iptables -F ##刷掉原有的火墙策略
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.69.220 ## ##服务端将客户端的ip转换为172.25.254.220
iptables -nL -t nat
在客户端测试
端口转发
在服务端
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 22 -j DNAT --to-dest 1.1.1.100 ##当真机通过22端口连接服务端,服务端会直接转到客户端
在目标主机测试,连接服务端会直接调转到客户端
12.Iptables管理策略优化
在实际操作中,因为iptables是从上到下依次查看,通过了就不查看了,所以我们可以优化它的读取策略
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ##准许正在使用的和已经使用过的
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT ##准许通过回环的新的访问
iptables -A INPUT -m state --state NEW -p tcp --dport 3260 -j ACCEPT ##准许通过860端口的新的访问
iptables -A INPUT -m state --state NEW -p tcp --dport 445 -j ACCEPT ##准许通过445端口的新的访问
iptables -A INPUT -m state --state NEW -j REJECT ##其他的的新访问的全部拒绝