目录

Iptables

iptables(Linux package filter firewall (network layer))是Linux内核集成的IP信息包过滤系统,该系统有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。防火墙在做信息包过滤决定时,有一套规则,这些规则存储在专用的信息包过滤表中,而这些表集成在Linux内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。虽然netfilter/iptables IP信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter和iptables组成。

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

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

Iptables结构

表内有若干条链,链内有若干条规则。

规则表

表的作用:容纳各种规则链

表的划分依据:防火墙规则的作用

4个规则表:

nat表:修改数据包中的源、目标IP地址或端口(网络地址转换)

filter表:确定是否修改数据包(过滤)解决放同行的数据包

raw表:确定是否对该数据包进行状态跟踪

mangle表:为数据包设置标记

表内访问链的顺序:

nat表:PREROUTING->POSTROUTING->OUTPUT

filter表:INPUT->FORWARD->OUTPUT

规则链

规则的作用:对数据包进行处理和过滤

链的作用:容纳各种防火墙规则

5种规则链:

INPUT:处理入站数据包

output:处理出战数据包

FORWARD(forward转发):处理转发数据包

POSTROUTING(post routing路由选择后):在进行路由选择后处理数据包 post 之后

PREROUTING(pre routing路由选择前):在进行路由选择钱处理数据包 pre 之前

Attention:数据包处理流程

数据包入站:

nat:PREROUTING->路由选择->filter:INPUT->本地应用程序

数据包转发:

nat: PREROUTING->路由选择->filter:FORWARD->nat:POSTROUTING->转发走

数据包出站:

nat: 本地应用程序->路由选择->filter:OUTPUT->nat:POSTROUTING->出站

iptables command use:

iptables指令用法详解

iptables [-t tableName] 选项 [链名] [条件] [-j 控制类型]
#example:
iptables -t filter -I INPUT -p icmp -j REJECT #reject ping protocols.

注意

a. 不指定表,默认是filter表

b. 不指定链名,默认是指表的所有链

c. 除非设置了链的默认策略,否则必须指定匹配条件

常见的控制类型: -j

1. ACCEPT:允许通过

2. DROP:直接丢弃,不给予回应

3. REJECT:拒绝通过,给予回应

4. LOG:记录日志的信息

选项:

        -A add 在链的末尾追加新的规则
-I insert 在链的开头插入规则
-L list 列出所有的规则条目
-n number 以数字的形式显示地址、端口的信息
--line-number 序号

查看iptables规则一般使用:

iptables -nvL
-D 删除链内指定序号的一条规则
-F 清空一个表的多有规则
-X 删除自定义链规则
-p 指定链设置默认规则DROP or ACCEPT

条件匹配:

        -P protocol 协议名
-s source 源IP
-d destination 目的IP
-i input 入站网卡
-o output 出站网卡
--sport source port 源端口
--dport destination port 目的端口
--tcp-flags TCP标记
--icmp-type ICMP 类型
8:请求
0:回应
3:不可达
#example:
iptables -A FORWARD -s 192.168.4.0/24 -p udp -dport 52 -j ACCEPT --icmp-type 8
-m multiport --sports 源端口列表
-m multiport --dports 目的端口列表
-m iprange --src-range
-m state --start ESTANLISHED,RELATED

综合案例

iptables -I INPUT -s 172.16.1.2 -d -i eth2 -p icmp --icmp-type 8 -j DROP
iptables -P FORWARD DROP --> FORWARD table default rule is DROP.
iptables -I FORWARD -s 172.16.1.0/24 -p tcp -m multiport --dport 21,25,80 -j ACCEPT
iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT #established已经确定的,related相关的 有关的链接参数

Load Module:

modprobe ip_conntrack_ftp  #FTP为需要2个端口的特殊的模块,所以需要加载模块
lsmod | grep ip #查看模块

SNAT 策略

Source Network Transform:私网内主机IP都共享一个公网IP,实现私网内主机使用同一个公网IP上网。

Attention:一定是路由转发后转换IP,且只有一个 -O(出站网卡)

数据包出站:

nat: 本地应用程序->路由选择->filter:OUTPUT->nat:POSTROUTING->出站

Example:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31(防火墙公网IP)
iptables -t nat -I POSTROUTING -s 192.168.8.0/24 -p tcp -m multiport --dport 80.21.25 -j SNAT -to 172.16.1.1

外网地址非固定时的共享动态IP地址上网

MASQUERADE –> 地址伪装 –> 拨号

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

DNAT 策略

Destination Network Transform:将使用私网IP的服务器发布到公网上,使得公网上的主机可以访问此服务器

原理:目标地址转换

iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp -dport 80 -j DNAT -to -destination 192.168.1.6

目标地址转换

iptables -t nat -I PREROUTING -d 172.16.1.1 -p tcp -m multiport --dport 21,22,80 -j DNAT --to-destination 192.168.8.171
#一条DNAT规则只能指定一个服务器
iptables -I FROWARD -d 192.168.8.171 -p tcp -m multiport --dport 21,25,80 -j Accept

转换目标端口

iptables -t nat -I PREROUTING -d 172.16.1.1 -p tcp --dport 2222 -j DNAT --to 192.128.8.171:22
iptables -I FORWARD -d 192.168.8.171 -p tcp --dport 22 -j Accept
#Test:
ssh root@172.16.1.1 -p 2222 #在生产环境中,一般先SSH到Iptables Server,然后在从Server SSH 到目标主机中。

Iptables规则的备份和还原

导出规则:

iptables-save > /opt/iptables_all.txt  #iptables-save用来把当前的规则存入一个文件里以备iptables-restore使用

备份:

service iptables save

还原:

iptables_all.txt > /etc/sysconfig/iptables
#or
iptables-restore << /opt/iptables_all.txt

iptables 练习

将filter table 中的INPUT 链的默认规则设为DROP

iptables -P OUTPUT DROP

iptables server可以ping到任何人,任何人不可以ping到iptables server

iptables -A OUTPUT -s 10.10.10.1 -o eth1 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 10.10.10.1 -i eth1 -p icmp --icmp-type 0 -j ACCEPT
#or
iptables -A OUTPUT -s 192.168.100.1 -o eth0 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 192.168.100.1 -i eth0 -p icmp --icp-type 0 -j ACCEPT

HOST2可以通过防火墙访问HOST1的各种服务,HOST2的DNS要指向HOST1

SNAT 私网IPHOST可以访问公网IPHOST,转换源IP地址

iptables -A FORWARD -s 192.168.100.0/24 -p tcp -m multiport --dports 80,25,21 -j ACCEPT
iptables -A FORWARD -s 192.168.100.0/24 -p udp --dport 53 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -p tcp -m multiport --dport 80,25,21 -o eth1 -j SNAT --to 10.10.10.1
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -p udp --dport 53 -o eth1 -j SNAT --to 10.10.10.1
iptables -A FORWARD -m state --state RELATED,ESTABLISHED # 设定FORWARD链的全局状态为:自动匹配数据包的状态,可以无须关心包回来的方法
modprobe ip_conntrcak_ftp #加载ftp模块, iptables 自身不带有
modprobe ip_nat_ftp

用iptables防火墙发布于内网的HOST2上的各种服务,是HOST1可以通过域名访问HOST2上的各种服务

DNAT 将私网中的服务器发布出去,让公网上的HOST可以访问,转换公网IP 主机的目的地址。

iptables -t nat -A PREROUTING -d 10.10.10.1 -i eth1 -p tcp -m multiport --dports 80,25,21 -j DNAT --to 192.168.100.2
iptables -t nat -A PREROUTING -d 10.10.10.1 -i eth1 -p udp --dport 53 -j DNAT --to 192.168.100.2
iptables -A FORWARD -d 192.168.100.2 -i eth1 -p tcp -m multiport --dport 80,25,21 -j ACCEPT
iptables -A FORWARD -d 192.168.100.2 -i eth1 -p udp --dport 53 -j ACCEPPT

HOST1访问远程管防火墙

iptables -A INPUT -d 10.10.10.1 -i eth1 -p tcp --dport 22 -j ACCEPT
iptables --A OUTPUT -S 10.10.10.1 -P TCP ---SPORT 22 -j ACCEPT

当HOST1访问iptables外网的2222端口时,会转发到HOST2的主机中(DNAT的端口转发)

iptables -t nat -A PREPOUTONG -d 10.10.10.1 -i eth1 -p dport 2222 -j DNAT --to 192.168.100.2:22
iptablws -A FORWARD -d 192.168.100.2 -i eth0 -p dport 22 -j ACCEPT

Linux_IPtables防火墙详解的更多相关文章

  1. iptables防火墙详解

    iptables常用命令 iptables -nv -L 查看iptables列表 iptables -F 清空iptables规则 iptables-save > /etc/sysconfig ...

  2. Linux iptables 防火墙详解

    0x00 iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter 组件也称为内核空间,是内核的一部分,由一些 ...

  3. iptables 防火墙详解

    一:前言   防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...

  4. iptables防火墙详解(二)

    -- 基于状态的iptables 如果按照tcp/ip来划分连接状态,有11种之多(课后可以自己去读一下相关知识) 但iptables里只有4种状态:ESTABLISHED.NEW.RELATED及I ...

  5. iptables防火墙详解(一)

    -- 防火墙 常见的防火墙 :瑞星 江民 诺顿 卡巴斯基 天网...... iptables firewalld http://www.netfilter.org/ netfilter / iptab ...

  6. CentOS7中firewall防火墙详解和配置,.xml服务配置详解

    修改防火墙配置文件之前,需要对之前防火墙做好备份 重启防火墙后,需要确认防火墙状态和防火墙规则是否加载,若重启失败或规则加载失败,则所有请求都会被防火墙 1. firewall-cmd --state ...

  7. CentOS 7中firewall防火墙详解和配置以及切换为iptables防火墙

    官方文档介绍地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Gui ...

  8. CentOS 7.4中firewall防火墙详解和配置以及切换为iptables防火墙

    转载:https://blog.csdn.net/xlgen157387/article/details/52672988 一.firewall介绍 CentOS 7中防火墙是一个非常的强大的功能,在 ...

  9. Linux防火墙详解

    1.Linux防火墙基础 作为隔离内外网.过滤非法数据的有力屏障,防火墙通常按实现环境的不同分为硬件防火墙和软件防火墙.硬件防火墙是功能专一的硬件设备,具有比较全面的功能,其工作效率较高,但是加个昂贵 ...

随机推荐

  1. JSON.parse()与JSON.stringify()和eval()使用方法详解

    在和后端对接口的时候,遇到了一个问题 就是series里面数据变量进行拼接的时候,data数据里面全部是数值int类型的 但是因为某些需求需要让他进行某个数据之前的数据都为空 我试过用空字符串和und ...

  2. 常用Java中response.setContentType参数

    image/bmp BMP image/png PNG image/gif GIF image/jpeg JPEG image/tiff TIFF image/x-dcx DCX image/x-pc ...

  3. Flask开发系列之快速入门

    Flask开发系列之快速入门 文档 一个最小的应用 调试模式 路由 变量规则 构造 URL HTTP 方法 静态文件 模板渲染 访问请求数据 环境局部变量 请求对象 文件上传 Cookies 重定向和 ...

  4. nodejs express 部署

    一.express 4.x版本之前 全局安装express 命令是 npm install express -g express 4.x版本之后 全局安装express 命令是 npm install ...

  5. 6U VPX 加固智能计算异构服务器

    6U VPX 加固智能计算异构服务器     北京太速科技有限公司在线客服:QQ:448468544 公司网站:www.orihard.com联系电话:15084122580

  6. (转) Oracle SQL优化必要的全表扫描思路分析

    大多数情况下,我们需要避免SQL在查询时进行全表扫描(FTS),但是对于必须需要进行全表扫描的情况,也可以进行一些优化处理. 即使全表扫描是检索所需数据的唯一可行方法,仍然有多种方法来提升查询性能.优 ...

  7. 甘特图 dhtmlx 插件

    https://dhtmlx.com/docs/products/demoApps/advanced-gantt-chart/

  8. C++ 遍历循环表达示 auto, auto&, auto&&

    for(auto x : range) 创建拷贝,无法修改range中的元素 for(auto& x : range) 可以修改range中的元素,但一般用以下这种 for(auto& ...

  9. 读取xml文件中的配置参数实例_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 paras.xml文件 <?xml version="1.0" encoding=" ...

  10. Arduino连接MPU6050陀螺仪

    一.线路连接 Arduino MPU6050 VCC 3.3V/5V GND GND SCL A5 SDA A4 INT D2 二.库下载 https://pan.baidu.com/s/1nvt75 ...