iptables(2)

iptables命令的使用格式:

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

匹配条件:

基本匹配条件

扩展匹配条件

隐式扩展

显式扩展

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

基本匹配条件:

条件之前的!表示可以对条件进行取反

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

iptables -I INPUT -s 10.1.0.71 -j REJECT //拒绝来自10.1.0.71的访问
iptables -I INPUT -s 10.1.0.0/16 -j ACCEPT //放行10.1.0.0/16网络中的主机访问
iptables -R INPUT 1 -s 10.1.0.71 -j DROP //来自10.1.0.71的访问的包丢掉
iptables -D INPUT 1 //删除INPUT链中的第一条规则
iptables -D INPUT -s 10.1.0.71 -j DROP //删除明确给出规则的INPUT链规则

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

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

iptables -A INPUT -s 10.1.0.0/16 -d 10.1.0.6 -p tcp -j ACCEPT //开放来自10.1.0.0/16网络中的主机访问10.1.0.6网卡的tcp协议报文

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

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

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

-j, --jump target:跳转目标;

扩展匹配条件:

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

也可以在给定协议之后使用 -m tcp ,  -m udp ...显式扩展必须给定-m指定

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

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

iptables -A INPUT -s 10.1.0.0/16 -d 10.1.0.67 -p tcp --dport 22 -j ACCEPT //进站

iptables -A OUTPUT -d 10.1.0.0/16 -s 10.1.0.67 -p tcp --sport 22 -j ACCEPT

//开放本网段的进入本机22端口的请求报文

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

(3)[!] --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

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

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

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

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

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

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

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

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

(2)显式扩展:必须使用-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]...:匹配此处指定的源或目标端口;

iptables -A INPUT -d 10.1.0.6 -p tcp -m multiport --dport 22,23,80 -j ACCEPT //开放本地的22,23,80端口进站请求

iptables -A INPUT -s 10.1.0.6 -p tcp -m multiport --sport 22,23,80 -j ACCEPT //允许22,23,80端口回应客户请求

2、iprange

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

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

-m iprange --src-range from 10.1.68.1 to 10.1.68.10

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

3、string

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

[!] --string pattern

[!] --hex-string pattern

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

--from offset

--to offset

过滤过过程中遇到的问题:当使用httpd启动80端口时回应报文中的敏感词汇可以过滤

但是当使用nginx启动80端口回应报文时对字符过滤时没有效果

4、time

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

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

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

时间无法取反

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

iptables -I INPUT -d 10.1.68.15 -p tcp --dport 23 -m time --timestart 16:00:01 --timestop 09:59:59 --weekdays wed -j REJECT //限制telnet服务在周三的下午四点到早上九点五十九不提供访问

使用可以起始时间大于开始时间

-A INPUT -d 10.1.68.9/32 -p tcp -m tcp --dport 23 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays Mon,Tue,Wed,Thu,Fri  --datestop 2038-01-19T11:14:07 -j ACCEPT //telnet服务只在工作时间提供服务

[!] --monthdays day[,day...]

[!] --weekdays day[,day...]

5、connlimit

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

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

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

--connlimit-mask 24 :prefix_length

~]# 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//默认有令牌桶中有五个令牌。

如果是使用iptables -I INPUT -p icmp --icmp-type 8 -m limit  -j ACCEPT

//不指定速率则会第一次由令牌桶中的五个令牌响应请求,之后每小时放行三个请求

~]# 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/

如:我们的服务器由80端口连接别人,正常情况下这种状态是不存在的,如果服务器中木马,控制我们的80端口发出连接出去;我们设置80端口只允许进来为new的请求,出去ESTABLISEHD。;如果OUTPUT规则设置为DROP,我们可以让出去的是ESTABLISEHD状态的放行,可以安全的放行所有连接进入的服务。如果设置ftp能出去,设置RELATED状态的服务准许出去。就能基于状态放行ftp服务

INPUT链默认规则为为DROP

iptables -A INPUT -d 10.1.68.15 -p tcp -m multiport --dports 22,80,23 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -d 10.1.68.15 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT

OUTPUT链默认规则为DROP

iptables -A OUTPUT -s 10.1.68.15  -m state --state ESTABLISHED -j ACCEPT

[!] --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) 建议在规则链的最后定义规则做为默认策略;//使用这种方式相对于a方案的好处是不需要针对本机访问再做额外定义

练习:基于状态放行telnet, ftp, ssh, http, samba, icmp等服务;

(1) 对本机的ping请求每分钟不得超出20个;

(2) 每客户端对本机的ssh的并发连接数不得超过3个;

(3) 本机的telnet服务仅允许工作时间内访问;

# Generated by iptables-save v1.4.7 on Thu Oct 20 09:32:28 2016
*filter
:INPUT ACCEPT [28:2389]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -d 10.1.68.9/32 -p tcp -m tcp --dport 22 -m connlimit --connlimit-above 3 --connlimit-mask 32 -m limit --limit 3/hour --limit-burst 1 -j DROP 
-A INPUT -d 10.1.68.9/32 -p tcp -m tcp --dport 23 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays Mon,Tue,Wed,Thu,Fri  --datestop 2038-01-19T11:14:07 -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -p tcp -m state --state NEW,ESTABLISHED -m multiport --dports 22,80,21,3306,139,445 -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -p icmp -m icmp --icmp-type 3 -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -p icmp -m icmp --icmp-type 0 -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -p icmp -m icmp --icmp-type 8 -m limit --limit 20/min --limit-burst 3 -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT //这一条可以放到最前面,可以去掉上边规则中的ESTABLISEHD状态,加快匹配规则
-A INPUT -d 10.1.68.9/32 -j DROP 
-A OUTPUT -s 10.1.68.9/32 -p tcp -m tcp --dport 80 -j ACCEPT 
-A OUTPUT -s 10.1.68.9/32 -p tcp -m tcp --dport 2049 -j ACCEPT 
-A OUTPUT -s 10.1.68.9/32 -p tcp -m tcp --dport 22 -j ACCEPT 
-A OUTPUT -s 10.1.68.9/32 -p icmp -j ACCEPT 
-A OUTPUT -s 10.1.68.9/32 -m state --state ESTABLISHED -j ACCEPT 
-A OUTPUT -s 10.1.68.9/32 -j DROP 
COMMIT
# Completed on Thu Oct 20 09:32:28 2016

对OUTPUT做一定调整后:

*filter
:INPUT ACCEPT [87:7149]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -d 10.1.68.9/32 -p tcp -m tcp --dport 22 -m connlimit --connlimit-above 3 --connlimit-mask 32 -m limit --limit 3/hour --limit-burst 1 -j DROP 
-A INPUT -d 10.1.68.9/32 -p tcp -m tcp --dport 23 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays Mon,Tue,Wed,Thu,Fri  --datestop 2038-01-19T11:14:07 -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -p tcp -m state --state NEW,ESTABLISHED -m multiport --dports 22,80,21,3306,139,445 -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -p icmp -m icmp --icmp-type 3 -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -p icmp -m icmp --icmp-type 0 -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -p icmp -m icmp --icmp-type 8 -m limit --limit 20/min --limit-burst 3 -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -d 10.1.68.9/32 -j DROP 
-A OUTPUT -s 10.1.68.9/32 -m state --state NEW,ESTABLISHED -j ACCEPT 
-A OUTPUT -s 10.1.68.9/32 -j DROP 
COMMIT
# Completed on Thu Oct 20 22:44:31 2016
时间: 2024-10-12 09:10:18

iptables(2)的相关文章

linux防火墙--iptables(二)

五.filter过滤和转发 a.打开内核的IP转发 # sysctl -w net.ipv4.ip_forward=1 或 # echo 1 > /proc/sys/net/ipv4/ip_forward b.基本匹配条件 ·通用匹配 → 可直接使用,不依赖于其他条件或扩展 → 包括网络协议.IP地址.网络接口等条件 ·隐含匹配 → 要求以特定的协议匹配作为前提 → 包括端口.TCP标记.ICMP类型等条件 类别 选项 用法 通用匹配 协议匹配 -p 协议名 地址匹配 -s 源地址      

linux防火墙--iptables(三)

七.SNAT源地址转换 ·Source Network Address Translation ·修改数据包的源地址 ·仅用于nat表的POSTROUTING链 Example:局域网共享公网IP上网 ·配置的关键策略 → 做完路由选择后,针对来自局域网.即将从外网接口发出去的数据包,将其源IP地址修改为 网关的公网IP地址  # iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 69.166

iptables(防火墙)与netfilter

iptables(防火墙)与netfilter ================================================= 推荐博客: http://www.360doc.com/content/11/0506/09/706976_114731108.shtml# http://drops.wooyun.org/tips/1424 netfilter/iptables 简介: (1)IP数据包过滤系统由 netfilter 和 iptables 两个组件构成. (2)ne

针对Red Hat Enterprise Linux 6.5 的防火墙详细讲解,iptables(netfilter)规则的

防火墙基础 Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或网络层防火墙).基于Linux内核编码实现,具有非常稳定的性能和高效率,因此获得广泛使用. 在Linux系统中,netfilter和iptables都用来指Linux防火墙. netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"(Kernel Space,又称为内核空间)的防火墙功能体系. iptables:指的是

【linux基础】22、iptables(上)

一.网络安全模型 1.防火墙简介 防火墙(Firewall):也称防护墙,它是一种位于内部网络与外部网络之间的网络安全系统. 工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是二者的结合 主机防火墙:工作于主机边缘,只能对一台主机起到保护作用 网络防火墙:工作于网络边缘,对多台主机起到保护作用 主机防火墙 + 网络防火墙 硬件防火墙:能高效地处理网络报文,CPU是特制的,在硬件基础上能直接处理报文(解包) 网络层:网络防火墙 应用层

iptables(防火墙)的简单入门

进入图形化界面的防火墙命令 system-config-firewall 查看防火墙配置 vi /etc/sysconfig/iptables 1.iptables的组成结构 iptables将防火墙的功能分成多个表(tables) filter:用于一般的数据包过滤 NAT:Network Address Translation/网络地址转换 tables又包含多个链(chains),例如包过滤表中就包含了下面三个链: 1)INPUT //在此链中可添加对进来的数据包过滤的规则 2)OUTPU

iptables(3)

iptables/netfilter网络防火墙: 打开本机的核心转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward 网关上有两个网卡,一个内网网卡,一个内网网卡, 内网网卡ip:192.168.254.135:外网网卡ip:10.1.68.15 内网主机ip:192.168.254.136:网关:192.168.254.135 .外网主机ip:10.1.68.16 此时内网主机是可以ping通192.168.254.135,10.1.68.15 内网主机添加g

iptables(三)iptables规则管理(增、删、改)

上一篇文章中,我们已经学会了怎样使用iptables命令查看规则,那么这篇文章我们就来总结一下,怎样管理规则. 之前,我们把查看iptables规则的操作比作"增删改查"当中的"查",那么在这篇文章中,我们就聊聊怎样对iptables进行"增.删.改"操作. 注意:在参照本文进行iptables实验时,请务必在个人的测试机上进行,因为如果iptables规则设置不当,有可能使你无法连接到远程主机中. 首先,我们来回顾一下什么是iptables的规

skill——iptables(二)

iptabls 查.增.删.改,保存 一:查 参数 说明 -t 指定要查看的表,默认为 filter 表 -L 列出表中规则 -v 查看详细信息 -x 显示计数器的精确值 -n 不对 IP 地址进行名称反解,直接显示 IP --line-number 显示规则的行号,可缩写为 --line 案例一:查询 fileter 表 INPUT 链中中的规则丢弃 ip:192.168.8ptables -t filter -vL INPUT下面介绍下每列的含义 列明 说明 pkts 匹配到的报文的个数 b