iptables服务详解
安装iptables
# 1. 关闭selinux,不关闭selinux,iptables不读取配置文件
sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config
setenforce 0
# 2. 关闭firewalld并关闭开机自启
centos7中默认的防火墙是firewalld,使用iptables需要先关闭firewalld防火墙
systemctl stop firewalld
systemctl disable firewalld
# 3. 安装iptables
yum install iptables-services iptables -y
# 4. 启动和查看iptables状态
systemctl start iptables
systemctl enable iptables
# 5. 检查内核模块
lsmod |egrep "nat|filter|ip"
ip_tables 27126 1 iptable_filter ###真正处理规则的。
# 6. 加载如下模块到linux内核
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
# 7. 添加开机自动加载
cat >> /etc/rc.local << EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
EOF
chmod +x /etc/rc.d/rc.local
# 8. 开启ipv4转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
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默认规则解析
cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
# 放行所有 已建立的连接(ESTABLISHED) 和 关联的连接(RELATED),确保正常的双向通信,避免影响现有会话。
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 允许所有 ICMP 协议流量
-A INPUT -p icmp -j ACCEPT
# 允许本地回环流量
-A INPUT -i lo -j ACCEPT
# 允许 SSH 连接 ,放行新的 SSH 连接请求,当ssh连接已经建立时,再发起请求时第一条规则发挥作用(放行)
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
# 拒绝所有转发流量,并且以ICMP协议回应,生产环境中建议直接把(REJECT --reject-with icmp-host-prohibited)改为(DROP),因为默认的规则会有回应操作,如果遭受大量攻击访问,也是不小的请求负载,而DROP直接拒绝,不回应任何信息。
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
iptables的rules解释
Rules包括一个条件和一个目标(target),如果满足条件,就执行目标(target)中的规则或者特定值。如果不满足条件,就判断下一条Rules。
目标值
ACCEPT: 允许防火墙接收数据包
DROP: 防火墙丢弃包
QUEUE: 防火墙将数据包移交到用户空间
RETURN: 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。
描述规则的参数
以下这些规则参数用于描述数据包的协议、源地址、目的地址、允许经过的网络接口,以及如何处理这些数据包。这些描述是对规则的基本描述。
-p 协议: 指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。如果不指定-p参数,则默认是all值。
-s 源地址: 指定数据包的源地址,如果不指定-s参数,就代表所有地址
-d 目的地址: 指定目的地址
-j 执行目标: 指定了当与规则(Rule)匹配时如何处理数据包,可能的值是ACCEPT, DROP, QUEUE, RETURN
-i 输入接口: 指定了要处理来自哪个接口的数据包,如果不指定-i参数,那么将处理进入所有接口的数据包
-o 输出接口: 指定了数据包由哪个接口输出,如果不指定-o选项,那么系统上的所有接口都可以作为输出接口
-sport 源端口: 针对 -p tcp 或者 -p udp, 缺省情况下,将匹配所有端口
--dport 目的端口: 针对-p tcp 或者 -p udp
--icmp-type ICMP类型: 针对-p icmp
iptables常用命令
查看现有规则
# 查看所有表中的规则:
sudo iptables -L -v -n
# -L:列出规则
# -v:显示详细信息,包括数据包计数和字节数
# -n: 以数字形式显示 IP 地址和端口号,而不是解析主机名
# 查看特定表中的规则:
sudo iptables -t nat -L -v -n
# 查看对应规则的序号:
iptables -L -n --line-numbers
添加规则
iptables -A INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT
# -A:将规则添加到INPUT链
# -p:指定协议
# -s:指定源ip
# --dport:目标端口
# -j ACCEPT:表示接受流量
# FORWARD链中添加一条规则,丢弃来自特定 IP 的所有流量:
sudo iptables -A FORWARD -s 10.0.0.5 -j DROP
# -s:源ip地址
# -j DROP:匹配后丢弃流量
# 根据序号添加规则:
iptables -I INPUT 2 -s 172.0.0.0/8 -p tcp --dport 10255 -j ACCEPT
# 上述命令会在 INPUT 链的第 2 条规则之前插入一条新规则
删除规则
# 删除特定链中的一条规则,假设规则编号为 2:
iptables -D INPUT 2
# 删除特定表特定链中的一条规则
iptables -t nat -D PREROUTING 1
# -D: 表示删除
# 1: 规则编号
# -t 表示选择哪个表
# 根据规则内容删除规则:
iptables -D INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT
# 与添加规则时相同的选项,但使用-D来删除规则
修改规则
不支持直接修改规则,只能先删除原有规则,再添加修改后的规则。
# 先删除旧规则:
iptables -D INPUT -p tcp -s 192.168.1.10 --dport 80 -j ACCEPT
# 然后添加修改后的规则:
iptables -A INPUT -p tcp -s 192.168.1.10 --dport 8080 -j ACCEPT
清空规则
# 清空所有链中的规则,默认为filter表
sudo iptables -F
# 清空特定链中的规则
sudo iptables -F INPUT
# 清空特定表中的规则
sudo iptables -t nat -F
# 清空特定表特定链中的规则
sudo iptables -t nat -F PREROUTING
设置链的默认策略
# 设置INPUT链的默认策略为丢弃流量
iptables -P INPUT DROP
# 设置默认策略为接受
iptables -P INPUT ACCEPT
设置端口转发
- 192.168.171.139:5555转发到192.168.171.1:9999端口
iptables -t nat -A PREROUTING --dst 192.168.171.139 -p tcp --dport 5555 -j DNAT --to-destination 192.168.171.1:9999
iptables -t nat -A POSTROUTING --dst 192.168.171.1 -p tcp --dport 9999 -j SNAT --to-source 192.168.171.139
# -t:指定表
# -A:添加
# -j DNAT --to-destination:目标地址转换
- 实现内网机器访问外网
A机器:公网100.100.137.20 内网192.168.1.10
B机器:内网:192.168.1.11
1. 将B机器的默认路由网关改为A机器的内网IP
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规则
# 备份所有表的规则:
iptables-save > /opt/iprules_all.txt
# 默认将所有规则保存到“/etc/sysconfig/iptables”文件中
service iptables save
恢复iptables规则
# 将上面所备份的规则恢复到iptables中:
iptables-restore < /opt/iprules_all.txt
# 默认将/etc/sysconfig/iptables文件中的内容加载到iptables中,也就是说,如果备份使用的是service iptables save那么恢复的时候就应该使用service iptables start
service iptables start
iptables服务详解的更多相关文章
- iptables参数详解
iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
- linux下IPTABLES配置详解 (防火墙命令)
linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT ...
- CentOS 6.5 iptables原理详解以及功能说明
CentOS 6.5 iptables原理详解以及功能说明 来源 https://blog.51cto.com/tanxw/1389114 前言 iptables其实就是Linux下的一个开源的信息过 ...
- HTTPD之二————HTTPD服务详解————httpd的配置文件常见设置
HTTPD之二----HTTPD服务详解----httpd的配置文件常见设置 HTTP服务器应用 http服务器程序 httpd apache nginx lighttpd 应用程序服务器 IIS,a ...
- iptables使用详解
iptables使用详解 @(linux)[iptables] 前言 最近买了一个VPS,并在上面搭了DOCKER,然后再DOCKER中安装Mysql.但只要将网络端口映射到宿主机上,那么外部网络就可 ...
- winxp计算机管理中服务详解
winxp计算机管理中服务详解01 http://blog.sina.com.cn/s/blog_60f923b50100efy9.html http://blog.sina.com.cn/s/blo ...
- Android中Service(服务)详解
http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...
- WCF中队列服务详解
WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...
- 【转】SSH服务详解
[转]SSH服务详解 第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Gro ...
随机推荐
- 基于小熊派Hi3861鸿蒙开发的IoT物联网学习【六】--智慧农业MQTT数据上传华为云
本示例将在BearPi-HM_Nano开发板上使用MQTT协议连接华为IoT平台,使用的是E53_IA1 智慧农业扩展板与 BearPi-HM_Nano 开发板. E53_IA1开发板对应方法: ...
- Lombok 类库使用详解
Lombok 是一个 Java 库,通过注解自动生成常用的样板代码(如 getter/setter.构造函数.日志声明等),显著减少代码量,同时提高代码整洁度. 一.配置方法 (1)IDE:需安装 L ...
- Spring Boot微服务设置logback日志打印级别并关闭kafka debug日志
摘要:以关闭Spring Boot微服务kafka日志为例,介绍logback日志框架中logger标签的属性. 问题描述 在Spring Boot整合kafka的时候,日志配置使用 logbac ...
- 使用spring-boot-starter-mail发送邮件,HTML,附件
前言 这里使用的是spring-boot-starter-mail, 当然了,你也可以使用com.sun.mail(javax.mail),Hutool对这个进行了封装, 但是我的项目是springb ...
- umijs中简单使用umi-request
在umi.js4中使用umi-request进行网络请求,查看官网后还是没明白,便自己摸索一遍,如下把简单使用的过程记录下来,以便共享给其他需要的小伙伴做参考,如有不对的地方,烦请指出. 第一步:安装 ...
- 使用 ftrace 跟踪内核丢包问题定位的实践
本文分享自天翼云开发者社区<使用 ftrace 跟踪内核丢包问题定位的实践>,作者:f****n 数据包的丢失可能会导致性能下降或服务中断.为了诊断内核中是否有丢包问题,我们可以使用 ft ...
- 你必须知道的容器日志 (2) 开源日志管理方案 ELK/EFK
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇<你必须知道的容器日志(1)>中介绍了Docker自带的log ...
- TreeMap实现类和SortMap接口
注意:Map与Set集合的关系非常密切.java源码就是先实现了HashMap,TreeMap,再包装了一个value都为null的Map集合实现Set集合类. 因此:TreeSet可以和TreeMa ...
- FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
QPlayer2是七牛云基于FFmpeg6.1研发并开源的国产播放器,它可运行于Android和iOS系统,既支持播放本地视频文件,也支持播放网络上的流媒体链接.有关FFmpeg在Android平台 ...
- C# 如何防止WinForm程序多次运行
[C# 开发技巧]如何防止程序多次运行 - Learning hard - 博客园 (cnblogs.com) 一.引言 最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如: http:// ...