CentOS 7 下使用iptables

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 7 下使用iptables相关的知识,希望对你有一定的参考价值。

参考技术A

iptables/netfilter(下文中简称为iptables)组成Linux平台下的包过滤防火墙,含有网络地址转换(Network Address Translate)、数据包内容修改以及数据包过滤等功能。

iptables内置了4个表优先级次序(由高而低):raw --> mangle --> nat --> filter

iptables上有5条链

CentOS 7 默认使用firewalld.service,要想切换iptables.service需要安装iptables(默认已经安装了)和iptables-services这两个依赖包

centos下iptables使用

iptables的使用规则:

技术图片

1、表    (table) 包含4个表(哪个表是当前表取决于内核配置选项和当前模块):
4个表的优先级由高到低:raw-->mangle-->nat-->filter
raw---RAW表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在某个链上,RAW表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。
filter---这个规则表是预设规则表,拥有 INPUT、FORWARD 和 OUTPUT 三个规则链,这个规则表顾名思义是用来进行封包过滤的理动作。
net----此规则表拥有prerouting和postrouting两个规则链, 主要功能为进行一对一、一对多、多对多等网址转译工作(SNAT/DNAT)。
mangle--此规则表拥有prerouting、FORWARD、postrouting三个规则链,除了进行网址转译工作会改写封包外,在某些特殊应用可能也必须去改写封包(ITL、TOS)或者是设定MARK(将封包作记号,以进行后续的过滤)这时就必须将这些工作定义在mangles规则表中。

-t 指定使用个表( 3个表:filter,nat,mangle)(filter:INPUT(处理进入的包),FORWORD(处理通过的包),OUTPUT(处理本地生成的包);nat:PREROUTING (修改到来的包),OUTPUT(修改路由之前本地的包),POSTROUTING(修改准备出去的包);mangle:PREROUTING(修改路由之前进入的包),OUTPUT(修改路由之前本地的包))
例:iptable -t nat -A  PREROUTING

2、链管理命令(这都是立即生效的)
-F 清空所选链 --> iptables -t nat -F 清空nat表的所有链
-N 根据给出的名称建立一个新的用户定义链 --> iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。
-X 删除指定的用户自定义链, 使用方法跟-N相同,但是在删除之前必须要将里面的链给清空了
-P 设置链的目标规则,设置默认策略, iptables -P INPUT (DROP|ACCEPT)默认是关的/默认是开的,比如: iptables -P INPUT DROP
-E 根据用户给出的名字对指定链进行重命名,-E oldname newname
-Z 清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)--> iptables -Z :清空

1)INPUT链
INPUT链作为iptables的构建快,作用是控制目标为本地系统的数据包是否可以和本地套接字通信,如果INPUT链中的第一条规则要求IPtables丢弃所以得数据包(或者INPUT链的策略设置为DROP),那么所有试图通过任何ip通信方式(如TCP、UDP或ICMP)与系统直接通信的努力都将失败。ARP工作在数据链路层而不是网络层,而iptables只过滤ip及其之上协议的数据包,所以iptables不能过滤arp协议的报文。

$IPTABLES -A INPUT -m state --state INVALID -j LOG --log-prefix "DROP INVALID" --log-ip-OPTIONS --log-tcp-options
$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

建立OUTPUT链规则集的命令如下所示:

$IPTABLES -A OUTPUT -m state --state INVALID -j LOG --log-prefix "DROP INVALID" --log-ip-options --log-tcp-options
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

2)FORWARD 链
filter表中的forward链提供了对通过防火墙接口转发数据包进行访问控制的能力:

$IPTABLES -A FORWARD -m state --state INVALID -j LOG --log-prefix "DROP INVALID" -- log-ip-options --log-tcp-options
$IPTABLES -A FORWARD -m state --state INVALID -j DROP
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

3)网络地址转换
iptables的nat表专用于定义所有的NAT规则,在这个表中有两个链:PREROUTING和POSTROUTING,利用PREROUTING链将nat表中的规则应用到还没有通过内核中路由算法确定应从哪个接口传输的数据包,在这个链中处理的数据包也尚未经过filter表中的INPUT或PREROUTING链的处理
POSTROUTING链负责处理经过内核中的路由算法确定传输的物理接口并即将从该接口出去的数据包,由这个链处理的数据包已通过filter表中的output或forward链的检查

$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 192.168.10.3:80
$IPTABLES -t nat -A PREROUTING -p tcp --dport 443 -i eth0 -j DNAT --to 192.168.10.3:443
$IPTABLES -t nat -A PREROUTING -p tcp --dport 53 -i eth0 -j DNAT --to 192.168.10.4:53

3、规则,常用命令:
-N 新的规则-->iptables -N allowed 定义新的规则
-A 追加规则-->iptables -A INPUT
-D 删除规则-->iptables -D INPUT 1(编号)
-R 修改规则-->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置)
-I 插入规则-->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位
-L 查看规则-->iptables -L INPUT 列出规则链中的所有规则
    -n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
    -v:显示详细信息
     -vv
    -vvv :越多越详细
     -x:在计数器上显示精确值,不做单位换算
   --line-numbers : 显示规则的行号
    -t nat:显示所有的关卡的信息

4、匹配 (包含匹配扩展和目标扩展,大多数都可以通过在前面加上!来表示相反的意思)
扩展匹配模块:tcp,udp,icmp,mac,limit,multiport,mark,owner,state,unclean,tos,多数后面会有参数,部分没有。
写法如(模块 参数):
state --state NEW , state --state ESTABLISHED,RELATED
tcp --tcp-flags SYN, ACK, FIN, RST SYN,    tcp --syn
icmp --icmp-type echo-request
limit --limit 1/s --limit-burst 5 //每秒中最多允许5个新连接
扩展目标模块:LOG,MARK,TOS,MIRROR,SNAT,MASQUERADE,REDIRECT,DIAGNOSTICS,BUGS,COMPATIBILITY WITH IPCHAINS。
写法如(模块 参数):LOG --log-level 5 --log-prefix "IPTABLES:" 

通用参数:
-p 协议  例:iptables -A INPUT -p tcp
-s 源地址 例:iptables -A INPUT -s 192.168.1.1
-d 目的地址 例:iptables -A INPUT -d 192.168.12.1
--sport 源端口 例:iptables -A INPUT -p tcp --sport 22
--dport 目的端口 例:iptables -A INPUT -p tcp --dport 22
-i 指定入口网卡 例:iptables -A INPUT -i eth0
-o 指定出口网卡 例:iptables -A FORWARD -o eth0

source--匹配源ip地址或网络
state 匹配一组连接状态, 这里state是一个逗号分割的匹配连接状态列表。可能的状态是:INVALID表示包是未知连接,ESTABLISHED表示是双向传送的连接,NEW 表示包为新的连接,否则是非双向传送的,而RELATED表示包由新连接开始,但是和一个已存在的连接在一起,如FTP数据传送,或者一个ICMP错误。
string--匹配应用层数据字节序列
comment--在内核内存中为一个规则关联多达256个字节的注释数据

扩展匹配
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)显式扩展(-m)
扩展各种模块
  -m multiport:表示启用多端口扩展
  之后我们就可以启用比如 --dports 21,23,80

5、目标(target)
-j 指定要进行的处理动作,常用的有:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
SNAT:基于原地址的转换
--to-source:指定原地址
    比如我们现在要将所有192.168.10.0网段的IP在经过的时候全都转换成172.16.100.1这个假设出来的外网地址:

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1(外网有效ip)

这样,只要是来自本地网络的试图通过网卡访问网络的,都会被统统转换成172.16.100.1这个IP.
MASQUERADE(动态伪装)--家用带宽获取的外网ip,就是用到了动态伪装

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

DNAT目标地址转换
--to-destination:指定目标地址

iptables -t nat -A PREROUTING -d 192.168.10.18 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.2

10.18访问80端口转换到100.2上
MASQUERADE:源地址伪装
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回 在自定义链执行完毕后使用返回,来返回原规则链
LOG: 将数据包信息记录到syslog

以上是关于CentOS 7 下使用iptables的主要内容,如果未能解决你的问题,请参考以下文章

Linux(CentOS 7.0)下使用yum安装配置和使用svn.

CentOS 7.0下使用yum安装MySQL

CentOS 7.0下使用yum安装MySQL

CentOS 7.0下使用yum安装MySQL

CentOS 7.0下使用yum安装MySQL

CentOS 7.0下使用yum安装MySQL