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. gjt常用命令---chalee

    Git常用命令 一. git 基本操作流程 1. 从远程分支拉取并创建新的分支 git pull origin [远程分支名]:[本地分支名] // 从远程分支迁出本地分支,并切换到新的本地分支 gi ...

  2. 顺手写一下HTTP协议

    本文目录 一 什么是HTTP协议 二 Http的特点 三 Http报文 回到目录 一 什么是HTTP协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写 ...

  3. JAVA随笔----浅谈lombok注解

    在Java开发中,注解可谓是帮了大忙.注解的使用帮助我们简化了代码,让代码更加简洁.今天就来谈谈常用的Lombok注解. lombok注解文档 lombok官方下载地址 先看一下lombok支持的一些 ...

  4. SPOJ 375 QTREE - Query on a tree

    思路 注意本题只能用C,不能用C++ 其他的都和上一题一样 代码 #include <stdio.h> #include <string.h> #define MAXN 100 ...

  5. Nodejs运行错误小结

    (迁移自旧博客2017 04 15) 在使用过程中会遇到一些问题,学习过程中不定期更新. 问题一 错误如下 **events.js:72 throw er; // Unhandled 'error' ...

  6. Use SourceLink enables a great source debugging experience

    posts Exploring .NET Core's SourceLink - Stepping into the Source Code of NuGet packages you don't o ...

  7. Apache 配置多个端口多站点(Linux)

    for apache2 configuration: by default, apache is configured 80 port for the default web site. follow ...

  8. Yaml语法使用

    YAML概要 1. 认识 YAML YAML是一个类似 XML.JSON 的标记性语言.YAML 强调以数据为中心,并不是以标识语言为重点.因而 YAML 本身的定义比较简单,号称“一种人性化的数据格 ...

  9. Poj2018 Best Cow Fences

    传送门 题目大意就是给定一个长度为 n 的正整数序列 A ,求一个平均数最大的,长度不小于 L 的子序列. 思路: 二分答案. Code: #include<iostream> #incl ...

  10. 自定义 Cordova插件(基础篇)

    cordova自定义插件 注意:存放自定义cordova插件目录不能有空格可能会报错 cordova的安装 下载node.js,安装完成后你可以在命令行中使用node和npm. 安装cordova使用 ...