热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux培训心得之Iptables学习心得

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd
Iptables是管理Netfilter的唯一工具,Netfilter直接嵌入在Linux内核。他可以为个人工作站创建一个防火墙,也可以为一个子网创建防火墙,以保护其他的系统平台(市场上有很大一部分硬件防火墙也是使用iptables系统的)。
Netfilter在内核中过滤,没有守护进程,在OSI模型的第2、3、4层插入策略。过滤的速度非常快,因为他只读取数据包头,不会给信息流量增加负担,也无需进行验证。
Netfilter提供了一系列的表(tables),每个表由若干个链(chains)组成,而每条链可以由一条或若干条规则(rules)组成。实际上netfilter 是表的容器,表是链的容器,而链又是规则的容器。
Netfilter表和Netfilter链:
 
表说明:
Filter:这个表主要执行数据包过滤。
Nat:主要进行网络地址转换。
Managle:用于修改一些特殊的规则。
链说明:
PREROUTING:路由之前,刚到达的数据包。(nat)
INPUT:通过路由,目的为地为本机的数据包。(filter)
FORWARD:需要通过本地系统进行转发的数据包。(filter)
OUTPUT:由本机产生,向外转发,处于POSTROUTING之前的数据包。(nat和filter)
POSTROUTIONG:通过路由后,即将离开系统的数据包。(nat)
Netfilter的数据包流程:

Iptables 基本语法:
iptables 内置了filter、nat 和mangle 三张表,我们可以使用-t 参数来设置对哪张表生效,也可以省略-t 参数,则默认对filter 表进行操作。

图中:这句的意思就是:来自(源地址)192.168.0.1的INPUT链的数据包直接丢弃。
Iptables进程服务命令:
service iptables save 保存iptables设置,对iptables规则编辑后一定要保存。
service iptables restart 保存设置以后不重启则设置不生效,要设置生生效请重启。
service iptables status 检查iptables的设置。类似于iptable –L命令。
Iptables基本的链操作命令:
-L 列出某个链或者表中的规则: service iptables status 把这个命令和-L比较下
iptables –L:显示filter表中的规则等同于iptables –t filter -L
iptables –t nat –L :显示nat表的中的设置:
-F 删除某个链或者表中的规则:
iptables –F (iptables –t filter –F) 删除filter表中的所有规则;
iptables –t nat –F 删除nat表中的所有规则;
iptables –t nat –F POSTROUTING 删除nat表中POSTROUTING链的所有规则;
-A添加一条规则(在当前的规则后添加,也就是排在所有规则后):
iptables -A INPUT –s 192.168.0.1 –j DROP
和实例图中的功能相同,丢弃来自192.168.0.1的数据包,这里省略了-t filter。
添加该语句后,保存设置并重新启动iptalbes 服务,并通过-L的命令查看,就会发现刚添加的这条规则排列在所有规则后。
-----------iptables的匹配规则是按顺序排列的。
-I在制定位置插入一条规则:
(如果有回环规则(iptables –A INPUT –I lo –j ACCEPT,则回环永远是第一条)
iptables –I 作为第一条规则插入。
iptables X 作为第X条规则插入,X这里代表规则顺序号。
iptables –A INPUT –p tcp –s 192.168.0.1 --dport 22 –j ACCEPT
允许192.168.0.1 通过22端口访问该主机,把它作为第一条规则插入iptables规则列表。
-----------iptables的匹配规则是按顺序排列的。
-P 分配连接策略。
iptables –P INPUT DROP 禁止任何输入的数据包。这句慎用。
iptables –P OUTPUT ACCEPT 允许所有输出的数据包。
-D删除某一条规则:
Iptables –D X 删除某个链的第几条规则
iptables –D INPUT 3 删除INPUT链上的第3条规则。
iptables –P INPUT DROP 这个不能使用删除语句删除,只能到本机输入iptables –P INPUT ACCEPT
Iptables中的匹配:
iptables –A INPUT –p tcp –s 192.168.0.1 --dport 22 –j ACCEPT
这个命令我们在上面已经看过了,我们来看下其他的一些匹配参数。
-p protocol 匹配网络协议,例子中匹配tcp协议。
-s IP地址或者网段 匹配源IP地址或者网段
例子中师匹配一个IP的,如果要匹配一个网段则如下
-s 192.168.0.1/24
如果是除这个网段之外的所有则为:! -s 192.168.0.1/24
如果是除这个IP之外的所有则为! -s 192.168.0.1
-d IP地址或者网段 匹配目的IP地址或者网段
--dport X 匹配目的端口号,X代表具体端口号。
--sport X 匹配源端口号,X代表具体端口号。
Iptables中的目的:
我们已经在前面看到过-j 后面跟的就是目的。
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包。
REJECT:丢弃数据包,同时发送响应报文通知发送方。
设置Iptables预设规则(本地机防火墙):
1、清除iptables设置:iptables –F
2、设置回环规则,没有这个规则好多服务不能启动:
iptables –A INPUT –i lo –j ACCETP
3、连接跟踪设置:作用允许连线出去后对方主机回应进来的封包。
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    NEW:想要新建连接的数据包
    INVALID:无效的数据包,例如损坏或者不完整的数据包
    ESTABLISHED:已经建立连接的数据包
    RELATED:与已经发送的数据包有关的数据包
4、iptables -p INPUT DROP 允许进入数据包----慎用该句。
5、iptables -p FORWARD DROP 禁止转发数据包
6、iptables -P OUTPUT ACCEPT 允许外发数据包
7、设置好以后就可以根据情况开放相应的端口了
iptables –A INPUT –p tcp --dport 20:21 –j ACCEPT 开放FTP的20、21端口。
iptables –A INPUT –P tcp --dport 80 –j ACCEPT 开放http的80端口。
iptables –I INPUT –p tcp –dport 22 –j ACCEPT 开放SSH服务的22端口。
设置Iptables FORWORD规则:
一般情况FORWORD链式DROP的,但是当用来做NAT的时候我们就需要设置他了。
首先要开启转发功能:编辑/etc/sysctl.conf文件

Iptables转发功能(在做NAT时,FORWARD默认规则是DROP时,必须做)
# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
丢弃坏的TCP包。
#iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
处理IP碎片数量,防止攻击,允许每秒100个。
#iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
设置ICMP包过滤,允许每秒1个包,限制触发条件是10个包。
#iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
我在前面只所以允许ICMP包通过,就是因为我在这里有限制。
连接跟踪:提供对数据包“状态”的检查
可以识别的状态:
NEW:想要新建连接的数据包
INVALID:无效的数据包,例如损坏或者不完整的数据包
ESTABLISHED:已经建立连接的数据包
RELATED:与已经发送的数据包有关的数据包
连接跟踪的模块
ip_conntrack_ftp:自动跟踪FTP连接,并自动打开它需要通过防火墙的高端端口。
Ip_conntrack_tftp:和上面功能类似不过是TFTP服务。
Ip_nat_ftp:修改NAT保护的计算机的FTP数据包。
Ip_nat_tftp:和上面类似不是TFTP数据包。
可以通过修改/etc/sysconfig/iptables-config 文件
修改IPTABLES_MODULES="ip_conntrack_tftp ip_nat_ftp"

也可以通过modprobe ip_conntrack_tftp 不过重启以后将失效。
连接跟踪实例:
允许建立连接:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
跟踪规则:
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
阻止所有其他进入的链接:
iptables -A INPUT -m state --state NEW -j DROP
NAT网络地址转换:将一个IP转换成另一个 IP(输入和输出)
网络地址转换类型:
目的地 NAT(DNAT):DNAT修改包的目的地位址的时机,必须在包即将被送到本机行程之前,或是要被转送其它电脑之前;所以,使用DNAT为目标的规则,必须设置于nat表格的PREROUTING链结。
源 NAT(SNAT,MASQUERADE):SNAT必须在封包即将离开核心的前一刻,即时修改其来源位址(或通讯端口),所以SNAT规则的设置地点必须是在nat表格的POSTROUTING链结。
NAT实例:
iptables -t nat -A PREROUTING -i ethl -p tcp - -dport 80 -j DNAT - - to -destination 192.168.1.3:8080
把要进入eth1(eth1连接外网)80端口的数据包,重新定向到192.168.1.3的8080端口。
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT
--to-dest 192.168.1.3 --to-dest 192.168.1.4 --to-dest 192.168.1.5

上面这句第一个请求被发到192.168.1.3,第二个发到192.168.1.4如此循环,实现载量平衡。
上面的语句可以使外网的访问内网开通8080端口的WEB 服务器,那么内网的WEB服务器如何将数据传出去呢?这个时候要通过SNAT来实现了。
iptables -t nat -A POSTROUTING -j SNAT
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.3-192.168.1.9
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.3:123
iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.3:123-234
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
第一种方法是直接使用SNAT为目标,这种方法适合用在具有固定IP地址的网关器,另一种方法是使用是使用MASQUERADE为目标,适合用于只有动态IP地址的网关器(例如,使用PPPoE协定的ADSL连线)。由于由于MASQUERADE能够应付网络界面忽然离线,然后以另一个地址恢复上线的情况,所以它转换逻辑比较复杂些,需要耗损比较多的CPU运算能力,因此,如果你有固定的IP地址,就应该尽量使用SNAT来代替MASQUERADE。

推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • Linux防火墙配置—允许转发
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
  • 浅谈EditText控件的inputType类型
    其中大多数是用不到的,这里总结一下常用的几种键盘效果1、numberDecimal(可以带小数点的浮点格式)只可以输入0-9数字和小数点,即只浮点数2、number(数字格式 )只 ... [详细]
author-avatar
Eminem被注册了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有