iptables基础应用

来源:互联网 发布:淘宝开网店怎么收费 编辑:程序博客网 时间:2024/05/21 06:02

Iptables防火墙 官网www.netfilter.org

Iptables是跟内核一起的,不用手动安装

Iptables防火墙可根据七层协议

表和链关系

表(table)是链(chains)的容器,链是规则(rules)的容器

默认的4个规则表

表都是小写

raw表:对数据包进行状态跟踪

mangle表:为数据包设置标记,流量控制类似于QOS

nat表:修改数据包中得源,目标IP地址和端口

filter表:数据包过滤 如果没有指定表的类型,默认指定filter表

-t参数来指定表的类型 table

默认的5中规则链

链都是大写

INPUT:进入的数据包 与本机有关的数据包,用于防护本机

OUTPU:出去的数据包 与本机有关的数据包,用于防护本机

FORWARD:转发数据包 与本机无关数据包,用于防护一个网络

POSTROUTING:路由选择后处理数据包

PREROUTING:路由选择前处理数据包

每一个链中默认都有一条缺省的策略

#iptables –L 列出所有的策略

clip_image002 (policy ACCEPT)就是默认的策略 政策接受 clip_image004

#iptables –t nat –L 查看nat表的链结构,可以看到有三个链。

数据包过滤的优先顺序

规则表之间的优先顺序流程

raw、mangle、nat、filter

规则链之间的优先顺序流程

入站数据:PREROUTING、INPUT

出站数据:OUTPUT、POSTROUTING

转发数据:PREROUTING、FOURWARD、POSTROUTING

数据包的动作

写动作的时候都是大写

ACCEPT 允许数据包通过

DROP 丢弃数据包,就好像该数据包没有被接受一样(直接丢弃)常用

LOG 把数据信息记录到syslog

REJECT 丢弃数据包,同时发送适当的响应报文(丢弃后并返回一个信息说为什么丢弃)

RETURN 在调用链中继续处理数据包

Iptables 命令的语法格式

iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 动作]

如果不指定表名,默认是filter表

如果不指定表里的链,默认是所有链

iptables -A 在链尾创建一条规则

-D 删除一条规则

-I 在指定位置(不指定则在链首)插入一条规则

-F 清空所有规则

-P 设置指定链的默认策略

-p 指定协议

-s 源

-d 目标

-R 替换指定位置或内容的规则

-N 创建一条自定义规则链

-X 删除一条自定义规则链

端口匹配

--sport 源端口

--dprot 目标端口

-i 定义指定某网卡的进入 如-i ech0 多个网卡选择0网卡

-o 定义指定某网卡的出口

TCP标记匹配

使用--tcp-flags 如SYN(序列号),ACK(确认号),RST,

ICMP类型匹配

使用—icmp-type 如 echo-request ,echo-reply

显式条件匹配

-m

MAC地址匹配

-m mac –mac-source 00:00:00:00:00:00

多端口匹配

-m multiport –dport 20,21,25

多IP地址匹配

-m iprange --src-range 192.168.1.20-192.168.1.30

数据包状态匹配

-m state

NEW 新发起的链接

ESTABLISHED 服务器正常响应的数据包 established:成立

RELATED与已有连接相关性的数据包(如FTP上传/下载建立的数据连接,这个连接与之前的FTP控制连接存在相关性)related:相关

数据包控制

SNAT 修改数据包的源地址信息

DNAT 修改数据包的目标地址信息

#iptables –t filter –I INPUT –p icmp –s 0.0.0.0/0 –d 192.168.1.2/24 –j DROP

#iptables –t filter –I OUTPUT –p icmp –j DROP 都可以

#iptables –t filter –D INPUT 1 这个1是行号

#/etc/init.d/iptables save 永久保存iptables命令

保存到/etc/sysconfig/iptables文件里 ,不保存重启之后所有规则都没有了

列表查看规则

-L 列表查看各条规则信息

--line-numbers 查看规则时显示行号

-n 以数字显示IP地址,端口号等信息,和协议号

-v 显示数据包个数,字节数等信息

#iptables –L INPUT –line-numbers 查看filter表里的INPUT规则的行号

Iptables在实际应用中应该拒绝一切。不能进不能出

#iptables –P INPUT DROP 默认是policy ACCEPT

#iptables –P OUTPUT DROP

#iptables –P FORWARD DROP

查看协议

/etc/services 存放系统所支持的所有服务

/etc/protocols 存放系统所支持所有协议

#iptables –p icmp –help | less

防火墙规则

拒绝所有机器PING防火墙,允许防火墙PING所有机器

首先拒绝所有一切通信

#iptables –F 清空策略

#iptables –p icmp –help | more 查看icmp的类型

#iptables –A OUTPUT –p icmp --icmp-type echo-request –j ACCEPT 允许出去的请求包

#iptables –A INPUT –p icmp –icmp-tyep echo-reply –j ACCEPT 允许回来的回复的包

#iptables-save 保存

指定协议时也可以指定它的协议号,icmp协议号是1在/etc/protocols文件里可查看

允许使用SSH连接

在指定端口的时候必须先指定协议

#iptables –A OUTPUT –p tcp --sport 22 –s 172.16.1.200 –d 172.16.1.100 –j ACCEPT

#iptables –A INPUT –p tcp –dport 22 –s 172.16.1.100 –d 172.16.1.200 –j ACCEPT

允许本机127.0.0.1回环地址 保证一些服务的正常运行

#iptables –A INPUT –s 127.0.0.1 –d 172.0.0.1 –j ACCEPT

#iptables –A OUTPUT –s 127.0.0.1 –d 127.0.0.1 –j ACCEPT

MAC地址匹配

#iptables –A FORWARD –m mac –macc-source 00:00:00:00:00:00 –j DROP

多端口匹配

以逗号区分端口号

#iptables –A INPUT –p tcp –m multiprot –dport 20,21,25,1250-1260 –j ACCEPT

多IP地址匹配

#iptables –A FORWARD –p tcp –m iprange --src-range 192.168.1.20-192.168.1.30 –j DROP

数据包状态匹配

-m state

#iptables –A FORWARD –p tcp –m state --state NEW ! --syn –j DROP

NEW 新发起的一个连接

! 非(不是)

--syn TCP连接的第一个握手数据包

#iptables –A INPUT –p tcp –m state --state NEW –j DROP 丢弃TCP发起的连接包

#iptables –A INPUT –p tcp –m state --state ESTABLISHED,RELATED –j ACCEPT

只允许 ESTABLISHED,RELATED数据包状态,(拒绝TCP进入)

SNAT策略

局域网主机共享一个公网IP地址接入INTERNET

SNAT修改数据包的源IP地址

实验一

SNAT source

三台虚拟机,外网的WWW服务,iptables防火墙,内网xp客户端

WWW服务

搭建外网的WWW服务,apache课件有讲

Iptables防火墙

#iptables –F 清空所有策略

#iptables –P INPUT DROP 拒绝所有一切

#iptables –P OUTPUT DROP

#iptables –P FORWARD DROP

#iptables –A INPUT –s 127.0.0.1 –d 127.0.0.1 –j ACCEPT 允许本地回环地址

#iptables –A OUTPUT –s 127.0.0.1 –d 127.0.0.1 –j ACCEPT

#iptables –I INPUT –p tcp --dport 22 –s 0.0.0.0/0 –d 61.233.154.1 –j ACCEPT

#iptables –I OUTPUT –p tcp --sport 22 –s 61.233.154.1 –d 0.0.0.0/0 –j ACCEPT

上面基本环境搭好

#vi /etc/sysclt.conf

net.ipv4.ip_forward = 1 开启ipv4的路由转发功能

1 表示开启

0表示关闭

#iptables –A FORWARD –s 172.16.0.0/16 –j ACCEPT 设置转发链,进入和出去

#iptables –A FORWARD –d 172.16.0.0/16 –j ACCEPT

#iptables –t nat –I POSTROUTING –s 172.16.0.0/16 –o eht1 --to-source 61.233.154.1

POSTROUTING 路由后规则

-s 局域网内网段

-o eth1 从eth1网卡出去 (可不指定)

--to-source 指定外网地址

XP客户端

访问外网WWW服务器,成功

clip_image006

可以在XP上抓下包,抓到包源地址都是61.233.154.1地址,说明SNAT做对了

使用地址伪装.如果外网地址不是固定IP地址,经常改动(ADSL),如果是ADSL接入外网的,那么外网接口名称就是ppp0,ppp1

把以上-j SNAT –to-source 改成 –j MASQUERADE

#iptables –t nat –A POSTROUTING –s 172.16.0.0/16 –o ppp0 –j MASQUERADE

实验二

DNAT destination

通常用于往外网发布局域网内的服务器

#iptables –t nat –A PREROUTING –i eth1 –d 61.233.154.1 –p tcp –dport 80 \

-j DNAT --to-destination 172.16.1.2

客户端

访问公司外网地址

clip_image008

成功

WWW服务器查看访问记录

#tail /var/log/httpd/access_log

clip_image010

61.233.154.2主机访问过。

 

摘自 shanhuhai5739 的BLOG

原创粉丝点击