iptables系列二
时间:2022-05-11
本文章向大家介绍iptables系列二,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
iptables系列之基本应用及显式扩展
netfilter:Framework,TCP,内核中
iptables语法
iptables [-t table] command CHAIN [num] 匹配条件 -j 处理动作
匹配条件:
通用匹配
-s
-d
-p {tcp|udp|icmp}
扩展匹配
隐含匹配
显式匹配
命令:
管理规则:
-A:附加一条规则,添加在链的尾部
-I CHAIN [num]:插入一条规则,插入为对应CHAIN上的第num条,不加num,默认第一条
-D CHAIN [num]:删除指定链中的第mun条规则
-R CHAIN [num]:替换指定的规则;
管理链:
-F [CHAIN]: flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P CHAIN:设定指定链的默认策略
-N:自定义一条新的空链
-X:删除一个自定义的空链,如若非空,可以先-F 清空,再删除。
-Z:置零指定链中所有规则的计数器
-E:重命名自定义的链。
查看类:
-L:显示指定表中的规则;
-n:以数字格式显示主机地址和端口号
-v:显示详细信息
-vv:更详细
-x:显示计数器精确值
--line-numbers:显示规则号码
iptables -L -n
iptables -t filter -L -n
iptables -t nat -L -n
iptables -t filter -A INPUT -s 172.16.0.0/16 -j DROP
动作(target):
ACCECT :放行
DROP :丢弃
REJECT :拒绝
DNAT :目标地址转换
SNAT :源地址转换
REDIRECT :端口重定向
MASQUERADE:地址伪装
LOG :日志
MARK :打标记
NOTRACK
SET
扩展匹配
隐含匹配:
-p tcp
--sport PORT[-PORT]:源端口
--dport PORT[-PORT]:目标端口(可以连续的端口)
--tcp-flags msak comp :只检查mask指定的标志位,是用逗号分隔的标志列表;comp:此列表中出现的标记位必须为1,comp中没出现的,而mask中出现的,必须为0。
--syn:三次握手的第一次
-p icmp
--icmp-type
0:echo-reply
8:echo-request
-p udp
--sport
--dport
-p tcp -m tcp --dport
显式扩展: 明确指定的扩展,使用额外的匹配机制
-m EXTESTION --spe-opt
state:状态扩展
结合nf_conntrack追踪会话的状态
NEW:新连接请求
ESTABLISH:已建立的连接
INVALID:非法连接
RELATED:相关联的。
-m state --state NEW -j ACCEPT
-m state --state NEW,ESTABLISHED -j ACCEPT 放行两个。
-m multiport 离散多端口匹配扩展
--source-ports
--destination-ports
--ports
注意:iptables不是服务,但是有服务脚本,服务脚本的主要作用在于管理保存的规则, 由于iptables是工作在内核中的,需要载入内存的,防止所定义的规则重启后消失,所以要保存这些规则,以及下一次生效,删除等。 装载及移除iptables/netfilter相关的内核模块
--tcp-flags SYN,FIN,ACK,RST SYN,ACK --syn
(检查TCP的SYN,FIN,ACK,RST4个标志位其中只能SYN,ACK为1)
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
lsmod:用于查看相关模块是否载入。
lsmod - program to show the status of modules in the Linux Kernel
lsmod |grep ip
ip_conntrack:做ip追踪的
serrvice iptables stop
lsmod |grep ip
关闭iptables的服务脚本,就是将iptables的内核模块移除。
vim /etc/init.d/iptables
/sbin/modprobe
/sbin/rmmod
modprobe(8), rmmod(8), lsmod(8)
insmod
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.1.3 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t filter -I INPUT -d 172.16.1.3 -p tcp --dport 80 -j ACCEPT
iptables -t filter -I INPUT -s 172.16.1.3 -p tcp --sport 80 -j ACCEPT
iptables -t filter -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
iptables -t filter -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
icmp-type
http://www.cnitblog.com/yang55xiaoguang/articles/59581.html
TYPE CODE Description
0 0 Echo Reply——回显应答(Ping应答)
8 0 Echo request——回显请求(Ping请求)
可以实现自己可以ping通任何人,其他人不可以ping本机:
iptables -t filter -A OUTPUT -s 172.16.1.3 -p icmp --icmp-type 8 -j ACCEPT
iptables -t filter -A INPUT -d 172.16.1.3 -p icmp --icmp-type 0 -j ACCEPT
允许dns的请求:
iptables -t filter -A INPUT -d 172.16.1.3 -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -p udp --sport 53 -j ACCEPT
dns服务器的迭代:
iptables -t filter -A OUTPUT -s 172.16.1.3 -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -d 172.16.1.3 -p udp --sport 53 -j ACCEPT
反弹式木马:
反弹木马,是驻留在用户计算机里的一段服务程序,而攻击者控制的则是相应的客户端程序。服务程序通过特定的端口,打开用户计算机的连接资源。一旦攻击者所掌握的客户端程序发出请求,反弹木马便和他连接起来,将用户的信息窃取出去。
连接追踪:
ip_conntrack
可以追踪tcp和udp
A--->B
连接跟踪(CONNTRACK),顾名思义,就是跟踪并且记录连接状态。Linux为每一个经过网络堆栈的数据包,生成一个新的连接记录项 (Connection entry)。
/proc/net/ip_conntrack
/proc/net/nf_conntrack el6
保存当前系统上每一个客户端和主机的所建立的连接状态。
iptstate
iptstate - A top-like display of IP Tables state table entries
-t 显示连接个数
/proc/net/nf_conntrack保留ip的连接状态,进行追踪。
modprobe -r ip_conntrack 移除模块
modprobe -r nfnetlink
service iptables stop
modprobe ip_conntrack
多少个连接就会有多少个条目
/proc/sys/net/ipv4/ip_conntrack_max
/proc/sys/net/filter/nf_conntrack_max
/proc/sys/net/filter/nf_conntrack_max 定义nf_conntrack存储多少个条目,最多可以建立多少连接。若连接超过定义的值就会丢弃,导致大量的超时。
注意:在业务繁忙的网站,此模块一定不要开启。
iptables -t nat -L 会触发nf_conntrack模块。
可以修改:
vim /etc/sysctl.conf
net.netfilter.nf_conntrack_max = 655360
net.nf_conntrack_max = 655360
iptables启动时会读取/etc/sysconfig/iptables
service iptables save 保存iptables的规则
iptables-save > /etc/sysconfig/iptables.20150818
iptables-restore < /etc/sysconfig/iptables.20150818
手动保存规则以及手动载入规则。
允许ssh和http的服务,并且还要追踪(以及默认策略):
iptables -F
iptables -t filter -A INPUT -d 172.16.1.3 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -P tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t filter -A INPUT -d 172.16.1.3 -p tcp --dport 80 -m --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -p tcp --sport 80 -m --state ESTABLISHED -j ACCEPT
sysctl -w net.netfilter.nf_conntrack_max=65536
sysctl - configure kernel parameters at runtime
EXAMPLES
/sbin/sysctl -a
/sbin/sysctl -n kernel.hostname
/sbin/sysctl -w kernel.domainname="example.com"
/sbin/sysctl -p /etc/sysctl.conf
在/proc/sys/net/netfilter/目录下参数进行配置以及超时时间。
若要永久有效将参数写在/etc/sysctl.conf
iptables -t filter -A INPUT -d 172.16.1.3 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.1.3 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
ping 172.16.1.3
iptstate -t
iptables -L -n --line-numbers
iptables -t filter -I OUTPUT -s 172.16.1.3 -m state --state ESTABLISHED -j ACCEPT
iptables -t filter -I INPUT -d 172.16.1.3 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -D OUTPUT 2
vim /etc/vsftpd/vsftpd.conf
pasv_enable=NO
servicevsftpd restart
允许ftp主动模式通过:
iptables -t filter
iptables -R OUTPUT 1 -s 172.16.1.3 -m state ESTABLISHED,RELATED -j ACCEPT
iptables -R OUTPUT 1 -d 172.16.1.3 -m state NEW,ESTABLISHED,RELATED -j ACCEPT
注意:要装载nf_
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_nat_ftp nf_conntrack_ftp"
service iptables reload
iptables -I INPUT 2 -d 172.16.1.3 -p tcp -m mutiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT
注意: ! 表示条件取反
- Struts Interceptor Example
- 微信服务号模板消息接口新增"设置行业"和"添加模板"及细节优化
- WPF备忘录(3)如何从 Datagrid 中获得单元格的内容与 使用值转换器进行绑定数据的转换IValueConverter
- WPF备忘录(2)WPF获取和设置鼠标位置与progressbar的使用方法
- WPF文字修饰——上、中、下划线与基线
- 微信公众平台数据接口正式对所有认证公众号开放
- 参考基因组没有,经费也没那么多,怎么办?
- .Net下SQLite的DBHelp
- 数据库进程间通信解决方案之MQ
- 【学术】算法交易的神经网络:强化经典策略
- java.util.logging 例子
- WPF命令(Command)介绍、命令和数据绑定集成应用
- lncRNA实战项目-第六步-WGCNA相关性分析
- 【项目】Github上的一个简单项目:用人工智能预测大学录取概率
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java8 Stream流的终端操作
- Python 爬取王者农药全套皮肤
- 时间都去哪儿了--python性能优化
- Python干货 | 遥感影像拼接
- Java8 Stream 创建流
- Java8 Stream 基本类型特化流
- Java8 Stream 自定义收集器Collector
- 收藏|Flink比Spark好在哪?
- SpringCloud Config 分布式配置
- 经过一年的煎熬,我们还是决定把系统升级成基于 Spring Cloud 的微服务架构
- OpenCV:人脸检测。
- 如何设计缓存系统:缓存穿透,缓存击穿,缓存雪崩解决方案分析
- OpenCV:图像检索。
- Zuul路由网关
- OpenCV:模板匹配。