iptables

iptables:

Firewall:隔离工具;Packets Filter Firewall;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(匹配条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件;

硬件防火墙:在硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现; 

软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙;

主机防火墙:服务范围为当前主机;

网络防火墙:服务范围为防火墙被的局域网;

iptables/netfilter:

netfilter:防火墙框架,framework;位于内核空间;

iptables:命令行工具程序,位于用户空间;规则管理工具;

netfilter:

hooks function

prerouting

input 

forward 

output 

postrouting

iptables:

CHAINS:

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING

报文流向:

到本机某进程的报文:PREROUTING –> INPUT 

由本机转发的报文:PREROUTING –> FORWARD –> POSTROUTING

由本机的某进程发出报文:OUTPUT –> POSTROUTING

tables:

filter:过滤,防火墙;

nat:network address translation,网络地址转换;

mangle:拆解报文,做出修改,并重新封装;

raw:关闭nat表上启用的连接追踪机制;

优先级次序(由高而低):

raw –> mangle –> nat –> filter 

功能<–>钩子:

raw:PREROUTING,OUTPUT

mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

nat:PREROUTING,INPUT,OUTPUT,POSTROUTING

filter:INPUT,FORWARD,OUTPUT

iptables规则的组成部分:

匹配条件:

网络层首部:Source IP, Destination IP

传输层首部:Source Port, Destination Port

扩展检查机制:

处理动作:target

ACCEPT,DROP,REJECT

安装:

netfilter:位于内核中的tcp/ip协议栈报文处理框架;

iptables:

CentOS 5/6:iptables命令编写规则;

# iptables -t filter -F

# service iptables save

CentOS 7:firewalld,firewall-cmd, firewall-config

# systemctl disable firewalld

程序包:iptables, iptstate

[root@centos7 ~]# yum list all ipt* 查看iptables的包

[root@centos7 ~]# yum info iptstate

iptables命令:

规则:根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理;

匹配条件:

基本匹配条件:源地址,目标地址,传输层协议

扩展匹配条件:需要借助于扩展模块进行指定的匹配条件

隐式扩展:已经在基本匹配条件中指明的协议相关的扩展;

显式扩展:隐式扩展之外的其它扩展匹配条件;

处理动作:

基本动作:ACCEPT,DROP,…

扩展动作:需要借助于扩展模块进行,但无须显式指定,仅需指明动作;

添加规则时需要考量的问题:

(1) 报文流经的位置:用于判断将规则添加至哪个链;

(2) 实现的功能:用于判断将规则添加至哪个表;

(3) 报文的方向:用于判断哪个为“源”,哪个为“目标”;

(4) 匹配条件:用于编写能够正确匹配目标报文的规则;

iptabls命令的使用格式:

iptables [-t table] {-A|-C|-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

rule-specification = [matches…] [target]

match = -m matchname [per-match-options]

target = -j targetname [per-target-options]

规则管理格式:

iptables [-t able] COMMAND chain cretieria [-m -m matchname [per-match-options]]  [-j targetname [per-target-options]]

-t table:指明要管理的表; 默认为filter;

COMMANDS:

链管理:

-P:iptables [-t table] -P chain target,定义链的默认策略;其target一般可使用ACCEPT或DROP;

-N:iptables [-t table] -N chain,

自定义规则链;仅在默认链通过某规则进行调用方可生效;因此,每个自定义链都有其引用记数;

-X:iptables [-t table] -X [chain],删除自定义的空的引用计数为0的链;

-F:iptables [-t table] -F [chain [rulenum]] [options…],清空指定的链,或删除指定链上的规则 ;

-E:iptables [-t table] -E old-chain-name new-chain-name,重命名自定义的引用计数为0的链;

-Z:iptables [-t table] -Z  [chain [rulenum]] [options…]

规则:

-A:append, iptables [-t table] -A chain rule-specification,追加规则到指定的链尾部;

-I:insert, iptables [-t table] -I chain [rulenum] rule-specification,

插入规则到指定的链中的指定位置,默认为链首;

-D:delete,iptables [-t table] -D chain rule-specification

iptables [-t table] -D chain rulenum,删除指定的链上的指定规则;

-R:replace,iptables [-t table] -R chain rulenum rule-specification,将指定的链上的指定规则替换为新的规则;

查看:

-L:list, iptables [-t table] -L [chain [rulenum]] [options…]

-n:数字格式;

-v:verbose,详细格式信息;

-vv, -vvv 

–line-numbers:显示链上的规则的编号;

-x:exactly,显示计数器的精确值; 

计数器:

每条规则以及链的默认策略分别有各自的两个计数器:

(1) 匹配到的报文的个数:pkts

(2) 匹配到的所有报文的大小之积:bytes

iptables [-t able] COMMAND chain cretieria [-m -m matchname [per-match-options]]  [-j targetname [per-target-options]]

匹配条件:

基本匹配条件

扩展匹配条件

隐式扩展

显式扩展

注意:多重条件之间的隐含逻辑为“与”操作;

基本匹配条件:

[!] -s, –source address[/mask][,…]:检查报文中的源IP地址是否符合此处指定的地址或地址范围;

[!] -d, –destination address[/mask][,…]:检查报文中的目标IP地址是否符合此处指定的地址或地址范围;

[!] -p, –protocol protocol:检查报文中传输层的协议类型,支持tcp,udp,udplite,icmp,icmpv6,esp,ah,sctp,mh,或者 "all";

[!] -i, –in-interface name:检查报文进入本机时的接口是否符合本处指定的接口;INPUT, FORWARD  and  PREROUTING ;

[!] -o, –out-interface name:检查报文即将离开本机时经由的接口是否符合本处指定的接口;FORWARD, OUTPUT and POSTROUTING;

-m, –match match:显式指明要使用的扩展模块;

-j, –jump target:跳转目标;(可以是用户自定义的链,或者是ACCEPT,DROP,…)

 

扩展匹配条件:

隐式扩展:不用-m选项明确给出要使用的扩展机制的扩展;此处主要指使用-p {tcp|udp|icmp}给定协议后可直接对给定的协议所进行的扩展;

-p tcp:可直接使用tcp协议对应的扩展选项;

[!] –source-port,–sport port[:port]:匹配报文中的传输层的源端口;可给出多个连接的端口;

[!] –destination-port,–dport port[:port]:匹配报文中的传输层的目标端口;可给出多个连接的端口;

[!] –tcp-flags mask comp

SYN,ACK,FIN,RST,URG,PSH;

mask:要检查的标志位列表,以逗号分隔,例如SYN,ACK,FIN,RST 

comp:mask给定的众标志位中,其值必须为1的标志位列表,余下的必须为0;

–tcp-flags SYN,ACK,FIN,RST SYN 

[!] –syn:相当于–tcp-flags SYN,ACK,FIN,RST SYN 

-p udp:可直接使用udp协议对应的扩展选项;

[!] –source-port,–sport port[:port]:匹配报文中的传输层的源端口;可给出多个连接的端口;

[!] –destination-port,–dport port[:port]:匹配报文中的传输层的目标端口;可给出多个连接的端口;

-p icmp:可直接使用icmp协议对应的扩展选项;

[!] –icmp-type {type[/code]|typename}

–icmp-type  0/0:匹配对ping请求的响应报文

–icmp-type 8/0:匹配ping请求报文

显式扩展:必须使用-m选项给出matchname的扩展,而且有些扩展都还存在专用选项;

1、multiport

以离散或连续的方式定义的多端口匹配条件; Up  to 15 ports can be specified. 

[!] –source-ports,–sports port[,port|,port:port]…:指定多个源端口;

[!] –destination-ports,–dports port[,port|,port:port]…:指定多个目标端口;

[!] –ports port[,port|,port:port]…:匹配此处指定的源或目标端口;

2、iprange

以连续的ip地址范围指明多地址匹配条件;

[!] –src-range from[-to]

[!] –dst-range from[-to]

3、string

对报文中的应用层数据做字符串匹配检测;

[!] –string pattern

[!] –hex-string pattern

–algo {bm|kmp}:字符串匹配检查算法;

–from offset

–to offset

4、time

根据报文到达的时间与指定的时间范围进行匹配度检测;

–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

 

–timestart hh:mm[:ss]

–timestop hh:mm[:ss]

 

[!] –monthdays day[,day…]

 

[!] –weekdays day[,day…] Mon,Tue,Wed,Thu,Fri,Sat,Sun

 

5、connlimit 

根据每客户端IP做并发连接数限制,即限制单IP可同时发起连接请求;

–connlimit-upto n:连接数小于等于阈值;

–connlimit-above n:连接数超出阈值;

~]# iptables -I INPUT -d 10.1.0.6 -p tcp –dport 22 -m connlimit –connlimit-above 2 -j REJECT

6、limit 

基于收发报文的速率进行匹配;

–limit rate[/second|/minute|/hour|/day] 速率

–limit-burst number 默认值是5

个人理解limit-burst是个初始值,匹配次数过了这个初始值,之后的就由limit xxx/s来控制了

~]# iptables -A INPUT -d 10.1.0.6 -p icmp –icmp-type 8 -m limit –limit-burst 3 –limit 20/minute -j ACCEPT

 

7、state 

状态检测:连接追踪机制(conntrack)

NEW:新连接

ESTABLISHED:已建立的连接

RELATED:相关联的连接

INVALID:无法识别的连接

UNTRACKED:未被追踪连接;

相关的内核模块:

nf_conntrack

nf_conntrack_ipv4

nf_conntrack_ftp

追踪到的链接,存放到/proc/net/nf_conntrack文件中;

能追踪的最大连接数量定义在:/proc/sys/net/nf_conntrack_max

建议调整至足够大;

不同的协议的连接追踪时长:

/proc/sys/net/netfilter/

 

[!] –state state

如何开放被动模式的ftp服务:

(1) 装载追踪ftp协议的模块;

# modprobe nf_conntrack_ftp

(2) 放行入站命令连接

# iptables -A INPUT -d SERVER_IP -p tcp –dport 21 -m state –state NEW,ESTABLISHED -j ACCEPT

(3) 放行入站数据连接

# iptables -A INPUT -d SERVER_IP -p tcp -m state –state RELATED,ESTABLISHED -j ACCEPT

(4) 放行出站的ESTABLISHED连接

# iptabls -A OUTPUT -s SERVER_IP -m state –state ESTABLISHED -j ACCEPT

处理动作(跳转目标):

-j tagetname [per-target-options]

简单target:

ACCEPT,DROP

扩展target:

REJECT:

–reject-with type

icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreach‐able, icmp-net-prohibited, icmp-host-prohibited, or icmp-admin-prohibited,默认为icmp-port-unreachable;

LOG:

Turn  on  kernel  logging of matching packets.

–log-level level

–log-prefix prefix:日志信息的前导信息;

保存和载入规则:

保存:iptables-save > /PATH/TO/SOME_RULE_FILE 

重载:iptables-restore < /PATH/FROM/SOME_RULE_FILE

-n, –noflush:不清除原有规则

-t, –test:仅分析生成规则集,但不予提交;

注意:重载文件中的规则,会清除已有规则;

CentOS 6:

保存规则:service  iptables  save

保存规则于/etc/sysconfig/iptables,保存操作会清除文件中原有的内容;

重载规则:server iptables restart 

默认重载/etc/sysconfig/iptables文件中的规则

脚本配置文件:/etc/sysconfig/iptables-config

用于指明要装载的模块;

CentOS 7开机自动生效规则:

(1) firewalld服务;

(2) shell脚本,直接记录iptables命令;

(3) 自定义unit file或init script;

规则优化的思路:

(1) 优先放行双方向状态为ESTABLISHED的报文;

(2) 服务于不同类别的功能的规则,匹配到报文可能性更大的放前面;

(3) 服务于同一类别的功能的规则,匹配条件较为严格的放前面;

(4) 设置默认策略:白名单机制

(a) 可使用iptables -P设定默认策略;

(b) 建议在规则链的最后定义规则做为默认策略;

iptables/netfilter网络防火墙:

添加规则于FORWARD链,注意几个问题:

(1) 请求和响应报文均会经由FORWARD链,要注意规则的方向性;

第一条:iptables -I FORWARD  -m state –state ESTABLISHED,RELATED -j ACCEPT

(2) 如果可以启用conntrack机制,注意网关主机所能够追踪的连接数的最大数量要符合需要

NAT:

源地址转换:SNAT,POSTROUTING

静态转换:

动态转换:

目标地址转换:DNAT,PREROUTING

PAT:Port Address Translation 

SNAT:

This  target  is only valid in the nat table, in the POSTROUTING and INPUT chains, and user-defined chains which are only called from those chains.

–to-source [ipaddr[-ipaddr]]

MASQUERADE:

This target is only valid in the nat table, in the POSTROUTING chain.  It  should  only  be  used  with  dynamically assigned  IP (dialup) connections: if you have a static IP address, you should use the SNAT target. 

DNAT:

This target is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains  which  are only  called from those chains. 

–to-destination [ipaddr[-ipaddr]][:port[-port]]

REDIRECT:

This  target  is only valid in the nat table, in the PREROUTING and OUTPUT chains, and user-defined chains which are only called from those chains. 

–to-ports port[-port]

RETURN:返回 

原创文章,作者:songzizhe,如若转载,请注明出处:http://www.178linux.com/55868

(0)
songzizhesongzizhe
上一篇 2016-12-05
下一篇 2016-12-05

相关推荐

  • 作业权限管理

    一、在/data/testdir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。 首先创建三个组g1,g2,g3,题目要求在/data/testdir目录里创建的文件自动属于g1组那么首先要将这个目录的属组改为g1,然后通过更改…

    Linux干货 2016-08-03
  • Infobright高性能数据仓库

    1.  概述         Infobright是一款基于独特的专利知识网格技术的列式数据库。Infobright简单易用,快速安装部署,使用中无需复杂操作,能大幅度减少管理工作;在应对50TB甚至更多数据量进行多并发复杂查询时,更能够显示出令人惊叹的速度。相比于MySQL,其查询速度提升了数倍甚…

    Linux干货 2015-04-05
  • N21_第09周_shell脚本

    作业题目: 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; 预置条件: [root@zhouyong148 N21_09]# cat /etc/passwd root:x:0:0:root:/root:/b…

    Linux干货 2016-11-14
  • N25第六周作业

    vim 是vi编辑的升级版,同样有三种工作模式:编辑、命令和一般 模式 #:指定行号位置 #,#:指定多少行到多少行 #,+#:指定范围,多少行开始,加#行 $:最后一行 .:当前行 .,$-1,当前行到倒数第二行 1,$:全文 %:全文 /从上往下,?:从下往上 搜索 /pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行 s/要查找的内容…

    Linux干货 2017-01-11
  • CentOS6.9系统上编译安装httpd.2.2.32

    本文所做的所有操作是在一部新安装的CentOS6.9系统上。 1.环境与配置 环境说明:VMware上安装的CentOS6.9系统,两张系统盘做成的yum源 配置:编译生成的所有的文件都存放在/usr/local/httpd22/这个目录下 2.安装GCC编译器 [root@localhost ~]# yum grouplist | grep “Develo…

    2017-04-20
  • Linux初学笔记(markdown格式)

    Linux基础命令笔记

    Linux干货 2018-03-26