Linux 第82天 iptables

Linux 第82天 iptables

时间: 20181024

个人小站: www.winthcloud.top



目录

安全技术(IDS,IPS,Firewall)

防火墙的分类(根据不同的方式区分类别)

Linux的防火墙工具

iptables的基本认识

iptables的组成raw,mangle,net,filter

(PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING)

内核中数据包的传输过程

iptables规则

iptables添加要点

iptables实验准备环境

iptables命令

规则格式

匹配条件

处理动作

        显式扩展:必须显式地指明使用的扩展模块进行的扩展 (重点) 

                multiport, string, iprange, time, mac, state, collimit, limit

ipset介绍

iptables的链接跟踪表

开放被动模式的ftp服务

Target

规则优化

规则有效期限

开机自动重载规则

网络防火墙SNAT,DNAT,转发REDIRECT




安全技术


IDS

***检测与管理系统(Intrusion Detection Systems):特点是不阻断任何网络访问

量化、定位来自内外网络的威胁情况,主要以提供报告和事后监督为主,提供有针对性的

指导措施和安全决策依据。一般采用旁路部署方式

IPS

***防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内

容如:溢出***、拒绝服务***、***、蠕虫、系统漏洞等进行准确的分析判断,在判定为

***行为后立即予以阻断,主动而有效的保护网络的安全,一般采用在线部署方式

Firewall

防火墙(FireWall):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包

基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,

基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略



防火墙的分类(根据不同的方式区分类别)

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

网络防火墙:服务范围为防火墙一侧的局域网

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

Checkpoint,NetScreen

软件防火墙:运行于通用硬件平台之上的防火墙的应用软件

网络层防火墙:OSI模型下四层

应用层防火墙/代理服务器:代理网关,OSI模型七层


Linux里的防火墙工具

iptables

命令行工具,工作在用户空间

用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包

firewalld

CentOS7 引入了新的前端管理工具

管理工具:

firewall-cmd命令行

firewall-config图形



iptables的基本认识

一个程序可以和内核空间所提供的系统调用进行交互向内核空间传递参数来控制访问本机

或经过此台机器的报文。

Netfilter组件

工作在内核空间,集成在linux内核中

扩展各种网络服务的结构化底层框架

内核中选取五个位置放了五个hook(勾子) 

function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),

而这五个hook function向用户开放,用户可以通过一个命令工具

(iptables)向其写入规则

由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),

规则被分组放在链(chain)上


三种报文流向:

流入本机:PREROUTING --> INPUT-->用户空间进程

流出本机:用户空间进程-->OUTPUT--> POSTROUTING

转发:PREROUTING --> FORWARD --> POSTROUTING


iptables的组成

iptables由五个表和五个链以及一些规则组成

五个表table:filter、nat、mangle、raw、security

filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包

nat表:network address translation 地址转换规则表

mangle:修改数据标记位规则表

raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度

security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现

优先级由高到低的顺序为:security -->raw-->mangle-->nat-->filter


五个内置链chain

INPUT

OUTPUT

FORWARD

PREROUTING

POSTROUTING


哪个表上有哪里链

raw (PREROUTING, POSTROUTING)

mangle (PREROUTING, INPUT, OUTPUT, FORWARD, POSTROUTING)

nat (PREROUTING, INPUT, OUTPUT, POSTROUTING)

filter (INPUT, FORWARD, OUTPUT)


哪个链上有哪些表(注意先后顺序代表优先匹配顺序)

PREROUTING (raw, mangle, nat)

INPUT (mangle, nat, filter)

OUTPUT (mangle, nat, filter)

FORWARD (mangle, filter)

POSTROUTING (raw, mangle, nat)


内核中数据包的传输过程

1. 当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断

是否需要转送出去

2. 如果数据包就是进入本机的,数据包就会到达INPUT链。数据包到达INPUT链后,内核将其

拆包检查4层端口然后由内核将数据转送至指定的端口,交给上层用户空间进程

3. 本机上运行的程序发送数据包,数据包经过OUTPUT链,到达POSTROUTING链输出至网卡


4. 如果数据包是要转发出去的,且内核允许转发,数据包就经过FORWARD链,然后到达

POSTROUTING链输出


iptables规则


规则rule:根据规则的匹配条件尝试匹配报文,

对匹配成功的报文根据规则定义的处理动作作出处理

匹配条件:默认为与条件,同时满足

基本匹配:IP,端口,TCP的Flags(SYN,ACK等)

扩展匹配:通过复杂高级功能匹配

处理动作:称为target,跳转目标

内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG...

自定义处理动作:自定义chain,利用分类管理复杂情形


注意: 规则要添加在链上,才生效;添加在自定义上不会自动生效


链Chain:

内置链:每个内置链对应于一个钩子函数

自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管

理机制;只有在Hook钩子上调用自定义链时,才生效


iptables添加要点

iptables规则添加时考量点

要实现哪种功能:判断添加在哪张表上

报文流经的路径:判断添加在哪个链上

报文的流向:判断源和目的

匹配规则:业务需要


实验环境准备

Centos7:systemctl stop firewalld.service

systemctl disable firewalld.service

Centos6:service iptables stop

chkconfig iptables off


iptables命令


man 8 iptables

iptables [-t table] {-A|-C|-D} chain rule-specification

-A attend -C check -D delete

iptables [-t table] -I chain [rulenum] rule-specification

-I insert 

iptables [-t table] -R chain rulenum rule-specification

-R replace

iptables [-t table] -D chain rulenum

-D delete

iptables [-t table] -S [chain [rulenum]]

-S --list-rules

iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

-F flush -L --list -Z zero

iptables [-t table] -N chain

-N new 新建chain

iptables [-t table] -X [chain]

-X --delete-chain

iptables [-t table] -P chain target

-P policy 设定默认规则

iptables [-t table] -E old-chain-name new-chain-name

-E edit 更改自定义的链名

rule-specification = [matches...] [target]

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

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


table

filter

nat

mangle

raw

security


Chain(默认的链)

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING


-t 省略表示filter

-A attend 添加规则

-C check

-D delete 删除规则

-i insert 插入规则(不加数值表示插入至第一条)

-R replace 替换所指定的规则

-N new-chain 新建chain

-X delete-chain 不加只能删除空链和未被调用的链


-Z zero 清空所匹配到的计数器,不加则清除默认规则计数器

-L list 列出规则

-F flush 刷新,即清空规则

-P policy 更改默认规则

-E edit 重命名链


-j

ACCEPT 接受

DROP 丢弃 丢弃后连接还是会持续的(建议使用)

REJECT 拒绝

custom_chain


规则格式:iptables[-t table] SUBCOMMAND chain 

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

-j targetname[per-target-options]

-t table:

raw, mangle, nat, [filter]默认

SUBCOMMAND:

1、链管理:

-N:new, 自定义一条新的规则链

-X:delete,删除自定义的空的规则链

-P:Policy,设置默认策略;对filter表中的链而言,其默认策略有:

ACCEPT:接受

DROP:丢弃

-E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除


2、查看:

-L:list, 列出指定鏈上的所有规则,本选项须置后

-n:numberic,以数字格式显示地址和端口号

-v:verbose,详细信息

-vv更详细

-x:exactly,显示计数器结果的精确值,而非单位转换后的易读值

--line-numbers:显示规则的序号

常用组合:

-vnL

-vvnxL--line-numbers

-S selected,以iptables-save 命令格式显示链上规则

3、规则管理:

-A:append,追加

-I:insert, 插入,要指明插入至的规则编号,默认为第一条

-D:delete,删除

(1) 指明规则序号

(2) 指明规则本身

-R:replace,替换指定链上的指定规则编号

-F:flush,清空指定的规则链

-Z:zero,置零

iptables的每条规则都有两个计数器

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

(2) 匹配到的所有报文的大小之和

chain:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING


匹配条件

基本:通用的,PARAMETERS

扩展:需加载模块,MATCH EXTENTIONS

1、基本匹配条件:无需加载模块,由iptables/netfilter自行提供 !表示可以取反

[!] -s, --source address[/mask][,...]:源IP地址或范围

[!] -d, --destination address[/mask][,...]:目标IP地址或范围

[!] -p, --protocol protocol:指定协议,可使用数字如0(all)

protocol: tcp, udp, icmp, icmpv6, udplite, esp, ah, sctp, mh or all 

参看:/etc/protocols

[!] -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,

只应用于INPUT、FORWARD、PREROUTING链

[!] -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,

只应用于FORWARD、OUTPUT、POSTROUTING链


2 扩展匹配条件:需要加载扩展模块(/usr/lib64/xtables/*.so),方可生效

查看帮助man iptables-extensions

(1)隐式扩展:在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的

扩展机制,不需要手动加载扩展模块

tcp协议的扩展选项

[!] --source-port, --sport port[:port]:匹配报文源端口,可为端口范围

[!] --destination-port,--dportport[:port]:匹配报文目标端口,可为范围

[!] --tcp-flags mask comp

mask 需检查的标志位列表,用,分隔 例如SYN,ACK,FIN,RST

comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔

示例:

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

表示要检查的标志位为SYN,ACK,FIN,RST四个,

其中SYN必须为1,余下的必须为0 (即tcp握手第一次)

--tcp-flags SYN,ACK,FIN,RST SYN,ACK (即tcp握手第二次)

--tcp-flags ALL ALL 所有标志为1

--tcp_flags ALL NONE 所有标志为0


[!] --syn:用于匹配第一次握手

相当于:--tcp-flags SYN,ACK,FIN,RST SYN

udp协议扩展

[!] --source-port, --sport port[:port]:匹配报文的源端口或端口范围

[!] --destination-port,--dportport[:port]:匹配报文的目标端口或端口范围


icmp

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

type/code

0/0 echo-reply icmp 应答

8/0 echo-request icmp 请求



(2)显式扩展:必须使用-m选项指明要调用的扩展模块的扩展机制,要手动加载扩展模块

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


处理动作

-j targetname[per-target-options]

简单:ACCEPT,DROP

扩展:REJECT:--reject-with:icmp-port-unreachable默认

RETURN:返回调用链

REDIRECT:端口重定向

LOG:记录日志,dmesg

MARK:做防火墙标记

DNAT:目标地址转换

SNAT:源地址转换

MASQUERADE:地址伪装

...

自定义链:



显式扩展:必须显式地指明使用的扩展模块进行的扩展 (重点)

使用帮助:

CentOS 6: man iptables

CentOS 7: man iptables-extensions

1、multiport扩展(最多15个 port:port算一个)

以离散方式定义多端口匹配,最多指定15个端口

[!] --source-ports,--sports port[,port|,port:port]...

指定多个源端口

[!] --destination-ports,--dportsport[,port|,port:port]...

指定多个目标端口

[!] --ports port[,port|,port:port]...多个源或目标端口

示例:

iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp 

-m multiport --dports 20:22,80 -j ACCEPT

2、iprange扩展

指明连续的(但一般不是整个网络)ip地址范围

[!] --src-range from[-to]源IP地址范围

[!] --dst-range from[-to]目标IP地址范围

示例:

iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 

-m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP



3、mac扩展

指明源MAC地址

适用于:PREROUTING, FORWARD,INPUT chains

[!] --mac-source XX:XX:XX:XX:XX:XX

示例:

iptables -A INPUT -s 172.16.0.100 -m mac 

--mac-source 00:50:56:12:34:56 -j ACCEPT

iptables-A INPUT -s 172.16.0.100 -j REJECT


4、string扩展

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

--algo{bm|kmp}字符串匹配检测算法

bm:Boyer-Moore

kmp:Knuth-Pratt-Morris

--from offset 开始偏移

--to offset 结束偏移

[!] --string pattern要检测的字符串模式

[!] --hex-string pattern要检测字符串模式,16进制格式

示例:

iptables-A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp--sport 80 

-m string --algobm --string "google" -j REJECT


5、time扩展(注意时区问题)

根据将报文到达的时间与指定的时间范围进行匹配

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期

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

--timestart hh:mm[:ss] 时间

--timestop hh:mm[:ss]

[!] --monthdaysday[,day...] 每个月的几号

[!] --weekdays day[,day...] 星期几,1 –7 分别表示星期一到星期日

--kerneltz:内核时区,不建议使用,CentOS7系统默认为UTC

注意:centos6 不支持kerneltz,--localtz指定本地时区(默认)

示例:

iptables-A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport80 

-m time --timestart 14:30 --timestop 18:30 --weekdays 

Sat,Sun --kerneltz -j DROP


6、connlimit扩展

根据每客户端IP做并发连接数数量匹配

可防止 CC(Challenge Collapsar挑战黑洞)***


--connlimit-upto #:连接的数量小于等于#时匹配

--connlimit-above #:连接的数量大于#时匹配

通常分别与默认的拒绝或允许策略配合使用

示例:

iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit 

--connlimit-above 2 -j REJECT


7、limit扩展

基于收发报文的速率做匹配

令牌桶过滤器 长时间没有访问时会收集但是有最大限制,瞬时捅来可放行比limi限制多

一些的请求,但是当burst令牌用光时则不会再有瞬间速度

--limit #[/second|/minute|/hour|/day]

--limit-burst number

示例:

iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit 

--limit 10/minute --limit-burst 5 -j ACCEPT


8、state扩展

根据”连接追踪机制“去检查连接的状态,较耗资源

conntrack机制:追踪本机上的请求和响应之间的关系

状态有如下几种:

NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,

因此,将其识别为第一次发出的请求

ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间

内所进行的通信状态

RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命

令连接之间的关系

INVALID:无效的连接,如flag标记不正确

UNTRACKED:未进行追踪的连接,如raw表中关闭追踪

[!] --state state

示例:

iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 21,22,80 

-m state --state NEW,ESTABLISHED -j ACCEPT

iptables-A OUTPUT -s 172.16.1.10 -p tcp-m multiport --sports 21,22,80 

-m state --state ESTABLISHED -j ACCEPT

已经追踪到的并记录下来的连接信息库

/proc/net/nf_conntrack

调整连接追踪功能所能够容纳的最大连接数量

/proc/sys/net/nf_conntrack_max

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

/proc/sys/net/netfilter/

注意:CentOS7 需要加载模块:modprobe nf_conntrack_ftp



ipset介绍 

ipset是iptables的扩展,它可以创建匹配整个地址集合的规则。而不像普通的iptables链

只能单IP匹配, ip集合存储在带索引的数据结构中,这种结构即使集合比较大也可以进行高效

的查找,除了一些常用的情况,比如阻止一些危险主机访问本机,从而减少系统资源占用或网

络拥塞,IPsets也具备一些新防火墙设计方法,并简化了配置.

官网:http://ipset.netfilter.org/


1.ipset安装

yum安装: yum install ipset 


2.创建一个ipset

ipset create xxx hash:net 

(也可以是hash:ip ,这指的是单个ip,xxx是ipset名称) 

ipset默认可以存储65536个元素,使用maxelem指定数量


ipset create blacklist hash:net maxelem 1000000 #黑名单 

ipset create whitelist hash:net maxelem 1000000 #白名单 

查看已创建的ipset

ipset list 


3.加入一个名单ip

ipset add blacklist 10.60.10.xx 

4.去除名单ip

ipset del blacklist 10.60.10.xx 


5.创建防火墙规则,与此同时,allset这个IP集里的ip都无法访问80端口(如:CC***可用)


iptables -I INPUT -m set –match-set blacklist src -p tcp -j DROP 

iptables -I INPUT -m set –match-set whitelist src -p tcp -j DROP 

service iptables save 


iptables -I INPUT -m set –match-set setname src -p tcp

–destination-port 80 -j DROP 


6.将ipset规则保存到文件

ipset save blacklist -f blacklist.txt 

ipset save whitelist -f whitelist.txt 

7.删除ipset

ipset destroy blacklist 

ipset destroy whitelist 

8.导入ipset规则


ipset restore -f blacklist.txt 

ipset restore -f whitelist.txt 

ipset的一个优势是集合可以动态的修改,即使ipset的iptables规则目前已经启动

新加的入ipset的ip也生效



iptables的链接跟踪表最大容量为/proc/sys/net/nf_conntrack_max,

各种状态的超时链接会从表中删除;当模板满载时,后续连接可能会超时

解决方法两个:

(1) 加大nf_conntrack_max值

vi /etc/sysctl.conf

net.nf_conntrack_max= 393216

net.netfilter.nf_conntrack_max= 393216

(2) 降低nf_conntracktimeout时间

vi /etc/sysctl.conf

net.netfilter.nf_conntrack_tcp_timeout_established= 300

net.netfilter.nf_conntrack_tcp_timeout_time_wait= 120

net.netfilter.nf_conntrack_tcp_timeout_close_wait= 60

net.netfilter.nf_conntrack_tcp_timeout_fin_wait= 120

iptables-t nat-L -n


开放被动模式的ftp服务

(1) 装载ftp连接追踪的专用模块:

跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter

vim /etc/sysconfig/iptables-config配置文件

IPTABLES_MODULES=“nf_conntrack_ftp"

modproble nf_conntrack_ftp

(2) 放行请求报文:

命令连接:NEW, ESTABLISHED

数据连接:RELATED, ESTABLISHED

iptables –I INPUT -d LocalIP -p tcp -m state --state ESTABLISHED,RELATED 

-j ACCEPT

iptables -A INPUT -d LocalIP -p tcp--dport 21 -m state --state NEW 

-j ACCEPT

(3) 放行响应报文:

iptables -I OUTPUT -s LocalIP -p tcp-m state --state ESTABLISHED

-j ACCEPT


Target

ACCEPT,DROP,REJECT,RETURN, LOG,SNAT,DNAT,REDIRECT,MASQUERADE,..

LOG:非中断target,本身不拒绝和允许,放在拒绝和允许规则前

并将日志记录在/var/log/messages系统日志中

--log-level level 级别:debug,info,notice, warning, error, crit, 

alert,emerg

--log-prefix prefix 日志前缀,用于区别不同的日志,最多29个字符

示例:

iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multiport --dports 80,21,22,23 

-m state --state NEW -j LOG --log-prefix "new connections: "


规则优化

任何不允许的访问,应该在请求到达时给予拒绝

规则在链接上的次序即为其检查时的生效次序

基于上述,规则优化

1 安全放行所有入站和出站的状态为ESTABLISHED状态连接

2 谨慎放行入站的新请求

3 有特殊目的限制访问功能,要在放行规则之前加以拒绝

4 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理

5 不同类的规则(访问不同应用),匹配范围大的放在前面

6 应该将那些可由一条规则能够描述的多个规则合并为一条

7 设置默认策略,建议白名单(只放行特定连接)

1)iptables -P,不建议

2)建议在规则的最后定义规则做为默认策略



规则有效期限:

使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限

保存规则:

保存规则至指定的文件

CentOS 6

service iptables save

将规则覆盖保存至/etc/sysconfig/iptables文件中

CentOS7

iptables-save > /PATH/TO/SOME_RULES_FILE


CentOS 6:

service iptablesrestart

会自动从/etc/sysconfig/iptables重新载入规则

CentOS 7重新载入预存规则文件中规则:

iptables-restore < /PATH/FROM/SOME_RULES_FILE

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

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


开机自动重载规则

开机自动重载规则文件中的规则:

(1) 安装iptables-services程序包

并将规则导入至/etc/sysconfig/iptables文件 

systemctl restart iptables

此安装包便会读取其配置文件里的规则


(2) 用脚本保存各iptables命令;让此脚本开机后自动运行

/etc/rc.d/rc.local文件中添加脚本路径

/PATH/TO/SOME_SCRIPT_FILE

(3) 用规则文件保存各规则,开机时自动载入此规则文件中的规则

/etc/rc.d/rc.local文件添加

iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE

(4)自定义Unit File,进行iptables-restore



网络防火墙


iptables/netfilter网络防火墙:

(1) 充当网关

(2) 使用filter表的FORWARD链

注意的问题:

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

(2) 如果要启用conntrack机制,建议将双方向的状态为ESTABLISHED的报文直接放行


NAT

要做NAT必须打开包转发功能 echo 1 > 


NAT: network address translation

PREROUTING,INPUT,OUTPUT,POSTROUTING

请求报文:修改源/目标IP,由定义如何修改

响应报文:修改源/目标IP,根据跟踪机制自动实现

SNAT:source NAT POSTROUTING, INPUT

让本地网络中的主机通过某一特定地址访问外部网络,实现地址伪装

请求报文:修改源IP

DNAT:destination NAT PREROUTING, OUTPUT

把本地网络中的主机上的某服务开放给外部网络访问(发布服务和端口映射),

但隐藏真实IP

请求报文:修改目标IP

PNAT: port nat,端口和IP都进行修改


SNAT

nat表的target:

SNAT:固定IP

--to-source [ipaddr[-ipaddr]][:port[-port]]

--random

iptables -t nat-A POSTROUTING -s LocalNET! -d LocalNet-j SNAT 

--to-source ExtIP

示例:

iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24

-j SNAT --to-source 172.18.1.6-172.18.1.9


MASQUERADE:动态IP,如拨号网络

--to-ports port[-port]

--random

iptables -t nat -A POSTROUTING -s LocalNET ! -d LocalNet -j MASQUERADE

示例:

iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24 

-j MASQUERADE



DNAT

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

iptables -t nat-A PREROUTING -d ExtIP-p tcp|udp--dportPORT 

-j DNAT --to-destination InterSeverIP[:PORT]

示例:

iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 22

-j DNAT --to-destination 10.0.1.22

iptables -t nat -A PREROUTING -s 0/0 -d 172.18.100.6 -p tcp --dport 80

-j DNAT --to-destination 10.0.1.22:8080


转发


REDIRECT:

NAT表

可用于:PREROUTING OUTPUT 自定义链

通过改变目标IP和端口,将接受的包转发至不同端口

--to-ports port[-port]

示例:

iptables -t nat-A PREROUTING -d 172.16.100.10 -p tcp --dport 80 

-j REDIRECT --to-ports 8080


总结

1. 定义远程服务可先加定时任务删除策略可以防自己被挡在外边或先在其它机器测试

2. iptables set离散的IP设置,如果想要限制一组IP阻止或允许,就需要使用ipset


猜你喜欢

转载自blog.51cto.com/winthcloud/2311470