linux编写iptables防火墙规则示例

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

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

实验环境:

网站服务器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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180203G0E66C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券