Linux-----iptables基础篇

本文介绍了Linux中iptables的基础知识,包括规则、链和表的概念,重点讲解了filter、nat和mangle表的用途。此外,详细阐述了iptables命令格式,参数如-A、-I、-D和-R,以及各种动作选项,如ACCEPT、DROP和SNAT。最后,通过实例展示了iptables在禁止用户访问特定端口、删除规则、禁止特定IP访问等方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前一阵子,服务器搞网络安全,这对于小白来说真的是恶心坏了,没办法只能恶补iptables知识,坚决不做睁眼瞎,整理之后发现真的是博大精深,python也不能停,暂时整理出基础篇!深入篇会持续整理。。。

1 iptables基础篇

1.1 iptables基础

  1. 规则(rules):网络管理员预定义的条件。
  2. 链(chains): 是数据包传播的路径。
  3. 表(tables):内置3个表filter表,nat表,mangle表分别用于实现包过滤网络地址转换和包重构的功能。
  4. filter表是系统默认的,INPUT表(内核流入用户空间的数据包),FORWORD(从发用户空间流出的数据包,转发管卡),OUTPUT(进入/离开本机的外网接口),filter表只能对包进行授受和丢弃的操作。
  5. nat表(网络地址转换),PREROUTING(修改即将到来的数据包),OUTPUT(修改在路由之前本地生成的数据包),POSTROUTING(修改即将出去的数据包)。
  6. mangle表,修改报文原数据,PREROUTING,OUTPUT,FORWORD,POSTROUTING,INPUT。

1.2 顺序读取规则

iptables是按照顺序读取规则,所以后续优化会涉及到。

1.3 命令格式

iptables [-t 表名] <-A|I|D|R> 链名 [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip|源子网] [–sport 源端口号] [-d 目的IP|目标子网] [–dport 目标端口号] [-j 动作]

若不指定表名,默认使用filter表

所有的链名必须大写,表名必须小写,动作必须大写,中间的条件匹配必须小写

1.3.1 参数:

-A 增加 -I 插入 -D 删除 -R 替换

1.3.2 动作选项

ACCEPT 接收数据包
DROP 丢弃数据包
REDIRECT 将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务
SNAT 源地址转换
DNAT 目的地址转换
MASQUERADE IP伪装
LOG 日志功能

1.4 帮助及环境准备

[root@FRONTDB ~]# iptables –h 
[root@FRONTDB ~]# man iptables
iptables -L -n  查看当前规则
iptables -F  #清空所有的防火墙规则
iptables -X  #删除用户自定义的空链
iptables -Z #清空计数

2 简单应用

[root@FRONTDB ~]# netstat -lntup| grep ssh
tcp    0      0 :::22          :::*          LISTEN      2737/ssh
[root@FRONTDB ~]# lsof -i :22
COMMAND   PID   USER   FD   TYPE DEVICE SIZE NODE NAME
sshd     2737   root    3u  IPv6   9183       TCP *:ssh (LISTEN)
sshd    17199   root    3u  IPv6 521111       TCP FRONTDB:ssh->192.168.0.201:n2nremote (ESTABLISHED)
sshd    17201 oracle    3u  IPv6 521111       TCP FRONTDB:ssh->192.168.0.201:n2nremote (ESTABLISHED)
[root@FRONTDB ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

2.1 尝试禁止用户访问1521端口

[root@FRONTDB ~]# lsof -i :1521
COMMAND  PID   USER   FD   TYPE DEVICE SIZE NODE NAME
tnslsnr 2660 oracle    8u  IPv4   8998       TCP FRONTDB:ncube-lm (LISTEN)

2.2 删除规则

[root@FRONTDB ~]# iptables -t filter -A INPUT -p tcp --dport 80 -j DROP
[root@FRONTDB ~]# iptables -L -n --line-numbers                        
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
[root@FRONTDB ~]# iptables -t filter -D INPUT 1 
[root@FRONTDB ~]# iptables -L –n

2.3 -A和-I的区别

-I insert会把规则添加到第一行 ,一般用于禁止IP,匹配到禁止IP后后面的规则不再匹配
-A append会把规则添加到最后一行

[root@FRONTDB ~]# iptables -t filter -A INPUT -p tcp --dport 81 -j DROP 
[root@FRONTDB ~]# iptables -t filter -A INPUT -p tcp --dport 82 -j DROP 
[root@FRONTDB ~]# iptables -t filter -A INPUT -p tcp --dport 83 -j DROP 
[root@FRONTDB ~]# iptables -t filter -I INPUT -p tcp --dport 84 -j DROP   
[root@FRONTDB ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:84 
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:81 
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:82 
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:83 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         


[root@FRONTDB ~]# iptables -t filter -I INPUT 2 -p tcp --dport 85 -j DROP 
[root@FRONTDB ~]# iptables -L -n --line-numbers                          
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:84 
2    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:85 
3    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:81 
4    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:82 
5    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:83 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

2.4 禁止192.168.0.20访问

[root@FRONTDB ~]# iptables -t filter -A INPUT  -i eth0  -s 192.168.0.20/32 -j DROP

也可以禁止网段访问

2.5 禁止非自己的访问

[root@FRONTDB ~]# iptables -t filter -A INPUT  -i eth0 ! -s 192.168.0.21/32 -j DROP
此时CRT掉了,20也ping不同,只能去本机上iptables –F了。。。

2.6 禁端口范围

[root@FRONTDB ~]# iptables -I INPUT -p tcp --dport 20:23 -j DROP
此时CRT又连不上。。。
[root@FRONTDB ~]# iptables -I INPUT -p tcp -m multiport --dport 121,22,123,204 -j DROP
此时-m multiport必须写,否则报错

2.7 匹配icmp类型

[root@FRONTDB ~]# iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 -s 192.168.0.20/32 -j DROP  (也是禁ping)
等价于:
[root@FRONTDB ~]# iptables -t filter -I INPUT -p icmp -m icmp --icmp-type any -j DROP

2.8 匹配网络状态

NEW;已经或者将启动新的连接
ESTABLISHED:已经建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别

FTP服务是特殊的,需要匹配连接状态
允许关联的状态包通过(web服务不要使用ftp服务)

[root@FRONTDB ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@FRONTDB ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-m limit
本机21,允许20网络ping本机,但限制每分钟请求不能超过20,每次并发不能超过3个

[root@FRONTDB ~]# iptables -A INPUT -s 192.168.0.20/32 -d 192.168.0.21/32 -p icmp --icmp-type 8 -m limit --limit 20/min --limit-burst 3 -j ACCEPT
<think>嗯,用户想要找基于Arm-Linux的嵌入式网关设计教程或实现方案。从用户提供的引用来看,之前已经展示过四相关文献的摘要,说明用户对这个主题有明确的研究需求。用户可能是嵌入式系统领域的学生或工程师,正在做一个实际项目。ta特意强调“设计教程”“实现方案”,说明需要的是实操性内容,不是理论概述。结合引用里提到的网关数据管理、Web访问、传感器集成等功能,用户可能正在开发物联网类项目。让我梳理下设计的关键环节:硬件选择是基础,像ARM9/A7这类带以太网USB的主控最合适。软件层面必须包含U-Boot移植文件系统裁剪,这在引用[1][2]都重点提过。用户引用的[4]还提到CGIsqlite集成,说明Web服务轻量数据库是刚需。考虑到用户可能需要动手演示,应该把代码示例工具链写清楚。比如用BusyBox构建最小系统这个经典操作,用户可能遇到命令行工具缺失的问题。安全部分容易被忽略,但引用[3]提到防火墙设置,这个对网关很重要。还有用户提到的远程访问功能,需要补充密钥认证的配置方法。测试环节也不能少,特别是qemu模拟调试这种低成本验证方式,对个人开发者很实用。最后用户可能需要扩展阅读,补充下MQTT这类物联网协议会很有用,虽然ta暂时没提,但传感器网络网关迟早要用到。</think> 基于ARM-Linux的嵌入式网关设计涉及硬件选型、系统移植、网络协议栈构建应用开发,以下是详细方案及参考教程: --- ### **一、核心设计步骤** 1. **硬件平台选型** - **处理器**:选用ARM Cortex-A系列(如A7/A53),推荐开发板:树莓派4B(BCM2711)、NXP i.MX6UL(工业级)、全志H3(低成本)[^1][^3] - **外设要求**: - 双网口(WAN/LAN隔离)或4G模块 - 至少256MB RAM + 512MB Flash - USB/RS485接口(连接传感器) 2. **Linux系统移植** ```bash # 典型移植流程 git clone https://github.com/u-boot/u-boot.git # 下载U-Boot make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx6ul_defconfig # 配置板级支持 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- # 编译 # 内核裁剪(保留必要功能) make ARCH=arm menuconfig # 启用: Network → IPv4/IPv6, Firewall, PPPoE # 关闭: 未用驱动(如显卡、声卡) ``` 3. **网络功能实现** - **协议栈配置**: ```bash # 启用NAT转发(网关核心) echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # WAN口IP伪装 ``` - **轻量化服务**: - **Web服务器**:[Boa](https://www.boa.org/)(仅60KB内存) - **数据库**:SQLite(嵌入式场景首选)[^4] 4. **传感器数据接入** - **驱动开发**:通过设备树(DTS)添加传感器节点 ```dts // 示例:温湿度传感器DHT11 &i2c1 { dht11: sensor@44 { compatible = "dht11"; reg = <0x44>; }; }; ``` - **数据上报**:使用CGI桥接Web与硬件[^4] ```c // CGI示例(C语言) int main() { printf("Content-type: text/html\n\n"); printf("<html><body>Sensor Value: %.1f°C</body></html>", read_temperature()); return 0; } ``` --- ### **二、关键优化方向** 1. **实时性增强**: - 打补丁`RT-Preempt`或改用`Xenomai`双核方案 - 配置线程优先级:`pthread_setschedparam(pthread_self(), SCHED_FIFO, &priority)` 2. **安全加固**: - 启用内核级防火墙(Netfilter) - 禁用root远程登录,强制密钥认证 3. **OTA升级**: - 设计A/B双系统分区 - 使用`rsync`差分更新固件 --- ### **三、实现方案参考** ```mermaid graph LR A[ARM开发板] --> B(U-Boot移植) B --> C(Linux内核裁剪) C --> D(RootFS构建) D --> E{网络服务} E --> F[防火墙/NAT] E --> G[Boa+CGI] E --> H[SQLite数据库] D --> I[传感器驱动] I --> J[数据采集线程] J --> K[Web数据展示] ``` --- ### **四、学习资源推荐** 1. **教程** - 《嵌入式Linux开发实战》(ARM卷)第8章·网关设计 - **官方文档**:[U-Boot移植指南](https://www.denx.de/wiki/U-Boot/Documentation) 2. **开源项目** - **OpenWrt**:https://openwrt.org/docs/guide-developer/start (工业级路由器方案) - **RaspAP**:树莓派网关工具(含Web管理界面) 3. **调试工具链** - `gdb-multiarch` + `gdbserver` 远程调试 - `tcpdump`抓包分析网络行为 --- > 提示:实际部署时需注意**电源管理**(防止掉电数据丢失)**看门狗机制**(自动复位异常进程)。建议优先在QEMU模拟环境中验证协议栈可靠性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值