7.1、说明:

CentOS 7 系统默认的防火墙是 Filewalld。不过,现在应该还有很多用户习惯使用 iptables。本文以 CentOS 7 为例,

说明在 CentOS 7 中如何安装并使用 iptables。

防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。

如果匹配上规则,即明确表示是阻止(DROP)还是通过(ACCEPT)数据包就不再向下匹配新的规则。

如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。

防火墙的默认规则是所有规则执行完才执行的。

(1)如果是命令增加条目,那规则是临时生效的,重启iptables服务后就消失了。

(2)如果要永久生效,要把规则写进配置文件。写配置文件的办法有两种:

一种是直接编辑后 service iptables restart,一种是 service iptables save后service iptables restart。

(3)iptables服务每次启动的时候才会去读一次规则。如果直接编辑了配置文件,然后用 service iptables save,那么内存里的配置规则是初始的,会覆盖你直接对配置

文件的编辑。因此,最后的结论是,如果是临时规则,用上面的第(1)种办法,但是不要save;如果是永久规则,用上面(2)中的第一种或第二种方法,二选一不可混用。

(4)进站默认:firewalld默认是拒绝的(ping和ssh不拒绝),需要设置以后才能放行。而iptables默认是允许的,需要拒绝的才去限制。

出站默认:firewalld、iptables 不限制。

7.2、iptables 服务命令:

1、安装iptables 服务:

yum install iptables-services

2、iptables 的启动、停止、重启,状态:

systemctl start iptables.service

systemctl stop iptables.service

systemctl restart iptables.service

systemctl status iptables.service

3、iptables 开机自启动服务的开启、关闭,查看状态:

systemctl enable iptables.service

systemctl disable iptables.service

[root@centos-test ~]# systemctl list-unit-files| grep iptables.service

iptables.service enabled

4、卸载 iptables:

yum erase iptables

5、五链:

PREROUTING

FORWARD

INPUT

OUPUT

POSTROUTING

(1)Filter表:
表示iptables的默认表,因此如果你没有自定义表,那么就默认使用filter表,它具有以下三种内建链:
INPUT链
#处理来自外部的数据。
OUTPUT链
#处理向外发送的数据。
FORWARD链
#将数据转发到本机的其他网卡设备上。
(2)NAT表有三种内建链:
PREROUTING链
#处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
POSTROUTING链
#处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
OUTPUT链
#处理本机产生的数据包。

7.3、防火墙之filter表操作:

(0)备份原有的iptables文件,方便进行恢复:

[root@centos-test ~]# cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.bak

(1)查看本机关于IPTABLES的设置情况

[root@centos-test ~]# cat /etc/sysconfig/iptables

# sample configuration for iptables service

# you can edit this manually or use system-config-firewall

# please do not ask us to add additional ports/services to this default configuration

*filter

:INPUT ACCEPT [0:0]

#该规则表示INPUT表默认策略是ACCEPT。

:FORWARD ACCEPT [0:0]

#该规则表示FORWARD表默认策略是ACCEPT。

:OUTPUT ACCEPT [0:0]

#该规则表示OUTPUT表默认策略是ACCEPT。

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

#该规则表示允许进入的数据包只能是刚刚我发出去的数据包的回应,ESTABLISHED:已建立的链接状态。RELATED:该数据包与本机发出的数据包有关。

-A INPUT -p icmp -j ACCEPT

#该规则指的是icmp协议的包都接受通过(ping命名发出的就是icmp的包)。

-A INPUT -i lo -j ACCEPT

#-i参数是指定接口,这里的接口是lo ,lo就是Loopback(本地环回接口),意思就允许本地环回接口在INPUT表的所有数据通信。

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

#该规则指的是新连接ssh默认端口22的允许进入。

-A INPUT -j REJECT --reject-with icmp-host-prohibited

#该规则指的是在INPUT表中拒绝所有其他不符合上述任何一条规则的数据包,并且发送一条host prohibited的消息给被拒绝的主机。

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

#该规则指的是在FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。

COMMIT

#iptables可以使用扩展模块来进行数据包的匹配,语法就是 -m module_name, 所以 -m tcp 的意思是使用 tcp 扩展模块的功能 (tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)
#其实在命令中只用 -p tcp 的话, iptables也会默认的使用 -m tcp 来调用 tcp 模块提供的功能(写在/etc/sysconfig/iptables 文件中的规则必须使用 –m tcp,否则报错)。
#在使用 –m 其它模块时,命令行和配置文件都要写。

#-m state --state <状态>  有数种状态,状态有:
#NVALID:无效的封包,例如数据破损的封包状态,通常这些包被DROP;
#STABLISHED:已经联机成功的联机状态;
#NEW:想要新建立联机的封包状态,允许已建立的连接接收数据,iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
#RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关, 可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定,因为设定了他之后,
#要未来由本机发送出去的封包,即使我们没有设定封包的 INPUT 规则,该有关的封包还是可以进入我们主机,相反也可,可以简化相当多的设定规则。

[root@centos-test ~]# 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

#可以看出我在安装linux时,选择了有防火墙,允许所有的进站和出站规则,并且有一些默认的规则。

#查看管理命令 “-L”的附加子命令:

#-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。

#-v:显示详细信息

#-vvv :越多越详细

#-x:在计数器上显示精确值,不做单位换算

iptables -L –n –line-number

#—line-number 参数表示在规则前显示行号。

pkts

#被本机报文所匹配的个数

bytes

#报文所有大小记起来之和

target

#处理机制

prot

#放行哪种协议

opt

#额外的选项,-- 表示没有

source

#源地址

destination

#目标地址

target处理机制规则如下:

DROP

#丢弃

REJECT

#拒绝

ACCEPT

#接受

RETURN

#返回主链继续匹配

REDIRECT

#端口重定向

MASQUERADE

#地址伪装

DNAT

#目标地址转换

SNAT

#源地址转换

MARK

#打标签

#如果你在安装linux时没有选择启动防火墙,如下,什么规则都没有

[root@tp ~]# 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

(2)清除原有规则.

如果你想配置属于自己的防火墙,那就清除现在filter的所有规则.

[root@tp ~]# iptables –F      清除预设表filter中的所有规则链的规则

警告:这只适合在没有配置防火墙的环境中,如果已经配置过默认规则为deny的环境,此步骤将使系统的所有网络访问中断,

如果想在配置了iptables默认规则为DROP的环境中清空的话,必须首先执行

1)/sbin/iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
然后执行
2)/sbin/iptables -F
通过iptables -L 看到如下信息
Chain INPUT (policy DROP 0 packets, 0 bytes)  (注意 是DROP)
因为默认INPUT链规则如果是DROP的,此时执行/sbin/iptables -F 你的ssh远程连接立马断开所有的连接。此时只能去现场接屏幕或ILO了。
[root@tp ~]# iptables –X      清除预设表filter中使用者自定链中的规则
[root@tp ~]# iptables –Z      清空计数器

我们在来看一下

[root@tp ~]# 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

什么都没有了吧,和我们在安装linux时没有启动防火墙是一样的.(提前说一句,这些配置就像用命令配置IP一样,重起就会失去作用),怎么保存.

[root@tp ~]# service iptables save

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

[root@tp ~]# service iptables restart

现在IPTABLES配置表里什么配置都没有了,那我们开始我们的配置吧

(3)设定预设规则

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#提前开放22端口,如果你是远程SSH登陆不使用该命令,当你输入下面第一条命令回车时ssh登录就应该掉了,因为你没有设置任何规则,断开后只能通过服务器本机进行操作了。

[root@tp ~]# iptables -P INPUT DROP

[root@tp ~]# iptables -P OUTPUT ACCEPT

[root@tp ~]# iptables -P FORWARD DROP
上面的意思是,当超出了IPTABLES里filter表里的两个链规则(INPUT,FORWARD)时,不在这两个规则里的数据包怎么处理呢,那就是DROP(放弃).应该说这样配置是很安全的.我们要控制流入数据包

而对于OUTPUT链,也就是流出的包我们不用做太多限制,而是采取ACCEPT,也就是说,不在着个规则里的包怎么办呢,那就是通过.

可以看出INPUT,FORWARD两个链采用的是不允许什么包通过,而OUTPUT链采用的是允许什么包通过.

这样设置还是挺合理的,当然你也可以三个链都DROP,但这样做我认为是没有必要的,而且要写的规则就会增加.但如果你只想要有限的几个规则是,如只做WEB服务器.还是推荐三个链都是DROP.

(4)添加规则.

iptables命令书写格式及参数

Iptables [-t/table] COMMAND chain CRETIRIA -j ACTION

-i:入站接口,只能用-i指定进来的网络接口。

-o:出站接口,只能用-o指定出去的网络接口

为了能采用远程SSH登陆,我们要开启22端口.

[root@tp ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT (如果是OUTPUT DROP)

(注:这个规则,如果你把OUTPUT 设置成DROP的就要写上这一条,好多人都是忘了写这一部规则导致,始终无法SSH.在远程一下,是不是好了.其他的端口也一样,

如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链,其他同理.)

允许用户与服务器建立连接(不常用)

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

#该规则表示允许进入的数据包只能是刚刚我发出去的数据包的回应
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#该规则表示发出去的数据包只能是刚刚进入数据包的回应,如下方法也可连接ssh。

[root@centos-test ~]# iptables -nL
Chain INPUT (policy DROP)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy DROP)
target     prot opt source               destination       
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED

如果做了WEB服务器,开启80端口.

[root@tp ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT

[root@tp ~]# iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT (如果是OUTPUT DROP)
如果做了邮件服务器,开启25,110端口.

[root@tp ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@tp ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
如果做了FTP服务器,开启21端口

[root@tp ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

[root@tp ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT

如果做了DNS服务器,开启53端口

[root@tp ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT

允许icmp包通过,也就是允许ping

[root@tp ~]# iptables -A INPUT -p icmp -j ACCEPT

[root@tp ~]# iptables -A OUTPUT -p icmp -j ACCEPT (如果是OUTPUT DROP)

允许loopback!(不然会导致DNS无法正常关闭等问题,同时也允许本地ping)

IPTABLES -A INPUT -i lo -p all -j ACCEPT
IPTABLES -A OUTPUT -o lo -p all -j ACCEPT (如果是OUTPUT DROP)

减少不安全的端口连接

iptables -A OUTPUT -p tcp --sport 27444 -j DROP
iptables -A OUTPUT -p tcp --sport 27665 -j DROP
iptables -A OUTPUT -p tcp --sport 31337 -j DROP

有些些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,

阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会,还有其他端口也一样,

像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止,我在这写的也不全,有兴趣的朋友应该去查一下相关资料.

只允许192.168.0.3的机器进行SSH连接

[root@tp ~]# iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT

[root@tp ~]# iptables -A OUTPUT -d 192.168.0.3 -p tcp --sport 22 -j ACCEPT (如果是OUTPUT DROP)

如果要允许,或限制一段IP地址可用 192.168.0.0/24 表示192.168.0.1-255端的所有IP,24表示子网掩码数,但要记得把 /etc/sysconfig/iptables 里的这一行删了.

!192.168.0.3 表示除了 192.168.0.3 的ip地址。

封IP段即从123.45.6.1到123.45.6.254,说明:注意一定要把拒绝的放在前面不然就不起作用了!
iptables -I INPUT -s 123.45.6.0/24 -j DROP

屏蔽某IP访问1-1024范围的端口(如果是多个不连续的端口用逗号’,’进行分割)
iptables -I INPUT -s 123.45.6.7 -p tcp --dport 1:1024 -j DROP

保存操作

[root@tp ~]# service iptables save

[root@tp ~]# service iptables restart

7、linux防火墙的使用(iptables)的更多相关文章

  1. LINUX防火墙firewall、iptables

    (1) 重启后永久性生效: 开启: systemctl enable iptables.service'.ln -s '/usr/lib/systemd/system/iptables.service ...

  2. Linux防火墙firewall和iptables的使用

    防火墙是整个数据包进入主机前的第一道关卡. Linux中有两种防火墙软件,ConterOS 7.0以上使用的是 firewall,ConterOS 7.0以下使用的是 iptables,本文将分别介绍 ...

  3. Linux防火墙简介及iptables的基本使用

    一.防火墙基础知识 iptables/netfilter:网络防火墙,连接追踪(状态检测) netfilter:工作内核中,让规则能够生效的网络框架(framework) iptables:防火墙规则 ...

  4. Linux 防火墙:Netfilter iptables

    一.Netfilter 简介 (1) Netfilter 是 Linux 内置的一种防火墙机制,我们一般也称之为数据包过滤机制,而 iptables 只是操作 netfilter 的一个命令行工具(2 ...

  5. Linux 防火墙 开放 端口 iptables

    查看状态:iptables -L -n 方法1.使用iptables开放如下端口/sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT保存/etc/ ...

  6. linux 防火墙 iptables 目录

    linux iptables 防火墙简介 Linux 防火墙:Netfilter iptables 自动化部署iptables防火墙脚本

  7. linux 防火墙基本使用

    写在最前面 由于工作后,使用的Linux就是centos7 所以,本文记录是是centos7的防火墙使用. 从 centos7 开始,系统使用 firewall 进行防火墙的默认管理工具. 基本使用 ...

  8. Linux防火墙配置(iptables, firewalld)

    netfilter和底层实现 iptables firealld Linux中的防火墙 RHEL中有几种防火墙共存: iptables firewalld ip6tables ebtables 这些软 ...

  9. Linux 防火墙开放特定端口 (iptables)

    iptables是linux下的防火墙,同时也是服务名称.   service  iptables  status        查看防火墙状态 service  iptables  start   ...

随机推荐

  1. golang:Channel协程间通信

    channel是Go语言中的一个核心数据类型,channel是一个数据类型,主要用来解决协程的同步问题以及协程之间数据共享(数据传递)的问题.在并发核心单元通过它就可以发送或者接收数据进行通讯,这在一 ...

  2. 列出系统上的存储库,状态是enabled [root@blog ~]# dnf repolist

    DNF 和 YUM 均是 rpm 软件包管理工具,但是 DFN 替代 YUM 的说法由来已久,因为 YUM 包管理工具有一些问题长期得不到解决. 这些问题包括性能低下.内存占用高以及依赖包解决方案不佳 ...

  3. [刷题] 112 Path Sum

    要求 给出一个二叉树及数字sum,判断是否存在一条从根到叶子的路径,路径上的所有节点和为sum 实现 转化为寻找左右子树上和为 sum-root 的路径,到达叶子节点时递归终止 注意只有一个孩子时,根 ...

  4. 使用UltraISO制作ubuntu安装u盘启动盘图文教程

    使用UltraISO制作ubuntu安装u盘启动盘图文教程 胖先森关注 0.9572017.09.07 11:06:15字数 770阅读 27,901   制作U盘启动1.gif 1.首先打开Ultr ...

  5. shell应用之监测电脑内存、负载和磁盘的使用情况

    1 #!/bin/bash 2 for i in $(cat ip.txt);do 3 #内存 4 total_memo=$(ssh $i "free -m" |grep Mem ...

  6. error – Public key for *.rpm is not installed (--nogpgcheck)

    docker容器删除的东西比较多,有很多东西都没有,配置上源后发现有也问题 第一是源的选择不对应系统版本,第二是找不到gpgcheck文件 如果一时半会找不到gpgchenck file,使用 --n ...

  7. 北汽极狐ARCFOX与华为合作

    北汽极狐ARCFOX与华为合作 全球首款激光雷达量产车 2021年,是激光雷达"上车"的元年. 曾经价格高不可攀,只能用于Robotaxi.无人车测试的激光雷达,终于彻底具备商业化 ...

  8. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  9. H.265 HD 和H.265 4K Video Encoder IP Core

    H.265 HD 和H.265 4K Video Encoder IP Core H.265 HD Video Encoder IP Core(H.265 HD Video/Audio Encoder ...

  10. CUDA刷新器:CUDA编程模型

    CUDA刷新器:CUDA编程模型 CUDA Refresher: The CUDA Programming Model CUDA,CUDA刷新器,并行编程 这是CUDA更新系列的第四篇文章,它的目标是 ...