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

启动和停止
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

时间: 2024-10-28 11:42:53

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

浅析linux下apache服务器的配置和管理_php技巧

一.两个重要目录:Apache有两个重要的目录:1.配置目录/etc/httpd/conf:2.文档目录/var/www: 二.两种配置模式:Apache在Fedora下的两种配置方式:文本模式(终端命令行)和图形化配置.两者各有优势:图形化下配置,更容易上手,在文本模式下直接编辑httpd.conf文件,自由性更强些.更直接. 三.Apache服务的启动与关闭Apache服务的停止.启动.关闭可以通过两种模式下进行操作:文本(终端)模式下和图形化界面. 四.终端下的操作如果你想用Linux作为

解析Linux下Varnish缓存的配置优化_php技巧

Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好. 但与老牌的squid相比,各有各的优劣势,网上大量的相对比较只是在其个人对自己熟悉的应用的最大使用上的发挥而已,可能squid到了有能力的人手上才足以发挥最强大的威力Varnish采用了"Visual Page Cache"技术,在内存的利用上,Varnish比Squid具有优势,它避免了Squid频繁在内存.磁盘中交换文件

Linux下防火墙的简单配置与插入规则介绍_Linux

查看当前的防火墙设置 iptables -L INPUT -n --line-numbers 删除一条策略,例如第4行策略 iptables -D INPUT 4 -A:在尾部插入 -I (insert)在指定链中插入一条新规则,为指明插入到第几行 (如:在第七行插入) iptables -I INPUT 7 -p tcp -m state --state NEW -m tcp --dport 81 -j ACCEPT 然后保存 service iptables save 然后重启 servic

让你提前认识软件开发(51):VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改

第3部分 软件研发工作总结 VC++集成开发环境中Linux下Pclint工程的配置方法及常见错误修改   [文章摘要]         Pclint是一种C/C++软件代码静态分析工具.它是一种更加严格的编译器,能够发现普通编译器所不能发现的代码中的很多问题,因此被广泛应用于软件开发项目中.        本文介绍了如何在VC++集成开发环境中配置Linux下的Pclint工程,给出了C语言中pclint规则A检查的常见错误,并描述了对应的修改办法.   [关键词]          VC++

Linux下Kafka单机安装配置方法(图文)_Linux

介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •Kafka将消息以topic为单位进行归纳. •将向Kafka topic发布消息的程序成为producers. •将预订topics并消费消息的程序成为consumer. •Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker. producers通过网络将消息发送到Kafka集群,集群

阿里云Linux下FTP服务器搭配配置

  阿里云服务器是国内目前 最好的一个云服务器了,不过价格方面也比较贵了,下面我们来给各位介绍在阿里云Linux下FTP服务器搭配配置了,大概方法 与linux下搭配ftp服务器区别不大,只是一些小细节了. 一.aliyun Linux(Redhat)安装vsftp软件 1.更新yum源 首先需要更新系统的yum源,便捷工具下载地址:update_source.zip.这里需要注意的是,目前文件无法传输,所以想要运行 update_source.sh 只能用文本打开,复制粘贴到阿里云服务器系统运

Linux下NDK的安装配置

Linux下NDK的安装配置     在编写android程序的时候如果需要复用一部分以前的c语言程序,可以考虑使用NDK.由于设计到c和c++编程,故强烈建议在Linux下安装上eclipse的CDT插件.安装方法同安装其他插件的方式一样,推荐离线安装,方法这里不再赘述.     在使用NDK之前需要下载android-ndk包,下载解压后将解压后的文件夹拷贝到自定义的目录下面(如"/root/"目录下),如图一所示.   图一  拷贝解压后的ndk文件夹到自定义目录下      

linux下php环境的配置

问题描述 linux下php环境的配置 在/etc/httpd/conf/httpd.conf下也加了LoadModule php5 modules/libphp.so在/etc/httpd/conf.d/php.conf也加了AddType application/x-httpd-php .php,apache服务也重启了,还是不行!!!! 解决方案 Linux下配置安装PHP环境http://www.cnblogs.com/lufangtao/archive/2012/12/30/28396

深入解析Linux下MySQL数据库的备份与还原_Mysql

深入解析Linux下MySQL数据库的备份与还原 1. 备份 [root@localhost ~]# cd /var/lib/mysql (进入到MySQL库目录,根据自己的MySQL的安装情况调整目录) [root@localhost mysql]# mysqldump -u root -p voice>voice.sql,输入密码即可. 2. 还原法一:[root@localhost ~]# mysql -u root -p 回车,输入密码,进入MySQL的控制台"mysql>&