详解IPTABLES
详解IPTABLES
Iptables 是Linux 内核集成的 IP 信息包过滤系统。如果Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
IPTABLES的简单介绍
防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
- netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
- iptables 组件是一种工具,也称为用户空间(userspace),是用来管理netfilter的,它使得配置防火墙变得简单。
IPTABLES的规则:
Iptables的规则链分为三种:输入、转发和输出。
- 输入——这条链用来过滤目的地址是本机的连接。例如,如果一个用户试图使用SSH登陆到你的PC服务器,iptables会首先匹配其IP地址和端口到iptables的输入链规则。
- 转发——这条链用来过滤目的地址和源地址都不是本机的连接。例如,路由器收到的绝大数数据均需要转发给其它主机。如果你的系统没有开启类似于路由器的功能,如NATing,你就不需要使用这条链。
- 输出——这条链用来过滤源地址是本机的连接。例如,当你尝试ping www.baidu.com时,iptables会检查输出链中与ping和baidu.com相关的规则,然后决定允许还是拒绝你的连接请求。
规则实战:
清空所有规则:
iptables -F
添加22端口可以正常连接:
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
设置默认规则:
一般设置默认规则有两种思想:一种是都接受,然后重点拒绝;另一种是都拒绝,然后重点放行。iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
开放具体的端口:
iptables -A INPUT -p tcp -m tcp --dport 3304 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 3304 -j ACCEPT(如果OUTPUT默认是DROP) iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT (如果OUTPUT默认是DROP,下面的一样)
支持ping:
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
禁止ping
iptables -A INPUT -p icmp -j REJECT
iptables -A OUTPUT -p icmp -j REJECT
具体到IP地址:
只接受192.168.1.55的包:iptables -A INPUT -s 192.168.1.55 -p icmp -j ACCEPT (默认是DROP)
iptables -A OUTPUT -s 192.168.1.23 -p icmp -j ACCEPT
IPTABLES规则的相关操作:
iptables -F :清空规则
iptables -X :删除用户自定义的规则
iptables -L :查看规则
iptables -L -n :以数字的形式显示规则
iptables -L --line-numbers :查看规则的编号(适用于删除规则)
iptables -D chain num :删除编号是NUM的规则
扩展规则:
多端口:
iptables -I INPUT -s 192.168.1.0/24 -d 192.168.1.23 -p tcp -m multiport --dport 22,80,3306 -j ACCEPT
iptables -I OUTPUT -d 192.168.1.0/24 -s 192.168.1.23 -p tcp -m multiport --sport 22,80,3306 -j ACCEPT
iprange扩展:
iptables -I OUTPUT -s 192.168.1.23 -p tcp -m multiport --sport 21,22,80 -m iprange --dst-range 192.168.1.10-192.168.1.20 -j ACCEPT
iptables -I INPUT -d 192.168.1.23 -p tcp -m multiport --dport 21,22,80 -m iprange --src-range 192.168.1.10-192.168.1.20 -j ACCEPT
string扩展:检查报文中出现的字符串。
--algo {bm|kmp}
--string patterm
iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT
time扩展:根据报文对时间范围进行匹配。
--datestart --datestop
--timestart --timestop
--monthdays --weekdays
iptables -I INPUT -d 192.168.1.23 -p tcp --dport 80 -m time --timestart 23:00 --timestop 6:00 -j REJECT
connlimit扩展:根据客户端IP做并发连接数量匹配
--connlimit-upto n :连接数量小于n
--connlimit-above n :连接数量大于n
--connlimit-saddr :源地址转换
--connlimit-daddr :目标地址转换
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT
limit扩展:基于收发报文速率做检查
--limit rate/[second|minute|hour|day]
--limit-burst number
iptables -A INPUT -d 192.168.1.23 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 10/minute -j ACCEPT
防止DOS攻击:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limite-burst 100 -j ACCEPT
state扩展:根据连接跟踪机制检查连接的状态。
查看连接追踪功能所能容纳的最大连接个数:/proc/sys/net/nf_conntrack_max
查看追踪到的连接:/proc/net/nf_conntrack
不同协议或者连接类型的时长:/proc/sys/net/netfilter/..
NEW:新发出的请求,连接追踪模板中不存在相关的信息条目,因此识别为第一次发出来的请求
ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态
RELATED: 相关的连接,如:FTP协议命令连接与数理连接之间的关系
INVALIED:无法识别的连接
iptables -I INPUT -d 192.168.1.23 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -d 192.168.1.23 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -d 192.168.1.23 -p tcp -m multiport --dport 22,80 -m state --state NEW -j ACCEPT
问题:如何开放被动模式的FTP服务?
1) 装载FTP追踪时专用的模块
modprobe nf_conntrack_ftp
2) 放行请求报文
命令连接:NEW , ESTABLISHED
数据连接:RELATED , ESTABLISHED
iptables -A INPUT -d local_IP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -d loacl_IP -p tcp -m state --state RELATED,ESTABISHED -j ACCEPT
3) 放行响应报文:ESTABLISHED
iptables -A OUTPUT -s local_IP -p tcp -m state --state ESTABLISHED -j ACCEPT
4)保存及重载规则:
iptables-save > file 保存规则至指定规则
iptables-restore < file 指定文件中重载规则
转发规则:
开启iptables forward转发功能
echo 1 >/proc/sys/net/ipv4/ip_forward
nat: SNAT:只修改请求报文的源地址
DNAT:只修改请求报文的目标地址 内--》外 外--》内
nat表:PREROUTING(DNAT)-->OUTPUT-->POSTROUTING(SNAT)
将本机的8080端口转发至其他主机,主机IP:192.168.1.12,目标主机IP和端口:192.168.1.13:8088,规则如下:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.13:8088
iptables -t nat -A POSTROUTNG -p tcp --dport 8088 -j SNAT --to-source 192.168.1.12
详解IPTABLES的更多相关文章
- 通俗易懂详解iptables
防火墙相关概念 从逻辑上讲.防火墙可以大体分为主机防火墙和网络防火墙. 主机防火墙:针对于单个主机进行防护. 网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网. ...
- 《iptables详解 》RHEL6
iptables详解 Iptables原理 现在防火墙主要分以下三种类型:包过滤.应用代理.状态检测 包过滤防火墙:现在静态包过滤防火墙市面上已经看不到了,取而代之的是动态包过滤技术 ...
- Linux_IPtables防火墙详解
目录 目录 Iptables Iptables结构 规则表 规则链 iptables指令用法详解 综合案例 SNAT 策略 DNAT 策略 Iptables规则的备份和还原 iptables 练习 I ...
- iptables详解
Netfilter包含有三种表,三种表下共包含有五种链,链下面包含各种规则.即表包含若干链,链包含若干规则. (一)三种表为:filter nat mangle 1.filter:处理与本机有 ...
- iptables参数详解
iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...
- iptables Data filtering详解
内容简介防火墙的概述iptables简介iptables基础iptables语法iptables实例案例详解(一)防火墙的简介防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内 ...
- iptables 详解
一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...
- [转]iptables详解
FROM : http://blog.chinaunix.net/uid-26495963-id-3279216.html 一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的 ...
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
随机推荐
- Jquery样式
css样式只有一个的时候: $(function(){ $('p').css('background-color','green'); }) css样式有多个的时候: $(function(){ $( ...
- Python爬虫-尝试使用人工和OCR处理验证码模拟登入
刚开始在网上看别人一直在说知乎登入首页有有倒立的汉字验证码,我打开自己的知乎登入页面,发现只有账号和密码,他们说的倒立的验证码去哪了,后面仔细一想我之前登入过知乎,应该在本地存在cookies,然后我 ...
- java.util.ConcurrentModificationException异常的解决
问题复现: List<String> list = new ArrayList<>();list.add("11");list.add("55&q ...
- Java 读书笔记 (八) 修饰符
Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 访问控制修饰符 default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符.使用对象.类.接口.变量.方法. ...
- .Net core验证码生成
首先,项目添加对ZKWeb.System.Drawing的引用: 生成验证码代码如下: public class VierificationCodeServices { /// <summary ...
- bzoj 1426 收集邮票
f[i]:当前已拥有i种邮票,还需要买的邮票数的期望值. g[i]:当前已拥有i种邮票,还需要的钱的期望值. 每张邮票初始都是1元钱,每买一张邮票,还没购买的邮票每张都涨价1元. f[i]=1+(n ...
- xshell 快速复制打开之前用过的ssh
有时候需要对一个ip地址的服务器进行多个操作,不在一个会话中,需要新建多个同样的会话 然后左键单击+号 出现一个新的会话 然后再右键单击+号 选择之前保存过的ip地址即可快速创建!
- ERP不规范,同事两行泪
最近的很多次对外交流,都聊到了ERP建设的话题,并且无一例外的不那么让人省心,回想我这么多年走过的ERP坑坑路,在这里也写下经验和总结,希望能给正在或者即将走上ERP建设路的企业一些思考和帮助. 导读 ...
- 贝叶斯深度学习(bayesian deep learning)
本文简单介绍什么是贝叶斯深度学习(bayesian deep learning),贝叶斯深度学习如何用来预测,贝叶斯深度学习和深度学习有什么区别.对于贝叶斯深度学习如何训练,本文只能大致给个介绍. ...
- eShopOnContainers 知多少[6]:持久化事件日志
1. 引言 事件总线解决了微服务间如何基于集成事件进行异步通信的问题.然而只有事件总线正常运行,微服务之间基于事件的通信才得以运转. 而现实情况是,总有这样或那样的问题,导致事件总线不稳定或不可用,比 ...