前言
iptables与firewalld防火墙管理工具在linux发行版Redhat7系列应用较为宽泛。
UFW则是在linux发行版Ubuntu下进行治理防火墙的一款管理工具。
在选用防火墙工具的时候,运维或者是开发人员往往会纠结应用哪个。这里给出倡议,应用iptables工具治理就禁用firewalld,应用firewalld工具治理就禁用iptables,二者选其一即可,防止产生凌乱。
此篇文章不会在原理上做深究,次要以实用性为主,原理能够浏览相干书籍缓缓品尝。
注释
一、Netfilter内核模块
无论是应用iptables
还是firewalld
,无妨先理解一下Netfilter内核模块
什么是Netfilter:linux操作系统核心层外部的一个数据包解决模块。
Hook point:数据包在Netfilter中的挂载点。(PRE_ROUTING INPUT OUTPUT FORWORD POST_ROUTING)
1、netfilter的体系结构
网络数据包的的统信次要通过以下相干步骤,对应netfilter定义的钩子函数,具体能够参考源码介绍。
NF_IP_PRE_ROUTING:
网络数据包进入零碎,通过简略检测后,数据包转交给改函数进行解决,而后依据零碎设置的规定对数据包进行解决,如果数据包不被抛弃则交给路由函数进行解决。在该函数中能够替换IP包的目标地址,及DNAT。
NF_IP_LOCAL_IN:
所有发送给本机的数据包都要通过该函数进行解决,该函数依据零碎设置的零碎规定对数据包进行解决,如果数据包不被抛弃则交给本地的应用程序。
NF_IP_FORWARD:
所有不是发送给本机的数据包都要通过该函数进行解决,该函数会依据零碎设置的规定对数据包进行解决,如数据包不被抛弃则转给
NF_IP_POST_ROUTING解决。
NF_IP_LOCAL_OUT:
所有从本地应用程序进去的数据包必须通过该函数进行解决,该函数会依据零碎设置的规定对数据包进行解决,如数据包不被抛弃则交给路由函数进行解决。
NF_IP_POST_ROUTING:
所有数据包在发送给其它主机之前须要通过该函数进行解决,该函数会依据零碎设置的规定对数据包进行解决,如数据包不被抛弃,将数据包发给数据链路层。在该函数中能够替换IP包的源地址,即SNAT。
数据包通过linux防火墙的处理过程如下图
2、包过滤
每个函数都能够对数据包进行解决,最根本的操作是对数据包进行过滤。系统管理员能够通过iptables工具来向内核模块注册多个过滤规定,并且指明过滤规定的优先权。设置完当前每个钩子依照规定进行匹配。如果规定匹配,函数就会进行一些过滤操作,这些操作次要如下:
- NF_ACCEPT:持续失常的传递包。
- NF_DROP:抛弃包,阻止传送。
- SF_STOLEN:曾经接管了包,不须要继续传送。
- NF_QUEUE:排列包。
- NF_REPEAT:再次应用钩子。
篇幅受限,介绍过多反而不好。对于包过滤就介绍这么多,后续会进一步欠缺。
二、firewalld防火墙工具
以Redhat系列为例子做简略的介绍,相熟centos的基本上能够套用。
firewalld简介
在RHEL7之前的版本中,iptables和ip6tables作为防火墙配置管理工具。在RHEL7中防火墙管理工具变成了firewalld,它是一个反对自定义网络区域(zone)及接口安全等级的动静防火墙管理工具。利用firewalld,用户能够实现许多弱小的网络性能,例如防火墙、代理服务器以及网络地址转换。
之前版本的system-config-firewall和lokkit防火墙模型是动态的,每次批改防火墙规定都须要齐全重启。在此过程中包含提供防火墙的内核模块netfilter须要卸载和从新加载。而卸载会毁坏已建设的连贯和状态防火墙。与之前的动态模型有区别,firewalld将动静地治理防火墙,不须要重新启动防火墙,也不需从新加载内核模块。但firewalld服务要求所有对于防火墙的变更都要通过守护过程来实现,从而确保守护过程中的状态与内核防火墙之间的一致性。
许多不理解的人,认为RHEL7中的防火墙从iptables变成了firewalld。其实不然,无论是iptables还是firewalld都无奈提供防火墙性能。他们都只是linux零碎中的一个防火墙管理工具,负责生成防火墙规定与内核模块netfilter进行“交换”,真正实现防火墙性能的是内核模块netfilter。
firewalld提供了两种管理模式:其一是firewall-cmd命令管理工具,其二是firewall-config图形化管理工具。在之前版本中的
iptables将规定保留在文件/etc/sysconfig/iptables中,当初firewalld将配置文件保留在/usr/lib/firewalld和/etc/firewalld
目录的xml文件中。
尽管RHEL7中将默认的防火墙管理工具从iptables换成了firewalld,但在RHEL7中依然能够应用iptables的,只须要通过yum命令进行装置启用iptables服务即可。换句话说,红帽将这个选择权交给了用户。
上面给出RHEL7的防火墙堆栈
1、firewalld命令行模式
1.1、区域抉择
以后操作系统装置实现后,防火墙会设置一个默认区域,将接口退出到默认区域中。用户配置防火墙的第一步是获取默认区域并批改,对于操作如下:
查看以后零碎中所有区域
firewall-cmd --get-zones
查看以后默认的区域
firewall-cmd --get-default-zone
查看以后已激活的区域
firewall-cmd --get-active-zones
获取接口ens33所属区域
firewall-cmd --get-zone-of-interface=ens33
批改接口所属区域
firewall-cmd --permanent --zone=internal --change-interface=ens33
1.2、firewalld服务重载、重启、进行
从新加载防火墙配置
firewall-cmd --reload
重启防火墙(redhat系列)
systemctl restart firewalld.service
长期敞开防火墙
systemctl stop firewalld.service
开机启用防火墙
systemctl enable firewalld.service
开机禁止防火墙
systemctl disable firewalld.service
查看firewalld的运行状态
firewall-cmd --state
1.3、firewalld凋谢端口(public)
公共区域设置凋谢21端口永恒失效并写入配置文件(参数:--permanent)
#参数:--permanent,设置即立即失效并且写入配置文件firewall-cmd --zone=public --add-port=21/tcp --permanent
查问防火墙端口21是否凋谢
firewall-cmd --zone=public --query-port=21/tcp
移除凋谢的端口21
firewall-cmd --zone=public --remove-port=21/tcp --permanent
1.4、区域规定批改
查问防火墙规定列表
firewall-cmd --zone=public --list-all
新增一条区域规定httpd服务
firewall-cmd --permanent --zone=internal --add-service=http
验证规定
firewall-cmd --zone=internal --list-all
2、firewalld图形化界面
下面的简介也介绍到了firewalld提供了两种管理模式:其一是firewall-cmd
命令管理工具,其二是firewall-config
图形化管理工具。在之前版本中的iptables将规定保留在文件/etc/sysconfig/iptables
中,当初firewalld将配置文件保留在/usr/lib/firewalld
和/etc/firewalld
目录的xml文件中。
图形化界面中批改接口区域能够应用NetworkManager,也能够应用firewall-config工具。NetworkManager应用办法:关上终端执行命令nm-connection-editor
,如下图弹出对话框:
2.1、图形化界面NetworkManager
终端执行:nm-connection-editor
2.2、图形化界面firewall-config
终端执行:firewall-config
三、iptables防火墙工具
1、装置iptables
如果是centos6,默认是装置了iptables。
如果是centos7或者Redhat7系列,默认没有装置iptables。你须要敞开默认启动的firewalld,二选一即可。
长期敞开firewalld
systemctl stop firewalld
开机禁用firewalld
systemctl disable firewalld
开机启用firewalld
systemctl enable firewalld
通过yum在线装置iptables,查看是否装置了iptables
systemctl status iptables.serviceservice iptables status
装置iptables
yum -y install iptables
降级iptables
yum update iptables
装置iptables-services
yum -y install iptables-services.x86_64
设置iptables为开机自启
systemctl enable iptables.service
iptables规定组成
- ACCEPT(接管,容许通过)
- DROP(抛弃数据包不做任何反馈)
- REJECT(抛弃数据包,客户端有对应音讯返回)
查问曾经设置的规定:-L命令
#个别配合-n命令应用iptables -L#不显示主机地址iptables -nL
革除原来设置的规定:-F命令
iptables -F
删除某一条曾经设置的规定:-D命令
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
2、场景一放通端口
插入一些规定:-I命令,放通80、22、10~21(一段)这些端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
设置某一个固定的IP拜访80端口:-s 192.168.xxx.xxx
iptables -I INPUT -p tcp -s (你的IP地址) --dport 80 -j ACCEPT
ssh近程连贯本地服务器或者云服务器须要默认启用的端口
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
设置10~21端口凋谢拜访
iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT
设置icmp规定容许拜访
iptables -I INPUT -p icmp -j ACCEPT
留神:容许本机能够拜访本机,本机拜访外网
解决本机能够拜访本机(telnet 127.0.0.1 22),增加-i lo(网卡)规定。
设置规定
iptables -I INPUT -i lo -p tcp -j ACCEPT
本机测试拜访外网
curl https://www.baidu.com
设置规定
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
在设置的最初追加一条规定:-A命令
回绝xx规定
iptables -A INPUT -j REJECT
3、场景二
ftp被动模式下iptables的规定配置(不倡议)
ftp被动模式下iptables的规定配置(理论利用,举荐)
4、场景三
工作中的一些罕用配置,设置好规定后保留到配置文件。chkconfig iptables on 设置开机启动规定。
snat(对原地址,发动地址)规定设置,dnat(指标地址,发往的地址)规定设置。
5、iptables防攻打企业应用
iptables防攻打企业应用(依据理论业务设置)
利用iptables防CC攻打
connlimit模块
作用: 用于限度每一个客户端IP的并发连接数。
参数: --connlimit-above n
(次数),限度并发数
例如,限度次数为100
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
测试,限度某一固定IP并发次数
iptables -I INPUT -p tcp --dport 80 -s [ip地址] -m connlimit --connlimit-above 10 -j REJECT
6、limit模块
作用: 限速,管制流量
例如
iptable -A INPUT -m limit --limit 3/hour
--limit-burst 5
,默认值为5
在设置最初追加一条过滤规定
iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
回绝其它规定拜访
iptables -A INPUT -p icmp -j DROP
设置完,测试接限度的IP地址:
#测试受限IP地址ping 192.168.245.139
2、配置文件新增规定
文中介绍过iptables装置后的配置文件所在目录。
/etc/sysconfig/iptables
批改配置文件
vim /etc/sysconfig/iptables
四、UFW防火墙工具
Uncomplicated Firewall
简称UFW,是Ubuntu零碎上默认的防火墙组件。UFW是为轻量化配置iptables而开发的一款工具。
UFW 提供一个十分敌对的界面用于创立基于IPV4,IPV6的防火墙规定。UFW 在 Ubuntu 8.04 LTS 后的所有发行版中默认可用。
UFW 的图形用户界面叫Gufw。
1、开启与敞开防火墙
开启防火墙
ufw enable
敞开防火墙
ufw disable
2、显示防火墙状态
2.1、显示防火墙状态
ufw status
2.2、查看防火墙具体状态
ufw status verbose
3、容许与阻止
3.1、减少一条示意容许的规定
ufw allow
3.2、容许通过 21 连贯端口应用 tcp 和 udp 协定连线本机
ufw allow 21
3.3、减少一条示意阻止的规定
ufw deny
阻止通过 21 连贯端口应用 tcp 协定连线本机
ufw deny 21/tcp
3.4、减少一条示意回绝的规定
ufw reject
4、以服务名称代表连贯端口
能够采纳
less /etc/services
<H5 align=center>by 龙腾万里sky 原创不易,白嫖有瘾</H5>