iptables防火墙可以用于创建过滤(filter)与NAT规则。所有Linux发行版都能使用iptables。

iptables的结构:iptables-->Tables-->Chains-->Rules,tables则chains组成,chains由rules组成。

iptables的表与链

勾子函数(hook function)netfilter规则链:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

iptables具有Filter,NAT,Mangle,Raw四种内建表(四种功能)

1.Raw表

Raw表用于处理异常,它具有2个内建链

PREROUTING chain

OUTPUT chain

2.Mangle表

Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链:

PREROUTING

OUTPUT

FORWARD

INPUT

POSTROUTING

3.NAT表

NAT表有三种内建链

PREROUTING链-处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT。

POSTROUTING链-处理即将离开本机的数据包。它会转换数据包中的源IP地址,通常用于SNAT。

OUTPUT链-处理本机产生的数据包

4.Filter表

Filter表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:

INPUT-处理来自外部的数据

OUTPUT链-处理向外发送的数据

FORWARD链-将数据转发到本机的其他网卡设备上

iptables规则(Rules)

牢记以下三点是理解iptables规则的关键:

Rules包括一个条件和一个目标(target)

如果满足条件,就执行目标(target)中的规则或者特定值。

如果不满足条件,就判断下一条Rules。

目标值(Target Values)

以下是可以在target里指定的特殊值:

ACCEPT-允许防火墙接收数据包

DROP-防火墙丢充包

QUEUE-防火墙将数据包移交到用户空间

RETURN-防火墙停止执行当前链中的后续Rules,交返回到调用链(the calling chain)中。

查看可用的规则:

iptables -t filter --list
iptables -t mangle --list
iptables -t nat --list
iptables -t raw --list

清空所有iptables规则

在配置iptables之前,需要使用iptables --list查看现有的规则

iptables --flush

或者

iptables -F

有的linux发行版上这个命令并不会清除NAT中的规则,此时只能手动清除:

iptables -t NAT -F

永久生效

当删除、添加规则后,这些更改并不能永久生效,这些规则在重启系统或服务后会消失,为了让配置永久生效,根据平台的不同,具体操作也不同。

Ubuntu

首先保存现有的规则

iptables-save > /etc/iptables.rules

新建一个bash脚本,并保存到/etc/network/if-pre-up.d/目录下:

#!bin/bash
iptables-restore < /etc/iptables.rules

这样,每次系统重启后iptables规则都会被自动加载。

注意:不要尝试在.bashrc 或者.profile中执行以上命令,因为用户通常不是root,而且这只能在登录时加载iptables规则。

CentOS,RedHat

保存iptables规则

service iptables save

查看当前规则:

cat /etc/sysconfig/iptables

追加iptables规则

可以使用iptables -A 命令追加新规则,其中-A表示Append。因此,新的规则将追加到链尾。

语法

iptables -A chain firewall-rule

-A chain-指定要追加规则的链

firewall-rule-具体的规则参数

描述规则的基本参数

-p 协议(protocol)

指定规则的协议,如tcp,udp,icmp等,可以使用all来指定所有协议;

如果不指定-p参数,默认是all值;

可以使用协议名(如tcp),或者是协议值(比如6代表TCP)来指定协议。映射关系请查看/etc/protocols;

还可以使用-protocol参数代替-p参数;

-s源地址(source)

指定数据包的源地址;

参数可以使用IP地址,网络地址,主机名;

例如:-s 192.168.1.101指定IP地址;

例如:-s 192.168.1.0/24指定网络地址;

如果不指定-s参数,就代表所有地址;

还可以使用-src或者-source

-d 目的地址(destination)

指定目的地址;

参数和-s相同;

还可以使用-dst或者-destination;

-j 执行目标(jump to target)

-j 代表“jump to target”;

-j指定了当与规则(Rule)匹配时如何处理数据包;

可能的值是ACCEPT,DROP,QUEUE,RETURN;

还可以指定其他链(Chain)作为目标;

-i输入接口(input interfqace)

-i代表输入接口(input interface);

-i指定了要处理来自哪个接口的数据包;

这些数据包即将进入INPUT,FORWARD,PREROUTE链;

如果不指定-i,那么处理进入所有接口的数据包;

如果出现!-i eth0,那么将处理所有纲目eth0以外接口进入的数据包;

如果再现-i eth+,将处理经由eth开头的接口进入的数据包;

还可以使用-in-interface参数;

-o 输出(out interface)

-o代表"output interface";

-o指定了数据包由哪个接口输出;

这些数据包即将进入FORWARD,OUTPUT,POSTROUTING链;

如果不指定-o选项,那么系统上所有接口都可以作为输出接口;

如果出现! -o eth0,那么将从eth0以外的接口输出;

如果出现-i eth+,那么将仅从eth开关的接口输出;

还可以使用-out-interface参数;

描述规则的扩展参数

--sport源端口(source port),针对-p tcp或者-p udp

缺省情况下,将匹配所有端口;

可以指定端口号或者端口史称,例如"--sport 22"或者"--sport ssh";

/etc/services文件描述了上述映射关系;

从性能上讲,使用端口号更好;

使用冒号可以匹配端口范围,如“-sport 22:100";

还可以使用"-source-port";

--dport目的端口(destination port)针对-p tcp或者-p udp*

参数和--sport类似;

还可以使用"--destination-port";

--tcp-flags TCP标志,针对-p tcp

可以指定由逗号分隔的多个参数;

有效值可以是:SYN,ACK,FIN,RST,URG,PSH;

可以使用ALL或者NONE;

--icmp-type ICMP类型,针对-p icmp

--icmp-type 0表示Echo Reply;

--icmp-type 8表示Echo Request;

追加规则的完整实例:仅允许SSH服务

1.清空所有iptables规则

iptables -F

2.接收目标端口为22的数据包

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

3.拒绝所有其他数据包

iptables -A INPUT -j DROP

更改默认策略

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

配置应用程序规则

SSH

1.允许接收远程主机的SSH请求

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

2.允许发送本地主机的SSH响应

iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

-m state:启动状态匹配模块(state matching module)

--state:状态匹配模块的参数。当SSH客户端第一个数据包到达服务器时,状态字段为NEW;建立连接后数据包的状态字段都是ESTABLISHED

--sport 22:sshd监听22端口,同时也通过该端口和客户端建立连接、传送数据。因此对于SSH服务而言,源端口就是22

--dport 22:ssh客户端程序可以从本机的随机端口与服务器的22端口建立连接。因此对于SSH客户端而言,目的端口就是22

如果服务器也需要使用SSH连接其他远程主机,则还需要增加以下配置:

1.送出的数据包目的端口为22:

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state --state NEW,ESTABLISHED -j ACCEPT

2.接收的数据包源端口为22

iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state --state ESTABLISHED -j ACCEPT

HTTP

1.允许拦收远程主机的HTTP请求

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

2.允许发送本地主机的HTTP响应

iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

iptables介绍的更多相关文章

  1. iptables介绍iptables和netfilter

    随着互联网技术的方兴未艾,各种网络应用层出不穷,网络攻击.黑客入侵也成了网民畅游互联网的心头大患,互联网安全也愈加受到了人们的重视.网络防火墙,作为一种简单高效的互联网防御手段,逐渐成为了网民畅游网络 ...

  2. Linux防火墙iptables介绍

    介绍网络防火墙是通过一个或多个允许或拒绝的规则来过滤网络流量的网络设备或软件.网络防火墙还可以执行更复杂的任务,例如网络地址转换,带宽调整,提供加密隧道以及更多与网络流量相关的任务.而我们的任务就是需 ...

  3. Netfilter和iptables介绍

    前言 在开始Kubernetes的网络之前我们先来学习Netfilter,Netfilter可能了解的人比较少,但是iptables用过 Linux的都应该知道.本文主要介绍Netfilter与ipt ...

  4. Linux下iptables介绍

    ptables简介 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表. filter负责过滤数据包,包括的规则链有,input,outp ...

  5. 防火墙iptables介绍

    防火墙: netfilter/iptables是集成在Linux2.4.X版本内核中的包过滤防火墙系统.该架构可以实现数据包过滤,网络地址转换以及数据包管理功能.linux中防火墙分为两部分:netf ...

  6. iptables介绍和基本使用

    iptables 防火墙是什么 防火墙好比一堵真的墙,能够隔绝些什么,保护些什么. 防火墙的本义是指古代构筑和使用木制结构房屋的时候,为防止火灾的发生和蔓延,人们将坚固的石块堆砌在房屋周围作为屏障,这 ...

  7. iptables 介绍

    规则链 规则链的作用:对数据包进行过滤或处理 链的作用:容纳各种防火墙规则 链的分类依据:处理数据包的不同时机 默认包括5种规则链 INPUT:处理入站数据包 OUTPUT:处理出站数据包 FORWA ...

  8. linux防火墙(一)—— iptables架构介绍

    一.防火墙的分类 一般宏观来说,防火墙分为主机型防火墙,例如我们为了防止个人电脑被攻击,而开启的防火墙,还分为网关型防火墙,一般部署在企业的网关,用于过滤和转发,保证整个企业的网络环境安全性. 按照物 ...

  9. iptables的介绍

    iptables介绍 iptables 1)iptables程序工作在内核的TCP/IP网络协议栈框架netfilter上,通过网络过滤可以实现入侵检测以及入侵防御功能,而不是单个协议当中. 2)ip ...

随机推荐

  1. 【Alpha】Scrum Meeting 10

    目录 前言 任务分配 燃尽图 会议照片 签入记录 困难 前言 第10次会议于4月14日19:00在教一316召开. 交流确认了任务进度,对下一阶段任务进行分配.时长40min. 任务分配 姓名 当前阶 ...

  2. windows下安装git和vundle

    git在windows下的版本是: git-for-windows, 或者说是: msysgit: ms-sys-git 直接在 https://gitforwindows.org/上下载 git对w ...

  3. javascript 之 函数

    注意:函数名仅仅是一个包含指针的变量而已 函数内部属性 arguments 和this 两个特殊对象 arguments:类数组对象,包含出入函数中的所有参数,主要用途是保存函数参数 callee:该 ...

  4. SPOJ 10570 LONGCS - Longest Common Substring

    思路 和SPOJ 1812 LCS2 - Longest Common Substring II一个思路,改成多组数据就有三倍经验了 代码 #include <cstdio> #inclu ...

  5. 信息安全之路-web-xss学习(1)

    关于xss反射性漏洞 1.未加任何过滤的 (1).在dvwa平台上可以看到源代码,如下 low级别 为了便于理解,代码如下: <?php // Is there any input? if( a ...

  6. Linux (麒麟)系统 重启后无法登陆进图形界面

    登录图形化界面的时候,会显示GNOME电源管理器没启动等提示信息,会一直卡在登录界面 在启动的时候按ESC或者在登录界面crtl+alt +f3 进入字符终端界面 查看物理存储空间占用信息,可能会有一 ...

  7. 七牛云图片的存储与处理--基于node

    1. 手动上传 . 快速入门,这个简单,可以参考七牛官方文档: https://developer.qiniu.com/kodo/manual/1233/console-quickstart#step ...

  8. hive中控制文件生产个数

    在有些时候,想要控制hql执行的mapper,reducer个数,reducer设置过少,会导致每个reducer要处理的数据过多,这样可能会导致OOM异常,如果reducer设置过多,则会导致产生很 ...

  9. IPFS 使用入门

    在上一篇文章介绍了IPFS要做什么, 本篇文章介绍下IPFS怎么用, 按照本站的风格,我不会仅仅把一个个命令列出来,同时会说明命令在后面为我们做了什么. IPFS 安装 要使用IPFS, 第一步肯定是 ...

  10. Java+selenium+feeder+AutoIt+自动加载插件

    package dataproject.datapro; import static org.testng.Assert.assertEqualsNoOrder; import java.io.Fil ...