27.Linux系统管理技巧3-网络相关,firewalld,netfilter,iptables

[toc]

Linux系统管理技巧3

扩展(selinux了解即可)

  1. selinux教程 http://os.51cto.com/art/201209/355490.htm

2.selinux pdf电子书 http://pan.baidu.com/s/1jGGdExK

10.11 Linux网络相关

1.ifconfig查看网卡IP

如果系统没有ifconfig命令,可以使用yum install -y net-tools)
Linux上有多个网卡,而只想重启某一个网卡的话,可以使用这个命令:

2.ifdown ens33;ifup ens33对网卡的操作ifdown ens33 && ifup ens33

两个命令可以一起执行

[root@localhost ~]# ifdown ens33 //即停用网卡

[root@localhost ~]# ifup ens33
//重新启动

ifdown ens33 && ifup ens33
两个命令可以一起执行,表示重启网卡

mark

需要注意的是,如果我们远程登录服务器,当使用ifdown ens33这个命令的时候,很有可能后面的命令ifup eth33不会被运行,这样导致我们断网而无法连接服务器,所以请尽量使用 service network restart 这个命令来重启网卡。

3.给一个网卡设定多个IP,设置虚拟网卡; #cp ifcfg-ens33 ifcfg-ens33\:0

  • cp ifcfg-ens33 ifcfg-ens33\:0
    之所以加上反斜杠\,是因为要把:转义,不然在Linux命令下无法识别。然后编辑这个配置文件
    mark

mark

  • vim编辑
    mark
    mark
 ifdown ens33 && ifup ens33 //重启网卡

mark

mark
从上面可以看到,多了一个ens33:0虚拟网卡
并且在windows下是可以ping通的
mark

4.查看网卡连接状态mii-tool ens33

示例命令如下:

  • mii-tool ens33 查看网卡是否连接
    [root@localhost network-scripts]# mii-tool ens33
    ens33: negotiated 1000baseT-FD flow-control, link ok

    只要看到 “link ok” 就说明网卡为连接状态,如果显示 “no link” 说明网卡坏掉了或者没有连接网线。
    另外还有一个命令也可以查看网卡状态:

5.ethtool ens33

mark

6.更改主机名hostname命令

当装完系统后,默认主机名为localhost,使用hostname就可以知道你的linux的主机名:

[root@localhost ~]# hostname
localhost.localdomain

使用hostname修改主机名字

[root@localhost /]# hostname xavi
[root@localhost /]# hostname
xavi

7.不过这样的修改只是保存在内存中,如果重启,主机名还是会编程改动之前的名称,要想彻底修改还需要更改相关的配置文件/etc/hostname,方法如下:

[root@localhost ~]# hostnamectl set-hostname zlinux
[root@localhost ~]# hostname
xavilinux
[root@localhost ~]# bash //打开子shel即bashl就看到已经修改好了,重启也可以 
[root@xavilinux ~]#

8.设置DNS,配置文件/etc/resolv.conf中即可

DNS是用来解析域名用的,平时我们访问网站都是直接输入一个网址,而DNS把这个网址解析到一个IP。

在linux下面设置DNS非常简单,只要把DNS地址写到一个配置文件/etc/resolv.conf中即可。

[root@localhost /]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 119.29.29.29

这个数据是从网卡配置文件中来的
/etc/sysconfig/network-scripts/ifcfg-ens33

[root@localhost /]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost /]# ifdown ens33 && ifup ens33
成功断开设备 'ens33'。
成功激活的连接(D-Bus 激活路径:/org/freedesktop/NetworkManager/ActiveConnection/5)
[root@localhost /]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 119.29.29.29
nameserver 8.8.8.8

mark

但这只是临时的,也可以在vim /etc/resolv,conf
如果需要永久生效,还是要在网卡配置文件中添加。

9.在Linux下还有一个特殊文件/etc/hosts也能解析域名,不过需要我们在里面手动添加IP和域名这些内容,它的作业是临时解析某个域名,非常有用.

该文件内容如下:

[root@localhost /]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  • vim 编辑该文件,增加一行192.168.72.150 www.qq123.com.保存文件后再ping一下www.qq123.com就会连接到192.168.72.150了。只能在本机上生效

mark

mark

10. /etc/hosts 的格式很简单,每一行作为一条记录,分成两部分,第一部分是IP,第二部分是域名。关于hosts文件,有几点需要你注意:

  • [ ] 一个IP后面可以跟多个域名,可以是几十个甚至上百个;
  • [ ] 每行只能有一个IP,也就是说一个域名不能对应多个IP;
  • [ ] 如果有多行中出现相同的域名(前面IP不一样),会按最前面出现的记录来解析。

mark

10.12 Linux防火墙

1. SELinux,临时关闭为setenforce 0;

Selinux是Redhat/CentOS系统特有的安全机制。不过因为这个东西限制太多,配置也特别繁琐所以几乎没有人去真正应用它。所以装完系统,我们一般都要把selinux关闭,以免引起不必要的麻烦。临时关闭selinux的方法为:

[root@localhost ~]# setenforce 0
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost ~]# getenforce
Disabled

得到的结果与我们设想的不同,是因为我们在之前的课程中已经改变了,SELINUX=enforcing改成了SELINUX=disabled.

2.获取当前 SELinux 运行状态 getenforce 可能返回结果有三种:Enforcing、Permissive 和 Disabled。

Disabled 代表 SELinux 被禁用,Permissive 代表仅记录安全警告但不阻止 可疑行为,Enforcing 代表记录警告且阻止可疑行

  • vim /etc/selinux/config 下编辑,把它关闭,利于系统的使用,也不会用太大安全问题
    
    [root@localhost ~]# vim /etc/selinux/config

This file controls the state of SELinux on the system.

SELINUX= can take one of these three values:

enforcing - SELinux security policy is enforced.

permissive - SELinux prints warnings instead of enforcing.

disabled - No SELinux policy is loaded.

SELINUX=disabled //已经被关闭了,默认是enforencing

SELINUXTYPE= can take one of three two values:

targeted - Targeted processes are protected,

minimum - Modification of targeted policy. Only selected processes are protected.

mls - Multi Level Security protection.

SELINUXTYPE=targeted

### 3.netfilter,CentOS7以前版本使用的防火墙工具

iptables是管理防火墙的工具,CentOS7默认防火墙为firewalld。,之前版本使用的netfilter。即使是firewalld,同样也支持之前版本的命令用法,向下兼容。

### 4.netfilter才是防火墙;firewalld和iptables是两种不同的防火墙管理工具,其底层都是iptables命令。

iptables和netfilter的关系:
这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道 netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。

我在网上看到的三者关系图:
![mark](http://p0weeraap.bkt.clouddn.com/xavi2017/180129/61EgC2k7am.png?imageslim)

### 5.关闭firewalld开启netfilter方法
####  systemctstop firewalld;
####  systemctl disable firewalled
####  yum install -y iptables-services
####  systemctl enable iptables
####  systemctl start iptables

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

那么我们先来用下之前的版本,关闭firewalld,开启iptables:

[root@localhost ~]# systemctl disable firewalld //禁止firewalld服务开机启动
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@localhost ~]# systemctl stop firewalld //关闭firewalld服务
[root@localhost ~]# yum install -y iptables-services //安装iptables-services,这样就可以使用之前版本的iptables了.
[root@localhost ~]# systemctl enable iptables //让他开启服务
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
[root@localhost ~]# systemctl start iptables //启动iptables服务

*  完成这些步骤之后,我们就可以使用iptables了。示例如下:

### 6. iptables -nvL选项表示查看规则,示例中我们看到防火墙规则保存在/etc/sysconfig/iptables中,也可以查看一下这个文件。 

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
205 13528 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
83 6783 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 114 packets, 13000 bytes)
pkts bytes target prot opt in out source destination

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

[root@localhost ~]# iptables -F;
[root@localhost ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ]

上例中我们看到防火墙规则保存在/etc/sysconfig/iptables中,也可以查看一下这个文件。 

## 10.13 netfilter5表5链介绍

### 1.netfilter五个表

#### filter:
这个表主要用于过滤包的,是系统预设的表,用的最多。内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。

#### nat:类似家里路由器,设备通过nat来上网
主要用处是网络地址转换,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。该表用的不多,但有时候会用到。

#### mangle:
这个表主要是用于给数据包打标记,然后根据标记去操作哪些包。这个表几乎不怎么用。除非你想成为一个高级网络工程师,否则你就没有必要花费很多心思在它上面。

#### raw:
一般是为了不再让iptables对数据包进行跟踪,提高性能。

##### security:
这个表用于强制访问控制(MAC)网络规则,CentOS6中是没有的

### 2.netfilter的5个链

#### PRERPUTING链:
数据包进去路由之前,作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。 

#### INPUT链:
通过路由后目的地为本机,作用于输入本机的数据包。

#### FORWARD链:
通过路由表后,目的地部位本机。作用于与本机无关的包。

#### OUTPUT链:
由本机产生,向外转发。作用与本机输出的数据包。

#### POSTROUTING链:
发送到网卡接口之前。在包离开防火墙之前改变其源地址。

表链的关系和作用可以理解为三个机器A\B\C之间,A和B有公网实现通讯传输,B和C通过私网进行传输,为了能让A和C之间通信,把B作为网络映射的过程.

### 3. iptables传输数据包的过程

![mark](http://p0weeraap.bkt.clouddn.com/xavi2017/180129/bLBkd3c401.png?imageslim)

- [ ]  当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。 
- [ ]  如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。 
- [ ]  如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

??? security表在centos6中并没有,用于强制访问控制(MAC)的网络规则

 参考文章 http://www.cnblogs.com/metoy/p/4320813.html

##  10.14 iptables语法

iptables是一个非常复杂和功能丰富的工具,所以它的语法也是很有特点的。
### 1. 查看规则和清除规则 iptables -nvL

[root@localhost ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 23 packets, 3004 bytes)
pkts bytes target prot opt in out source destination

Chain INPUT (policy ACCEPT 23 packets, 3004 bytes)
pkts bytes target prot opt in out source destination

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

Chain POSTROUTING (policy ACCEPT 120 packets, 8796 bytes)
pkts bytes target prot opt in out source destination
2 180 RETURN all -- 192.168.122.0/24 224.0.0.0/24
0 0 RETURN all -- 192.168.122.0/24 255.255.255.255
0 0 MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
0 0 MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
0 0 MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24

###  2. -t选项后面跟表名,-nvL表示查看该表的规则,其中-n表示不针对IP反解析主机名,-L表示列出,-v表示列出的信息更加详细。如果不加-t选项则打印filter表的相关信息,
如下所示

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
205 13528 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
83 6783 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 114 packets, 13000 bytes)
pkts bytes target prot opt in out source destination

上例中-nvL和-t filter打印的信息是一样的
关于清除规则的命令中,用的最多的就是下面两个:

### 3. #iptables -F;#iptables -Z;这里-F表示把所有规则的全部删除,如果不加-t指定表,默认只清除filter表的规则,-Z表示把包以及流量计数器置零.
2. iptable -F 清空所有规则

### 4. service iptables save 保存规则

[root@localhost ~]# iptables -F; //表示把所有规则全部删除
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 593 packets, 45671 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 70 packets, 6796 bytes)
pkts bytes target prot opt in out source destination

![mark](http://p0weeraap.bkt.clouddn.com/xavi2017/180129/1K0aCcB9ae.png?imageslim)

 * iptables -t nat //-t指定表
 * iptables -Z  可以把计数器清零

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 1095 packets, 89419 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT tcp -- virbr0
0.0.0.0/0 0.0.0.0/0 tcp dpt:53
0 0 ACCEPT udp -- virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:67
0 0 ACCEPT tcp -- virbr0
0.0.0.0/0 0.0.0.0/0 tcp dpt:67

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- virbr0
192.168.122.0/24 0.0.0.0/0
0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- virbr0
0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 149 packets, 14835 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT udp -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68

清零后:

![mark](http://p0weeraap.bkt.clouddn.com/xavi2017/180129/egeK58gG8l.png?imageslim)

### 5. 增加/删除一条规则,运行一下命令: #iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP

![mark](http://p0weeraap.bkt.clouddn.com/xavi2017/180129/23lbe5HcIh.png?imageslim)

- [ ] -A 表示增加一条规则,排队,只能在最后面
- [ ] -I 表示插入一条规则,效果和-A一样,插队
- [ ] -D 删除一条规则;
- [ ] -s 后跟源地址;
- [ ] -p 协议(tcp, udp, icmp); 
- [ ] --sport/--dport 和-p一起使用,后跟源端口/目标端口;
- [ ] -d 后跟目的IP(主要针对内网或者外网);
- [ ] -j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)。
- [ ] -i 表示指定网卡(不常用,但是偶尔能用到)

下面举例来理解这些概念:
### 6.iptables -I INPUT -s 1.1.1.1 -j DROP;iptables -D INPUT -s 1.1.1.1 -j DROP.-j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)

[root@localhost ~]# iptables -I INPUT -s 1.1.1.1 -j DROP

上例中表示插入一条规则,把来自1.1.1.1的数据包丢掉,下例表示删除刚刚插入的规则

[root@localhost ~]# iptables -D INPUT -s 1.1.1.1 -j DROP

注意上述实例中,删除一条规则时,必须和插入的规则一致,也就是说,两条iptables命令,除了-I和-D不一样外,其他地方都一样.

### 7.iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP表示把来自2.2.2.2并且是TCP协议到本机80端口的数据包丢掉:注意,--dport/--sport必须和-p选项一起使用,否则会出错.

[root@localhost ~]# iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP

注意,--dport/--sport必须和-p选项一起使用,否则会出错.

下例表示把发送到10.0.1.14的22端口的数据包丢掉:

[root@localhost ~]# iptables -I OUTPUT -p tcp --dport 22 -d 10.0.1.14 -j DROP


### 7.iptables -nvL --line-numbers有时候服务器上的iptables过多了,想删除某一条规则,但又不容易掌握创建时的规则,其实有一种比较简单的方法,先查看iptables规则,示例命令如下:

[root@localhost ~]# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 1662 packets, 124K bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DROP tcp -- 2.2.2.2 0.0.0.0/0 tcp dpt:80
2 0 0 ACCEPT udp -- virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:53
3 0 0 ACCEPT tcp -- virbr0
0.0.0.0/0 0.0.0.0/0 tcp dpt:53
4 0 0 ACCEPT udp -- virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:67
5 0 0 ACCEPT tcp -- virbr0
0.0.0.0/0 0.0.0.0/0 tcp dpt:67

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
2 0 0 ACCEPT all -- virbr0
192.168.122.0/24 0.0.0.0/0
3 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
4 0 0 REJECT all -- virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
5 0 0 REJECT all -- virbr0
0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 264 packets, 28000 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DROP tcp -- 0.0.0.0/0 10.0.1.14 tcp dpt:22
2 0 0 ACCEPT udp -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68

然后删除某一条规则,使用如下:

![mark](http://p0weeraap.bkt.clouddn.com/xavi2017/180204/7lDEB79CI8.png?imageslim)

### 8.下例表示把来自192.168.1.0/24这个网段且作用在eth0上的包放行:

[root@localhost ~]# #iptables -A INPUT -s 192.168.122.0/24 -i eth0 -j ACCEPT
[root@localhost ~]# iptables -nvL |grep '192.168.122.0/24'
0 0 ACCEPT all -- virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- virbr0
192.168.122.0/24 0.0.0.0/0


### 9.iptables -P OUTPUT DROP,这里对默认策略不能这样误操作,一旦误操作,只能在虚拟机上把这个包改成ACCEPT.iptables -P OUTPUT ACCEPT.
## iptable语法总结:
### 1.语法:iptables(选项)(参数)

-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。

### 2. iptables命令选项输入顺序:
> iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

#### 表名包括:

raw:高级功能,如:网址过滤。
mangle:数据包修改(QOS),用于实现服务质量。
net:地址转换,用于网关路由器。
filter:包过滤,用于防火墙规则。

#### 规则链名包括:

INPUT链:处理输入数据包。
OUTPUT链:处理输出数据包。
PORWARD链:处理转发数据包。
PREROUTING链:用于目标地址转换(DNAT)。
POSTOUTING链:用于源地址转换(SNAT)。

#### 动作包括:

accept:接收数据包。
DROP:丢弃数据包。
REDIRECT:重定向、映射、透明代理。
SNAT:源地址转换。
DNAT:目标地址转换。
MASQUERADE:IP伪装(NAT),用于ADSL。
LOG:日志记录。

## 10.15 iptables filter表小案例
### 1.需要吧80端口、22端口和21端口的数据放行,但对22端口必须指定一段IP来放行。

vim /usr/local/sbin/iptables.sh
//输入一下脚步
#!/bin/bash
ipt="/usr/sbin/iptables"
// 用一个字符串来定义某个命令,这样易读。这里命令都是绝度路径俩表达
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
// Here Drop means throw away,and ACCEPT means allow.Drop丢弃的包,ACCEPT是接受该包。
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
//增加的规则,-m state指定了状态,--state里面是三次握手是的数据包状态ESTABLISHED表示建立了连接,RELATED额外的连接.为了保证通讯正常
$ipt -A INPUT -s 192.168.72.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


### 2.执行上述脚本,执行完成后,重启service iptables restart

[root@localhost ~]# sh /usr/local/sbin/iptables.sh
[root@localhost ~]# iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
44 3052 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- 192.168.72.0/24 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21

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

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

* 执行完成后,重启service iptables restart

[root@localhost ~]# service iptables restart
Redirecting to /bin/systemctl restart iptables.service



### 3. icmp示例:iptables -I INPUT -p icmp --icmp-type 8 -j DROP//不允许接受icmp数据包到本地  

  3.1 ping 外网是正常的,外部ping虚拟机无法连接
  ![mark](http://p0weeraap.bkt.clouddn.com/xavi2017/180225/GCg02LKFDB.png?imageslim)

  ![mark](http://p0weeraap.bkt.clouddn.com/xavi2017/180225/KEa56EI9CJ.png?imageslim)

### 4.扩展知识:

#### 不允许发送未知数据包到本地  
iptables -A INPUT -p all -m state --state INVALID -j DROP  

#### 允许已经允许过的连接和被动请求数据包发送到本地  
iptables -A INPUT all -m state --state ESTABLISHED,RELATED -j ACCEPT  

#### 检查该连接中第一个数据包,并检查该数据包是否包含syn标记,符合两项条件才允许进入。  
iptables -A INPUT -p tcp --syn --dport 22 -m state --state NEW -j ACCEPT  

#### 使用Multiport模块一次添加多个端口  
iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 21,22,23,24,25 -j ACCEPT  

#### 检查所有 TCP-Flags,但只有syn及fin两个标记同时为1时,数据包才会被筛选出来  
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP  

#### 检查所有 TCP-Flags中syn及fin两个标记同时为1时,数据包才会被筛选出来  
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP  

#### 数据批量添加  
cat /root/mac_list.txt | while read MAC  
do  
     MAC=$( echo $MAC | awk '{print $1}' )  

     iptables -t filter -A FORWARD -i eth1 -o eth0 -m mac --mac-source $MAC -j ACCEPT  
done  

mangle表用法 MRAK模块匹配(单数据包)  
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 80  
iptables -A FORWARD -p all -m mark --mark 80 -j DROP  

#### 管理用户或组模块  
iptables -A OUTPUT -p tcp -m owner --uid--owner tom --dport 80 -j ACCEPT  
iptables -A OUTPUT -p udp -m owner --uid--owner tom --dport 53 -j ACCEPT  
iptables -A OUTPUT -p all -m owner --uid--owner tom -j DROP  

#### 使用iprange模块添加ip范围  
iptables -A INPUT -m iprange --src-range 192.168.0.2-192.168.0.61 -j DROP  
iptables -A INPUT -m iprange --dst-range 192.168.0.2-192.168.0.61 -j DROP  

#### ttl值匹配模块  
iptables -A INPUT -m ttl --ttl-eq 64 -j REJECT  
--ttl-eq 等于  
--ttl-lt 小于  
--ttl-gt 大于  

#### 数据包状态 发送 接受   
TCP        NEW  ESTABLISHED  
UDP        NEW ESTABLISHED  
ICMP       NEW  RELATED  

IPSEC SPI 值控制模块  
iptables -A FORWARD -p ah -m ah --ahspi 300 -j ACCEPT  
iptables -A FORWARD -p esp -m esp --espspi 200 -j ACCEPT  

转载于:https://blog.51cto.com/12995218/2066705

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值