目录

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指令用法详解

  1. iptables [-t tableName] 选项 [链名] [条件] [-j 控制类型]
  2. #example:
  3. 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:记录日志的信息

选项:

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

查看iptables规则一般使用:

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

条件匹配:

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

综合案例

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

Load Module:

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

SNAT 策略

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

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

数据包出站:

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

Example:

  1. iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 218.29.30.31(防火墙公网IP)
  2. 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 –> 地址伪装 –> 拨号

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

DNAT 策略

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

原理:目标地址转换

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

目标地址转换

  1. 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
  2. #一条DNAT规则只能指定一个服务器
  3. iptables -I FROWARD -d 192.168.8.171 -p tcp -m multiport --dport 21,25,80 -j Accept

转换目标端口

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

Iptables规则的备份和还原

导出规则:

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

备份:

  1. service iptables save

还原:

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

iptables 练习

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

  1. iptables -P OUTPUT DROP

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

  1. iptables -A OUTPUT -s 10.10.10.1 -o eth1 -p icmp --icmp-type 8 -j ACCEPT
  2. iptables -A INPUT -d 10.10.10.1 -i eth1 -p icmp --icmp-type 0 -j ACCEPT
  3. #or
  4. iptables -A OUTPUT -s 192.168.100.1 -o eth0 -p icmp --icmp-type 8 -j ACCEPT
  5. 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地址

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

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

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

  1. 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
  2. iptables -t nat -A PREROUTING -d 10.10.10.1 -i eth1 -p udp --dport 53 -j DNAT --to 192.168.100.2
  3. iptables -A FORWARD -d 192.168.100.2 -i eth1 -p tcp -m multiport --dport 80,25,21 -j ACCEPT
  4. iptables -A FORWARD -d 192.168.100.2 -i eth1 -p udp --dport 53 -j ACCEPPT

HOST1访问远程管防火墙

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

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

  1. iptables -t nat -A PREPOUTONG -d 10.10.10.1 -i eth1 -p dport 2222 -j DNAT --to 192.168.100.2:22
  2. 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. 字符串的 Base64 加密和解密

    base64加密: FORM encode_base64 USING p_business “字符串string CHANGING p_base64. DATA l_xstring TYPE xstr ...

  2. 解决引入 lombok 注解不生效,Eclipse与IDEA集成 lombok

    Eclipse -javaagent:lombok.jar -vmargs -javaagent:lombok.jar IDEA 添加依赖 <!--lombok 实体类注解--> < ...

  3. intellij 编译 springmvc+hibernate+spring+maven 找不到hbm.xml映射文件

    1. 错误信息 Invocation of init method failed; nested exception is org.hibernate.MappingNotFoundException ...

  4. 云主机使用ansible出现秘钥认证问题

    使用ansible的时候,出现如下秘钥失效的问题: root@jumpserver ftp]# ansible web -m ping The authenticity of host 'web-00 ...

  5. Activity安装与使用

    详细安装步骤:http://blog.csdn.net/oyzl68/article/details/16817963

  6. keepalived启动后报错:(VI_1): received an invalid passwd!的解决办法

    一.配置好keepalived.conf文件后,启动keepalived,查看/var/log/message日志报错: [root@push-- sbin]# tail -f /var/log/me ...

  7. 负载均衡实现,一个域名对应多个IP地址【转载】

    使用负载均衡实现,传统和常规做法,其他方式需要特殊处理.(dns轮询,或者自己做解析)1.一个域名设定多个dns服务或者服务器进行解析,同一个域名的每个解析都指向不同的ip地址,这样应答快的dns优先 ...

  8. Codeforces 985 最短水桶分配 沙堆构造 贪心单调对列

    A B /* Huyyt */ #include <bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define mkp(a, ...

  9. Java内部类的整理。

    Java 内部类 分四种:成员内部类.局部内部类.静态内部类和匿名内部类. 成员内部类: (1)即作为外部类的一个成员存在,与外部类的属性.方法并列. 注意:成员内部类中不能定义静态变量,但可以访问外 ...

  10. Qt常见错误

    fatal error: QApplication: No such file or directory 在.pro文件中 添加 QT += widgets fatal error: QTcpSock ...