首页 > 系统相关 >iptables详解

iptables详解

时间:2023-04-16 20:12:38浏览次数:33  
标签:iptables -- ACCEPT state 详解 tcp eth0

iptables 概述

iptables是Linux斜体自带的防火墙,支持数据包过滤、数据包转发、地址转换、基于MAC地址的过滤、基于状态的过滤、包速率限制等安全功能。iptables可以用于构建Linux主机防火墙,也可以用于搭建网络防火墙。

iptables 结构

一、iptables的表tables与链chains

iptables有filter、nat、mangle、raw四种表,五链PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

1. Filter表

filter表:是iptables的默认表,用于过滤数据包,控制网络流量。它有以下三种内建链(chains)

  • INPUT链:数据包进入本机之前进行处理。
  • OUTPUT链:数据包从本机发出之前的操作。
  • FORWARD链:数据包转发到其他主机之前进行处理。

2. NAT表

NAT表:用于等数据包进行地址转换,实现网络地址转换(NAT)功能。有三种内建链(chains)

  • PREROUTING链:处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT。
  • POSTROUTING链:处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
  • OUTPUT链:数据包从本机发出之前进行处理。

3. Mangle表

Mangle表:用于修改数据包的头部信息,比如TTL、TOS等。它有5个内建链(chains)

  • PREROUTING
  • OUPPUT
  • FORWARD
  • INPUT
  • POSTROUTING

4. Raw表

Raw表:用于处理数据包的链接状态,对于未建立连接的数据包进行处理。它有两个内建链

  • PREROUTING
  • OUTPUT

iptables 配置

规则包括一个条件和一个目标,如果满足条件,就执行目标中的规则或者特定值,如果不满足条件,就判断下一条规则。

iptables中需要用-t<表名>来查看指定表的规则,如果不指定默认是filter表的规则。

清除现有的规则
bash iptables -F

查看NAT表规则
bash iptables -t nat -L

端口转发

开启内核转发

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

本地端口转发

将外部访问本机的8080端口转发到本地的80端口

iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 22

多主机端口转发

A的ip是192.168.1.2,B的ip是192.168.1.1,A和B是内网互通的,现在有一个外部ip(1.2.3.4)为C,C想通过访问B的2222端口从而访问到A的22端口。

img

#在B上执行
#将所有从A机器返回的TCP流量的源地址改为B机器的IP地址,不管单端口函数多端口转发都需要执行
iptables -t nat -A POSTROUTING -d 192.168.1.2 -p tcp --dport 22 -j SNAT --to-source 192.168.1.1

#单端口转发,将所有目的地址为1.2.3.4并且端口为2222的TCP流量重定向到A机器的22端口上。
iptables -t nat -A PREROUTING -s 1.2.3.4 -p tcp --dport 2222 -j DNAT to-destination 192.168.1.2:22
#多对一端口转发
#将B的50000到60000的端口全部转发到A的443端口
iptables -t nat -l PREROUTING -p tcp -m multiport --dport 50000:60000 -j DNAT --to-destination 192.168.1.2:443

多对多端口转发

例如将B的50000到60000的端口全部转发到A的50000到60000的端口,命令如下:

iptables -t nat -I PREROUTING -p tcp -m multiport --dport 50000:60000 -j DNAT --to-destination 192.168.1.2:50000-60000

当然多个端口也可以是不连续的,比如80、443、8080同端口转发,端口用逗号”,”隔开,–to-destination后面的ip不用再指定端口。

iptables -t nat -I PREROUTING -p tcp -m multiport --dport 80,443,8080 -j DNAT --to-destination 192.168.1.2

iptables增加、插入、删除规则

  • -A 在最后一条规则后新增规则
  • -I 默认将新规则插入到第一条
  • -F 不指定<链名>,默认清空整个表的规则
  • -D <链名> <规则编号> 删除指定编号的规则

iptables实例

1. Delete all existing rules
iptables -F

2. Set default chain policies
iptables -P INPUT DROP
iptables -P FORWAED DROP
iptables -P OUTPUT DROP

3. Block a specific ip-address
iptables -A INPUT -s 10.10.10.10 -j DROP

4. Allow ALL incoming SSH
iptable -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

5. Allow incoming SSH only from a sepcific network
iptables -A INPUT -i eth0 -p tcp -s X.Y.Z.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

6. Allow incoming HTTP
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

7. Allow incoming HTTPS
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

8. MultiPorts (Allow incoming SSH,HTTP,and HTTPS)
iptables -A INPUT -i eth0 -p tcp -m multiport --dport 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

9. Allow outgoning SSH
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport -m state --state ESTABLISHED -j ACCEPT

10. Allow outgoing SSH only to a specific network
iptables -A OUTPUT -o eth0 -p tcp -d A.B.C.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

11. Allow outgoing HTTPS
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

12. Ping from inside to outside
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

13. Ping from outside to inside 
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

14. Allow outbound DNS
iptables -A OUTPUT -p udp  -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

15. Allow MySQL connection only from a specific network
iptables -A INPUT -i eth0 -p tcp -s 192.168.Y.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

16. Port forwarding 442 to 22
iptables -t nat -A PREROUTING -p tcp -d 192.168.A.B --dport 422 -j DNAT --to 192.168.102.37:22
iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 442 -m state --state ESTABLISHED -j ACCEPT

标签:iptables,--,ACCEPT,state,详解,tcp,eth0
From: https://www.cnblogs.com/kalixcn/p/17323391.html

相关文章

  • 第五节:setState详解、render函数优化、数据不可变、ref获取DOM和组件
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......
  • 【转】iptables命令详解和举例(完整版)
    1、防火墙概述          防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对......
  • Rust中的derive属性详解
    1.Rust中的derive是什么?在Rust语言中,derive是一个属性,它可以让编译器为一些特性提供基本的实现。这些特性仍然可以手动实现,以获得更复杂的行为。2.derive的出现解决了什么问题?derive属性的出现解决了手动实现一些特性时需要编写大量重复代码的问题。它可以让编译器自动生成......
  • 环境变量概念详解!(4千字长文)
    环境变量!环境变量我们是否可以认为我们平时写的程序是一个指令呢?可以的!其实我们平时写的程序和我们在linux下执行的指令是同一个东西!都是可执行程序!那为什么我们执行的时候,需要用到./xxx这样来执行我们的程序,但是使用系统里面的指令就只要输入就可以呢?我们从报错我们就可......
  • 【JVM】JVM调优工具命令详解
    1 前言这节我们来实际的用一用JVM平时常用的调优命令,来实际体验回顾一下。这里我直接用的是我们生产环境的一个Pod里,来真实的带大家体验一下。2 jpsjps大家应该都知道吧,就是列出当前的java进程有哪些:3 jmap3.1  jmap‐histo此命令可以用来查看内存信息,实例个数以......
  • 四月学习之LVS DR模型详解
    一、概述通过修改请求报文的目标MAC地址,然后根据算法挑选出合适的RS节点,进行转发。(请求进入DSServer时做MAC地址替换,后端返回数据报文时无需经过DSServer节点,直接返回给客户端即可)1、DR基础图解2、DR底层实现1、路由器如何找到VIP以及MAC地址呢路由器通过ARP广播获取VMAC,然后......
  • redis的 CLIENT LIST 详解
    redis>CLIENTLISTaddr=127.0.0.1:43143fd=6age=183idle=0flags=Ndb=0sub=0psub=0multi=-1qbuf=0qbuf-free=32768obl=0oll=0omem=0events=rcmd=clientaddr=127.0.0.1:43163fd=5age=35idle=15flags=Ndb=0sub=0psub=0multi=-1qbuf=0qbuf-free=0......
  • Python之虚拟环境venv实战详解
     安装配置虚拟环境virtualenv官方给出的建议是最好在一开始就创建虚拟环境。在不同环境下,我们使用不同命令,即可创建出一个名为venv的虚拟环境最简的方式是使用python指令之间创建#windowspython-mvenvvenv#linux/macospython3-mvenvvenvWindows重点讲解......
  • Shell $命令详解
    5Shell特殊变量$0:脚本文件名$n(n>=1):第几个参数$*:所有参数$@:所有参数$#:参数个数$$:进程ID 6.$*与$@区别不加“”没有区别,都表示所有的参数。加了“”区别如下$*:所有参数是个整体$@:每个参数是个整体#!/bin/bashecho"printeachparamfrom\"\$*\""for......
  • 内存对齐详解 (C++代码)
    内存对齐详解(C++代码)目录内存对齐详解(C++代码)Test1:结构体对齐Test2:时间开销对比我每天都有读一下面经的习惯,从里面抽一些我不太懂的内容使用dfs的思想去探索,感谢有了GPT4,探索之路变得有趣和高效许多。今天这个Topic如下,是腾讯日常实习面经中的内容编译内存相关:C+......