、
------------------------------
注意:一张表中有多条链,一条链中可以有一条或多条规则。
当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则,如果满足则该规则处理该数据包,如果不满足,就继续检查下一条规则,最后该数据包不符合该链中的任一条规则的话,系统就会根据该链预先定义的策略来处理该数据包。
iptables 命令的使用:
iptables 【-t 表】 command 链 匹配标准 -j 处理方法
-t : filter nat mangle raw
command: 管理链: -F [CHAIN] :清除指定的规则链,如果省略chain则可以实现删除对应table中的所有的链 -P [CHAIN] :设定指定链的默认策略 -N :自定义一个新的空链 -X :删除一个自定义的空链 -Z :置零指定链中所有规则的计数器 -E :重命名自定义的链 管理规则: -A :附加一条规则,添加在链的尾部 -I CHINA[num] :插入一条规则,插入为对应的chain中的第num条 -D CHAIN[num] : 删除指定链中的第num条规则 -R CHAIN[num] : 替换指定链中的第num条规则 查看类: -L 显示指定表中的规则 -n : 以数字格式的形式显示主机地址和端口号 -v : 显示链及规则的详细信息 -vv :显示链及规则的更加详细的信息 -x : 显示计数器的精确值 --line-numbers : 显示规则的序号 ==--line
链: prerouting input output forward postrouting
匹配标准:
通用匹配:
-o INTERFACE :指定数据报文流出的接口 -i INTERFACE :指定数据报文流入的接口 -s ;--src :指定源地址 -d ;--dst :指定目标地址 -p {tcp|udp|icmp} :指定协议
隐含扩展:
-p tcp --sport PORT 源端口 --dport PORT 目的端口 --tcp-flags mask comp 只检查mask指定的标志位,是逗号分隔的标志位列表
comp:此列表中出现的标志位必须为1,comp中没出现,而mask中出现的必须为0
eg:--tcp-flagsSYN,FIN,ACK,RST SYN == --syn
--syn
-p icmp
--icmp-type [num]
num:
0:echo-reply 响应报文
8:echo-request 请求报文
-p udp
--sport PORT
--dport PORT
显示扩展:
-m state --state 结合ip_constack追踪会话的状态 NEW :新连接请求 ESTABLISHED :已建立的连接 INVALID :非法连接 RELATED :相关联的,专为ftp设定的
练习:192.168.137.11作为服务器,只允许请求新数据,不允许tcp/22(80) 发送新的请求
首先将iptables的默认策略更改为DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -d 192.168.137.11 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -d 192.168.137.11 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
-m multiport 离线的多端口匹配
--source-port
--destination-port
--port
练习:在服务192.168.137.11上同时在一条规则上开放进来的22,80,21端口
iptables -A INPUT -d 192.168.137.11 -p tcp -m miltiport --destination-port 22,21,80 -j ACCEPT
-m iprange :地址范围匹配扩展
--src-range ip-ip
--dst-range ip-ip
练习:在192.168.137.11服务器上允许172.16.100.3-172.168.100.100的ip所有服务进来
iptables -A INPUT -m iprange --src-range 172.16.100.3-172.168.100.100 -j ACCEPT
-m connlimit-about n :连接数的限制,低于n个的连接才可以访问
-m limit
--limit RATE(速率) :5/min
--limit-burst n :第一次可以上传多少
-m string
--algo (kmp|bm)
--string ("STRING")
练习:
-j :
ACCEPT : 允许
DROP :丢弃
REJECT :拒绝
DNAT:目的地址转换
SNAT:源地址转换
LOG:记录日志
--log-prefix "string": 加入前缀
MARK:打标志
RETURN:返回
---------------------------------
cat /proc/net/ip_conntrack ip报文追踪信息
iptstate: iptable的状态信息
-t 显示所有的连接个数
状态信息意义:
NEW :新连接请求
ESTABLISHED :已建立的连接
INVALID :非法连接
RELATED :相关联的,专为ftp设定的。
在繁忙的服务器上建议不要使用这个模块:
装载ip_conntrack模块:
service iptables stop
modprobe ip_conntrack 转载内核模块,可以单独工作
cat /proc/net/ip_conntrack
cat /proc/net/ipv4/ip_conntrack_mak 最大条目,有必要时要调大这个最大值,但在非常繁忙的服务器上,不建议启动这个模块
卸载ip_conntrack模块:
modprobe -r ip_conntrack
注意:
iptables -t nat -L 使用这个命令时,会自动启动ip_conntrack,所以在工作中当其处于关闭时,慎用
-----------------------------------------
命令行中的规则条目是需要保存:
第一种:service iptables save --->默认存放位置:/etc/sysconfig/iptables
开机后会自动加载到iptables规则中。
第二种:iptables-save > /etc/sysconfig/iptables-20150326
iptables-restore < /etc/sysconfig/iptables-20150326
开机后不会自动加载iptables规则中,需要手动加载,一般用于备份恢复。
-----------
-------------------------------------------------
练习:
将192.168.137.10的iptables的默认路由策略更改为DROP
iptables -t filter -P INPUT -j DROP
iptables -t filter -P OUTPUT -j DROP
iptables -t filter -P FORWARD -j DROP
iptables -L -n
测试 ssh ping http等服务是否工作
ssh 192.168.137.10:22
ping 192.168.137.11
http://192.168.137.11:80
打开ssh:22连接服务:
iptables -t filter -A INPUT -s 192.168.137.0/24 -d 192.168.137.10 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 192.168.137.10 -d 192.168.137.0/24 -p tcp --sport 22 -j ACCEPT
测试ssh服务:
ssh 192.168.137.10:22
打开http服务:
iptables -t filter -A INPUT -d 192.168.137.10 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -s 192.168.137.10 -p tcp --sport 80 -j ACCEPT
测试http服务:
http://192.168.137.10:80
打开ping功能:
你可以ping通别人,别人无法ping通你:
本机ping其他主机,出去时向其他主机请求报文8,别的主机返回来的是响应报文0
iptables -t filter -A OUTPUT -s 192.168.137.10 -p icmp-type 8 -j ACCEPT
iptables -t filter -A INPUT -d 192.168.137.10 -p icmp-type 0 -j ACCEPT
测试ping功能:
ping 192.168.137.10
ping 192.168.137.11
别人可以ping通你:
别的主机要ping通你,发送一个请求报文到本机,所以进入本机的是请求报文8,本机再响应报文给请求的主机,所以出去的是响应报文0.
iptables -t filter -A INPUT -d 192.168.137.10 -p icmp --icmp-type 8 -j ACCPET
iptables -t filter -A OUTPUT -s 192.168.137.10 -p icmp --icmp-type 0 -j ACCEPT
练习:
192.168.137.11作为服务器,只允许请求新数据,不允许tcp/22(80) 发送新的请求
首先将iptables的默认策略更改为DROP
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -d 192.168.137.11 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -d 192.168.137.11 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.137.11 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
转载于:https://blog.51cto.com/luzhi1024/1650741