iptables简单一些的用法

iptables

iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信 息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。iptables百科

这里写图片描述

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

命令行工具,工作在用户空间
用来编写规则,写好的规则被送往netfilter,告诉内核如何去处
理信息包
firewalld
CentOS 7引入了新的前端管理工具 管理工具:
firewall-cmd 命令行 firewall-config 图形

iptables的组成

iptables由四个表和五个链以及一些规则组成 四个表table:filter、nat、mangle、raw
filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包
nat表:network address translation 地址转换规则表
mangle:修改数据标记位规则表
Raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度
优先级由高到低的顺序为:raw–>mangle–>nat–>filter
五个内置链chain
INPUT OUTPUT FORWARD PREROUTING POSTROUTING

这里写图片描述

数据包过滤匹配流程

这里写图片描述

iptables规则

规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理
匹配条件:默认为与条件,同时满足 基本匹配:IP,端口,TCP的Flags(SYN,ACK等) 扩展匹配:通过复杂高级功能匹配
处理动作:称为target,跳转目标
内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG…
自定义处理动作:自定义chain,利用分类管理复杂情形
规则要添加在链上,才生效;添加在自定义上不会自动生效
链chain:
内置链:每个内置链对应于一个钩子函数
自定义链:用于对内置链进行扩展或补充,可实现更灵活的规 则组织管理机制;只有Hook钩子调用自定义链时,才生效

iptables选项:

-L:list, 列出指定鏈上的所有规则,本选项须置后
-n:numberic,以数字格式显示地址和端口号 -v:verbose,详细信息
-vv 更详细 -x:exactly,显示计数器结果的精确值,而非单位转换后的
易读值 –line-numbers:显示规则的序号 常用组合:
–vnL
–vvnxL –line-numbers
-S selected,以iptables-save 命令格式显示链上规则

iptables实例:
[root@localhost ~]#   iptables  -t  filter  -A INPUT -s 172.18.33.11 -j DROP
#-t :指定表为filter,默认不写-t [表名称]为filter表,-A INPUt:-A追加一条记录,INPUT流入(进来的), -s(源地址,简单来说是目标源地址,别人访问我,我是目标,别人就是源),DROP丢弃。具体就是172.18.33.11来的包全部丢弃。

[root@localhost ~]# iptables -t filter -I INPUT  -s 172.18.33.11 -j ACCEPT 
#-I是插入一条规则,默认插入后为第一条                        

[root@localhost ~]#iptables  -t filter -I  INPUT 2 -s 172.18.33.11 -j ACCEPT  
#意思是在第二行规则插入条规则,插入后此条规则变成第二条

[ root@localhost ~]#iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 262 packets, 22983 bytes)
num   pkts bytes target     prot opt in     out   source   destination         
1        0     0 DROP       all  --  *      *    172.18.33.11  0.0.0.0/0        
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source destination              

Chain OUTPUT (policy ACCEPT 103 packets, 8668 bytes)
num   pkts bytes target     prot opt in     out     source  destination               
#显示规则的序列号,num(序列号1)     pkts(多少个包)  bytes(包大小)


[ root@localhost ~]#iptables -D INPUT 1
#通过规则的序列号删除,删除的INPUT的规则


[root@localhost ~]# iptables -S:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -s 172.18.33.11/32 -j DROP  
#以命令格式查看规则


[ root@localhost ~]# iptables -F -t nat
#清空指定链(nat)的所有的规则

[ root@localhost ~]#iptables -R  INPUT 1 -s 172.18.8.8 -j ACCEPT  
#-R是替换意思,把INPUT中的第一条规则替换成后面的规则,如:之前的规则是(iptables -R  INPUT 1 -s 172.18.33.33 -j ACCEPT),执行上面的命令后,ip会被修改为172.18.8.8

[ root@localhost ~]#iptables -t filter -A INPUT  ! -s 172.18.251.62 -j DROP
#!号表示取反,这条规则是除了62机器别的机器全部拒绝,取反只能对单个IP操作,也可以对网段操作

[ root@localhost ~]# iptables -Z
#清除规则所有的包,清除为0

[ root@localhost ~]#  iptables -t filter -p icmp -j REJECT
#拒绝指定协议(icmp协议)
#更多协议:protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or “all“ 参看:/etc/protocols

[ root@localhost ~]# iptables -t filter -A INPUT -s 172.18.33.8 -p tcp --dport 22 -j DROP
#INPUT(入口), -s 来源ip为33.8, dport(服务器22端口(目标端口)),拒绝来着33.8ip访问服务器的22端口,访问的全部丢掉

[ root@localhost ~]# iptables -t filter -A INPUT -s 172.18.33.8 -p tcp --syn -j REJECT
#拒绝33.8所有的tcp的新的请求,--syn表示新的请求(请求建立连接),所有的新的链接无法链接,但是之前旧的链接不会断开
#syn等于:--tcp-flags

[ root@localhost ~]#iptables -t filter -A INPUT -s 172.18.33.8 -p tcp --dport 80 -j REJECT 
#拒绝33.8ip访问服务器的80断开,REJECT表示拒绝

[ root@localhost ~]# iptables -N ICMP-DROP
#创建一条新的规则链,名字为ICM-DROP

[ root@localhost ~]#iptables -A ICMP-DROP -p icmp --icmp-type 8 -j DROP
#为新的规则链(ICMP-DROP)添加条规则,拒绝访问服务器的icmp(ping),类型为8:请求包拒绝掉

iptables显式扩展:必须显式地指明使用的扩展模块进行的扩展

使用帮助:
CentOS 6: man iptables
CentOS 7: man iptables-extensions

1:
multiport扩展:主要功能指定多个端口
以离散方式定义多端口匹配,最多指定15个端口
[!] –source-ports,–sports port[,port|,port:port]…
指定多个源端口
[!] –destination-ports,–dports port[,port|,port:port]…
指定多个目标端口
[!] –ports port[,port|,port:port]…多个源或目标端口

#示例:

[ root@localhost ~]#   iptables -t filter -A INPUT -s 172.18.33.11 -p tcp -m multiport --dports  22,80 -j REJECT
#拒绝来源IP为11访问目标IP(本机)的22和80端口,
#-m multiport:指定模块,--dports 可以指定多个端口,格式为(22,90或者22:90,前面第一个是22和90端口设置,后面的则是22到90之间的所有端口)

2:iprange扩展 :主要功能设置IP范围
指明连续的(但一般不是整个网络)ip地址范围 [!] –src-range from[-to] 源IP地址范围 [!] –dst-range from[-to] 目标IP地址范围

#示例:

[ root@localhost ~]#  iptables -t filter -A INPUT -m iprange --src-range  172.18.33.11-172.18.33.22 -p icmp --icmp-type 8 -j ACCEPT
#允许11到22的IP请求服务器的icmp协议,也就是Ping
# -m iprange --src-range  :设置ip范围,--src-range是指的源Ip地址,总之就是源Ip地址的范围
# -m iprange --dst-range  :设置Ip范围,--dst-range 是指的是目标IP地址,总之是目标地址范围

3:
mac扩展:指明源MAC地址:
如:适用于:PREROUTING, FORWARD,INPUT chains [!] –mac-source XX:XX:XX:XX:XX:XX

#示例:
[ root@localhost ~]#iptables -t filter -A INPUT -m mac --mac-source 00:0C:29:D3:CA:B3 -p tcp  --dport  80 -j  REJECT
#-m mac --mac-source XXXXX: 指定来源的MAC地址,总之是拒绝此MAC地址访问服务器的80端口

4:
string扩展 对报文中的应用层数据做字符串模式匹配检测 –algo {bm|kmp}:字符串匹配检测算法
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
–from offset 开始偏移
–to offset 结束偏移
[!] –string pattern:要检测的字符串模式
[!] –hex-string pattern:要检测字符串模式,16进制格式

#示例:
[ root@localhost ~]# iptables -t filter -A OUTPUT   -p tcp -m  string --algo bm  --string "google"  -j REJECT
# -A OUTPUT -m string --algo bm --string "google" :出口处拒绝带有google的访问,前面写的是tcp,总之就是访问服务器的内容带有google字眼的都会被拒绝

[ root@localhost ~]# iptables  -t filter -A INPUT    -p tcp -m string --algo bm --string "google" -j REJECT
#来源地址带google的全部拒绝,如:www.xxx.com/google.html

5:
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…] 星期几 –kerneltz:内核时区,不建议使用,CentOS7系统默认为UTC 注意: centos6 不支持kerneltz ,–localtz指定本地时区(默认)

#示例:
[ root@localhost ~]#iptables -t filter -A INPUT -p tcp -m time --timestart 03:00 --timestop 20:00 -j REJECT 
#当前时间要减掉8个小时才是真正时间(查看本机时间date -u),当前时间为11点,11-8=3点,20-8=16点,这期间内无法访问此服务器的tcp协议的端口

6:
connlimit扩展 根据每客户端IP做并发连接数数量匹配
可防止CC(Challenge Collapsar挑战黑洞)攻击 –connlimit-upto n:连接的数量小于等于n时匹配
–connlimit-above n:连接的数量大于n时匹配 通常分别与默认的拒绝或允许策略配合使用

#示例:
[ root@localhost /var/www/html]#iptables -t filter -R INPUT 1 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
#加载connlimit模块,--connlimit-above为链接的数量大于多少时就拒绝,这里写的2
[ root@localhost ~]#iptables -t filter -A INPUT -p tcp --dport 22 -m connlimit --connlimit-upto 2 -j DROP
#--connlimit-upto 2 :这行规则是链接ssh服务小于或者等于2(少于3个人同时链接ssh)的就会被丢弃

7:
limit扩展:基于收发报文的速率做匹配
令牌桶过滤器
–limit rate[/second|/minute|/hour|/day] (速率)
–limit-burst number #多少个后开始限速

#示例:
[ root@localhost ~]#iptables -A OUTPUT -p icmp --icmp-type 0 -m limit --limit 10/minute --limit-burst 5 -j REJECT 
#出口包(OUTPUT),icmp(0应答包),--limit-burst 5  REJECT(前5个包无法接受), --limit 10/minute(每分钟限制10个,一分钟60秒,所以就是6个包,)
#就是前5个包收不到,后面出现6个包后丢一个包

8:
state扩展 根据”连接追踪机制“去检查连接的状态,较耗资源
conntrack机制:追踪本机上的请求和响应之间的关系
状态有如下几种:
NEW:新发出请求;连接追踪信息库中不存在此连接的 相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHED:NEW状态之后,连接追踪信息库中为 其建立的条目失效之前期间内所进行的通信状态
RELATED:新发起的但与已有连接相关联的连接,如: ftp协议中的数据连接与命令连接之间的关系
INVALID:无效的连接,如flag标记不正确 UNTRACKED:未进行追踪的连接,如raw表中关闭追踪

#示例:
[ root@localhost /var/www/html]#iptables -t filter -A INPUT -p tcp -m state --state NEW -j ACCEPT
#-m state --state NEW(新的请求包发出) -j  ACCEPT :来自新的请求包tcp的全部允许,如果最后是DROP,就是全部丢弃

已经追踪到的并记录下来的连接信息库 /proc/net/nf_conntrack #不推荐开启
调整连接追踪功能所能够容纳的最大连接数量 /proc/sys/net/nf_conntrack_max
不同的协议的连接追踪时长 /proc/sys/net/netfilter/
注意:CentOS7需要加载模块:modprobe nf_conntrack

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_conntrack timeout时间
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值