Top

Linux-防火墙

IPTABLES和FIREWALLD

我的环境是Centos7.4!3台服务器:Zabbix、Proxy、Agent

192.168.237.128-server|192.168.237.129-client|192.168.237.130-server-2
↓原理
Iptables
1.Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具. 2.它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制. 3.虽然Netfilter/iptables IP信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter和iptables组成. Netfilter组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集. Iptables组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易. 4.它主要工作在OSI七层的二、三、四层.
Firewall
1.从CentOS7开始,默认是没有iptables的,而使用了firewall防火墙,FirewallD提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具. 2.firewalld和iptables之间的关系,firewalld提供了一个daemon和service,还有命令行和图形界面配置工具,它仅仅是替代了iptablesservice 部分,其底层还是使用 iptables作为防火墙规则管理入口. 3.firewalld使用python语言开发,在新版本中已经计划使用c++重写daemon部分.

1. IPTABLES

↓↓说明↓↓

Iptables称为静态防火墙.当Iptables的规则变更的时候,先会对旧的防火墙规则进行清空,然后重新加载所有防火墙规则.
Iptables的配置文件是/etc/sysconfig/iptables中.用户将防火墙规则添加进/etc/sysconfig/iptables配置文件当中,再执行命令 service iptables reload使变
更的规则生效.

1.1 Iptables-数据包流程

无法显示
数据包先经过PREOUTING,由该链确定数据包走向:
1.目的地址是本地,则发送到INPUT,让INPUT决定是否接收下来送到用户空间,流程为①--->②.
2.若满足PREROUTING的nat表上的转发规则,则发送给FORWARD,然后再经过POSTROUTING发送出去,流程为: ①--->③--->④--->⑥.
3.主机发送数据包时,流程则是⑤--->⑥.
*.其中PREROUTING和POSTROUTING指的是数据包的流向,如上图所示POSTROUTING指的是发往公网的数据包,而PREROUTING指的是来自公网的数据包.
↓加深的是经常用到的.
无法显示

1.2 Iptables-四表五链

↓Iptables中的四张表和五条链.
无法显示

1.3 Iptables-Filter(默认)

Filter表为iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
1.INPUT链 – 处理来自外部的数据.
2.OUTPUT链 – 处理向外发送的数据.
3.FORWARD链 – 将数据转发到本机的其他网卡设备上.

1.4 Iptables-Nat

1.PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT).
2.POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT).
3.OUTPUT链 – 处理本机产生的数据包.
↓Iptables中的SNAT.
iptables -t nat -A POSTROUTING -s 【内网ip】/24 -o ens32(注意网卡信息) -j SNAT --to 【外网ip(固定)】 或 如果外网不是固定的那么启用一下的 iptables -t nat -A POSTROUTING -s 【内网ip】/24 -o ens32 -j MASQUERADE
↓Iptables中的DNAT.
Iptables -t nat -A POSTROUTING -s 192.168.134.128/32 -j SNAT --to-source 192.168.134.129 Iptables -t nat -A PREROUTING -d 192.168.134.129 -p tcp --dport 80 -j DNAT --to-destination 192.168.134.128:80 其中192.168.134.129是本地ip。192.168.134.128是可以访问80的ip

2. FIREWALLD

↓↓说明↓↓

Firealld称为动态防火墙.它解决了Iptablees的问题,任何规则的变更都不需要对整个防火墙进行重新加载.
firewalld将配置储存在/usr/lib/firewalld/和/etc/firewalld/中的各种XML文件里,其中/etc/firewalld是启动目录,而/usr/lib/firewalld就相当于模版目录.

2.1 Firewalld-默认区域

↓查看全部区域.
[root@server ~]# firewall-cmd --get-zones block dmz drop external home internal public trusted work
↓查看默认区域.
[root@server ~]# firewall-cmd --get-default-zone public

2.2 Firewalld-区域说明

drop(丢弃)
任何接收的网络数据包都被丢弃,没有任何回复.仅能有发送出去的网络连接.
block(限制)
任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝.
public(公共)
在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的连接.
external(外部)
特别是为路由器启用了伪装功能的外部网.您不能信任来自网络的其他计算,不能相信它们不会对您的计算机造成危害,只能接收经过选择的连接.
dmz(非军事区)
用于您的非军事区内的电脑,此区域内可公开访问,可以有限地进入您的内部网络,仅仅接收经过选择的连接.
work(工作)
用于工作区.您可以基本相信网络内的其他电脑不会危害您的电脑。仅仅接收经过选择的连接.
home(家庭)
用于家庭网络.您可以基本信任网络内的其他计算机不会危害您的计算机。仅仅接收经过选择的连接.
internal(内部)
用于内部网络。您可以基本上信任网络内的其他计算机不会威胁您的计算机.仅仅接受经过选择的连接.
trusted(信任)
可接受所有的网络连接.
*.指定其中一个区域为默认区域是可行的.当接口连接加入了NetworkManager,它们就被分配为默认区域.安装时firewalld里的默认区域被设定为公共区域.

2.3 Firewalld-服务

↓服务讲解.
1.在/usr/lib/firewalld/services/目录中,还保存了另外一类配置文件,每个文件对应一项具体的网络服务,如ssh服务等.与之对应的配置文件中记录了各项服务所使用 的tcp/udp端口,在最新版本的firewalld中默认已经定义了70+种服务供我们使用. 2.当默认提供的服务不够用或者需要自定义某项服务的端口时,我们需要将service配置文件放置在/etc/firewalld/services/目录中.
↓好处.
1.通过服务名字来管理规则更加人性化. 2.通过服务来组织端口分组的模式更加高效,如果一个服务使用了若干个网络端口,则服务的配置文件就相当于提供了到这些端口的规则管理的批量操作快捷方式.
↓查看当前可用的服务.
[root@server ~]# firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quasselradius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
↓查看当前允许使用的服务.
[root@server ~]# firewall-cmd --list-services ssh dhcpv6-client
↓添加http服务.
[root@server ~]# firewall-cmd --add-service=http --permanent success [root@server ~]# firewall-cmd --reload success [root@server ~]# firewall-cmd --list-services ssh dhcpv6-client http
↓可以看到配置文件中多了一个http服务.
[root@server ~]# cat /etc/firewalld/zones/public.xml
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer.
Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="http"/>
<port protocol="tcp" port="8080"/>
</zone>
↓一般用端口添加的比较多.
[root@server ~]# firewall-cmd --add-port=8080/tcp --permanent success [root@server ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens33 br0 ens34 sources: services: ssh dhcpv6-client http ports: 8080/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:


        
 上一篇

  Centos, K8S