firewalld和netfilter、netfilter5表5链介绍、iptables语法、iptables filter表案例、 iptables nat表应用

一、firewalld和netfilter

Selinux是Redhat/CentOS系统特有的安全机制。不过因为这个东西限制太多,配置也特别繁琐所以几乎没有人去真正应用它。所以装完系统,我们一般都要把selinux关闭,以免引起不必要的麻烦。关闭selinux的方法为,使 “SELINUX=disabled”, 默认为 enforcing。
这里写图片描述
保存该配置文件后,重启机器方可生效,临时关闭selinux的命令为:setenforce 0

获得当前selinux的状态:getenforce

默认会输出 “enforcing” , 当使用 setenforce 0 这个命令后,再 getenforce 会输出 “permissive”。

[root@han01 ~]# systemctl disable firewalld^C
[root@han01 ~]# systemctl stop firewalld^C
[root@han01 ~]# yum install -y iptables-services

systemctl disable firewalld禁止firewalld服务开机启动

systemctl stop firewalld关闭firewalld服务

yum install -y iptables-services 安装iptables-services,这样就可以使用之前版本的iptables了。

[root@han01 ~]# systemctl enable iptables         #让它开机启动

Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.

[root@han01 ~]# systemctl start iptables             #启动iptables服务

centos默认设置有iptables规则,这个规则很安全,但没什么用,先清楚规则,然后把清除后的规则保存一下。

iptables –nvL,-nvL选项表示查看规则,-F选项表示清除当前规则,但清除知识临时的,重启系统或者重启iptables服务后还会加载已经保存的规则,所以需要使用service iptables save保存一下规则。

[root@han01 ~]# systemctl start iptables
[root@han01 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   31  2072 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.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
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 17 packets, 1560 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@han01 ~]# iptables -F;service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  确定  ]
[root@han01 ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Wed Jun 13 04:13:22 2018
*filter
:INPUT ACCEPT [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:156]
COMMIT
# Completed on Wed Jun 13 04:13:22 2018


二、netfilter5表5链介绍

Netfilter/iptables 架构
这里写图片描述
Netfilter是表的容器,表是链的容器,而链又是规则的容器,主要是2个表5个链若干规则组成。

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

链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据 该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

1)filter表(主要用于过滤包)三个链:

处理入站信息包的规则被添加到INPUT链中

处理出站信息包的规则被添加到OUTPUT链中

处理正在转发信息包的规则被添加到FORWARD链中
这里写图片描述
2)Nat表(主要用于网络地址转换)三个链:

SNAT的信息包被添加到POSTROUTIN链

DNAT的信息包被添加到PREROUTING链

直接从本地出站的信息包被添加到OUTPUT链
这里写图片描述
3).Mangle表——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块:iptable_mangle(别看这个表这么麻烦,咱们设置策略时几乎都不会用到它)

4).Raw表——两个链:OUTPUT、PREROUTING
作用:决定数据包是否被状态跟踪机制处理

数据包流向与netfilter的5个链

PREROUTING:数据包进入路由表之前

INPUT:通过路由表后目的地为本机

FORWARD:通过路由表后,目的地不为本机

OUTPUT:由本机产生,向外发出

POSTROUTING:发送到网卡接口之前

三、iptables语法

iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

iptables规则配置文件:/etc/sysconfig/iptables

语法: iptables [options] [参数]
Options:
-n:不针对IP反解析主机名
-v:显示更详细的信息
-t:指定表(iptables命令默认作用于filter表)
-L:显示信息
-F:清空所有规则
-A/D:=add/delete,添加/删除一条规则
-I:插入一条规则
-p:指定协议,可以是tcp,udp或icmp
–sport:跟-p一起使用,指定源端口
–dport:跟-p一起使用,指定目标端口
-s:指定源IP(可以是一个IP段)
-d:指定目的IP(可以是一个IP段)
-j:后面跟动作(ACCEPT表示允许包;DROP表示丢掉包;REJECT表示拒绝包)
-i:指定网卡
-Z:把包以及流量计数器清零
-P:=pre,预设策略

查看规则以及清除规则
-t 后面跟表名,-nvL 即查看该表的规则,其中-n表示不针对IP反解析主机名;-L表示列出的意思;而-v表示列出的信息更加详细。如果不加-t ,则打印filter表的相关信息:

[root@han01 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 152 packets, 10363 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 81 packets, 8544 bytes)
 pkts bytes target     prot opt in     out     source               destination    

清除规则

该命令不会清除配置文件内的规则!当更改规则后需要执行命令‘service iptables save’将其保存到配置文件

[root@han01 ~]# iptables -F

增加/删除一条规则:

增加一条规则,当IP~192.168.188.1、协议为tcp、端口为‘1234’的向IP~192.168.188.128、端口为80的机器发送包时执行操作:drop(丢掉包)

[root@han01 ~]# iptables -A INPUT -s 192.168.179.1 -p tcp --sport 1234 -d 192.168.179.131 --dport 80 -j DROP

忘记规则内容
查看规则序号
[root@han01 ~]# iptables -nvL --line-numbers

执行删除命令

 [root@han01 ~]# iptables -D INPUT 1
  • iptables -I INPUT -s 1.1.1.1 -j DROP表示:插入一条规则,把来自1.1.1.1的所有数据包丢掉。

  • iptables -D INPUT -s 1.1.1.1 -j DROP删除刚刚插入的规则。注意要删除一条规则时,必须和插入的规则一致,也就是说,两条iptables命令,除了-I 和-D不一样外,其他地方都一样。

  • iptables -I INPUT -s 2.2.2.2 -p tcp –dport 80 -j DROP

    表示把来自2.2.2.2 并且是tcp协议到本机的80端口的数据包丢掉。–dport/–sport 必须要和-p选项一起使用,否则会出错。

  • iptables -I OUTPUT -p tcp –dport 22 -d 10.0.1.14 -j DROP这条规则表示,把发送到10.0.2.34的22端口的数据包丢掉。

  • iptables -D INPUT 1

    -D 后跟链名,然后是规则num,这个num就是查看iptables规则时第一列的值。

  • iptables -A INPUT -s 192.168.1.0/24 -i ens33 -j ACCEPT

    把来自192.168.1.0/24这个网段的并且作用在eth0上的包放行。

  • iptables -P INPUT DROP-P

后面跟链名,策略内容或者为DROP或者为ACCEPT,默认是ACCEPT

如果正在连接远程服务器,不要随便敲这个命令,因为一旦回车就会断掉。

四、iptables filter表案例

需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对192.168.137.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。这个需求不算复杂,但是因为有多条规则,所以最好写成脚本的形式。脚本内容如下:

!/bin/bash

ipt=”/usr/sbin/iptables”

$ipt -F

$ipt -P INPUT DROP

$ipt -P OUTPUT ACCEPT

$ipt -P FORWARD ACCEPT

$ipt -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

$ipt -A INPUT -s 192.168.179.0/24 -p tcp –dport 22 -j ACCEPT

$ipt -A INPUT -p tcp –dport 80 -j ACCEPT

$ipt -A INPUT -p tcp –dport 21 -j ACCEPT
这里写图片描述
完成脚本的编写后,直接运行 sh /bin/usr/local/sbin/iptables.sh 即可。如果想开机启动时初始化防火墙规则,则需要在 /etc/rc.d/rc.local 中添加一行 “sh /bin /usr/local/sbin/iptables.sh”

关于icmp的包有一个比较常见的应用:

iptables -I INPUT -p icmp –icmp-type 8 -j DROP

–icmp-type 这个选项是要跟-p icmp 一起使用的,后面指定类型编号。这个8指的是能在本机ping通其他机器,而其他机器不能ping通本机。


五、iptables nat表应用

A机器两块网卡ens33(192.168.179.1)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。

2.1让B机器连接外网

1)两台机器先进行网卡配置
这里写图片描述
这里写图片描述
虚拟机greg02做同样的设置。

启动虚拟机

ifconfig ens37 192.168.100.1/24

greg02:ifdown ens33

ifconfig ens37 192.168.100.100/24

gregory和greg02能相互ping通。
这里写图片描述
这里写图片描述
而对这两个ip地址Windows是ping不通的:
这里写图片描述
greg02也ping不通gregory的ens33,更不能上网。
这里写图片描述
2)Linux内核转发设置ip_forward参数

出于安全考虑,Linux系统默认是禁止数据包转发的。

所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。

配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能

cat /proc/sys/net/ipv4/ip_forward,该文件内容为0,表示禁止数据包转发,1表示允许。
这里写图片描述
gregory上执行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

greg02上设置网关为route add default gw 192.168.100.1
这里写图片描述
设置DNS:vi /etc/resolv.conf
这里写图片描述
ping通外网
这里写图片描述
需求2:C机器只能和gregory通信,让C机器可以直接连通greg02机器的22端口。端口映射。

gregory上打开路由转发echo “1”>/ proc/sys/net/ipv4/ip_forward

把nat之前的设置去掉

这里写图片描述
执行iptables -t nat -A PREROUTING -d 192.168.179.130 -p tcp –dport 1122 -j DNAT –to 192.168.100.100:22

gregory上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT –to 192.168.179.130

greg02上设置网关为192.168.100.1
这里写图片描述
这里写图片描述
接受并保存,证明连接上了
这里写图片描述

扩展:

扩展(selinux了解即可)
selinux教程 http://os.51cto.com/art/201209/355490.htm
selinux pdf电子书 http://pan.baidu.com/s/1jGGdExK
iptables应用在一个网段 http://www.aminglinux.com/bbs/thread-177-1-1.html
sant,dnat,masquerade http://www.aminglinux.com/bbs/thread-7255-1-1.html
iptables限制syn速率 http://www.aminglinux.com/bbs/thread-985-1-1.html http://jamyy.us.to/blog/2006/03/206.html

猜你喜欢

转载自blog.csdn.net/iamfishhh/article/details/80670845
今日推荐