一、firewalld
1.什么是firewalld
动态防火墙后台程序 firewalld 提供了一个 动态管理的防火墙, 用以支持网络 “ zones” , 以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IP v4 和 IP v6 防火墙设置的支持。它支持以太网桥 , 并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。
实际上它就是系统内核上的插件,系统提供了图像化的配置工具 firewall-config ,yum安装后即可使用
2.firewalld 简单管理命令
#首先我们了解一下firewalld 的域是什么
yum install firewall-confing ##安装火墙图形管理软件(一般自带)
systemctl start firewalld ##开启火墙,否则图形管理界面开启后全是灰色不能操作
firewall-config ##开启火墙的图形管理
firewall-cmd --state ##查看火墙的当前状态
firewall-cmd --get-active-zones ##查看正在工作的域,用的是哪个就是哪个
firewall-cmd --get-default-zone ##查看默认使用的域,与正在工作的域可以不同
firewall-cmd --get-zones ##查看所有的域
firewall-cmd --zone=public --list-all ##public域里的设置
firewall-cmd --list-all-zones ##查看所有域的所有设置
firewall-cmd --get-services ##所有支持可以直接添加使用的服务名称
firewall-cmd --set-default-zone=public ##改变默认域
3.命令修改火墙参数(添加 --permanent 永久生效,不添加重启当前环境后设置失效)
#首先一台双网卡主机,配置两个网段ip,172.25.254.0/24 1.1.1.0/24 ,开启apache服务,但是防火墙没有允许此服务
firewall-cmd --list--all ##查看两个网卡默认在哪个域里
#测试:
firewall-cmd --zone=trusted --add-source=172.25.254.21
##来源于21这台主机的数据直接通过trusted域访问
##--add-source=172.25.254.0/24 允许这个网段都走trusted域
测试:
#设定
firewall-cmd --permanent --zone=trusted --remove-source=172.25.254.21
##永久取消21走trusted域的权限
firewall-cmd --reload ##永久取消后需要重新读取火墙策略才会生效
firewall-cmd --remove-interface=eth1 --zone=public
##将eth1网卡从public域里删除,本机的eth1的ip为1.1.1.121
firewall-cmd --add-interface=eth1 --zone=trusted
##将eth1网卡加入到trusted域里
#测试:
测试机设定
#设定
firewall-cmd --change-interface=eth1 --zone=public
##直接将eth1网卡改变成走public域通道
firewall-cmd --list--all --zone=trusted ##查看trusted域里的服务
小结:
1.1.1.221和eth1同一个网段,在eth1添加到trusted域后可以直接访问1.1.1.121的默认发布文件,eth0没添加依然不能访问
172.25.254.21在被添加到走trusted域后可以直接访问121
4.firewalld对服务的管理
firewall-cmd --permanent --zone=public --add-service=ssh
##给指定域永久添加服务ssh
firewall-cmd --permanent --zone=public --add-port=8080/tcp
##添加端口要指定端口类型
firewall-cmd --reload ##一般永久设置都要reload之后才能生效
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
##永久删除端口
firewall-cmd --permanent --zone=public --remove-service=ssh
##永久删除指定域里的服务ssh(不添加永久的话一reload就会重新读取文件,然后会恢复成原来没被删除的样子)
firewall-cmd --reload
##重新读取火墙策略,不会中断别人正在使用的服务:如读取ssh服务被删除后,正在使用ssh服务的用户不受影响
firewall-cmd --complete-reload
##完全重新读取火墙策略,会中断别人正在使用的服务:如ssh
vim /etc/firewalld/zones/public.xml
##直接修改文件后reload火墙策略也能生效,原来的文件内容会变成public.xml.old
cd /lib/firewalld/services/
##里面是服务运行所调用的函数文件,修改后需要重启服务生效
5.firewall里的Direct Rules
通过 firewall-cmd 工具 , 可以使用 --direct 选项在运行时间里增加或者移除链。如果不熟悉 iptables , 使用直接接口非常危险 , 因为您可能无意间导致防火墙被入侵。直接端口模式适用于服务或者程序 ,以便在运行时间内增加特定的防火墙规则。直接端口模式添加的规则优先应用
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.21 -p tcp --dport 22 -j ACCEPT
##21用ssh服务连接时使用这个特殊规则,其他的仍然使用默认域里的设置
##这个特殊规则允许21连接
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 ! -s 172.25.254.21 -p tcp --dport 22 -j ACCEPT
##让除了21之外的所有用户走这个特殊规则
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.21 -p tcp --dport 22 -j REJECT
##21会被这个特殊规则拒绝访问,客户端会提示没有权限
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.21 -p tcp --dport 22 -j DROP
##21的访问会被这个特殊规则丢弃,但是客户端会一直访问且没有失败提示,这样会浪费资源
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.21 -p tcp --dport 22 -j REJECT
##删除这个特殊规则,让它走默认域的通道
firewall-cmd --direct --get-all-rules
##查看所有添加的direct规则
6.firewalld 的地址伪装和端口转发
#双网卡相当于一个路由来给1.1.1.221伪装和端口转发,1.1.1.221的网关是172.25.254.121
#通过地址伪装,1.1.1.221可以ping通172网段的用户,即在双网卡主机上把1网段伪装成了172网段来访问服务端
##双网卡服务端设置:
firewall-cmd --permanent --add-masquerade
##开启伪装功能,给1.1.1.221设置网关后它可以连上172网段的主机,但是是以172.25.254.121的身份连接的
firewall-cmd --reload ##重新读取火墙策略
sysctl -a | grep forward ##查看路由ip转发功能是否打开
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=1.1.1.221 --perman
##只要是访问这个双网卡的22端口,就把它转发到221上
firewall-cmd --reload ##重新读取火墙策略
二、iptables
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
##Iptables 是用来设置、维护和检查Linux内核的IP包过滤规则的。
systemctl stop firewalld ##关闭火墙
systemctl start iptables ##开启iptables
service iptables save ##保存当前策略
vim /etc/sysconfig/iptables
##iptables当前策略保存的文件,保存后刷新策略会刷掉所有内容,但是重启iptable服务后,会读取这个文件加载曾经保存的策略
iptables -F ##刷掉表中的所有策略(清除所有策略),当没有用-t指定表名称时默认时filter
iptables -nL ##查看表中的策略,不用-t指定默认为filter表
systemctl restart iptables ##重启iptables服务
iptables -nL ##查看是否读取了上次文件中保存的策略
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 ##拒绝所有主机的数据来源,客户端会提示没有权限,DROP则客户端不能访问也没有提示
iptables -N redhat ##增加链redhat
iptables -E redhat westos ##改变链名称
iptables -X westos ##删除westos链
iptable -D INPUT 2 ##删除INPUT链中的第二条策略
iptables -I INPUT -p tcp --dport 80 -j REJECT ##插入策略到INPUT中的第一条
iptables -R INPUT 1 -p tcp --dport 80 -j ACCEPT ##修改第一条策略
iptable -P INPUT DROP ##把INPUT表中的默认策略改为drop
2.iptables 下(地址)伪装和(端口)转发的实现(这个实验需要nat表的网络地址转换功能)
sysctl -a | grep forward ##查看路由ip转发功能是否打开
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 1.1.1.221:22
##路由前端口转发,连接172.25.254.121的22端口会转到1.1.1.221的22端口,客户端需要设置网关
##是先到双网卡172网段,再通过内核到双网卡的1网段,然后再到客户的1网段,所以路由前是eth0,即172网段
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.121
##路由后地址伪装,将1.1.1.221的地址伪装成172.25.254.121来访问172网段的ip
##客户1网段先访问双网卡的1网段,通过内核伪装成172网段到达其他主机,所以这里的路由后是eth0