iptables

作者: 麟之趾a | 来源:发表于2020-05-08 17:54 被阅读0次

man iptables(本机centos7.6已支持中文)

iptables图解

image.png
防火墙:工作在主机或者网络边缘的节点上,匹配请求过来的包。如果匹配到规则,根据规则进行放行或者阻挡。

专业的防火墙,也是在网络层进行防护,只不过那是专用于拆包解包的cpu。比主机的通用型cpu,在对于包过滤方面功能要强大的多

五链

PREROUTING INPUT OUTPUT FORWARD POSTROUTING

四表

raw: PREROUTING OUTPUT 关闭nat表的连接机制的功能
mangle: PREROUTING INPUT OUTPUT FORWARD POSTROUTING 用于拆包和解包,修改包内容,重新给包打标机
nat:PREROUTING INPUT OUTPUT POSTROUTING 修改包的源IP:PORT和目标IP:PORT
filter:INPUT FORWARD OUTPUT 用于包过滤

iptables规则编写

规则格式 iptalbes [-t table] COMMAND chain [-m matchchname] -j targetname [per-target-options]
-t table: raw mangle nat filter(默认)

链管理

-N:new,自定义一条新链
-X:delete 删除自定义链
-P: Policy 设置默认策略,对filter表中的链而言。其默认策略有:
ACCEPT 接受
DORP  丢弃
REJECT 拒绝
-E:重命名自定义链,引用计数不为0的自定义链不能被重命名,也不能删除

规则管理

-A: append 追加
-I:insert 插入,要指明位置,省略时表示第一条
-D: delete 删除
1 .指明规则序号
2 .指明规则本身
-R:replace,替换指定链上的指定规则
-F:清空规则
-Z:zero 清零
   Iptables的每条规则都有两个计数器
     1)匹配报文的计数器
      2)匹配所有报文大小之和

查看规则

-L: list 列出链上的所有规则
-n: numberic 以数字格式显示地址和端口号
-v: verbose 详细信息
-vv,-vvv
-x: exactly 显示计数器结果的精确值
--line-numbers:显示规则的序号

匹配条件

基本匹配条件
扩展匹配条件

  • 隐世扩展:在使用了-p选项指明了特定的协议时,无需同时使用-m选项指明扩展模块的扩展机制
  • 显示扩展: 必须使用-m选项指明要调用的扩展模块的扩展机制

基本匹配条件

无需加载任何模块,由iptables/netfilter自行提供

[!]-s,--source address[/mask]  检查报文中的源IP地址是否符合此处指定的地址或范围
[!]-d,--destination address[/mask]  检查报文中目标IP地址是否符合此处指定的地址或范围
[!]-i,--in-interface name:数据报文流入的接口,只能应用于数据报文流入的环节,只能应用于PREROUTING,INPUT,FORWARD的链
[!]-o,--out-interface name:数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARD,OUTPUT,和POSTROUTING链

扩展匹配条件

显示扩展

使用 -m 选项
1 .multiport 已离散或连续的方式定义多端口匹配条件,最多15个
[!]--source-ports,--sports port[port]:指定多个源端口
[!] --destination-ports,--dports port[,port,|port:port] 指定多个目标端口
iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139  -j ACCEPT
2 .iprange 已连续的地址块的方式指明多个IP地址匹配条件
[!]--src-range from[-to]
[!]--dst-range from[-to]
iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT
3 .time 可以利用时间来控制用户上网
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
[!]--weekdays day,[day....]
[!]--monthdays day,[day...]
--datestart YYYY[-MM[-DD[Thh:[mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh:[mm[:ss]]]]]
--kerneltz: 使用内核配置的时区而非默认的UTC
4.string 过滤条件
--algo {bm|kmp} 使用哪种算法
[!]--string pattern:匹配的字符
[!] --hex-string:使用16进制匹配内容
--from offset:从哪开始匹配
--to offset:从哪结束
iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT
假设我们网站要屏蔽gay这个内容,所以在OUTPUT进行处理,凡是响应报文有这个内容 的都屏蔽掉
5.connlimt 控制客户端的连接数
--connlimit-upto n  小于允许,默认策略为拒绝规则
--connlimt-above n 大于拒绝 默认策略为允许规则
iptables -I INPUT  -d 10.0.0.15 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
6 .limit 做客户端速率限制
--limit rate 定义令牌产生速率.把令牌附属到包上,只有包有令牌就让包过去。从而达到限速
--limit-burst 令牌桶(一次最多发多少包,随后限制)
iptables -I INPUT 1 -d 10.0.0.15 -p icmp  -m limit --limit-burst 1 --limit 10/minute -j ACCEPT
iptables -P INPUT DORP  注意设置了默认拒绝策略,上面才会生效
注:对HTTP限制连接应用syn=1 新请求 --limit rate进行限制
7.state conntrack的子集
连接追踪:在服务器端内存空间来记录哪个客户端曾经来过,如果内核内存满了,新连接请求就会超时拒绝。在内存中的连接会超时时间,(对非常繁忙的服务器要么调大存放连接请求的内存空间,要么不开启)
内核模块装载:
nf_conntrack
nf_conntrack_ipv4
手动装载
 nf_conntrack_ftp
追踪到连接的存放路径
/proc/net/nf_conntrack
调整可记录连接数量的最大值
/proc/sys/net/nf_conntrack_max
超时时长
/proc/sys/net/netfilter/*timeout*
state:
-state state
这里state是一个逗号分割的匹配连接状态列表。可能的状态是
INVALI  表示包是未知连接
ESTABLISHED表示是双向传送的连接,NEW表示包为新的连接,否则是非双向传送的
RELATED表示包由新连接开始,但是和一个已存在的连接在一起,如FTP数据传送,或者一个ICMP错误。 : 需要手动装载 nf_conntrack_ftp 模块
iptables -I INPUT -d 10.0.0.15 -p tcp -m state --state ESTABLISHED -j ACCEPT

动作

-j targetname
简单的target
ACCEPT,DROP
扩展target
REJECT
LOG
 --log-level
--log-prefix
iptables -I INPUT -d 10.0.0.15 -p tcp -m state --state ESTABLISHED -j LOG --log-prefix "ssh 22"

iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables

iptables NAT

进入本机的链:PREROUTING-->INPUT
经由本机的链:PREROUTING - FORWARD-POSTROUING
由本机出去:OUTPUT-POSTROUTING


image.png

主机路由选择最优路由
1 .主机路由(优先)
2 .网络路由(小网络优先 1.1.0.0/16(优先) 1.0.0.0/8)
3 .默认路由
路由的IP地址是不会改变的,对于linux主机来说IP地址属于内核
如果使用linux主机做路由的话,需要在FORWARD链计入防火墙。
注意:往返的IP是双向的,如果要FORWARD链允许某个IP的话,要在源和目的都得指向这个IP

SNAT

SNAT工作在POSTROUTING 链。用户请求如果在PREROUTING链做的话,如果是请求是自己的外网地址的话,那么还要经过转换才能访问自己
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.0.0.61
注意: 内网主机的网关指向网关服务器
网关服务器开启路由转发功能

DNAT

DNAT工作在PREROUTING链,用户请求的IP地址是网关的IP地址,如果在POSTROUTING 链做的话,网关发现是自己的IP地址,就会放行到INPUT链上。无法进行转发了
iptables -t nat -A PREROUTING -d 10.0.0.81 -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.7:22
注意: 内网主机的网关指向网关服务器
网关服务器开启路由转发功能

REDIRECT

用户端口映射 --to-ports

相关文章

网友评论

      本文标题:iptables

      本文链接:https://www.haomeiwen.com/subject/xwbfnhtx.html