1、iptables的基础概念

  • 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
  • 链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

内置链有:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。

  • 表(tables)提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

每个表的对应链如下:

filter:INPUT、FORWARD、OUTPUT

nat:PREROUTING,INPUT、OUTPUT、POSTROUTING

mangle:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

raw:PREOUTING、

2、iptables传输数据包的过程

a、当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。

b、如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。

c、如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

简单的报文流向:

流入本机:PREROUTING–>INPUT

由本机流出:OUTPUT–>POSTROUTING

转发:PREROUTING–>FORWARD–>POSTROUTING

3.命令

查看

iptables -nL (-t filter/nat/.....)

默认是filter表,ACCEPT模式

清除

iptables -F

但是重启火墙的时候,策略又会出现,是因为策略在/etc/sysconfig/iptables文件下保存着,要想彻底清除,执行下面这条命令:
service iptables save

修改默认值(ACCEPT):

iptables -P INPUT REJECT

但并不建议这样做。
可以这样:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT

火墙的规则都是从上向下看的,匹配了前面的一条规则后就不再往后看了。

规则:
-A 添加(默认在最后一条添加)

##允许loopback!(不然会导致DNS无法正常关闭等问题)
iptables -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
iptables -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)
下面写OUTPUT链,OUTPUT链默认规则是ACCEPT,所以我们就写需要DROP(放弃)的链.

减少不安全的端口连接:

 iptables -A OUTPUT -p tcp --sport 31337 -j DROPiptables -A OUTPUT -p tcp --dport 31337 -j DROP

有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite
端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会
还有其他端口也一样,像:31335、27444、27665、20034NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.

FORWARD链

默认规则是DROP,所以我们就写需要ACCETP(通过)的链,对正在转发链的监控.开启转发功能,(在做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包通过,就是因为我在这里有限制.

-I 插入

iptables -I  INPUT 2 -s 172.25.254.38 -p tcp --dport 22 -j ACCEPT
iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT
上面两行允许的是sshd和httpd服务

-D删除

iptables -D INPUT 3
iptables -D INPUT -p tcp --dport 80 -j ACCEPT

-R修改

iptables -R INPUT 3 -s 172.25.254.133 -p tcp --dport 80 -j REJECT

链表
iptables -N WESTOS 添加
iptables -E WESTOS RHEL 修改
iptables -X RHEL 删除

state模块的连接状态

首先,假设173.16.0.200机器上启动SSH服务,并且正常服务在TCP 22号端口的位置,接着在11.0.0.200上启动SSH客户端,假设客户端使用的是TCP 12345号端口,然后,11.0.0.200使用TCP 12345向173.16.0.200的TCP 22号端口发出服务请求,这个请求包一定可以成功送到173.16.0.200这台机上,因为11.0.0.200的OUTPUT没有限制,只是此时当173.16.0.200收到这个请求包时就会以TCP 22回应11.0.0.200在TCP 12345上的请求,那么,11.0.0.200的INPUT策略允许这个包通过TCP 12345进来吗?如果INPUT没有开放这个端口那么这个请求就无法在11.0.0.200上响应。ping的情况也是如此。如下图所示。

  也许有人会认为直接在INPUT中把TCP 12345开启不就可以了!但实际情况是:客户端的应用程序所使用的端口多为动态端口,所以不可能事先预知客户端的应用程序会使用哪一个端口,也就不可能预先把客户端的端口开好等客户端使用。

  在以前的Ipchains防火墙时代,要解决这种问题的做法是将1024以上的端口都打开,只要确定客户端应用程序使用的端口大于1024就行。这种解决办法当然也适用现在的netfilter/iptables防火墙,但这样做就无法确保安全。在netfilter/iptables时代,可以通过启用state(状态)模决来解决这样的问题,它主要由xt_state.ko模块提供。

  需要注意的是在标准和tcp/ip规范中,连接状态分为12种,详情可以参考RFC文档(http://www.ietf.org/rfc/rfc793.txt)。而iptables中的连接状态只有4种,分别是ESTABLISHED、NEW、RELATED、INVALID。不能将TCP/IP规范中的连接状态和这个混在一起,因为这个两个完全不同的定义。例如,在TCP/IP规范描述下,UDP和ICMP封包是没有连接状态的,但在state模块的描述下,任何包都是有连接状态的。

  • INVALID意味着这个包没有已知的流或连接与之关联,也可能是它包含的数据或包头有问题。
  • ESTABLISHED意思是包是完全有效的,而且属于一个已建立的连接,这个连接的两端都已经有数据发送。NEW表示包将要或已经开始建立一个新的连接,或者是这个包和一个还没有在两端都有数据发送的连接有关。
  • RELATED说明包正在建立一个新的连接,这个连接是和一个已建立的连接相关的。比如,FTP data transfer,ICMP
    error 和一个TCP或UDP连接相关。
  • 注意NEW状态并不在试图建立新连接的TCP包里寻找SYN标记,因此它不应该不加修改地用在只有一个防火墙或在不同的防火墙之间没有启用负载平衡的地方。

     
    iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -m state –state NEW -i lo -j ACCEPT
    iptables -A INPUT -m state –state NEW -p tcp –dport 22 -j ACCEPT
    iptables -A INPUT -m state –state NEW -p tcp –dport 80 -j ACCEPT

NAT表

添加规则

添加规则,我们只添加DROP链.因为默认链全是ACCEPT.
防止外网用内网IP欺骗

iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

如果我们想,比如阻止MSN,QQ,BT等的话,需要找到它们所用的端口或者IP,(个人认为没有太大必要)
例:
禁止与211.101.46.253的所有连接

iptables -t nat -A PREROUTING  -d 211.101.46.253 -j DROP

禁用FTP(21)端口

iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP

这样写范围太大了,我们可以更精确的定义.

iptables -t nat -A PREROUTING  -p tcp --dport 21 -d 211.101.46.253 -j DROP

这样只禁用211.101.46.253地址的FTP连接,其他连接还可以.如web(80端口)连接.
按照我写的,你只要找到QQ,MSN等其他软件的IP地址,和端口,以及基于什么协议,只要照着写就行了.

最后:
drop非法连接

iptables -A INPUT   -m state --state INVALID -j DROP
iptables -A OUTPUT  -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

允许所有已经建立的和相关的连接

iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

service iptables save

这样就可以写到/etc/sysconfig/iptables文件里了.写入后记得把防火墙重起一下,才能起作用.

service iptables restart

内核路由

client:172.25.38.200
server: eth0 172.25.254.138
   eth1 172.25.38.100
SNAT:
server
iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to-source 172.25.254.138
查看允许通过的模式:
[root@server network-scripts]# sysctl -a | grep forward
[root@server network-scripts]# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1
##开启net转换

client
ping 172.25.254.138 可以通的

ssh root@172.25.254.38 和 172.25.254.138是同一网段的都可
连上去之后,在38处看到的是172.25.254.138这个主机连的38

DNAT
server:
iptables -t nat -A PREROUTING -i eth0 -j DNAT –to-dest 172.25.0.200

用172.25.254.38 ssh172.25.254.138,连接上后ifconfig看到的是200的IP

火墙(二)【iptables】相关推荐

  1. RHCE——火墙之iptables和firewalld部署

    文章目录 1.火墙介绍 1.1 netfilter 1.2 iptables 1.3 iptables|firewalld(火墙管理的两种工具) 2.火墙管理工具切换 2.1 firewalld--- ...

  2. Linux中的火墙(1)(iptables)

    文章目录 1.火墙介绍 2.火墙管理工具切换 3.iptables 的使用 4.火墙默认策略 5.iptables命令 1.火墙介绍 netfilter:真正的防火墙,位于内核空间. iptables ...

  3. 类火墙的iptables

    #####iptables####### iptables是一个工作于用户空间的防火墙应用软件 三表五链 表:filter.mangel.nat filter:到达本机,不经过内核. nat:通过本机 ...

  4. iptables防火墙火墙服务

    一.iptables介绍 二.安装服务并开启服务 yum install iptables-services.x86_64 systemctl stop firewalld systemctl dis ...

  5. iptables 基本命令使用举例

    原文地址:http://www.linuxsky.org/doc/admin/200803/262.html 一.链的基本操作 1.清除所有的规则. 1)清除预设表filter中所有规则链中的规则. ...

  6. 摘自ubantuer-Linux防火墙iptables学习笔记(三)iptables命令详解和举例

    网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能有所帮助. 网管员的安全意识要比空喊Linux安全重要得多. iptables -F iptables -X iptables ...

  7. Linux防火墙iptables学习

    http://blog.chinaunix.net/uid-9950859-id-98277.html 要在网上传输的数据会被分成许多小的数据包,我们一旦接通了网络,会有很多数据包进入,离开,或者经过 ...

  8. 细说firewalld和iptables

    在RHEL7里有几种防火墙共存:firewalld.iptables.ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等. fir ...

  9. Linux iptables 防火墙相关命令介绍及使用

    一.  Linux 防火墙的启动和关闭 1.1 启动命令 [root@singledb ~]# service iptables stop Flushing firewall rules:       ...

  10. Linux命令:iptables网络防火墙

    Linux命令:iptables 网络防火墙 一.iptables的发展: iptables的前身叫ipfirewall (内核1.x时代),这是一个作者从freeBSD上移植过来的,能够工作在内核当 ...

最新文章

  1. python控制电机_利用树莓派控制步进电机——Python语言
  2. java queue size_Java中的PriorityQueue size() 方法 - Break易站
  3. ICCV 2021 Oral | NerfingMVS:引导优化神经辐射场实现室内多视角三维重建
  4. 条件随机场的矩阵表示
  5. 深度学习论文资源(截至2016年)
  6. Appnium安装-Mac平台
  7. java多线程的api_java多线程之:线程对象一些api
  8. php调取 zabbix实时数据_Zabbix监控系统部署详细步骤
  9. MySQL基础操作命令
  10. sql常用语句整理(包括增删改查),适合小白使用
  11. 最厉害的象棋软件_太牛了!象棋史上最厉害人机高手竟弃车跟软件对杀,就问你敢不敢...
  12. 定积分证明题例题_数列极限求法十五种(25个例题+推文送给微积分和数学分析同学)...
  13. 802.11协议总结
  14. 两个文件行合并linux,linux 两个文件合并
  15. 用php计算身体质量指数,BMI计算器,身体质量指数BMI在线计算
  16. 【JavaScript】 数组 重要方法详解篇(一)
  17. B2B2C多租户商城系统解决方案:打通线上线下服务体验,提升企业品牌渗透力
  18. 416. 分割等和子集
  19. java图片式验证码的实现(引入hutool工具类和自己编写工具类两种方法)
  20. Java前端(CSS)关于margin和padding的区别

热门文章

  1. 哈工大威海计算机导师,徐晓飞(计算机科学与技术学院)老师 - 哈尔滨工业大学(威海) - 院校大全...
  2. keras 的InstanceNormalization的使用
  3. Mysql RR隔离级别下,当前事务的更新前后ReadView查询结果不一致
  4. Flutter 常用布局之Container
  5. Python常用容器 list、tuple、dict、set
  6. C# INI文件的读取
  7. Python OpenCV -- Sobel 算子(九)
  8. 1.6 前端设计——HTML5+Javascript+CSS基础
  9. Ubuntu 16.04/18.04 安装和使用QQ和微信最简洁的方式(2019.10.28更新)
  10. android createnewfile 权限,使用createNewFile无法创建文件。