iptables 小结
最近工作上一个作业用到了iptables命令,主要进行端口映射,在网上查了好多资料,尽管有很多例子,但还是整了好几天才整明白。在这里将学习到的知识总结一下。以下均属个人见解。(有一些是从网络中总结的,不断完善中...)
一、基本知识
(1) iptables简介
iptables是一个Linux下优秀的nat+防火墙工具,iptables操作的是2.4以上内核的netfilter,所以需要linux的内核在2.4以上。其功能性与安全性远远比其前辈ipforward、ipchains强大,iptables大致是工作在OSI七层的二、三、四层。
首先简单介绍一下netfilter的大致工作流程,也就是一个数据包(或者分组,packet),在到达linux的网络接口(网卡)的时候,如何处理这个包。然后再介绍一下如何利用iptables改变或控制这个数据包。
netfilter的内部有三个表吗,分别是filter、nat和mangle。每个表有不同的操作链(Chain)。
filter表中,即起防火墙功能的表,定义了三个Chain,分别是INPUT、FORWARD、OUTPUT(即对包的进入、转发和出进行定义的三个链),对这个filter表的操作是实现防火墙功能的一个重要手段。
nat表(Network Address Translation网络地址翻译),定义了PREROUTING、POSTROUTING、OUTPUT三个链,主要用于实现地址转换和端口转发。
mangle表,是一个自定义表,包括上述的filter和nat表中的各种chains,它可以让我们进行一些自定义的操作。mangle表中的chains存在netfilter对包的处理流程中处于一个比较优先的位置(对此表的了解不多,一般情况我们用不到这个mangle表,在此不做介绍)。
下述图清晰的描绘了netfilter对包的处理流程(摘自网上,不知作者是谁,在此深表敬意!)。

注:详细的解说参见如下文章:
http://blog.csdn.net/xingliyuan22/article/details/9047767
(2)基本操作
①iptables命令启动、停止、重启、保存:
#/etc/init.d/iptables start
#service iptables start
#/etc/init.d/iptables stop
#/etc/init.d/iptables restart
#service iptables restart
#/etc/init.d/iptables save
②其他操作详解见
http://blog.csdn.net/xingliyuan22/article/details/8960917
http://blog.csdn.net/xingliyuan22/article/details/9142891
二、应用
(1)端口映射
前提:一台Linux双网卡计算机IP:192.168.1.2、202.201.1.2,内网有一个Web服务器192.168.1.6
要求:在外网的浏览器输入202.201.1.2:8000访问到192.168.1.6的80Web服务端口
详细配置:
注意:在此之前要打开端口转发服务
/etc/sysctl.conf配置文件的 net.ipv4.ip_forward = 1 默认是0
可以获得root权限修正,也可以用如下命令:
echo "1" > /etc/sysctl.conf/net.ipv4.ip_forward
①清除原有规则
#iptables -F -t nat
#iptables -F -t filter
#/etc/init.d/iptables save
②配置映射规则
#iptables -t nat -A PREROUTING -d 202.201.1.2 -t tcp --dport 8000 -t tcp -j DNAT -to--destination 192.168.1.6:80
#iptables -t nat -A POSTROUTING -d 192.168.1.6 -p tcp --dport 80 -j SNAT -- to 192.168.1.2
#iptables -A FORWARD -o eth0 -d 192.168.1.6 -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -i eth0 -s192.168.1.6 -p tcp --dport 80 -j ACCEPT
#iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
③保存,启动服务
#/etc/init.d/iptables save
#service iptables restart
注:在/proc/net/ip_conntrack文件里有包的流向
(2)IP映射
前提:Linux先在一个网卡上追加一个IP地址,Linux上的一个网卡可以有多个IP地址。
LINUX双网卡,IP分别为eth0:192.168.1.2/24、eth1:192.168.2.2/24
要求:将IP:192.168.2.5映射到LINUX上的192.168.1.2上
①追加linux的eth0一个网址
#ip address add 1.1.1.1/30 brd + dev eth0
②iptables配置
#iptables -A FORWARD -s 192.168.12.95 -j ACCEPT
#iptables -A FORWARD -d 192.168.12.95 -j ACCEPT
#iptables -t nat -A PREROUTING -d 202.201.1.2 -j DNAT -to--destination 192.168.1.6
#iptables -t nat -A POSTROUTING -d 192.168.1.6 -j SNAT -- to -source 192.168.1.2
#/etc/init.d/iptables save
#service iptables restart
注:详细的解释参加下述文章:
http://blog.csdn.net/xingliyuan22/article/details/9152323
iptables 小结的更多相关文章
- iptables详解(14):iptables小结之常用套路
不知不觉,已经总结了13篇iptables文章,这些文章中有一些需要注意的地方. 此处,我们对前文中的一些注意点进行总结,我们可以理解为对"常用套路"的总结. 记住这些套路,能让我 ...
- Iptables之recent模块小结
Iptables的recent模块用于限制一段时间内的连接数, 是谨防大量请求攻击的必杀绝技! 善加利用该模块可充分保证服务器安全. recent常用参数--name 设定列表名称,即设置跟 ...
- iptables中文介绍 、基本使用操作命令(转)
iptables 命令介绍 原文链接http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html iptables防火墙可 ...
- iptables 命令介绍
http://www.cnblogs.com/wangkangluo1/archive/2012/04/19/2457072.html iptables 防火墙可以用于创建过滤(filter)与NAT ...
- iptables的实战整理
一.iptables使用场景: 内网情况下使用:在大并发的情况下不要开iptables否则影响性能 二.iptables出现下面的问题: 在yewufa ...
- iptables基础知识
iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置 iptables将会帮助你更有效地管理Linux防火墙.如果你是第一 ...
- iptables网络安全服务详细使用
iptables防火墙概念说明 开源的基于数据包过滤的网络安全策略控制工具. centos6.9 --- 默认防火墙工具软件iptables centos7 --- 默认防火墙工具软件fire ...
- 【转】iptables 命令介绍
iptables 防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables,因此理解如何配置iptables将会帮助你更有 效地管理Linux防火墙.如果你是第 ...
- [转帖]Linux 硬件和系统配置查看命令小结
https://blog.csdn.net/strongwangjiawei/article/details/8208825 转帖了不少 发现自己记住的还是不多.. Linux 硬件和系统配置查看命令 ...
随机推荐
- itextSharp 使用模板(PdfTemplate)不规则分栏(ColumnText)
public static void Main() { Document document = new Document(); BaseFont bf = BaseFont.createFont(Ba ...
- QT update和repaint的区别
void QWidget::repaint ( int x, int y, int w, int h, bool erase = TRUE ) [槽] 通过立即调用paintEvent()来直接重新绘 ...
- HDU 4544 湫湫系列故事――消灭兔子
HDU 4544 Tags: 数据结构,贪心 Analysis: 将兔子的血量从大到小排序,将箭的杀伤力从大到小排序,对于每一个兔子血量, 将比他大的杀伤力大的剑压入优先队列,优先队列自己重写,让它每 ...
- gdb 远程qemu-arm调试
把 c 编译成 arm 指令的可运行文件 /usr/bin/arm-linux-gnueabi-g++ hello.cpp cat hello.cpp #include <stdio.h> ...
- 前端project师,确定你的目标吧!无能的人才管他叫命运
导语: 你为自己定过一个不靠谱的目标,是20年前的事了吧. 长大你想干什么?你的回答是什么?现在实现了吗? 如今,你每天都坐在同一个格子间的同一个电脑前,会不会感到每天都像是在复印,感到前途是模糊的, ...
- QT中.pro文件的写法
QT中.pro文件的写法 qmake 变量 含义 #xxxx 注释, 从“#”开始,到这一行结束 SOURCES 指定源文件 SOURCES = *.cpp 对于多源文件,可用空格分开 SOURC ...
- Qt 多线程 详细函数说明及其事例
转:http://www.cnblogs.com/hicjiajia/archive/2011/02/03/1948955.html Qt线程类 Qt 包含下面一些线程相关的类:QThread 提供了 ...
- PHP学习之-1.6 PHP语句结束符
PHP语句结束符 是不是我们在javascript,Java 的每一句代码结束的地方都有一个分号 ";" PHP的结束符号也是 ";". 注意:在PHP编程中需 ...
- 【开发手记一】老生常谈:简简单单配置ZED板开发环境
说明:整理之前项目博客,此系列之前发表于与非网 http://www.openhw.org/module/forum/thread-552476-1-1.html 在拿到开发板和配套教材之前,我们小组 ...
- 【AllJoyn专题】基于AllJoyn和Yeelink的传感器数据上传与指令下行的研究
接触高通物联网框架AllJoyn不太久,但确是被深深地吸引了.在我看来,促进我深入学习的原因有三点:一.AllJoyn开源,对开源的软硬件总会有种莫名的喜爱,虽然或许不会都深入下去:二.顺应潮流,物联 ...