iptables 简单使用

iptables网络防火墙
一、简介
防火墙:可以是硬件也可以是软件: 规则(匹配标准,处理办法)
netfilter: 是一种框架,工作在内核中,通过iptables命令(用户空间) 来规则交给netfilter(内核空间)。作用实现规则
iptables: 数据报文过滤,NAT、mangle等规则生成的工具;过滤IP报文首部与TCP报文首部。作用是制定规则
iptables不是服务,但有服务脚本;服务脚本的主要作用在于管理保存的规则,装载及移除iptables/netfilter相关的内核模块;iptables_nat, iptables_filter, iptables_mangle, iptables_raw, ip_nat, ip_conntrack service iptables start 开启服务
在启动iptables报iptables: No config file错误时
#iptables -P OUPUT ACCEPT
#service iptables save
#service iptables restart

#lsmod |grep ip 查看模块是否加载
二、iptables表与链简介
Netfilter/iptables是表的容器;表是链的容器,即所有的链都属于其对应的表; 链是规则的容器;规则一条条过滤的语句。容器的意思是包含或者说属于的关系。
1、规则:匹配标准IP: SIP, DIP(源地址,目的地址) TCP: SPORT, DPORT, (源端口,目的端口) UDP: SPORT, DPORT (源端口,目的端口) ICMP:icmp-type(icmp类型)
2、iptables链(PREROUTING、INPUT、FORWARD、OUTPUT和POSTROUTING五个链)
1)、PREROUTING: 用于修改目的地址(DNAT)
2)、INPUT: 匹配目的 IP 是本机的数据包
3)、FORWARD: 匹配穿过本机的数据包(转发数据包)
4)、OUTPUT:匹配目的 IP 是外部主机的数据
5)、POSTROUTING: 用于修改源地址 (SNAT)
3、iptables表(filter、nat、mangle与raw四个表)
1)、filter表(过滤):有 INPUT、OUTPUT、FORWARD三个链 用于过滤的时候
2)、nat表(地址转换): 有PREROUTING、OUTPUT、POSTROUTING三个链 用于做 NAT 的时候
3)、mangle表(拆开报文、修改、重新封装): PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING五个链
4)、raw表(关闭nat表连接追踪机制):只能放在PREROUTING、OUTPUT两个链上
链相关知识:可以使用自定链,但只在被调用时才能发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制;用可以删除自定义的空链,默认链无法删除
每个规则都有两个内置的计数器:一个用来记录被匹配的报文个数;另一个用来记录被匹配的报文大小之和
各表的优先级,从上到下(由高到底)如下图 例如input链中 先处理mangle表再处理filter表
iptables 简单使用
三、操作命令
语法:iptables [-t要操作的表] < 操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配到以后处理动作]
1)、操作命令(-A、-I、D、-R、-P、-F)
A、管理规则
-A 链名:附加一条规则,添加在链的尾部
-I 链名 号码: 插入一条规则,插入为对应链上的第几条;
-D链名 号码: 删除指定链中的第几条规则;
-R链名 号码: 替换指定链的规则;
B、管理链:
-F 链名:flush,清空指定规则链,如果省略链,则可以实现删除对应表中的所有链
-P 链名: 设定指定链的默认策略;
-N:自定义一个新的空链
-X: 删除一个自定义的空链
-Z:置零指定链中所有规则的计数器;
-E: 重命名自定义的链;
C、查看类:
-L: 显示指定表中的规则;
-n: 以数字格式显示主机地址和端口号;
-v: 显示链及规则的详细信息
-vv: 更详细信息
-x: 显示计数器的精确值
--line-numbers: 显示规则号码
2)、匹配条件:
A、通用匹配
-s, --src: 指定源地址
-d, --dst:指定目标地址
-p {tcp|udp|icmp}:指定协议
-i INTERFACE: 指定数据报文流入的接口 可用于定义标准的链:PREROUTING,INPUT,FORWARD
-o INTERFACE: 指定数据报文流出的接口 可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD
B、扩展匹配
a、隐含扩展:不用特别指明由哪个模块进行的扩展,因为此时使用-p {tcp|udp|icmp}
①、-p tcp隐含扩展
--sport PORT[-PORT]: 源端口
--dport PORT[-PORT]: 目标端口
--tcp-flags mask comp: 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;
--tcp-flags SYN,FIN,ACK,RST SYN = --syn 三次握手第一次
--tcp-flags –syn 三次握手第一次
②、-p icmp 隐含扩展
--icmp-type 0|8: 0: echo-reply 响应报文(回来的ping响应) 或 8: echo-request 请求报文(出去的ping)
③、-p udp 隐含扩展
--sport:源端口
--dport:目标端口
b、显式扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项可完成此功能
语法: -m matchname [per-match-options]
①、state 状态 结合ip_conntrack追踪会话的状态
NEW: 新连接请求
ESTABLISHED:已建立的连接
INVALID:非法连接
RELATED:相关联的
-m state --state NEW,ESTABLISHED -j ACCEPT
要对FTP使用iptables要首先要装载ip_conntrack_ftp和ip_nat_ftp模块
例: iptables -A INPUT -d 192.168.100.7 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
②、multiport: 离散的多端口匹配扩展
--source-ports 源端口
--destination-ports 目标端口
--ports 端口
例:-m multiport --destination-ports 21,22,80 -j ACCEPT
③、-m iprange :多个IP地址匹配
--src-range 源地址
--dst-range 目标地址
例: iptables -A INPUT -p tcp -m iprange --src-range 192.168.100.3-192.168.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
④ 、-m connlimit: 根据每客户端IP(也可以是地址块)做并发连接数数量匹配
--connlimit-above n 连接的数量大于n
--connlimit-mask prefix_length prefix_length为掩码(0-32) ,默认是32,即一个IP地址 , 限制网段
例: iptables -A INPUT -d 192.168.100.7 -p tcp --dport 80 -m connlimit --connlimit-above 2 -j DROP
⑤、-m limit:基于收发报文的速率做检查
--limit rate[/second|/minute|/hour|/day] 速率限制,默认是3/hour
--limit-burst number 空闲时峰值,默认是5
例: iptables -I INPUT -d 10.0.3.11 -p icmp --icmp-type 8 -m limit --limit-burst 3 --limit 20/minute -j ACCEPT
⑥、-m string 字符串匹配,能够检测报文应用层中的字符串,屏蔽非法字符
--algo {bm|kmp} 指定匹配算法,有bm和kpm两种
--string "STRING" 指定所要匹配的字符串
⑦、-m time 根据报文到达的时间与指定的时间范围进行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 时间格式为:2019-03-13T12:24:30
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss] 时间格式为 12:24:30
--timestop hh:mm[:ss]
--monthdays day[,day...] 1-31
--weekdays day[,day...] Mon, Tue, Wed, Thu, Fri, Sat, Sun 或者1-7
--utc 设置--datestart, --datestop, --timestart and --timestop为UTC时间
--localtz 设置--datestart, --datestop, --timestart and --timestop为内核时间
注意时区差异,CST比UTC时间快8小时
3)、常用动作(target):
ACCEPT:放行
DROP:丢弃
REJECT:拒绝(明确告诉对方)
DNAT:目标地址转换
SNAT:源地址转换
REDIRECT:端口重定向
MASQUERADE:地址伪装
LOG:日志
MARK:打标记(打个戳)
保存规则:
#service iptables save 保存的位置 /etc/sysconfig/iptables
#iptables-save > /etc/sysconfig/iptables.2019031301 手动保存位置
#iptables-restore < /etc/sysconfig/iptables.2019031301 手动生效
所有条件都可取反:!,-s ! 192.168.100.6 源地址不是192.168.100.6 都被匹配

猜你喜欢

转载自blog.51cto.com/14382498/2409405