linux编写iptables防火墙规则示例

iptables和asa防火墙类似,作用一样,都是为了保证网络安全,系统安全,服务器的安全,和asa一样也需要建立策略。

下面通过一个案例先了解一下iptables防火墙规则的相关基础操作。(关于防火墙的相关知识概念,请关注微信公众号 L宝宝聊IT Linux防火墙基础与编写防火墙规则 文章)

实验环境:

网站服务器ip地址是192.168.1.5,网关服务器的内网地址是eth0:192.168.1.254,外网地址是eth1:172.16.16.254,internter测试机是172.16.16.172。实现三台系统之间可以互相ping通。

网管服务器需要开启路由转发功能

也可进入vim /etc/sysctl.conf 修改为 1 永久开启路由转发功能

最后测试可以互相ping通即可

下面介绍各种规则如何应用

一、编写防火墙规则

1、例如:在网站服务器的filter表的INPUT链中插入一条规则,拒绝发送给本机使用的ICMP协议的数据包。

执行:Iptables -t filter -I INPUT -p icmp -j REJECT

查看规则:iptables -L INPUT --line-numbers

然后再次使用172.16.16.172ping192.168.1.5,出现目标端口不可到达,无法ping通

2、添加新的规则

例如:

1)在filter表INPUT链的末尾添加一条规则,接受tcp协议(实验之前在网站服务器上搭建ftp服务,使用internet测试机可以访问ftp服务器)

在internet测试机上访问

默认网站服务器的防火墙开启,所以不能访问,然后执行:

iptables -t filter -A INPUT -p tcp -j ACCEPT

发现依然不能访问,因为-A是在末尾添加一条新的规则

所以执行:Iptables -I INPUT -p tcp -j ACCEPT(-I默认是添加在第一条)

再次访问ftp

在网站服务器上查看规则

例:2)添加规则允许udp数据包通过,默认位于filter的第一条

Iptables -I INPUT -p udp -j ACCEPT

例:3)指定顺序号,添加规则允许icmp数据包通过,位于第2条

Iptables -I INPUT 2 -p icmp -j ACCEPT

查看规则列表:

3、以数字形式显示规则列表,加快执行速度

Iptables -n -L INPUT (-n -L 可简写为-nL)

4、删除,清空规则

1)若要删除filter表INPUT链中的第三条规则,执行:

Iptables -D INPUT 3

2)清空指定链或表中的所有防火墙规则,使用-F

Iptables -F INPUT

3)清空filter表,nat表,mangle表

Iptables -F

Iptables -t nat -F

Iptables -t mangle -F

5、设置默认策略:当找不到任何一条能够匹配数据包规则时,则执行默认策略

例如1)将filter表中FORWARD链的默认策略设置为丢弃,OUTPUT链的默认策略设置为允许(默认策略不参与规则的顺序编排,因此在前后并无区别。)

二、规则的匹配条件

对于同一条防火墙规则,可以指定多个匹配条件,这些条件必须都满足规则才能生效。

1、通用匹配:分为三种类型,协议匹配,地址匹配,网络接口匹配。

1)协议匹配

如果在网关服务器上开启防火墙,那么internet测试机是不能访问网站服务器的。

查看网关服务器的FORWARD链,发现只有一条拒绝all。

如果想允许路由转发,执行下面的命令:

iptables -I FORWARD -j ACCEPT,然后在internet测试机上可以访问网站服务器。

然后如果想丢弃通过icmp协议访问防火墙本机的数据包,允许转发经过防火墙的除icmp协议之外的数据包,可以执行:

Iptables -I INPUT -p icmp -j DROP

Iptables -A FORWARD ! -p icmp -j ACCEPT

执行之前先在internet测试机上ping网关服务器的172.16.16.254和192.168.1.5都是可以ping通的。执行完之后就不能ping通了,但是依然能够访问网站服务器的ftp。

先在internet测试机上ping,可以ping通

然后在网关服务器上执行以下命令

在internet测试机上ping192.168.1.5和172.16.16.254都不通了,但是ftp依然可以访问。

2)地址匹配

例1)例如:拒绝转发源地址为172.16.16.172的数据,允许转发源地址192.168.1.0的数据包

因为172.16.16.172就是internet测试机,所以internet测试机无法ping通192.168.1.5,也不能访问ftp

例2)如果检测到来自某网段的频繁扫描,登录等不良的企图,可以立即添加防火墙规则进行封锁。

Iptables -I INPUT -s 10.20.30.0/24 -j DROP

Iptables -I FORWARD -s 10.20.30.0/24 -j DROP

3)网络接口匹配

例如:若要丢弃从外网接口访问防火墙本机且源地址为私有地址的数据包,执行以下操作:

首先:在172.16.16.172上ping172.16.16.254,使之可以ping通

然后执行以下命令:

再此在172.16.16.172上ping172.16.16.254,无法ping通,因为外网接口是eth1

2、隐含匹配:以指定的协议匹配作为前提条件,相当于子条件。

1)端口匹配

例如:允许网段192.168.1.0/24转发dns查询数据包。

首先在网站服务器上开启dns服务

vim /var/named/chroot/var/named/google.com.zone

为了实验效果,先在网关服务器上执行以下命令,阻止转发

Iptables -I FORWARD -j REJECT

然后在internet测试机上执行nslookup,不能解析

接下来在网关服务器上执行隐含匹配,允许为172.16.16.0网段转发dns查询包

再次在internet测试机上测试解析

2)ICMP类型匹配

若要禁止从其他主机ping本机,但是允许本机ping其他主机,可以执行以下操作

首先为了实验测试方便,在网关服务器上执行:(执行之前把其它的规则都删掉,关闭防火墙即可编写规则后会自动打开)

nternet测试机和网站服务器之间可以互相ping通,然后执行:

如果实验不通,把上面的最后一条改为iptables -A INPUT -p icmp-j DROP

然后测试:

3、显示匹配

必须调用相应的模块,然后方可设置匹配条件

1)多端口匹配

例如:允许网站服务器本机开放25、80、110、143端口

2)ip范围匹配

例如:禁止转发源地址位于192.168.4.21与192.168.4.28之间的tcp数据包。

3)mac地址匹配

例如:禁止以下mac地址的主机访问网站服务器的任何应用。

4)状态匹配

例如:禁止转发与正常tcp连接无关的非syn请求数据包(如伪造的网络攻击数据包)。

再例如:开放本机的web服务80端口,但对发给本机的tcp应答数据包予以放行,其他入站数据包均丢弃,对应的入站规则如下:

以上就时iptables防火墙规则的基本应用,下面时上机实验部分:

三、上机实验

1、实验环境和上面的一样

网站服务器ip地址是192.168.1.5,网关服务器的内网地址是eth0:192.168.1.254,外网地址是eth1:172.16.16.254,internter测试机是172.16.16.172。实现三台系统之间可以互相ping通。

2、为网站服务器编写入站规则

(1)本例中所有规则均在filter表的INPUT链内添加,默认策略设置为DROP。

(2)使用“-p icmp ! --icmp-type 8 ”的条件匹配非ICMP请求的数据包。

(3)使用“-p tcp --dport 80”的条件匹配对TCP 80端口的访问。

(4)使用“-p tcp -m state --stateESTABLISHED,RELATED”匹配TCP响应数据包。

[root@localhost ~]# iptables -P INPUT DROP

[root@localhost ~]# iptables -A INPUT -p icmp !--icmp-type 8 -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p tcp--dport 80 -j ACCEPT

[root@localhost ~]# iptables -A INPUT -p tcp -mstate --state ESTABLISHED,RELATED -j ACCEPT

(5)测试入站控制效果:从其他主机可以访问本机中的Web服务,但不能访问其他任何服务(如FTP、DNS);从本机可以ping通其他主机,但其他主机无法ping通本机。

[root@localhost ~]# iptables -nL INPUT

Chain INPUT (policy ACCEPT)

target prot opt source destination

ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp !type 8

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

…… //其他测试过程略

3、为网关服务器编写转发规则

(1)本例中所有规则均在filter表的FORWARD链内添加,默认策略设置为DROP。

(2)针对TCP协议的80、20、21、25、110、143端口,以及UDP协议的53端口,分别为从局域网访问Internet、从Internet响应局域网请求的过程编写转发规则。

[root@localhost ~]# iptables -P FORWARD DROP

[root@localhost ~]# iptables -A FORWARD -s192.168.1.0/24 -p tcp -m multiport --dport 20,21,

80,25,110,143 -o eth1 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -i eth1-m state --state ESTABLISHED,RELATED -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -s192.168.1.0/24 -p udp --dport 53 -oeth1 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -p udp--sport 53 -i eth1-j ACCEPT

(3)执行DNS查询,获知站点web.qq.com、w.qq.com、im.qq.com当前所用的IP地址包括:112.90.141.88、112.90.141.163、112.90.141.164、58.251.149.159、58.251.60.202、123.138.238.100、123.138.238.101。然后依次针对这些IP地址编写转发规则,禁止到TCP协议的80、443端口的访问。

[root@localhost ~]# vi /opt/black_ip.txt //编写封禁地址列表

112.90.141.88

112.90.141.163

112.90.141.164

58.251.149.159

58.251.60.202

123.138.238.100

123.138.238.101

[root@localhost ~]# for i in `cat/opt/black_ip.txt`; do iptables -I FORWARD -d$i -p tcp -m multiport --dport 80,443 -j DROP ; done //读取IP地址以插入规则

(4)测试转发控制效果:从局域网中的主机无法访问Internet中的web.qq.com等被封站点,但能够访问其他Web站点,也能够访问DNS、FTP等网络服务。

[root@localhost ~]# iptables -nL FORWARD

Chain FORWARD (policy DROP)

target prot opt source destination

DROP tcp -- 0.0.0.0/0 123.138.238.101 multiportdports 80,443

DROP tcp -- 0.0.0.0/0 123.138.238.100 multiport dports80,443

DROP tcp -- 0.0.0.0/0 58.251.60.202 multiport dports80,443

DROP tcp -- 0.0.0.0/0 58.251.149.159 multiport dports80,443

DROP tcp -- 0.0.0.0/0 112.90.141.164 multiport dports80,443

DROP tcp -- 0.0.0.0/0 112.90.141.163 multiport dports80,443

DROP tcp -- 0.0.0.0/0 112.90.141.88 multiport dports

原文发布于微信公众号 - L宝宝聊IT(gh_b0e552aa80db)

原文发表时间:2018-02-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一“技”之长

iOS中制作可复用的框架Framework 原

        在iOS开发中,我们时常会使用一些我们封装好的管理类,框架类,方法类等,我们在实现这些文件时,可能还会依赖一些第三方库或者系统库。如果每次我们复...

561
来自专栏知识分享

9-开发板接入小五物联实现远程控制(Wi-Fi模块)

这一节为教程最终版功能演示,现在不必深究,早晚自己全部都会实现的(静静的跟着我学哈)

902
来自专栏猛牛哥的博客

CENTOS通过iptables做端口转发

1807
来自专栏小白安全

小白博客 Linux下暴力破解工具Hydra详解

Number one of the biggest security holes are passwords, as every password secu...

4177
来自专栏GuZhenYin

ASP.NET Core文件上传与下载(多种上传方式)

前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.N...

4126
来自专栏GuZhenYin

ASP.NET Core文件上传与下载(多种上传方式)

官方机器翻译的地址:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads

1040
来自专栏知识分享

3-51单片机WIFI学习(开发板8266底层源码介绍)

上一篇链接  http://www.cnblogs.com/yangfengwu/p/8743502.html 直接上源码:注意源码有两部分,第一部分是一开始的...

3605
来自专栏杂七杂八

Scrapy爬取妹子图

本来呢,一开始想爬取的是这个网站,http://www.mzitu.com/,但是呢?问题发现比较多,所以先爬取了http://www.meizitu.com/...

3058
来自专栏派森公园

docker的reap问题

在使用docker容器的时候,应该了解“PID1僵尸进程reap”问题。如果使用的时候不加注意,可能会导致出现一些意想不到的问题。

893
来自专栏北京马哥教育

【深度解析】Linux系统启动流程

Linux系统启动流程大概总结下来是这么一个过程: POST-->BootLoader(MBR)-->Kernel(硬件探测、加载驱动、挂载根文件系统、/sbi...

2716

扫码关注云+社区