侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

实例解析Linux下iptables的相关配置与命令使用技巧

linux  /  管理员 发布于 7年前   141

启动和停止
1、命令:

复制代码代码如下:service iptables start/stop/restart
或者直接去找/etc/init.d/下的
2、配置文件:
/etc/sysconfig/iptables
没有的话,可以用iptables-save生成

框架: tables > chains > rules(target)
整体上可认为iptables就是由许多chain组成的,要不然其老版本怎么叫做ipchains呢。但是划分层次为:
一个table可由多个chain组成,一个chain可由多个rules组成(一个rule对应一个target)。
target概念的好处是:系统预置了一些target,如ACCEPT,DROP,REJECT,LOG等,意思是如果这个包匹配这条rule,其处理办法就是target。这里引入target的好处在于,允许用户自定义一条chain,然后用chain名做为新的target,这样,就可以聚合一些rule!形成了层次性的rule,就是说如果满足这条rule,那么再看其target里面的rule。
1、iptables由四张table组成,每张table由默认的chain组成:
(1)filter: 默认有三个chain——INPUT,OUTPUT和FORWARD
(2)nat: 做NAT工作,默认三个chain——OUTPUT,PREROUTING,POSTROUTING
(3)mangle: 对包的一些参数进行修改,默认有五个chain——INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
(4)raw:作用未明,默认有两个chain——OUTPUT,PREROUTING
不同的table分管不同的方面。iptables的默认命令是对filter生效。可以用-t nat指定对nat生效。
2、所谓的配置防火墙就是:
(1)向chain添加rule:
每个chain都是由一系列rule组成的,比如你要更改INPUT这个chain来允许用户访问你机器上的某个端口。
比如这个INPUT有两个rule,一个用于允许用户访问你的5901端口,一个用于允许用户访问你的5902端口

一般安全策略:
1、从最严厉的安全措施开始,当你发现有用的东西不能工作时再一点点儿的放宽限度。
2、防火墙不能当作防范入侵的主要手段,它只能作为每台主机上独立保护措施的一个补充罢了。每台主机上的独立保护措施包括crack,tcpd,nmap,COPS,tripwire和相应的策略。

规则和命令:
规则很简单,相应的包,会交给相应的内置chain,然后对于chain中的rules,是从上到下的顺序进行匹配,和break语句一样。所以,比如你要开放某些端口,就写上面,最后才写封闭所有端口。
静态规则:
1、iptables -F chain-name:
清除名为chain-name的chain中的所有rule,只写-F清除所有的chain中的所有rule,但保留chain。
这默认只对filter table的。如果要清除如nat table的,要用 iptables -t nat -F
2、iptables -P chain-name target:
给名为chain-name的chain设置默认的rule。这个通常是放在给该chain设置的所有rule的开头。相当于break语句中的default。 注意,如果给nat或mangle中的chain设置,则别忘了用 -t table。 但是注意的是,这里的target只能用内置的
3、iptables -A chain-name rule
给名为chain-name的chain添加一条规则,后面rule是一下的组合:
-j target 预置target或用户自定义的chain
-i interface 如eth0
-p proto 协议,有tcp,udp
-s source-ip 源ip
-d dest-ip 目的ip
--sport source-port 源端口
--dport dest-port 目的端口
--icmp-type type 匹配ICMP类型,比如你允许哪些类型的ICMP包通过,后面跟数字
! 否定
-t table
4、iptables -I chain-name rulenum rule:
这个和-A的区别是:插入,而不是加在末尾。rulenum为1表示加在最前面。
5、iptables -X chain-name:
删除非系统内置(用户自定义)的chain,这个不同于-F,这个是把chain整个删除,名字都没了,即你用iptables -L -v看不到了。
6、iptables -D chain-name rule/rulenum
这个同iptable -A chain-name rule完全相反,如果你要删除chain-name中的一条rule,就按照-A时的写法就可以删除之。或者用rulenum,即该chain的从上往下数的num数,第一条rule的rulenum为1。
7、iptables -L chain-name
打印名为chain-name的chain的rules。不给出chain-name,则打印所有chain。
8、iptables -L -v chain-name
在6的基础上加了些有用信息,如从开机到现在,匹配每条rule的包的数量!

动态规则: 针对connection(TCP连接)
1、有三种动态参数:
NEW:指收到的第一次TCP连接
ESTABLISHED:当连接建立后,属于该connection的包
RELATED:当连接建立后,又有相关的连接建立(典型的是ftp的passive模式,由client发起到server的数据连接,这个端口是由server指定的,但由client发起)
2、命令:

复制代码代码如下:
iptables -A INPUT -m state --state NEW -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

上面两条命令,拒绝所有NEW的外来包。但允许自己发出的连接收到外来的数据(ESTABLISHED)
再加上:

复制代码代码如下:
iptables -A INPUT -p tcp -dport 21 -j ACCEPT
iptables -A INPUT -p udp -dport 21 -j ACCEPT

则表示可以允许外界访问21端口(FTP,并假设采用passive模式),结合上面的状态,则允许外界主动发起到自己的ftp数据连接———可能是任意端口,但这里已不用写了!!
所以,一般,先写上动态规则,然后再写静态规则,就可以做到处理一些像FTP Passive模式这种不知道用户会访问哪个端口的情况。
3、注意:
有状态的规则需要内核相应模块支持,如果没有编译进,或没有加载,则不会生效的。

iptables对请求的URL作IP访问控制
下面来看一个实例。
服务器运行环境是Tomcat,现在要实现的目的是,只允许特定的IP访问某个目录,
一种方法是在tomcat配置文件server.conf中,使用RemoteAddrValve对虚拟主机做访问控制。
另外一种方法可以通过iptables规则。个人比较喜欢iptables
例如:禁止访问http://192.168.137.254:10000/managersns 这个路径,只允许192.168.137.101访问

复制代码代码如下:
/sbin/iptables -A INPUT -i eth0 -p tcp --dport 10000 -s 192.168.137.101 -m string --string "/managersns" --algo bm -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 10000 -m string --string "/managersns" --algo bm -j DROP
/sbin/iptables -A INPUT -i eth0 -p tcp --dport 10000 -s 192.168.137.101 -m string --string "/managersns" --algo bm -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p tcp --dport 10000 -m string --string "/managersns" --algo bm -j DROP

以上规则是正对eth0网卡,可以跟踪自己需求修改。
参数说明:
-m string
使用string功能,string是iptables的一个module,也就是做字符串匹配的。
–string “xxxx”
定义字符串内容,可以是URL里任意字符,如果是需要block下载某些类型的文件或请求,这个有很大的发挥空间,可自由想象喔。
–algo bm
设置字符匹配的查询算法,一般默认使用bm算法效果就可以了,另外还可以设置kmp算法,那是一种更复杂的算法,详细内容可自行参见高等数学里的资料。(bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)
-j DROP
这在公司网络禁用视频网站是非常有效的,在网关服务器上设置:

复制代码代码如下:
iptables -A FORWARD -m string –-string “ku6.com” --algo bm -j DROP iptables -A FORWARD -m string –-string “tudou.com” –-algo bm -j DROP iptables -A FORWARD -m string –-string “ouou.com” –-algo bm -j DROP
iptables -A FORWARD -m string –-string “ku6.com” --algo bm -j DROP
iptables -A FORWARD -m string –-string “tudou.com” –-algo bm -j DROP
iptables -A FORWARD -m string –-string “ouou.com” –-algo bm -j DROP

其中各项参数的意义如下:
-A FORWARD
增加FORWARD链的规则,以上规则是针对启用了路由功能(即:echo 1 > /proc/sys/net/ipv4/ip_forward)
如果是直接访问,可使用的INPUT或OUTPUT。
设置符合此条件的包的处理方式,DROP即是丢弃,也是reject的意思。

复制代码代码如下:iptables -A INPUT -m string --string "stringname" --algo bm -j DROP


  • 上一条:
    Linux Container(LXC容器)的基本命令使用简介
    下一条:
    Linux中以sar命令监控系统的使用教程
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在Linux系统中使用Iptables实现流量转发功能流程步骤(0个评论)
    • vim学习笔记-入门级需要了解的一些快捷键(0个评论)
    • 在centos7系统中实现分区并格式化挂载一块硬盘到/data目录流程步骤(0个评论)
    • 在Linux系统种查看某一个进程所占用的内存命令(0个评论)
    • Linux中grep命令中的10种高级用法浅析(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2017-07
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-03
    • 2022-04
    • 2022-08
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-06
    • 2023-07
    • 2023-10
    • 2023-12
    • 2024-01
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客