linux笔记防火墙之iptables入门

一.iptables简介

防火墙,其实说白了讲,就是用于实现Linux下访问控制功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测,它的功能十分强大,使用非常灵活,毫不逊色于一些企业级防火墙。

二.Netfilter、table、chains、policy之间的关系。

Netfilter是table的容器,而table(表)是chains(链)的容器,policy(规则)属于chain(链)。
为了方便读者理解,举个例子:如果把Netfilter比作一栋楼,那么他们的关系如下:

三.iptables的工作原理

匹配规则原理图

防火墙规则的执顺序默认是从前到后,遇到匹配规则(不管是deny或者accept)后就不再往下检查,如果遇到不到匹配的规则会继续向下检查直到遇到匹配规则为止,若检查完所有规则还没有匹配就会使用默认规则进行匹配。

iptable表和链的对应关系

防火墙默认使用的是Fileter表,负责过滤本机流入、流出的数据包
INPUT:负责过滤所有目标地址是本机地址的数据包
FORWARD:负责转发流经本机但不进入本机的数据包,起转发的作用
OUTPUT:处理所有从本机发出去的数据包。
PROWARD:在数据包到达防火墙时,进行路由判断之前执行的规则,改变数据包的目的地址(DNAT)、端口等,通常应用于端口映射,例如把公网ip地址或端口映射为某个内网的ip地址或端口。
POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则,改变数据包的源地址(SNAT)、端口等,通常应用于,局域网共享外网ip上网。例如,把所有的局域网ip都转换成一个公网ip实现上网。

链和表的工作流程图

四.详解COMMAND:

1.链管理命令(这都是立即生效的)

-P :设置默认策略的(设定默认门是关着的还是开着的)
    默认策略一般只有两种
    iptables -P INPUT (DROP|ACCEPT)  默认是关的/默认是开的
    比如:
    iptables -P INPUT DROP 这就把默认规则给拒绝了。并且没有定义哪个动作,所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了。
    -F: FLASH,清空规则链的(注意每个链的管理权限)
    iptables -t nat -F PREROUTING
    iptables -t nat -F 清空nat表的所有链
    -N:NEW 支持用户新建一个链
        iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。
    -X: 用于删除用户自定义的空链
        使用方法跟-N相同,但是在删除之前必须要将里面的链给清空了
    -E:用来Rename chain主要是用来给用户自定义的链重命名
        -E oldname newname
     -Z:清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)
        iptables -Z :清空

2.规则管理命令

     -A:追加,在当前链的最后新增一个规则
     -I num : 插入,把当前规则插入为第几条。
        -I 3 :插入为第三条
     -R num:Replays替换/修改第几条规则
        格式:iptables -R 3 …………
     -D num:删除,明确指定删除第几条规则

3.查看管理命令 “-L”

 附加子命令
 -n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
 -v:显示详细信息
 -vv
 -vvv :越多越详细
 -x:在计数器上显示精确值,不做单位换算
 --line-numbers : 显示规则的行号
 -t nat:显示所有的关卡的信息

五.详解匹配标准

1.通用匹配:源地址目标地址的匹配

 -s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
    IP | IP/MASK | 0.0.0.0/0.0.0.0
    而且地址可以取反,加一个“!”表示除了哪个IP之外
 -d:表示匹配目标地址
 -p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
 -i eth0:从这块网卡流入的数据
    流入一般用在INPUT和PREROUTING上
 -o eth0:从这块网卡流出的数据
    流出一般在OUTPUT和POSTROUTING上

2.扩展匹配

2.1隐含扩展:对协议的扩展

-p tcp :TCP协议的扩展。一般有三种扩展
--dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如
--dport 21  或者 --dport 21-23 (此时表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
    对于它,一般要跟两个参数:
    1.检查的标志位
    2.必须为1的标志位
    --tcpflags syn,ack,fin,rst syn   =    --syn
    表示检查这4个位,这4个位中syn必须为1,其他的必须为0。所以这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn
-p udp:UDP协议的扩展
    --dport
    --sport
-p icmp:icmp数据报文的扩展
    --icmp-type:
    echo-request(请求回显),一般用8 来表示
    所以 --icmp-type 8 匹配请求回显数据包
    echo-reply (响应的数据包)一般用0来表示

2.2显式扩展(-m)

 扩展各种模块
  -m multiport:表示启用多端口扩展
  之后我们就可以启用比如 --dports 21,23,80

六.详解-j ACTION

 常用的ACTION:
 DROP:悄悄丢弃
    一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
 REJECT:明示拒绝
 ACCEPT:接受
    custom_chain:转向一个自定义的链
 DNAT
 SNAT
 MASQUERADE:源地址伪装
 REDIRECT:重定向:主要用于实现端口重定向
 MARK:打防火墙标记的
 RETURN:返回
    在自定义链执行完毕后使用返回,来返回原规则链。

七.iptable规则实战

1.查看当前所有的iptables配置

[[email protected] ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target prot opt source destination
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

2.清除防火墙的所有规则

[[email protected] ~]# iptables -F //清除所有规则
[[email protected] ~]# iptables –X //删除用户自定义的规则
[[email protected] ~]# iptables –Z //链的计数器清零

我们检查一下结果
[[email protected] ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

3.禁止某个端口连接主机

例如禁止远程主句用ssh和本机的22端口进行连接

[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j DROP

4.删除规则的方法

方法一:
把规则命令的A换成D就可以把规则删除,例如:

[[email protected] ~]# iptables -D INPUT -p tcp --dport 22 -j DROP

方法二:
查看iptables列表得到想要删除那条命令的规则号,删除规则号的方式进行删除

查看规则号
[[email protected] ~]# iptables -L -n --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

Chain FORWARD (policy ACCEPT)
num target prot opt source destination

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

比如我要删除规则号为1这条规则

[[email protected] ~]# iptables -D INPUT 1
[[email protected] ~]# iptables -L -n --line-number
Chain INPUT (policy ACCEPT)
num target prot opt source destination

Chain FORWARD (policy ACCEPT)
num target prot opt source destination

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

可以看到规则已被删除。

5. 禁止某个网段接入我的eth0网卡,如10.10.10.0/24

[[email protected] ~]# iptables -A INPUT -i eth0 -s 10.10.10.0/24 -j DROP
[[email protected] ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 10.10.10.0/24 0.0.0.0/0

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

注意:参数不加-I默认对所有接口生效

6. 对多个不连续端口进行控制

禁止本机的80、445、3306端口对外提供服务
[[email protected] ~]# iptables -A INPUT -p tcp -m multiport --dport 80,445,3389 -j DROP
[[email protected] ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 10.10.10.0/24 0.0.0.0/0
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,445,3389

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

对多个连续端口进行端口范围的控制

[[email protected] ~]# iptables -A INPUT -p tcp --dport 25:30 -j DROP
[[email protected] ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 10.10.10.0/24 0.0.0.0/0
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 80,445,3389
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:25:30

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

7. 生产环境常用服务iptables规则实战(默认是对filter表进行操作)

1) 清除防火墙的所有规则
[[email protected] ~]#
iptables -F
iptables -Z
iptables –X

2) 允许管理网192.168.10.0/24 ssh登入

[[email protected] ~]#
iptables -A INPUT -p tcp -s 192.168.10.0/24 --dport 22 -j ACCEPT

3) 允许lo接口进行流入流出
[[email protected] ~]# iptables -A INPUT -i lo -j ACCEPT

4) 严格控制默认防火墙拒绝规则
查看防火墙的默认规则全部链默认为ACCEPT
[[email protected] ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

接下来进行严格控制
[[email protected] ~]# iptables -P FORWARD DROP
[[email protected] ~]# iptables -P OUTPUT ACCEPT
[[email protected] ~]# iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT tcp -- 192.168.10.0/24 0.0.0.0/0 tcp dpt:22
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

可以看到NPUT链和FORWARD链的默认规则为拒绝所有,而OUTPUT链默认规则为允许所有。

5) 开启信任的ip段,例如允许办公网ip段 172.16.10.0/24 、 192.168.1.0/24

[[email protected] ~]# iptables -A INPUT -s 172.16.10.0/24 -j ACCEPT
[[email protected] ~]# iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

6) 允许http服务无条件通过
[[email protected] ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

7) 允许icmp协议通过
允许特定ip段可以ping该主机
[[email protected] ~]# iptables -A INPUT -p icmp -s 192.168.10.0/24 -icmp --icmp-type any -j ACCEPT

允许所有的ip可以ping该主机
[[email protected] ~]# iptables -A INPUT -p icmp -icmp --icmp-type any -j ACCEPT

8) 允许关联的状态包通过
[[email protected] ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[[email protected] ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

注意:以上配置的常用的规则,可根据需要修改或增加其他规则。

9) 保证iptables配置文件为永久的配置文件
[[email protected] ~]# iptables-save > /etc/sysconfig/iptables

检查结果
[[email protected] ~]# cat /etc/sysconfig/iptables
Generated by iptables-save v1.4.21 on Sun Apr 22 00:45:14 2018
*filter
:INPUT DROP [23:3864]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [4:620]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.10.0/24 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 172.16.10.0/24 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 192.168.10.0/24 -p icmp -j ACCEPT
-A INPUT -s 192.168.10.0/24 -i cmp -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
#Completed on Sun Apr 22 00:45:14 2018

提示:iptables默认配置文件为/etc/sysconfig/iptables
以后增加或修改防火墙规则可直接在配置文件进行修改或者增加

八.网络共享上网和端口映射

1. DNAT

DNAT全称为Destination Network Address Translation,意思为目的网络地址转换,DNAT是一种能改变数据包的目的ip地址等功能的技术,它可以使多台服务器共享一个IP地址连入internet,并且继续对外提供服务,通过同一个外部IP地址分配不同的端口映射到内部服务器不同的ip地址和端口,从而实现内部服务器对外提供服务的目的。
例如:
[[email protected] ~]#
iptables -t nat -A PREROUTING -d 203.85.14.11 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.136:80

将所有访问目的地址为203.85.14.11并且是80端口的请求,将地址映射为内部192.168.10.136的80端口,从而实现内部服务器对外提供服务的目的

2.SNAT

SNAT全称是 Source Network Address Translation,意思是源网络地址转换,这是一种改变数据包源ip地址的技术,通常是用来给内部多台计算机共享一个或多个internet地址上网的目的。从而实现内部服务器共享上网。

例如:
[[email protected] ~]#
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to-source 203.85.14.11

把源地址为192.168.10.0网段的数据包转换为203.85.14.11出网,从而实现内部服务器的共享上网

3.MASQUERADE

MASQUERADE为动态地址转换,即当外部ip非固定ip时经常使用的选项,例如ADSL拨号上网的情况。对于单个或者多个外部ip地址的情况,也可以实现共享上网的目的。
例如
[[email protected] ~]#
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
把内部网络的源地址为192.168.10.0/24网段的数据包进行伪装,此命令可以实现ADSL线路多台计算机共享上网。

原文地址:http://blog.51cto.com/11495489/2107227

时间: 2024-08-27 09:51:00

linux笔记防火墙之iptables入门的相关文章

Linux防火墙之iptables入门

一.防火墙的概念 什么是防火墙?防火墙是一台或一组设备,用以在网络间实施访问控制策略:事实上一个防火墙能够包含OSI模型中的很多层,并且可能会涉及进行数据包过滤的设备,它可以实施数据包检查和过滤,在更高的层次中对某应用程序实现某一策略,或做更多类似的事情.防火墙的功能主要是隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则定义的行为进行处理的一组功能组件,基本上的实现都是默认情况下关闭所有的访问,只开放允许访问的策略:防火墙分主机防火墙.网络防火墙.硬件防

Linux添加防火墙、iptables的安装和配置(亲测)

iptables基础 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包".规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址.目的地址.传输协议(如TCP.UDP.ICMP)和服务类型(如HTTP.FTP和SMTP)等.当数据包与规 则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept).拒绝(reject)和丢弃(drop)等.配置防火墙的 主要工作就是添加.修改和删除这

CentOS学习笔记--防火墙iptables

Linux 的防火墙:iptables iptables是封包过滤软件,Linux内核2.6以上都是这款软件.本节节选自 鸟哥的 Linux 私房菜 -- 服务器架设篇  第九章.防火墙与 NAT 服务器 封包进入流程:规则顺序的重要性! 假设你的 Linux 主机提供了 WWW 的服务,那么自然就要针对 port 80 来启用通过的封包规则,但是你发现 IP 来源为 192.168.100.100 老是恶意的尝试入侵你的系统,所以你想要将该 IP 拒绝往来,最后,所有的非 WWW 的封包都给他

Linux及Arm-Linux程序开发笔记(零基础入门篇)

Linux及Arm-Linux程序开发笔记(零基础入门篇)  作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer/archive/2011/05/05/2037449.html 目录 一.Arm-Linux程序开发平台简要介绍... 3 1.1程序开发所需系统及开发语言... 3 1.2系统平台搭建方式... 4 二.Linux开发平台搭建... 5 2.1安装虚拟工作站... 5 2.2安装Linux虚拟

Linux防火墙:iptables禁IP与解封IP常用命令

在Linux下,使用ipteables来维护IP规则表.要封停或者是解封IP,其实就是在IP规则表中对入站部分的规则进行添加操作. 要封停一个IP,使用下面这条命令: iptables -I INPUT -s ***.***.***.*** -j DROP 要解封一个IP,使用下面这条命令: iptables -D INPUT -s ***.***.***.*** -j DROP 参数-I是表示Insert(添加),-D表示Delete(删除).后面跟的是规则,INPUT表示入站,***.***

Linux下的配置iptables防火墙增强服务器安全

Linux下的配置iptables防火墙增强服务器安全 实验要求 iptables常见概念 iptables服务器安装及相关配置文件 实战:iptables使用方法 例1:使用iptables防火墙保护公司web服务器 例2:使用iptables搭建路由器,通过SNAT使用内网机器上网 例3:限制某些IP地址访问服务器 例4:使用DNAT功能把内网web服务器端口映射到路由器外网 实验环境 iptables服务端:xuegod-63   IP:192.168.1.63 iptables客户端:x

Linux之防火墙iptables

防火墙可分为主机防火墙和网络防火墙,主机防火墙主要通过在主机之上安装一些防火墙软件来保护系统的网络安全. iptables:(包过滤器)Packets Filter Firewall; Firewall:隔离工具:工作于主机或网络的边缘,对经由的报文根据预先定义的规则(识别条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件: iptables/netfilter:包过滤型防火墙:带状态检测的包过滤型防火墙:连接追踪(connection tracking): 硬件防火墙:

CentOS linux关闭iptables防火墙(Linux中的防火墙叫iptables)

linux服务器下防火墙为iptables组件,在安装一些软件的时候,iptables防火墙会阻止我们一些必要的连接. 查看iptables状态:service iptables status iptables开机自动启动: 开启: chkconfig iptables on 关闭: chkconfig iptables off iptables关闭服务: 开启: service iptables start 关闭: service iptables stop 重启防火墙服务:service i

linux下防火墙iptables原理及使用

iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能. iptables基础 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包".规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址.目的地址.传输