centos7-防火墙

    netfilter/iptables是集成在linux2.4.x版本内核中的包过滤防火墙系统。linux

    该框架能够实现数据包过滤,网络地址转换以及数据包管理功能。linux中的防火墙系统包括两个部分:netfilte和iptables。netfilte能够对本机全部流入、流出、转发的数据包进行查看、修改、丢弃、拒绝等操做。因为netfilter在内核空间中,用户一般没法接触内核和修改内核,此时须要命令行工具,通常使用iptables,firewalld等工具。使用iptables能够添加、删除具体的过滤规则,iptables默认维护四个表和五个链,全部的防火墙策略规则都将被分别写入表和链中。centos7系统防火墙模块存放在/lib/modules/3.10.0-514.el7.x86_64/kernel/net/netfilter/目录下,当须要某个模块功能时,能够经过modprobe加载。vim

    centos7在原有的netfilter/iptables架构上又增长了firewalld。iptables工具是一个比较低级别的工具,仅能够调整ipv4的防火墙规则,因此在centos7上使用了firewalld做为默认的用户防火墙工具,但当用户使用firewalld编写ipv4防火墙规则时,firewalld依然是调用了底层的iptables实现具体的功能,只是这个调用过程对用户是透明的。
后端


1、iptablescentos

    默认的iptables规则表又fileter表(过滤规则表),nat表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表)。每一个规则表中包含多个数据链:INPUT(入站数据过滤)、OUTPUT(出站数据过滤)、FORWARD(转发数据过滤)、PREROUTING(路由前过滤)和POSTROUTING(路由后过滤),防火墙规则须要写入到这些具体的数据链中。bash

如下为流程服务器

1)外部主机发送数据包给防火墙本机,数据将会通过PEROUTING与INPUT链;网络

2)若是防火墙本机发送数据包到外部主机,数据通过OUTPUT于POSTRTOUTING链架构

3)若是防火墙做为路由负责转发数据,则数据通过PEROUTING链、FORWARD链已经POSTROUTING链框架


iptables的表与链的关系以下所示:
运维


1.1 iptables的语法

 iptables定义规则的方式比较复杂:

 格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION

 -t table :3个filter nat mangle

 COMMAND:定义如何对规则进行管理

 chain:指定你接下来的规则究竟是在哪一个链上操做的,当定义策略的时候,是能够省略的

 CRETIRIA:指定匹配标准

 -j ACTION :指定如何进行处理

选项:

-t                      指定须要维护的防火墙规则表,不使用-t时,则默认操做对象为filter表

-A                     追加防火墙规则

-D                     删除防火墙规则

-I                       插入防火墙规则

-F                      清空防火墙规则

-L                      列出防火墙规则

-R                      替换防火墙规则

-Z                      清空防火墙数据表统计信息

-P                      设置默认规则


匹配参数:

[!]-p                    匹配协议,!表明取反

[!]-s                     匹配源地址

[!]-d                    匹配目标地址

[!]-o                    匹配入站网卡接口

[!]--sport            匹配源端口

[!]--dport            匹配目的端口

[!]--src-range      匹配目标地址范围

[!]--dst-range     匹配目标地址范围

[!]--limit              匹配数据表速率

[!]--mac-source   匹配源mac地址

[!]--sports            匹配多个源地址

[!]--dports            匹配多个目的地址

[!]--state               匹配状态(INVALID,ESTABLISHED,NEW,EELATED)

[!]--string              匹配应用层字符串


触发动做:

ACCEPT                容许数据包经过

REJECT                 拒绝数据包经过

LOG                      将数据包信息记录syslog日志

DNAT                   目标地址转换

SNAT                    源地址转换

MASQUERADE     地址欺骗

REDIRECT             重定向


iptables防火墙规则的顺序很是重要,内核按顺序检查这些规则,若是发现有匹配的股则条目按,则马上执行相关动做,中止继续向下查找规则条目,若是全部的防火墙规则都未能匹配成功,

则按照默认策略处理。使用-A选项添加防火墙规则会将该规则追加到整个链的最后,而使用-I选项添加的规则则默认会插入到链中做为第一条规则。下面经过实例简单演示iptables命令的使用方法。

iptables -nL                         #查看filter表的全部规则
iptables -t nat -nL                  #查看nat表全部的规则
iptables -F                          #清空filter表中全部的规则
iptables -A INPUT -s 192.168.0.1 -j DROP         #向filter表中添加一条新的入站规则,丢弃192.168.0.1主机发送给防火墙本机的全部的数据包
iptables -I INPUT -s 192.168.0.22 -p icmp -j REJECT       #向filter表中插入一条新的入站规则,拒绝192.168.0.22 ping
iptables -nL --line-number           #查看表中防火墙规则并显示规则编号
iptables -D INPUT 1                  #删除表中INPUT链的第一条规则
iptables -R INPURT 2 ! -s 192.168.0.254 -j REJECT        #替换filter表中INPUT链的第二条规则,拒绝192.168.0.254以外的任何主机链接防火墙本机
iptables -t fileter -p INPUT ACCEPT  #修改filte表中INPUT链的默认规则为接收数据包
iptables -I INPUT -s 192.168.0.10 -p tcp --dport 22 -j LOG #将192.168.0.10主机发送给防火墙本机的22端口的全部数据包信息记录到messages日志
iptables -I INPUT -i eth1 --p tcp --dport 80 -j ACCEPT     #容许任何主机从eth1网络接口访问本机的80端口

 

1.2运用举例

 1) 容许任意客户端访问服务器主机提供的平常服务(HTTP,HTTPS,DNS,NTP,SMTP,POP3,SSH),在linux系统中,/etc/services文件能够找到各类服务所对应的标准端口信息

image.png

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp --dport 123 -j ACCEPT
iptables -P INPUT -P INPUT DROP
iptables -P INPUT -p OUTPUT ACCEPT


2)使用SNAT共享上网,服务器做为软路由,内部全部的192.168.0.0/24网端内的主机链接外网时,防火墙自动将全部源地址修改成公网IP,最后互联网将信息返回给路由后,由路由再转交给真正的后端主机。防火墙源地址转换(SNAT)规则须要被写入到NAT表中的POSTROUTING链

vim /etc/sysctl.conf

image.png

systctl -p      #从新加载内核参数配置文件
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 124.125.199.84    #配置nat表,使用snat方式将源地址段192.168.0.0/24  转换为124.125.199.84公网地址


3)配置DNAT,外部网络公网IP访问内网业务服务器

sed -i '$a\net.ipv4.ip_forward = 1' /etc/sysctl.conf   #配置文件最后一行添加
systctl -p       #从新加载内核配置文件
iptables -t nat -I PREROUTING -d 124.126.199.84 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100   #配置nat表,使用dnat方式,访问公网地址80端口转换192.168.0.100
iptables -t nat -I PREROUTING -d 124.126.199.84 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.101



4)限制单位时间内数据包的个数,防止网络***发送大量无效的数据包给服务器,形成服务器没法响应正常的请求包

iptables -I INPUT -m limit --limit 500/sec -j ACCCEPT   #当每秒数据包个数为500的时候接收入站链接,不然拒绝链接
iptables -P INPURT DROP


5)根据数据链接状态设置防火墙规则,放行全部的出站数据包,拒绝入站的新链接请求与无效连接,放行入站的回应请求

iptables -F
iptables -A INPUT -m state --state NEW -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT


6)防火墙设置规则,记录192.168.0.1 到192.168.0.22地址段内全部的主机发送给路由要求转发的数据包,并容许转发这些数据包

iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.10 -p tcp --dport 80 -j LOG
iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.10 -p tcp --dport 80 -j ACCEPT


1.4 iptables备份与还原

    默认的iptables防火墙规则会马上生效,可是若是不保存,当计算机重启后,全部的规则将会丢失,因此须要即时保存。

iptables软件包提供了两个很是有用的工具,iptables-save和iptables-restore,能够方便的处理大量的防火墙规则。centos7系统中的防火墙规则默认保存再/etc/sysconfig/iptables文件中,使用iptables-save将规则保存至该文件中实现保存防火墙规则的做用,重启后会自动加载该文件中的规则。若是使用iptables-save将规则保存到其余位置,能够实现备份防火墙规则的做用。当防火墙规则须要作还原时,可使用iptables-restore将备份文件直接导入当前防火墙规则。

iptables-save > /etc/sysconfig/iptables
iptables-save > firewall.bak
iptables-restore < firewall.bak



2、firewalld

firewalld将全部的网络流量都分类汇聚到zones中,它经过zones管理防火墙规则,每个进入系统的数据包,都会首先检查源IP地址和接口,若是与某个zone匹配,则该zone的规则将生效。而每一个zone都会有开启或关闭服务和端口的列表,以实现容许或拒绝连接服务和端口。若是数据包的源IP地址和网卡接口都不能和任何zone匹配,则该数据包将匹配默认zone,通常状况下是一个public的默认zone。firewalld会提供block,dmz,drop,external,home,internal,public,trusted,work这九个zone。好比有一个数据包从eno1网卡进入本机,根据规则进入work这个zone而在work这和zone中有容许访问http服务的规则,则最后该数据包将能够进入本机并访问http服务

大部分zone都定义的有本身的容许规则,规则经过端口/协议(631/udp)或者预约义的服务(ssh)这种形式设置,若是数据包没有匹配这些容许的规则,则该数据包通常会被防火墙拒绝。可是若是有名为trusted的zone,默认会运行全部的数据流量,若是有一个数据包进入了该zone,则被容许访问全部的资源。

具体的firwalld预约义zone及其描述信息以下所示:


drop(丢弃):任何接受的网络数据包都被丢弃,没有任何回复,

仅能有发送出去的网络链接(数据包不能进来,可是能够出去)


block(限制):任何接受的网络链接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝。(和drop相比,比较宽松一些,主要是为了针对icmp)


piblic(公共):在公共区域内使用,不能相信网络内其余计算机不会对你形成危害,只能接受通过选取的链接。


external(外部):特别是为路由器启用了假装功能的外部网,你不能信任来自网络的其余计算,不能相信他们不会对你形成伤害,只能接受通过选择的链接。


dmz(非军事区):用于你的非军事区内的电脑,此区域可公开访问,能够有限的进入你的内部网络,仅仅接受通过选择的链接。


work(工做):用于工做区,你能够基本信任网络内的其余电脑不会对你形成危害,仅仅接收通过选择的链接。


home(家庭):用于内部网络,你能够基本上信任网络内其余电脑不会对你形成危害,仅仅接收通过选择的链接。


internal(内部):用于内部网络,你能够基本上信任网络内其余电脑不会对你形成危害,仅仅接收通过选择的链接。


trusted(信任):可接受全部的网络链接。


2.1 firewalld-cmd命令

   可使用firewall-cmd命令来管理防火墙规则,语法格式以下:

  用法:

firwall-cmd [OPTIONS....]

选项:

--get-default-zone                        获取默认zone信息

--set-default-zone=<zone>          设置默认zone

--get-active-zones                          显示当前正在使用的zone信息

--get-zones                                       显示系统预约义的zone

--get-zone-of-interface=<interface>      查询某个接口与哪一个zone匹配

--get-zone-of-source=<source>[/<mast>/]        查询某个源地址与哪一个zone匹配

--list-all-zones                                            显示全部的zone信息的全部规则

--add-service=<service>                            向zone中添加容许访问的服务

--add-port=<portid>[-<portid>]/<protocol>       向zone中添加容许访问的端口

--add-interface=<interface>                        将接口与zone绑定

--add-source=<source>[/<mask>/]            将源地址与zone绑定

 


--list-all                                         列出某个zone全部的规则信息

--remove-service=<service>       从zone中移除容许某个服务的规则

--remove-port=<portid>[-<portid>]/<protocol>            从zone中移除容许的某个端口规则

--remove-source=<source>[/<mask>]            将源地址与zone解除绑定

--remove-interface=<interface>                     将网卡接口与zone接触绑定

--permanent                                                      设置永久有效的规则,默认的状况规则都是临时的

--reload                                                            从新加载防火墙规则

firewall-cmd --get-default-zone            #查看默认zone,为public
firewall-cmd --set-default-zone=trusted     #设置默认zone为trusted
firewall-cmd --get-active-zones            #显示当前正在使用的zone信息

image.png

firewall-cmd --get-zones                    #显示系统预约义的zone,默认为九个zone

image.png

firewall-cmd --get-services                #显示系统预约义的服务名称

image.png

firewall-cmd --get-zone-of-interface=ens192                #查询接口匹配的zone

image.png

firewall-cmd --list-all-zones                        #显示全部的zone以及对应的规则信息

image.png

firewall-cmd --add-service=ftp --zone=public                    #public中添加容许访问ftp服务的规则
firewall-cmd --remove-service=ftp --zone=public                 #public中删除容许访问ftp服务的规则
firewall-cmd --add-port=3306/tcp --zone=public                   #public中添加容许访问3306服务的规则
firewall-cmd  --remove-port=3306/tcp --zone=public                                     #public中删除容许访问3306服务的规则
firewall-cmd  --add-interface=eno1 --zone=public                                       #将网卡eno1与public绑定,流量接入该接口匹配public规则
firewall-cmd  --remove-port=eno1 --zone=public                                          #将网卡eno1与public解绑定
firewall-cmd  --add-source=1.1.1 --zone=public                                           #将源地址1.1.1.1与public绑定,之后该主机访问本机时匹配public中的规则
firewall-cmd  --list-all --zone=public                                                   #查看public中这个zone的规则列表
firewall-cmd  --permanet --add-port=3306/tcp --zone=public                               #public中添加一条永久规则
firewall-cmd  --reload                                                                    #重启防火墙

    


通常在实际运维中,咱们主要使用 iptables作为防火墙,将firewalld服务禁用,避免干扰

相关文章
相关标签/搜索