iptables的详解和使用

一、系统简介和原理

1、介绍

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。


防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。


虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。


netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。


iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。

2、netfilter的原理

netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。

 过程说明:

  • 1.数据包从网卡进来,会进入到PREROUTING. 在PREROUTING阶段,会去检查raw,mangle,nat这几个表是否会有相关的规则。有则会执行相关的规则
  • 2.然后进行路由选择判断,如果是发往本机的,就会进入到INPUT阶段。如果不是则进入FORWARD,匹配相关的规则表后,进入到POSTROUTING阶段。
  • 3.进入到INPUT后,就会进入到上层应用程序。
  • 4.如果是应用程序发出去的包,就会进入OUTPUT->POSTROUTING.

二、iptables的基本用法

基本语法

iptables [-t TABLE] COMMAND CHAIN  [RULE] [-j TARGET]

iptablestablecommandchainParamter & Xmatchtarget
iptables

-t  filter

    nat

    mangle

    raw

-A

-D

-L

-F

-P

-I

-R

-n

INPUT

FORWARD

OUTPUT

NAT

PREROUTING

POSTROUTING

[!] -p
    -s
    -d
    -i
    -o
    --sport
    --dport
    --src-range
    --dst-range
    --limit
    --mac-source
    --sports
    --dports
    --stste
    --string

-j  ACCEPT

    DROP

    REJECT

    LOG

    DNAT

    SNAT

    MASQUERADE

    REDIRECT

解释:iptables 的某个表(table),对应的是那一条链(chain),对这条链上的什么内容(Parameter Xmatch)进行什么样的操作(target).

table:
filter 表:控制数据包是否允许进出及转发,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。
nat 表:控制数据包中地址转换,可以控制的链路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。
mangle:修改数据包中的原数据,可以控制的链路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。
raw:控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。

command:
-A:添加防火墙规则
-D:删除防火墙规则
-I:插入防火墙规则
-F:清空防火墙规则
-L:列出添加防火墙规则
-R:替换防火墙规则
-Z:清空防火墙数据表统计信息
-P:设置链默认规则
-n:把对应的域名转换成ip地址。

chain:
INPTU:主要与进入Linux本机的数据包有关。
OUTPUT:主要与Linux本机要送出去的数据包有关。
FORWARD:与Linux本机没有关系,它可以传递数据包到后端计算机中,与NAT的table相关性较高。
NAT(地址转换):这个表格主要用来进行来源与目的地的IP和port的转换,与Linux本机无关,主要与Linux主机后的局域网内计算机相关。
PREROUTING:在进行路由判断前所要进行的规则(DNAT/REDIRECT)。
POSTROUTING:在进行路由判断后所要进行的规则(SNAT/MASQUERADE)。

Paramter & Xmatch(前面加 ! 表示取反):
[!] -p: 匹配协议
    -s: 匹配源地址
    -d: 匹配目标地址
    -i: 匹配入站网卡接口
    -o: 匹配出站网卡接口
    --sport: 匹配源端口
    --dport: 匹配目标端口
    --src-range: 匹配源地址范围
    --dst-range: 匹配目标地址范围
    --limit: 四配数据表速率
    --mac-source: 匹配源MAC地址
    --sports: 匹配源端口
    --dports: 匹配目标端口
    --stste: 匹配状态(INVALID、ESTABLISHED、NEW、RELATED)
    --string: 匹配应用层字串 

target:
ACCEPT:允许数据包通过
DROP:丢弃数据包
REJECT:拒绝数据包通过
LOG:将数据包信息记录 syslog 曰志
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址欺骗
REDIRECT:重定向 

基本用法

保存iptables规则 

sudo iptables-save


保存ipv6 的iptables规则

sudo ip6tables-save


查看iptables规则

sudo iptables -L


查看iptables规则,以数字形式

sudo iptables -L -n


查看iptables规则的序号,用于删除规则参考

sudo iptables -L -n --line-numbers


清除所有iptables预设表filter里的所有规则

sudo iptabels -F


清除预设表filter中使用者自定链中的规则

sudo iptables -X


清除单条iptables规则

sudo iptables -D INPUT(链) 3(规则对应的序号)


修改单条iptables规则,使用 -R,修改INPUT链序号为3的规则为允许,第4条规则为拒绝,丢弃

sudo iptables -R INPUT 1 -j ACCEPT
sudo iptables -R INPUT 2 -j DROP


允许已经建立的连接发送和接收数据,以免设置链为DROP时远程ssh断开

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


保证VPS可以运行的时候,可以为loopback网卡添加运行规则,插到第一行

sudo iptables -I INPUT 1 -i lo -j ACCEPT


允许某段IP访问本机的所有类型的所有端口

sudo iptables -I INPUT -s 192.168.1.0/24 -p all -j ACCEPT
sudo iptables -I INPUT -s 192.168.0.0/16 -p all -j ACCEPT


允许本机127.0.0.1访问自身所有端口

sudo iptables -I INPUT -s 127.0.0.1 -p all -j ACCEPT


允许某段IP访问本机的TCP 3306端口

sudo iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT


允许某段IP访问本机的某段TCP端口

sudo iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 3306:65525 -j ACCEPT


向所有IP开放ssh的远程连接,这里是已经更改了的19515端口,默认为22端口

sudo iptables -A INPUT -p tcp --dport 19515 -j ACCEPT


默认INPUT OUTPUT FORWORD 链都是全部接受,需要改为拒绝

确保ssh远程连接端口已经添加进 IPUNT 允许规则中,否则执行以下命令将可能会断开远程

sudo iptables -A INPUT -p tcp --dport 19515 -j ACCEPT #这里ssh端口为19515
sudo iptables -P INPUT DROP


可选项,需保证SSH端口已经添加各链的允许规则,否则会断开SSH连接并无法远程连接

sudo iptables -P OUTPUT DROP
sudo iptables -P FORWORD DROP


iptables规则配置后,无法访问外网,无法接收返回的数据,进行以下配置,并保证OUTPUT状态为ACCEPT,会使iptables允许由服务器本身请求的数据通过

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


iptables 的持久化,由于重启ubuntu会导致iptables规则消失,需要持久化

1.安装iptables-persistent工具帮助我们持久化

sudo apt-get update
sudo apt-get install iptables-persistent -y


执行命令持久化

sudo netfilter-persistent save
sudo netfilter-persistent reload


2.将iptables规则存入文件,随网卡状态进行加载,保存

将iptables保存的规则保存入当前用户的文件

sudo iptables-save > /home/user/iptables.rules


在/etc/network/interfaces 网卡配置文件里加入相应内容

vim /etc/network/interfaces


添加内容

pre-up iptables-restore < /home/user/iptables.rules
post-down iptables-save > /home/user/iptables.rules


用到的参数解释:

pre-up: 网卡启用前的动作

up: 启用时候的动作

post-up: 启用后的动作

pre-down: 关闭前的动作

down: 关闭时动作

post-down: 关闭后动作

iptables的关闭,使用清除规则来实现

sudo iptables-save > /home/user/iptables.rules
sudo iptables -X  清除默认filter表里的自定义规则
sudo iptables -t nat -F   清除nat表里的规则
sudo iptables -t nat -X
sudo iptables -t mangle -F  清除nat表里的规则
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT   将INPUT链默认更改为全部接受
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P  FORWORD ACCEPT

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_68949064

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值