找回密码
 立即注册
首页 业界区 业界 iptables服务详解

iptables服务详解

蓬森莉 2025-8-12 18:27:16
安装iptables
  1. # 1. 关闭selinux,不关闭selinux,iptables不读取配置文件   
  2. sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config
  3. setenforce 0
  4. # 2. 关闭firewalld并关闭开机自启
  5. centos7中默认的防火墙是firewalld,使用iptables需要先关闭firewalld防火墙
  6. systemctl stop firewalld
  7. systemctl disable firewalld
  8. # 3. 安装iptables
  9. yum install iptables-services   iptables  -y
  10. # 4. 启动和查看iptables状态
  11. systemctl start iptables
  12. systemctl enable iptables
  13. # 5. 检查内核模块
  14. lsmod |egrep "nat|filter|ip"
  15. ip_tables              27126  1 iptable_filter   ###真正处理规则的。
  16. # 6. 加载如下模块到linux内核
  17. modprobe ip_tables
  18. modprobe iptable_filter
  19. modprobe iptable_nat
  20. modprobe ip_conntrack
  21. modprobe ip_conntrack_ftp
  22. modprobe ip_nat_ftp
  23. modprobe ipt_state
  24. # 7. 添加开机自动加载
  25. cat >> /etc/rc.local  << EOF
  26. modprobe ip_tables
  27. modprobe iptable_filter
  28. modprobe iptable_nat
  29. modprobe ip_conntrack
  30. modprobe ip_conntrack_ftp
  31. modprobe ip_nat_ftp
  32. modprobe ipt_state
  33. EOF
  34. chmod +x /etc/rc.d/rc.local
  35. # 8. 开启ipv4转发
  36. echo "net.ipv4.ip_forward = 1"  >> /etc/sysctl.conf
  37. sysctl -p
  38. net.ipv4.ip_forward = 1
复制代码
iptables工作流程

iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头数据进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。

  • 防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
  • 如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。
  • 如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则(最后一条)得到明确的阻止还是通过。
  • 防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)。
iptables的表与链介绍


  • Filter表(常用):

    • INPUT链: 处理来自外部的数据。
    • OUTPUT链: 处理向外发送的数据。
    • FORWARD链: 处理转发到本机的其他网卡设备上的数据。

  • NAT表(常用):

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

  • Mangle表(基本不用): 用于指定如何处理数据包。它能改变TCP头中的QoS位
  • Raw表(基本不用): 用于处理异常
iptables默认规则解析
  1. cat /etc/sysconfig/iptables
  2. # sample configuration for iptables service
  3. # you can edit this manually or use system-config-firewall
  4. # please do not ask us to add additional ports/services to this default configuration
  5. *filter
  6. :INPUT ACCEPT [0:0]
  7. :FORWARD ACCEPT [0:0]
  8. :OUTPUT ACCEPT [0:0]
  9. # 放行所有 已建立的连接(ESTABLISHED) 和 关联的连接(RELATED),确保正常的双向通信,避免影响现有会话。
  10. -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  11. # 允许所有 ICMP 协议流量
  12. -A INPUT -p icmp -j ACCEPT
  13. # 允许本地回环流量
  14. -A INPUT -i lo -j ACCEPT
  15. # 允许 SSH 连接 ,放行新的 SSH 连接请求,当ssh连接已经建立时,再发起请求时第一条规则发挥作用(放行)
  16. -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
  17. # 拒绝所有转发流量,并且以ICMP协议回应,生产环境中建议直接把(REJECT --reject-with icmp-host-prohibited)改为(DROP),因为默认的规则会有回应操作,如果遭受大量攻击访问,也是不小的请求负载,而DROP直接拒绝,不回应任何信息。
  18. -A INPUT -j REJECT --reject-with icmp-host-prohibited
  19. -A FORWARD -j REJECT --reject-with icmp-host-prohibited
  20. COMMIT
复制代码
iptables的rules解释

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

ACCEPT: 允许防火墙接收数据包
DROP: 防火墙丢弃包
QUEUE: 防火墙将数据包移交到用户空间
RETURN: 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。
描述规则的参数

以下这些规则参数用于描述数据包的协议、源地址、目的地址、允许经过的网络接口,以及如何处理这些数据包。这些描述是对规则的基本描述。
  1. -p 协议: 指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。如果不指定-p参数,则默认是all值。
  2. -s 源地址: 指定数据包的源地址,如果不指定-s参数,就代表所有地址
  3. -d 目的地址: 指定目的地址
  4. -j 执行目标: 指定了当与规则(Rule)匹配时如何处理数据包,可能的值是ACCEPT, DROP, QUEUE, RETURN
  5. -i 输入接口: 指定了要处理来自哪个接口的数据包,如果不指定-i参数,那么将处理进入所有接口的数据包
  6. -o 输出接口: 指定了数据包由哪个接口输出,如果不指定-o选项,那么系统上的所有接口都可以作为输出接口
  7. -sport 源端口: 针对 -p tcp 或者 -p udp, 缺省情况下,将匹配所有端口
  8. --dport 目的端口: 针对-p tcp 或者 -p udp
  9. --icmp-type ICMP类型: 针对-p icmp
复制代码
iptables常用命令

查看现有规则
  1. # 查看所有表中的规则:
  2. sudo iptables -L -v -n
  3. # -L:列出规则
  4. # -v:显示详细信息,包括数据包计数和字节数
  5. # -n: 以数字形式显示 IP 地址和端口号,而不是解析主机名
  6. # 查看特定表中的规则:
  7. sudo iptables -t nat -L -v -n
  8. # 查看对应规则的序号:
  9. iptables -L -n --line-numbers
复制代码
添加规则
  1. iptables -A INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT
  2. # -A:将规则添加到INPUT链
  3. # -p:指定协议
  4. # -s:指定源ip
  5. # --dport:目标端口
  6. # -j ACCEPT:表示接受流量
  7. # FORWARD链中添加一条规则,丢弃来自特定 IP 的所有流量:
  8. sudo iptables -A FORWARD -s 10.0.0.5 -j DROP
  9. # -s:源ip地址
  10. # -j DROP:匹配后丢弃流量
  11. # 根据序号添加规则:
  12. iptables -I  INPUT 2 -s 172.0.0.0/8  -p tcp --dport 10255 -j ACCEPT
  13. # 上述命令会在 INPUT 链的第 2 条规则之前插入一条新规则
复制代码
删除规则
  1. # 删除特定链中的一条规则,假设规则编号为 2:
  2. iptables -D INPUT 2
  3. # 删除特定表特定链中的一条规则
  4. iptables -t nat -D  PREROUTING 1
  5. # -D: 表示删除
  6. # 1: 规则编号
  7. # -t 表示选择哪个表
  8. # 根据规则内容删除规则:
  9. iptables -D INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT
  10. # 与添加规则时相同的选项,但使用-D来删除规则
复制代码
修改规则

不支持直接修改规则,只能先删除原有规则,再添加修改后的规则。
  1. # 先删除旧规则:
  2. iptables -D  INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT
  3. # 然后添加修改后的规则:
  4. iptables -A  INPUT -p tcp -s 192.168.1.10 --dport 8080 -j ACCEPT
复制代码
清空规则
  1. # 清空所有链中的规则,默认为filter表
  2. sudo iptables -F
  3. # 清空特定链中的规则
  4. sudo iptables -F INPUT
  5. # 清空特定表中的规则
  6. sudo iptables -t nat -F  
  7. # 清空特定表特定链中的规则
  8. sudo iptables -t nat -F PREROUTING
复制代码
设置链的默认策略
  1. # 设置INPUT链的默认策略为丢弃流量
  2. iptables -P INPUT DROP
  3. # 设置默认策略为接受
  4. iptables -P INPUT ACCEPT
复制代码
设置端口转发


  • 192.168.171.139:5555转发到192.168.171.1:9999端口
  1. iptables -t nat -A PREROUTING --dst 192.168.171.139 -p tcp --dport 5555 -j DNAT --to-destination 192.168.171.1:9999
  2. iptables -t nat -A POSTROUTING --dst 192.168.171.1 -p tcp --dport 9999 -j SNAT --to-source 192.168.171.139
  3. # -t:指定表
  4. # -A:添加
  5. # -j DNAT --to-destination:目标地址转换
复制代码

  • 实现内网机器访问外网
A机器:公网100.100.137.20  内网192.168.1.10
B机器:内网:192.168.1.11
  1. 1. 将B机器的默认路由网关改为A机器的内网IP
  2. 2. iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -j SNAT --to-source 100.100.137.20
复制代码
iptables备份和恢复

备份iptables规则
  1. # 备份所有表的规则:
  2. iptables-save > /opt/iprules_all.txt
  3. # 默认将所有规则保存到“/etc/sysconfig/iptables”文件中
  4. service iptables save
复制代码
恢复iptables规则
  1. # 将上面所备份的规则恢复到iptables中:
  2. iptables-restore < /opt/iprules_all.txt
  3. # 默认将/etc/sysconfig/iptables文件中的内容加载到iptables中,也就是说,如果备份使用的是service iptables save那么恢复的时候就应该使用service iptables start
  4. service iptables start
复制代码
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册