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

一、Linux的防火墙

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

一般情况下,桌面级环境中很少有人关注过防火墙,甚至杀毒软件都不装,对防火墙的操作当然不熟悉。真实生产环境中不可能不开防火墙。

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

简单来说他们都只是操作netfilter的工具,CentOS6之前用iptables、CentOS7改为firewalld,同时firewalld可以识别部分iptables的配置,并将他作用到default zone上。

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

二、iptables工具学习环境搭建

因为centos7默认的防火墙是firewalld,所以我们先要把firewalld停用,然后在换成centos6的iptables,前期准备工作:关闭selinux、关闭centos7带的firewalld然后启动iptables-service。

(一)关闭selinux功能

1、临时关闭

setenforce 0 关闭命令

getenforce 查看selinux状态命令

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

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

2、永久关闭

永久关闭该功能需要修改selinux的配置文件

vi /etc/selinux/config

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

将SELINUX=enforcing改为disabled

注意不能改成下面那个SELINUXTYPE=disabled,否则系统会启动不了。

(二)关闭centos7的firewalld

systemctl stop firewalld #关闭firewalld功能

systemctl disable firewalld #停止firewalld开机启动

操作截图

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

1是设置开机启动,2是在当前bash下启动iptables,3是查看iptables的默认规则。

三、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

四、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:日志记录

五、iptables操作示例

1、显示、清空与保存操作现有的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

2、链处理规则的增加、删除与修改

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

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

3、通过配置NAT表实现路由功能

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

场景一:

一号机具有两块网卡分别是ens33和ens37,ens33连接外网;ens37连接内网,IP为192.168.100.1/24。

二号机只有一块网卡ens37,IP为192.168.100.100/24,现用交换机将一号机与二号机相连,通过配置一号机nat表实现二号机能够正常访问外网。

配置步骤

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

重新准备二台虚拟机,一号机新建两块网卡,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

注意二号机在现在的情况下是不能ping通一号机的外网网卡ip(192.168.88.128)的,而且显示的要是图中所列的“netwaork unreachable”,其他显示都不对,如果是其他显示,等下你配置nat表二号机就不能访问外网。

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

2、配置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,不是一号机。

五、iptables规则的备份与恢复

就两个基本操作。

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

service iptables save

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

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

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

iptables-restroe < /tmp/ip.txt #导入自定义的规则表,路径自定义

本文转自 whytl 51CTO博客,原文链接:

http://blog.51cto.com/11934539/2065176

上一篇:Linux防火墙工具iptables基础介绍
下一篇:Linux的安全设置,网络防火墙