iptables: 包过滤型防火墙
Firewall: 防火墙,隔离工具;工作于主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则作匹配检测,对于能够被规则所匹配到的报文做出相应处理的组件;可分为主机防火墙和网络防火墙,centos6中的配置文件为/etc/sysconfig/iptables
一. 基础介绍之4表5链
1. 4表
filter: 过滤,当防火墙;
nat: 网络地址转换,包括地址和端口;
mangle:拆解报文,做出修改,封装报文;
raw:关闭nat表上启用的连接追踪机制;有追踪机制(其实就是记忆功能),才能完成NAT转换
2. 5链(内置):
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
流入报文经由路径:PREROUTING --> INPUT
流出报文经由路径:OUTPUT --> POSTROUTING
转发报文经由路径:PREROUTING --> FORWARD --> POSTROUTING
3. 各功能可以实现的位置:
filter:INPUT, FORWARD, OUTPUT
nat: PREROUTING(DNAT), OUTPUT, POSTROUTING(SNAT)
mangle:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
raw:PREROUTING, OUTPUT
4. 路由发生的时刻:
报文进入本机后,用于判断目标主机;
报文发出之前,判断经由哪个接口送往下一跳;
5. 小结
iptables:主要是四表五链
1) 添加规则时的考量点:
(1) 要实现哪种功能,用来判断添加在哪张表上;
(2) 报文流经的路径,用来判断添加在哪个链上;
2) 链:链上规则的次序,即为检查的次序;依据从上到下的顺序
(1) 访问同一应用(比如都访问22端口),匹配范围小的放上面;
(2) 访问不同应用,匹配到报文频率较大的放上面;
(3) 尽量将多个规则合并为一个,进行优化;
(4) 设置默认策略;
功能的优先级次序:raw --> mangle --> nat --> filter
6. 规则说明:
组成部分:报文的匹配条件,匹配到之后处理动作
1) 匹配条件:根据协议报文特征指定,比如tcp, ip,udp等报文特征
基本匹配条件
扩展匹配条件
2) 处理动作:
内建处理机制,比如drop, reject
自定义处理机制, 用于跳转到自定义链
注意:报文不会经过自定义链,只能在内置链上通过规则进行引用后生效;
二. iptables命令:
它是一个规则生成器,相关操作有添加、修改、删除、显示等;
规则和链有计数器:
pkts:由规则或链所匹配到的报文的个数;
bytes:由规则或链匹配到的所有报文大小之和;
iptables命令:
iptables [-t table] {-A|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
-t table包括:filter, nat, mangle, raw
1. 链管理:
-F:flush,清空规则链;省略链,表示清空指定表上的所有的链;
-N:new, 创建新的自定义规则链;
-X:drop, 删除用户自定义的空的规则链;
-Z:zero,清零,置零规则计数器;
-P:Policy,为指定链设置默认策略;对filter表中的链而言,默认策略通常有ACCEPT, DROP, REJECT;
例如:iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT
设定INPUT、OUTPUT的默认策略为DROP,FORWARD为ACCEPT。
-E: rEname,重命令自定义链;引用计数不为0的自定义链,无法改名,也无法删除;
2. 规则管理:
-A:append,将新规则追加于指定链的尾部;
-I:insert,将新规则插入至指定链的指定位置;
-D:delete,删除指定链上的指定规则;有如下两种指定方式:
(1) 指定匹配条件;
(2) 指定规则编号;
-R:replace,替换指定链上的指定规则;
3. 查看:
-L:list,列出指定链上的所有规则,后面还可以跟如下的子参数来显示更详细的内容;
-n: numberic,以数字格式显示地址和端口号;
-v: verbose,显示详细信息;
-vv, -vvv
--line-numbers:显示规则编号;
-x: exactly, 显示计数器计数结果的精确值;
4. 匹配条件:
1)基本匹配:
[!] -s, --src, --source IP|Netaddr:检查报文中源IP地址是否符合此处指定的地址范围,!表示取反;
[!] -d, --dst, --destination IP|Netaddr:检查报文中目的IP地址是否符合此处指定的地址范围;
-p, --protocol {tcp|udp|icmp}:检查报文中的协议,即ip首部中的protocols所标识的协议;
-i, --in-interface IFACE:数据报文的流入接口;仅能用于PREROUTING, INPUT及FORWARD链上;
-o, --out-interface IFACE:数据报文的流出接口;仅能用于FORWARD, OUTPUT及POSTROUTING链上;
例1:允许别人ping我(本机地址:172.16.100.9)
iptables -A INPUT -d 172.16.100.9 -p icmp -j ACCEPT
iptables -A OUTPUT -s 172.16.100.9 -p icmp -j ACCEPT
例2:对流入流出接口进行限制,只允许eth0进行流入流出
iptables -A INPUT -d 172.16.100.9 -i eth0 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.9 -o eth0 -j ACCEPT
5. 目标:
-j TARGET:jump至指定的TARGET,目标如下
ACCEPT: 接受
DROP: 丢弃
REJECT: 拒绝
RETURN: 返回调用链
REDIRECT:端口重定向
LOG: 记录日志
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
...
自定义链:由自定义链上的规则进行匹配检查
三. 匹配条件之扩展匹配
扩展匹配:包括隐式扩展,显示扩展,基本格式为-m macth_name --spec_options,例如 -m tcp --dport 22
1. 隐式扩展:对-p protocol指明的协议进行的扩展,可省略-m选项,按协议分类如下;
1) -p tcp
--dport PORT[-PORT]:目标端口,可以是单个端口或连续多个端口;
--sport PORT[-PORT]
--tcp-flags LIST1 LIST2:检查LIST1所指明的所有标志位,且这其中,LIST2所表示出的所有标记位必须为1,而余下的必须为0;没有LIST1中指明的,不作检查
比如: --tcp-flags SYN,ACK,FIN,RST SYN 可以简写为--syn,表示检查tcp连接的第一次请求
6个标志位: SYN, ACK, FIN, RST, PSH, URG(请求同步,确认号有效,断开请求,重置连接,推送,紧急指令)
例1:打开22端口,允许远程管理。(设定了很多的附加条件:管理机器IP必须是250,并且必须从eth0网卡进入)
iptables -A INPUT -i eth0 -s 192.168.100.250 -d 192.168.100.1 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -d 192.168.100.250 -s 192.168.100.1 -p tcp --sport 22 -j ACCEPT
2) -p udp
--dport
--sport
例子:对于基于udp的dns服务,使用以下命令开启端口服务
iptables -A OUTPUT -o eth2 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -i eth2 -p udp --sport 53 -j ACCEPT
3) -p icmp
--icmp-type
可用数字表示其类型:
0:echo-reply
8: echo-request
例1:允许ping别人,不允许别人ping我(本机地址:172.16.100.9)
iptables -A OUTPUT -d 172.16.100.9 -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 0 -j ACCEPT
例2:在所有网卡上打开ping功能,便于维护和检测
iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT
2. 显式扩展: 必须显式指明使用的扩展模块(rpm -ql iptables | grep "\.so")
CentOS 6: man iptables
CentOS 7: man iptables-extensions
1) multiport扩展
以离散方式定义多端口匹配;最多指定15个端口;
[!] --source-ports,--sports port[,port|,port:port]...:指明多个离散的源端口,22:25表示连续的端口;
[!] --destination-ports,--dports port[,port|,port:port]...:指明多个离散的目标端口;
[!] --ports port[,port|,port:port]... :源和目标都行,很少用
~]# iptables -I INPUT -s 172.16.0.0/16 -d 172.16.100.9 -p tcp -m multiport --dports 22,80 -j ACCEPT
~]# iptables -I OUTPUT -d 172.16.0.0/16 -s 172.16.100.9 -p tcp -m multiport --sports 22,80 -j ACCEPT
2) iprange扩展
指明连续的(但一般是不能扩展为整个网络)ip地址范围时使用;
[!] --src-range from[-to]:指明连续的源IP地址范围;
[!] --dst-range from[-to]:指明连续的目标IP地址范围;
~]# iptables -I INPUT -d 172.16.100.9 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 172.16.100.1-172.16.100.120 -j ACCEPT
~]# iptables -I OUTPUT -s 172.16.100.9 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 172.16.100.1-172.16.100.120 -j ACCEPT
3)string扩展
检查报文中出现的字符串;
--algo {bm|kmp},2种比对算法
bm = Boyer-Moore
kmp = Knuth-Pratt-Morris
[!] --string pattern,从头到尾进行检查
~]# iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT (对网页中有'movie‘字符的禁止访问---允许请求此网页,但是回应不能到达本机)
4)time扩展
根据报文到达的时间与指定的时间范围进行匹配;
--datestart
--datestop
--timestart
--timestop
--monthdays
--weekdays
iptables -I INPUT -d 172.16.100.9 -p tcp --dport 80 -m time --timestart 14:00 --timestop 16:00 -j REJECT (UTC格式时间)
5)connlimit扩展
根据每客户端IP(也可以是地址块)做并发连接数数量匹配;
--connlimit-above n:连接的数量大于n,后面一般跟REJECT
iptables -I INPUT -p tcp --dport 22 -m connlimit --conlimit-above 3 -j REJECT
--connlimit-upto n: 连接的数量小于等于n,后面一般跟ACCEPT
6)limit扩展
基于收发报文的速率做检查;
基于令牌桶过滤器来实现速率匹配,理解为发令牌给人去办事,只有办完事还了令牌,才能发给下一个人去办事
--limit rate[/second|/minute|/hour|/day]
--limit-burst number(峰值,不是必须的,就是空闲的时候不限速率,先最多给几个)
例1:
iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT
iptables -A OUTPUT -s 172.16.100.9 -p icmp --icmp-type 0 -j ACCEPT
例2:Dos攻击防范
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
--limit 25/minute表示每分钟限制最大连接数为25
--limit-burst 100指定当总连接数超过100时,启动limit/minute限制
7)state扩展--重要
根据连接追踪机制检查连接的状态;(在指定时间内,比如6秒,记忆连接记录,需要用内核内存空间)
调整连接追踪功能所能够容纳的最大连接数量:/proc/sys/net/nf_conntrack_max
已经追踪到并记录下的连接:/proc/net/nf_conntrack
不同协议或连接类型追的时长:/proc/sys/net/netfilter/
可追踪的连接状态:
NEW:新发出的请求;连接追踪模板中不存此连接相关的信息条目,因此,将其识别为第一次发出的请求;
ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信的状态;
RELATED:相关的连接;如ftp协议的命令连接与数据连接之间的关系;
INVALIED:无法识别的连接;
例子1
iptables -I INPUT -d 172.16.100.9 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -s 172.16.100.9 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
例子2: PING只响应别人
iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.100.9 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
例子3: 配置web流量均衡
把一台服务器作为前段服务器,利用iptables进行流量分发,配置方法如下
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.102:80
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.103:80
问题:如何开放被动模式的ftp服务?
(1) 装载ftp追踪时的专用的模块:
# modprobe nf_conntrack_ftp
(2) 放行请求报文:
命令连接:NEW, ESTABLISHED,通过21端口
数据连接:RELATED, ESTABLISHED,随机端口
# iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
(3) 放行响应报文:
ESTABLISEHD
# iptables -A OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT
四. 如何保存及重载规则:
保存规则至指定文件:iptables-save > /PATH/TO/SOMEFILE
从指定文件重载规则:iptables-restore < /PATH/FROM/SOMEFILE
CentOS 6:
service iptables save 相当于iptables-save > /etc/sysconfig/iptables
service iptables restart 相当于iptables-restore < /etc/sysconfig/iptables
CentOS 7:
引入了新的iptables前端管理服务工具:firewalld
firewalld-cmd
firewalld-config
其实centos7中也可以使用iptables,那么需要先禁用firewalld,方法如下
禁止firewall开机启动:systemctl disable firewalld.service
关闭firewall: systemctl stop firewalld.service
启动iptables: service iptables start
五. 回顾和练习:
iptables/netfilter
netfilter: kernel framework,
iptables
四表:filter, nat, mangle, raw
五链:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
子命令:
链:-F, -X, -N, -E, -Z, -P, -L
规则:-A, -I, -D, -R
-j TARGET:
ACCEPT, DROP, REJECT, RETURN, LOG, MARK, DNAT, SNAT, MASQUEARDE, ...
匹配标准:
通用匹配:-s, -d, -p, -i, -o
扩展匹配
隐含扩展:
-p tcp: --dport, --sport, --tcp-flags, --syn (--tcp-flags SYN,ACK,FIN,RST SYN)
-p udp: --dport, --sport
-p icmp: --icmp-type
显式扩展: -m
练习:
主机防火墙:
放行telnet, ftp, web服务;
放行samba服务;
放行dns服务(查询和区域传送);
网络防火墙:
放行telnet, ftp, web服务;
放行samba服务;
放行dns服务(查询和区域传送)
- iptables
一.在服务器上打开 22.80.9011端口: iptables -A INPUT -p tcp --dport 9011 -j ACCEPT iptables -A OUTPUT -p tcp -- ...
- 浅谈iptables 入站 出站以及NAT实例
--------------本文是自己工作上的笔记总结,适合的可以直接拿去用,不适合的,适当修改即可!--------------- iptbales默认ACCEPT策略,也称通策略,这种情况下可以做 ...
- Failed to stop iptables.service: Unit iptables.service not loaded.
redhat 7 [root@lk0 ~]# service iptables stop Redirecting to /bin/systemctl stop iptables.service Fai ...
- CentOS7安装iptables防火墙
CentOS7默认的防火墙不是iptables,而是firewalle. 安装iptable iptable-service #先检查是否安装了iptables service iptables st ...
- linux iptables常用命令之配置生产环境iptables及优化
在了解iptables的详细原理之前,我们先来看下如何使用iptables,以终为始,有可能会让你对iptables了解更深 所以接下来我们以配置一个生产环境下的iptables为例来讲讲它的常用命令 ...
- CentOS系统配置 iptables防火墙
阿里云CentOS系统配置iptables防火墙 虽说阿里云推出了云盾服务,但是自己再加一层防火墙总归是更安全些,下面是我在阿里云vps上配置防火墙的过程,目前只配置INPUT.OUTPUT和FO ...
- /etc/sysconfig/下找不到iptables文件解决方法
时间:2014-12-19 01:17来源:csdn 作者:大智 举报 点击:5639次 本想做些防火墙策略.防火墙策略都是写在/etc/sysconfig/iptables文件里面的.可我发现我也没 ...
- docker通过iptables修改或新增镜像映射端口
443 8088 22 端口是初始映射端口 [root@SERVER ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAM ...
- lnmp 预设iptables设置
「LNMP」iptables初始配置 首先使用命令iptables -P INPUT ACCEPT允许所有连接,否则容易把自己关在外边.然后使用iptables -F;iptables -X;ip ...
- 关闭SELinux和iptables防火墙
1.关闭SELinux: 编辑SELinux配置文件: [root@Redis selinux]# vim /etc/selinux/config 修改SELINUX配置项为disable SELIN ...
随机推荐
- linux系统文件的链接
一. 硬链接(实际链接) (以linux系统为例) 1. 文件的索引节点inode 假设我们在硬盘当前目录下建立了一个名为mytext文本文件,其内容只有一行:This is my file. (1) ...
- requests对象
属性 0.HttpRequest.scheme 表示请求方案的字符串(通常为http或https) 1.HttpRequest.body 一个字符串,代表请求报文的主体.在处理非 HTTP 形式的报文 ...
- Ubuntu14.04-LTS 从系统安装到配置可用
1.安装Ubuntu14.04LTS-64bit 使用U盘安装很方便快捷,可以使用老毛桃使用iso模式制作一个U盘启动盘,然后分区安装. 如果使用硬盘安装的话需要注意的问题是: 如果电脑上以前有Lin ...
- python 网络编程 TCP/IP socket UDP
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- jQuary总结3: jQuery语法1
1.jQuery样式操作 1.1 设置或者修改样式,操作的是style属性. 单样式语法: jQuery对象.css('属性名', '属性值') //html <div id="box ...
- POJ 1985 Cow Marathon (树形DP,树的直径)
题意:给定一棵树,然后让你找出它的直径,也就是两点中的最远距离. 析:很明显这是一个树上DP,应该有三种方式,分别是两次DFS,两次BFS,和一次DFS,我只写了后两种. 代码如下: 两次BFS: # ...
- 重装ubuntu
重装前 需要备份软件.配置文件等,重装系统时,最好不要重新给/home分区,也不要格式化,要不你需要备份很多东西,重装后也需要做很多设置.也就是说/home不格式化,整个重装系统都是很快的.最多花10 ...
- Reactor模式和NIO(转载二)
本文可看成是对Doug Lea Scalable IO in Java一文的翻译. 当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作.他们都有一个共同的 ...
- Android-bindService远程服务(Aidl)-传递对象
之前上一篇讲解到本地服务,本地服务只能在自身APP中Activity访问Service,调用Service里面到方法等操作 如果想A应用访问B应用里面的方法,属于跨进程调用,如果Android不特供这 ...
- SharpMap入门教程
SharpMap是一个基于.NET Framework 4,采用C#开发的地图渲染引擎,非常易于使用.本教程针对SharpMap入门及开发,讲述如何基于SharpMap组件渲染Shapefile数据. ...