11 日常运维2-netfilter/iptables

  • 学习一个服务的过程:
  • 1此服务器的概述:名字,功能,特点,端口号 2安装 3配置文件的位置 4服务启动关闭脚本,查看端口 5此服务的使用方法 6修改配置文件,实战举例 7排错(从下到上,从内到外)

10.12 firewalld和netfilter

1. 临时关闭selinux(防火墙) : setenforce 0

[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce

2. 永久关闭selinux(防火墙),编辑...config配置文件 :(好多服务,受限于selinux,关闭selinux也不会有太大的安全问题)

[root@localhost ~]# vi /etc/selinux/config #更改:SELINUX=disabled

3. 禁止开机启动firewalld服务(centos7默认防火墙) ,firewalld(关闭centos7默认防火墙):
(firewalld默认是centos7的防火墙,可以关闭掉这个,用centos6上的防火墙
netfilter

[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

4. 关掉(停止)firewalld服务(centos7默认防火墙) :

[root@localhost ~]# systemctl stop firewalld

5. 安装netfilter服务(centos6或centos5默认防火墙) :netfilter(开启centos6默认防火墙) 注意:(iptablesnetfiltel防火墙的工具

[root@localhost ~]# yum install -y iptables
[root@localhost ~]# yum install-y iptables-services

6. 启用iptables服务 :

[root@localhost ~]# systemctl enable iptables

7. 开启iptables服务 :

[root@localhost ~]# systemctl start iptables  #/etc/init.d/iptables start #启动iptables  #service iptables start #同左

8. 查看iptables默认规则 :

[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   22  1636 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, 1632 bytes)
 pkts bytes target     prot opt in     out     source               destination

9.开机启动

chkconfig --list iptables #查询iptables 开机启动状态
chkconfig iptables on #启用iptables开机启动

10.13 netfilter 5表5链介绍

数据包流向与netfilter的5个链:其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是 netfilter,它是Linux内核中实现包过滤的内部结构。

  • netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
  • iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
  • netfilter/iptables 后期简称为:iptables。 iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。

Linux防火墙-netfilter:netfilter的5个表
• filter表用于过滤包,最常用的表,有INPUT、FORWARD、OUTPUT三个链
• 
nat表用于网络地址转换,有PREROUTING、OUTPUT、POSTROUTING三个链

• managle表用于给数据包做标记,几乎用不到
• 
raw表可以实现不追踪某些数据包,阿铭从来不用
• 
security表在Centos6中并没有,用于强制访问控制(MAC)的网络规则,阿铭老师没用过

wpsF453.tmp

PREROUTING:数据包进入路由表之前
INPUT:通过路由表后目的地为本机
FORWARD:通过路由表后,目的地不为本机
OUTPUT:由本机产生,向外发出
POSTROUTING:发送到网卡接口之前

表间优先顺序    raw > mangle > nat > filter

wpsF452.tmp

总结:
整体数据包分两类: 1、发给防火墙本身的数据包 ;2、需要经过防火墙的数据包注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。

10.14 iptables语法:

iptables命令的管理控制选项 表--> 链 --> 规则 ###一般企业中多用物理防火墙 思科华为等等等 # 软件防火墙主要用来内网上网

-P 设置指定链的默认策略(policy) #默认不写入,优先级最低???
-F 清空(flush)临时清空
-X 删除指定表中用户自定义的规则链(delete-chain)
-N 新建(new-chain)一条用户自己定义的规则链
-E 重命名用户定义的链,不改变链本身
-Z 将所有表的所有链的字节和数据包计数器清零
-A 在指定链的末尾添加(append)一条新的规则
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加

-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-L 列出(list)指定链中所有的规则进行查看
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)

-p               指定协议为tcp / udp
-s               指定来源ip
--sport        指定来源端口
-d               指定目标ip
--dport        指定目标端口
-i                 指定网卡
-t nat          指定  nat表 ;不加-t :  默认指定filter
-j DROP     扔掉;

防火墙处理数据包的四种方式

ACCEPT 允许数据包通过
DROP 直接丢弃数据包,不给任何回应信息
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
REDIRECT 与DROP基本一样,区别在于它除了阻塞包之外
SNAT 源地址转换,即改变数据包的源地址
DNAT 目标地址转换,即改变数据包的目标地址

iptables [-t 表名] 管理选项 [链名] 匹配条件 [-j 动作或跳转]

  • # 不指定表名时,默认是filter
  • # 不指定链名时,默认表内所有链
  • # 除非设置规则链的缺省策略,否则需要指定匹配条件

1. 查看iptables默认规则配置文件,查看iptables默认规则:

[root@localhost ~]# cat /etc/sysconfig/iptables
[root@localhost ~]# iptables -nvL #查看iptables默认规则
[root@localhost ~]# iptables -nvL --line-number
num   pkts bytes target     prot opt in     out     source               destination         
1     1161  101K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0        state RELATED,ESTABLISHED ...

[root@localhost ~]# iptables -t nat -nvL #查看指定表
[root@localhost ~]# iptables -t filter -nvL #查看指定表
 

2. 保存iptables规则(当前规则,保存到配置文件):

[root@localhost ~]# service iptables save

3. 清空iptables规则:

[root@localhost ~]# iptables -F #临时清空
[root@localhost ~]# service iptables save #执行一下为完全清空

4. 重启iptables规则

[root@localhost ~]# service iptables restart

8. 把表的计数器清零:(因为每时每刻都是在通信,数据清零一会又会有数据)

[root@localhost ~]# iptables -Z ; iptables -nvL

9. 增加规则增加最后面-A 增加一条规则,添加在最后;-I 插入一条规则,添加在最前;(排在最前的规则,优先过滤前面的,再过滤下面的规则)

iptables -A(增加一条规则) INPUT(链) -s 来源ip -p tcp(协议)  --sport 来源端口 -d 目标ip --dport 目标端口 -j DROP(扔掉)

[root@localhost ~]# iptables -A INPUT -s 192.168.223.1 -p tcp --sport 1234 -d 192.168.223.128 --dport 80 -j DROP

10. 删掉规则

iptables -D(删除一条规则) INPUT(链) -s 来源ip -p tcp(协议) --sport 来源端口 -d 目标ip --dport 目标端口 -j DROP(扔掉)

[root@localhost ~]# iptables -D INPUT -s 192.168.223.1 -p tcp --sport 1234 -d 192.168.223.128 --dport 80 -j DROP

11. 插入规则添加最前面

iptables -I(插入一条规则) INPUT(链) -p tcp(协议) --dport 目标端口 -j DROP(扔掉)

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

12. 插入规则添加最前面并指定网卡-i 指定网卡

iptables -I(插入一条规则) INPUT(链)  -s 来源IP/24 -i 网卡名称 -j ACCEPT(扔掉)

[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

13. 删掉 设定的规则(自己记得规则怎么写的,要不没法指定删除哦):

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

14. 打印出规则序列号编号:

[root@localhost ~]# iptables -nvL --line-number

15. 删除指定规则:iptables -D INPUT 规则序列号编号

[root@localhost ~]# iptables -D INPUT 2

16.更改默认规则(不常用慎用):iptables -P OUTPUT DROP 
如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。

动作前面不能加 –j,这也是唯一一种匹配动作前面不加 –j 的情况。

17.恢复默认规则:iptables -P OUTPUT ACCEPT #默认规则优先级最低

18.技巧注意:
      1、-F 仅仅是清空链中规则,并不影响 -P 设置的默认规则。
      2、-P 设置了 DROP 后,使用 -F 一定要小心!!!
##在生产环境中,使用-P DROP 这条规则,一定要小心,设置之前最好配置下面两个任务计划,否则容易把自己drop掉,链接不上远程主机。配置crontab -e:

*/15 * * * *  iptables -P INPUT ACCEPT
*/15 * * * *  iptables –F
     3、如果不写链名,默认清空某表里所有链里的所有规则

匹配条件

£流入、流出接口(-i、-o£来源、目的地址(-s、-d£协议类型(-p£来源、目的端口(--sport、--dport

动作(处理方式)-j

£ACCEPT # 通过 £DROP # 丢弃 £SNAT 源地址转换 £DNAT 目的地址转换 £MASQUERADE

  • 内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。
  • 当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。
  • -j MASQUERADE # 动态源地址转换(动态 IP 的情况下使用)

附加模块

£按包状态匹配 (state£按来源 MAC 匹配(mac£按包速率匹配(limit£多端口匹配 (multiport
状态:NEW、RELATED、ESTABLISHED、INVALID

  • NEW:有别于 tcp 的 syn /ESTABLISHED:连接态 /RELATED:衍生态,与 conntrack 关联(FTP) /INVALID:不能被识别属于哪个连接或没有任何状态
  •  -s 192.168.0.1 # 匹配来自 192.168.0.1 的数据包
  •  -s 192.168.1.0/24 # 匹配来自 192.168.1.0/24 网络的数据包
  •  -s 192.168.0.0/16 # 匹配来自 192.168.0.0/16 网络的数据包
  • -d 202.106.0.20 # 匹配去往 202.106.0.20 的数据包
  • -d 202.106.0.0/16  # 匹配去往 202.106.0.0/16 网络的数据包
  • -d www.abc.com     # 匹配去往域名 www.abc.com 的数据包
  • -p tcp   /   -p udp   /   -p icmp --icmp-type 类型
  • ping: type 8      pong: type 0
  • --sport 1000       # 匹配源端口是 1000 的数据包
  • --sport 1000:3000  # 匹配源端口是 1000-3000 的数据包(含1000、3000)
  • --sport :3000    # 匹配源端口是 3000 以下的数据包(含 3000)
  • --sport 1000:    # 匹配源端口是 1000 以上的数据包(含 1000)
  • --dport 80      # 匹配目的端口是 80 的数据包
  • --dport 6000:8000  # 匹配目的端口是 6000-8000 的数据包(含6000、8000)
  • --dport :3000    # 匹配目的端口是 3000 以下的数据包(含 3000)
  • --dport 1000:  # 匹配目的端口是 1000 以上的数据包(含 1000)
  • 注意:--sport 和 --dport 必须配合 -p 参数使用
  • -p udp --dport 53  # 匹配网络中目的端口是 53 的 UDP 协议数据包
  • -s 10.1.0.0/24 -d 172.17.0.0/16 # 匹配来自 10.1.0.0/24 去往 172.17.0.0/16 的所有数据包
  • -s 192.168.0.1 -d www.abc.com -p tcp --dport 80 # 匹配来自 192.168.0.1,去往 www.abc.com 的 80 端口的 TCP 协议数据包
  • iptables -A INPUT -j ACCEPT  # 允许所有访问本机 IP 的数据包通过
  • iptables -A FORWARD -s 192.168.80.39 -j DROP  # 阻止来源地址为 192.168.80.39 的数据包通过本机
  • iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1# 将内网 192.168.0.0/24 的原地址修改为 1.1.1.1,用于 NAT
  • iptables -t nat -A POSTROUTING -s 192.168.0.0/24  -j SNAT --to 1.1.1.1-1.1.1.10 # 同上,只不过修改成一个地址池里的 IP
  • iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.1  #把从 eth0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1
  • iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.1:80 #把从 eth0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1
  • iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.169.0.10#把从eth0进来的要访问TCP/80的数据包目的地址改为192.168.0.1-192.169.1.10
  • iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE#将源地址192.168.0.0/24的数据包进行地址伪装,转换成eth0的IP地址.eth0为路由器外网出口IP地址
  • iptables -A INPUT -m state --state RELATED,ESTABLISHED  -j ACCEPT
  • iptables -A INPUT -p tcp --dport 21 -j ACCEPT  # iptables -A INPUT -p tcp --dport 20 -j ACCEPT  #开放20、21端口
  • iptables -A INPUT -i lo -j ACCEPT  #放行本地回环网络
  • iptables -A INPUT -p tcp -m multiport --dports 21,22,80 -j ACCEPT  #放行21,22.80端口
  • iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  #放行已连接的网络状态
  • iptables   -A INPUT -p icmp -j ACCEPT #放行icmp协议
  • iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP #阻断来自某 MAC 地址的数据包,通过本机
  • iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s  -j ACCEPT    #50/s表示1秒中转发50个数据包
  • iptables -A FORWARD -d 192.168.0.1 -j DROP #以上两条一起用一定速率去匹配数据包
  • iptables -A INPUT -p tcp -m multiport --dports  21,22,25,80,110 -j ACCEPT #一次性匹配多个端口,可以区分源端口,目的端口,必须与 -p 参数一起使用

10.15 iptables filter表小案例

例0:iptables表小案例需求

对filter表开放22端口、80端口、 21端口;
INPUT链:DROP;

OUTPUT链和FORWARD链:ACCEPT;
22端口只针对192.168.136.0/24开通;
所有网段开80端口、 21端口。

1. 创建iptables.sh脚本:

[root@localhost ~]# vim /usr/local/sbin/iptables.sh

脚本内容添加:

#! /bin/bash
ipt="/usr/sbin/iptables" #定义变量iptables
$ipt -F #清空规则,
(没有-t,默认是执行的filter)
$ipt -P INPUT DROP #进来数据默认策略
$ipt -P OUTPUT ACCEPT #出去数据默认策略
$ipt -P FORWARD ACCEPT #转发数据默认策略
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #允许所有已经建立的连接,表现为本机可以ping其他主机,但是其他主机无法ping本机
$ipt -A INPUT -s 192.168.223.0/24 -p tcp --dport 22 -j ACCEPT #增加规则(192.168.223网段访问22端口的数据包放行)
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT #增加规则(80端口数据包方行)
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT #增加规则(21端口数据包放行)

2. 执行iptables.sh脚本:[root@localhost ~]# sh /usr/local/sbin/iptables.sh

3. 查看iptables.sh规则:[root@localhost ~]# iptables  -nvL

4. 恢复默认规则(重启了iptables服务,因为刚刚设定的规则没有保存到配置文件!):[root@localhost ~]# service iptables restart

filter表小案例

1. 本机可以ping通外网别人ping不通本机(禁ping) :[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP

2. 删除禁ping的规则:[root@localhost ~]# iptables -D INPUT -p icmp --icmp-type 8 -j DROP

例1:使用iptables防火墙保护公司web服务器

  • 1.1 本地回环网络放行  iptables -A INPUT -i lo -j ACCEPT
  • 1.2 放行ssh和web端口  iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT
  • 1.3 放行已建立连接   iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  • #允许已经建立tcp连接的包以及该连接相关的包通过。状态防火墙能识别TCP或者UDP会话。非状态防火墙只能根据端口识别,不能识别会话
  • 1.4 设置默认禁止  iptables -P INPUT DROP
  • 注:一般iptables,OUTPUT出口一般都放行,不需要在出口上做限制。这样允许服务器主动访问外网所有数据。
  • 1.5 启动httpd服务器   service httpd start
  • 1.6 启动vsftpd服务   /etc/init.d/vsftpd start   #very secure FTP deamon
  • 2 客户端测试  2.1 安装 elinks和 lftp并测试服务器yum -y install elinks
  • 测试web访问80端口elinks 192.168.247.64→ yum -y install lftp  测试vsftpd访问→ lftp 192.168.31.64  → #    执行ls  说明禁止访问

例2:使用iptables搭建路由器,通过SNAT使用内网机器上网

分析: 内网机器,通过iptables服务器,访问互联网。内网机器与iptables服务器通信。iptables服务器将内网机器请求转发到外网网卡,实现内网机器上网。故,iptables服务器,开启内核路由转发功能

wpsF468.tmpwpsF469.tmp

 

  • 1.echo 1 > /proc/sys/net/ipv4/ip_forwardvim /etc/sysctl.conf修改net.ipv4.ip_forward = 0 为net.ipv4.ip_forward = 1→将修改应用到系统sysctl -p 开启转发
  • 2. 在配置iptables之前,需将iptables清空,以免上面的实验影响→在清空iptables 之前,首先将例1中INPUT的默认值改回来,不然会断掉
  • iptables -P INPUT ACCEPT→iptables -F
  • 3.设置eth0,为桥接模式,eth1 vmnet6模式→添加网卡eth1,并设置eth1使用vmnet6网络环境后,设置IP
  • 设置iptables转发规则:(由于转发是不经过本机的,须在nat表的POSTROUTING链中修改) eno33为外网网卡
  • iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j SNAT --to 192.168.1.63   / iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eno33 -j MASQUERADE
  • 4.在客户端xiaogan63中  →设置eth0 vmnet6模式
  • 并修改eth0  IP:192.168.2.63 GATEWAY=192.168.2.1(服务器eth1地址) NETMASK=255.255.255.0
  • ping 192.168.2.1→ping 192.168.1.1→ping www.baidu.com

例3:拒绝访问服务器本身和拒绝通过服务器访问别的机器。

  • 禁止访问服务器本身 iptables -A INPUT -s 192.168.2.2 -j DROP /  iptables -A OUTPUT -d 192.168.2.2 -j DROP / iptables -A INPUT -s 192.168.2.0/24 -j DROP
  • 禁止通过服务器访问其他主机(上网)  iptables -A FORWARD -d 192.168.2.2 -j DROP / iptables -A FORWARD -d 192.168.2.0/24 -j DROP
  • 限制某个mac地址访问服务器   iptables -A INPUT --mac-source XX:XX:XX:XX:XX:XX -j DROP
  • 限制某个IP访问服务器   iptables -A INPUT -s XXX.XXX.XXX.XXX -j DROP

例4:使用DNAT功能把内网web服务器端口映射到路由器外网

  • 端口映射方法一:
  • iptables -t nat -A PREROUTING -d 192.168.77.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22  #发送过来的包
  • iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.77.130  #反馈回去的包
  • 端口映射方法二:分析:把内网web服务器的80端口映射到iptables服务器的80端口,让外网通过访问iptables的80端口,实现访问内网的web服务器
  • iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.2.63:80
  • iptables -t nat -A PREROUTING -d 192.168.31.64 -j DNAT --to 192.168.2.63   
  • iptables -t nat -A PREROUTING -d 192.168.31.64 -t tcp --dport 80 -j DNAT --to 192.168.2.63:80   
  • 如果是ADSL则为:iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.2.63:80   #清空iptables -t nat -F
  • 测试:宿主机浏览器访问:192.168.0.63:80 即可访问到64的内容 #家里路由器左右DNAT、SNAT、DHCP

10.16 17 18 iptables nat表应用(上)(中)(下)

10.19 iptables规则备份和恢复

Linux防火墙—netfilter

1. 保存 iptables规则 

(默认规则保存到:/etc/sysconfig/iptables文件中。)

[root@hostname ~]# service iptables save

2. 备份 iptables规则重定向(保存)到指定路径 

[root@hostname ~]# iptables-save > /tmp/ipt.txt

[root@hostname ~]# cat /tmp/ipt.txt  #查看保存的iptables规则 

3. 清空 iptables规则 

[root@hostname ~]# iptables -t nat -F

4. 恢复 iptables规则(刚刚备份的) 

[root@hostname ~]# iptables-restore < /tmp/ipt.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值