Linux系统管理初步(四)系统防火墙控制程序iptables

1、Linux的防火墙

防火墙是平常应用中一个重要的维护内容,从防火墙开始咱们才真正接触生产环境,网络安全愈来愈受重视,学好这部份内容是学好运维的重要一步。html

通常状况下,桌面级环境中不多有人关注过防火墙,甚至杀毒软件都不装,对防火墙的操做固然不熟悉。真实生产环境中不可能不开防火墙。linux

linux的防火墙技术的核心是netfilter,firewalld和iptables都是用来操做netfilter的工具,他们的区别参加这篇文章centos

简单来讲他们都只是操做netfilter的工具,CentOS6以前用iptables、CentOS7改成firewalld,同时firewalld能够识别部分iptables的配置,并将他做用到default zone上。安全

Linux系统管理初步(四)系统防火墙控制程序iptables

2、iptables工具学习环境搭建

由于centos7默认的防火墙是firewalld,因此咱们先要把firewalld停用,而后在换成centos6的iptables,前期准备工做:关闭selinux、关闭centos7带的firewalld而后启动iptables-service。bash

(一)关闭selinux功能

一、临时关闭网络

setenforce 0 关闭命令
getenforce 查看selinux状态命令运维

Linux系统管理初步(四)系统防火墙控制程序iptables

只要确认getenforce状态是Permissive就能够了。只是暂时关闭,系统重启后仍会开启,须要经过修改配置文件方式永久关闭。tcp

二、永久关闭
永久关闭该功能须要修改selinux的配置文件ide

vi /etc/selinux/config工具

Linux系统管理初步(四)系统防火墙控制程序iptables
将SELINUX=enforcing改成disabled
注意不能改为下面那个SELINUXTYPE=disabled,不然系统会启动不了。

(二)关闭centos7的firewalld

systemctl stop firewalld #关闭firewalld功能
systemctl disable firewalld #中止firewalld开机启动

操做截图
Linux系统管理初步(四)系统防火墙控制程序iptables
Linux系统管理初步(四)系统防火墙控制程序iptables
这一步不像上面那步有操做过程提示,只要没报错就ok了。

(三)启动centos6或者5支持的netfilter防火墙

yum install iptables-services #安装netfilter功能,也就是常说的iptables,注意包名末尾是iptables和services复数形式,敲成iptables-service就没这个包
systemctl enable iptables #设置开机启动iptables服务
systemctl start iptables #开启iptables程序
iptables -nvL #查看iptables的默认规则

操做截图
Linux系统管理初步(四)系统防火墙控制程序iptables

Linux系统管理初步(四)系统防火墙控制程序iptables
1是设置开机启动,2是在当前bash下启动iptables,3是查看iptables的默认规则。

3、netfilter的表(table)与链条(chain)

netfilter使用5个表与5个链条控制网口传输过来的包的,哪些须要丢弃,哪些容许进来等等。

5个表分别是:
filter:主要用于过滤数据包,是系统预设的表。内含3个链:INPUT、OUTPUT、FOWARD,就是说数据包只要在这三个链中,你就能够用filter表中的规则来处理他。
nat:主要用于网络地址转换,内含3个链:PREROUTING、OUTPUT、POSTROUNTING。
mangle:主要用于给包作标记,而后根据标记处理包。内含所有五个链
raw:能够用来设定不被系统跟踪的数据包,这个表能够指定某些端口进来的数据不被跟踪。内含2个链:PREROUNTING和OUTPUT
security:在Centos6中没有,用于强制访问控制的网络规划,暂时先不研究。

5个链分别是:
PREROUTING:数据包进入路由表以前
INPUT:经过路由表后目的地为本机
FORWARDING:经过路由表后,目的地不为本机。
OUTPUT:由本机产生,向外转发。
POSTROUTING:发送到网卡接口前

netfilter启动后,网络数据包在系统中的流向图:(转载至wiki)
Linux系统管理初步(四)系统防火墙控制程序iptables

4、iptables程序

iptables用于操控netfilter防火墙,他能直接添加、修改或者删除PREROUTING、INPUT、FORWARDING、OUTPUT、POSTROUTING5个链中的规则,达到过滤数据包的目的

iptables命令写法

iptables -t 表名 <-A/I/D/R> 链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动做

选项含义
-t<表>:指定要操纵的表;
-A:向链规则中添加条目;
-D:从链规则中删除条目;
-I:向链规则中插入条目;
-R:替换链规则中的条目;
-L:显示链规则中已有的条目;
-F:清空防火墙规则;
-Z:清空链规则中包计数器与链接计数器;
-N:建立新的用户自定义规则链;
-P:定义链规则中的默认处置方式,如;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型,;
-s:指定要匹配的数据包源ip地址;
-j+动做:如何处理过滤出来的包,常见的有ACCEPT,;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
--dport
--sport

表名包括:

raw:高级功能,如:网址过滤。
mangle:数据包修改(QOS),用于实现服务质量。
nat:地址转换,用于网关路由器。
filter:包过滤,用于防火墙规则。

链名包括:

INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
PORWARD链:处理转发数据包。
PREROUTING链:用于目标地址转换(DNAT)。
POSTOUTING链:用于源地址转换(SNAT)。

动做包括:

ACCEPT:接收数据包。
DROP:丢弃数据包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
MASQUERADE:IP假装(NAT)
LOG:日志记录

5、iptables操做示例

一、显示、清空与保存操做现有的netfilter规则

iptables -nvL #显示现有规则,分表显示的
iptables -F #清空全部规则
iptables -Z #置零计数器,用于网络***分析
service iptables save #将规则保存到/etc/sysconfig/iptables文件中
systemctl restart iptables.service #重启iptables服务使指定的规则生效

Linux系统管理初步(四)系统防火墙控制程序iptables

iptables的默认规则保存在/etc/sysconfig/iptables文件下
Linux系统管理初步(四)系统防火墙控制程序iptables

二、链处理规则的增长、删除与修改

防火墙规则添加到链规则尾部

iptables -t nat -A POSTROUTING -s 192.168.81.0/24 -o ens33 -j MASQUERADE

Linux系统管理初步(四)系统防火墙控制程序iptables

防火墙规则添加到链规则头部

iptables -t nat -I POSTROUTING -s 192.168.81.0/24 -o ens33 -j MASQUERADE #与上条区别就是选项变成-I

Linux系统管理初步(四)系统防火墙控制程序iptables
删除防火墙某一条规则

iptables -t nat -D POSTROUTING -s 192.168.81.0/24 -o ens33 -j MASQUERADE #若是你记住原添加命令就这么写

iptables --

修改防火墙默认链处理规则

iptables -P DROP

三、经过配置NAT表实现路由功能

这是有必定难度的两个实验,我在两台电脑上捣鼓了两天才终于在一台电脑上捣鼓成功了示例中的功能,在没有系统学习网络排障经验前若是要顺利完整下列实验,建议从新新建两台虚拟机,不能克隆,必须新建两台虚拟机并各自安装一次操做系统。

场景一:

一号机具备两块网卡分别是ens33和ens37,ens33链接外网;ens37链接内网,IP为192.168.100.1/24。
二号机只有一块网卡ens37,IP为192.168.100.100/24,现用交换机将一号机与二号机相连,经过配置一号机nat表实现二号机可以正常访问外网。

配置步骤

一、准备测试机(待修改)

从新准备二台虚拟机,一号机新建两块网卡,ens33为外网,NAT模式与宿主机共享上网,ip设置为自动获取便可,(此实验中基本不须要xhell远程登陆一号机,直接在vmware界面中操做就行),ens37为局域网网卡,设置ip为192.168.100.1/24。
二号机新建1块网卡,ip为192.168.100.100/24 网关设置为192.168.100.1。
配置好后两台机器的ifconfig界面分别是

一号机:
Linux系统管理初步(四)系统防火墙控制程序iptables

二号机:
Linux系统管理初步(四)系统防火墙控制程序iptables

确认一下配置效果
其中一号机可以访问外网,可以ping通二号机的ip 192.168.100.100

二号机不能上外网,但能ping通一号机局域网ip 192.168.100.1
Linux系统管理初步(四)系统防火墙控制程序iptables
注意二号机在如今的状况下是不能ping通一号机的外网网卡ip(192.168.88.128)的,并且显示的要是图中所列的“netwaork unreachable”,其余显示都不对,若是是其余显示,等下你配置nat表二号机就不能访问外网。

而后按照程序关闭selinux》》关闭firewalld》》下载并开启iptables。

二、配置NAT

首先打开一号机的路由转发功能,否则不管怎么设置iptables都没用。

echo "1" > /proc/sys/net/ipv4/ip_forward

Linux系统管理初步(四)系统防火墙控制程序iptables
图是另外计算机上的图

而后配置一号机的nat表,图中的配置是我配置另外实验电脑的图,按下面的命令写。

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE #设置192.168.100.0网段转发到外网网卡上
iptables -t nat -nvL #查看规则加上去没有

Linux系统管理初步(四)系统防火墙控制程序iptables

检查效果
二号机能ping到外网了
Linux系统管理初步(四)系统防火墙控制程序iptables

小结:这个试验我作了两天,终于达到了想要的效果,以前不管怎样设置都解决不了二号机ping不到外网问题,屡次尝试后最终用两台全新安装的单独的新虚拟电脑才达到目的。回想起来在一号机上看到了firewalld的规则,zone什么的,应该是firewalld的没关掉或者有什么规则reject掉了一些包。若是重复上述实验出现问题时建议先用iptables -nvL命令看看是否是有firewalld的规则在。

场景二

一号机具备两块网卡分别是ens33和ens37,ens33链接外网;ens37链接内网,IP为192.168.100.1/24。
二号机只有一块网卡ens37,IP为192.168.100.100/24,现用交换机将一号机与二号机相连,经过配置一号机nat表二号机可以正常访问外网。
三号机为一外网主机,可以访问一号机外网网卡ip192.168.208.128,现须要在一号机上配置端口转发,使三号机可以访问到局域网内的二号机。

首先咱们把虚拟机所在的电脑当成三号机

继续操做一号机的nat表

iptables -t nat -A PREROUTING -d 192.168.208.128/32 -p tcp -m tcp --dport 1122 -j DNAT --to-destination 192.168.100.100:22
iptables -t nat -A POSTROUTING -s 192.168.100.100/32 -j SNAT --to-source 192.168.208.128

Linux系统管理初步(四)系统防火墙控制程序iptables

测试效果
Linux系统管理初步(四)系统防火墙控制程序iptables
注意主机ip还是一号机外网IP,但端口号要填1122,就是你映射端口号

Linux系统管理初步(四)系统防火墙控制程序iptables

连上了,注意看标红处的ip,你连的是局域网中的100.100,不是一号机。

5、iptables规则的备份与恢复

就两个基本操做。

一、保存设置好的规则表使其在机器重启后也生效。

service iptables save

他会把防火墙规则保存到/etc/sysconfig/iptables文件内,这个文件就是iptables的配置文件。

二、把规则表保存再特定位置,导入自定义的规则表

iptables-save > /tmp/ipt.txt #另存规则表命令,路径可自定义iptables-restroe < /tmp/ip.txt #导入自定义的规则表,路径自定义

相关文章
相关标签/搜索