Linux中防火墙(二)-阿里云开发者社区

开发者社区> 开发与运维> 正文

Linux中防火墙(二)

简介:

一、iptables规则的匹配条件类型有三类

1、通用匹配:可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件

2、隐含匹配:要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件

3、显式匹配:要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件

二、通用匹配规则

1、协议匹配:-p 协议名

2、地址匹配:-s 源地址、-d 目的地址

-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP

IP | IP/MASK | 0.0.0.0/0.0.0.0

而且地址可以取反,加一个“!”表示除了哪个IP之外

3、接口匹配:-i 进站网卡、-o 出站网卡

-i eth0:从这块网卡流入的数据

流入一般用在INPUT、FORWARD和PREROUTING链上

-o eth0:从这块网卡流出的数据

流出一般在OUTPUT、和POSTROUTING上

例1:iptables -A FORWARD ! -p icmp -j ACCEPT(除了icmp协议的数据包,别的协议的包都能转发)

例2:在网关型防火墙设置如下:

iptables -I FORWARD -s 192.168.159.135 -o eth1 -p tcp --sport 80 -j ACCEPT

注:192.168.159.135是企业内部的web服务器,eth1是网关防火墙的外网网卡,意思是:源地址为192.168.159.135的这台服务器tcp80端口可以回应外网请求,因为eth1是外网网卡,FORWARD转发链也对其ACCEPT了。

三、隐含匹配条件

之所有叫隐含,是因为它依赖某种协议才能搭配使用。

1、端口匹配:--sport [源端口]      --dport [目的端口]

例:iptables -A FORWARD -s 192.168.159.135/24 -p udp --dport 53 -j ACCEPT(因为设置的链是FORWARD,所以一般是网关型防火墙中设置的,源ip为192的主机可以访问其他网络的udp53端口,注意源和目的的身份切换一定要弄懂)

iptables -A FORWARD -d 1192.168.159.135/24 -p udp --sport 53 -j ACCEPT(网关型防火墙中设置的,来自于udp53端口的数据包可以访问我们的192主机)

iptables -A INPUT -p tcp --dport 20:23 -j ACCEPT(一般是主机型防火墙设置的,我们电脑的20到23端口可以被访问)

2、TCP标记匹配:--tcp-flags  [检查范围] [被设置的标记]

TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)

对于它,一般要跟两个参数:

1.检查的标志位

2.必须为1的标志位

--tcpflags syn,ack,fin,rst syn  =    --syn

表示检查这4个位,这4个位中syn必须为1,其他的必须为0。所以这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn

例:iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK  SYN -j  DROP

检查到有SYN的数据包,就丢弃

3、ICMP类型匹配:--icmp-type  ICMP类型(ICMP类型有8、0)

例: iptables -A INPUT -p icmp --icmp-type 8 -j DROP  (别人ping我主机的请求被丢弃,8代表请求)

iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT (我ping别人时,回来的包被允许(一去一回才知道ping没ping通),0表示带回来的icmp包)

iptables -p icmp -h (查看ICMP类型)

四、显示匹配条件

(1)多端口匹配:-m multiport --sports 源端口列表

-m multiport --sports 目的端口列表

例:iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT

(2)IP范围匹配:-m iprange --src-range  IP范围

例:iptables -A FORWARD -p tcp -m iprange --src-range 192.168.159.135-192.168.159.140 -j ACCEPT

(3)MAC地址匹配:-m mac --mac-source MAC地址

例:iptables -A INPUT -m mac --mac-source 00:50:56:12:34:56 -j DROP

(4)状态匹配:-m state --state 连接状态

NEW:与任何连接无关的

ESTABLISHED:NEW状态之后,响应请求或已建立连接的

RELATED:与已有连接有相关性的,如FTP数据连接

例:只开放本机的Web服务,但对发给本机的TCP应答报文予以放行,其他入站报文均丢弃

iptables -P INPUT DROP

iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT

iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

实验:禁止internet访问内网,但内网可以访问internet

首先配置路由环境:

A机:只需要桥接网卡,作为外网。IP:172.17.253.101

route -n 查看网关-->route del default gw 172.17.0.1删除多余网关

添加路由记录route add default gw 172.17.253.193

手动当掉网卡:ifconfig eth1 down

B机:路由器,两个网卡都有,作为防火墙。IP:172.17.253.193 192.168.159.135

开启转发功能:

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

或者vim /etc/sysctl.conf

net.ipv4.ip_forward=1

sysctl -p(立即生效)

C机:只需要仅主机网卡,作为内网。IP:192.168.159.129

添加路由记录route add default gw 192.168.159.135

在防火墙上添加规则(B机):

iptables -A FORWARD -s 192.168.159.129 -d 172.17.0.0/16 -m state --state NEW -j ACCEPT  #根据状态对内网到外网的新连接允许转发

iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT 允许已经建立的连接

iptables -A FORWARD -j REJECT  拒绝其他所有

测试:

1240

1240

本文转自 优果馥思 51CTO博客,原文链接:http://blog.51cto.com/youguofusi/1978315

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章