防火墙IPtables管理工具介绍

防火墙:

netfilter/iptables是集成在Linux2.4.X版本内核中的包过滤防火墙系统。该架构可以实现数据包过滤,网络地址转换以及数据包管理功能。linux中防火墙分为两部分:netfilter和iptables。netfilter位于内核空间,目前是Linux内核的组成部分。netfilter可以对本机所有流入,流出。转发的数据包进行查看,修改,丢弃,拒绝等操作。netfilter位于内核空间中,用户无法接触内核和修改内核,需要使用iptables或Firewalld等工具。

防火墙模块位于/lib/modules/`uname -r `/kernel/net/netfilter目录下,需要某个模块可以通过modprobe加载该模块。

iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。在日常Linux运维工作中,经常会设置iptables防火墙规则,用来加固服务安全。

CENTOS7中在原有netfilter/iptables架构基础上添加了firewalld。iptables仅可以调整ipv4的防火墙规则。centos7中默认是用Firewalld作为用户的防火墙工具,当用户使用firewalld编写ipv4防火墙规则时,firewalld依然调用底成的iptables实现具体功能。

传统iptables如何使用。

iptables的规则表和链
表(tables):提供特定的功能,iptables内置了4个表,即filter表(实现包过滤)、nat表(网络地址转换)、mangle表(修改数据标记位规则表)和raw表(跟踪数据表规则表)。

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

INPUT(入站数据过滤).OUTPUT(出站数据过滤),FORWARD(转发数据过滤),PREROUTING(路由前过滤),POSTROUTING(路由后过滤)。

-->PREROUTING-->路由决定----->FORWARD------------->POSTROUTING
                              |                        ^
                              |                        |

                           INPUT--->LOCAL PRECESS-->OUTPUT

1)外部主机发送到数据包给防火墙本机,数据经过PREROUTING链和INPUT链

扫描二维码关注公众号,回复: 991135 查看本文章

2)防火墙本机发送数据包到外部主机,数据经过OUTPUT和POSTROUTING

3)防火墙作为路由负责转发数据,数据经过PREROUTING,FORWARD,POSTROUTING.

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

规则概念
规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息 包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。
当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept),拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作是添加,修改和删除等规则。
其中:
匹配(match):符合指定的条件,比如指定的 IP 地址和端口。
丢弃(drop):当一个包到达时,简单地丢弃,不做其它任何处理。
接受(accept):和丢弃相反,接受这个包,让这个包通过。
拒绝(reject):和丢弃相似,但它还会向发送这个包的源主机发送错误消息。这个错误消息可以指定,也可以自动产生。
目标(target):指定的动作,说明如何处理一个包,比如:丢弃,接受,或拒绝。
跳转(jump):和目标类似,不过它指定的不是一个具体的动作,而是另一个链,表示要跳转到那个链上。
规则(rule):一个或多个匹配及其对应的目标

防火墙的语法格式

1)iptables的基本语法格式
iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
说明:
表名、链名:用于指定iptables命令所操作的表和链;
命令选项:用于指定管理iptables规则的方式(比如:插入、增加、删除、查看等;
条件匹配:用于指定对符合什么样 条件的数据包进行处理;
目标动作或跳转:用于指定数据包的处理方式(比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

2)iptables命令的管理控制选项
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看(默认是filter表,如果列出nat表的规则需要添加-t,即iptables -t nat -L)
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)

常用命令:
-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 新的规则-->iptables -N allowed 定义新的规则

通用参数:
-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

-j 指定要进行的处理动作
常用的ACTION:
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
SNAT基于原地址的转换
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目标地址转换
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:返回 在自定义链执行完毕后使用返回,来返回原规则链。

链    (chain)
每个表都有自己的一组内置链,可以对链进行自定义,这样就可以建立一组规则,
filter表中的input、output和forward链

匹配(match)
每个iptables规则都包含一组匹配以及一个目标,iptables匹配指的是数据包必须匹配的条件,只有当
数据包满足所有的匹配条件时,iptables才能根据由该规则的目标所指定的动作来处理该数据包
匹配都在iptable的命令行中指定
source--匹配源ip地址或网络
destination (-d)--匹配目标ip地址或网络
protocol (-p)--匹配ip值
in-interface (-i)--流入接口(例如,eth0)
out-interface (-o)--流出接口
state--匹配一组连接状态
string--匹配应用层数据字节序列
comment--在内核内存中为一个规则关联多达256个字节的注释数据

目标(target)
iptables支持一组目标,用于数据包匹配一条规则时触发一个动作
ACCEPT--允许数据包通过
DROP--丢弃数据包,不对该数据包做进一步的处理,对接收栈而言,就好像该数据包从来没有被接收一样
LOG--将数据包信息记录到syslog
REJECT--丢弃数据包,同时发送适当的响应报文(针对TCP连接的TCP重要数据包或针对UDP数据包的ICMP端口不可达消息)
RETURN--在调用链中继续处理数据包

vi /etc/sysconfig/iptables 策略文件
vi /etc/sysconfig/iptables-config  配置文件

iptables缺省具有5条规则链
prerouting(内到外) forward(转发) postrouting(外到内)
         input(输入)        output(输出)


1.链管理命令(这都是立即生效的)
-P :设置默认策略的(设定默认门是关着的还是开着的)
    默认策略一般只有两种
    iptables -P INPUT (DROP|ACCEPT)
    默认是关的/默认是开的
    比如:
    iptables -P INPUT DROP
这就把默认规则给拒绝了。并且没有定义哪个动作,所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了
-F: FLASH,清空规则链的(注意每个链的管理权限)
    iptables -t nat -F PREROUTING
    iptables -t nat -F 清空nat表的所有链
    -N:NEW 支持用户新建一个链
    iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。
-X: 用于删除用户自定义的空链
    使用方法跟-N相同,但是在删除之前必须要将里面的链给清空昂了
-E:用来Rename chain主要是用来给用户自定义的链重命名
    -E oldname newname
-Z:清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)
    iptables -Z :清空

2.规则管理命令
-A:追加,在当前链的最后新增一个规则
-I num : 插入,把当前规则插入为第几条。
   -I 3 :插入为第三条
-R num:Replays替换/修改第几条规则
   格式:iptables -R 3 …………
-D num:删除,明确指定删除第几条规则
        
3.查看管理命令 “-L”
    附加子命令
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
-v:显示详细信息
-vv
-vvv :越多越详细
-x:在计数器上显示精确值,不做单位换算
--line-numbers : 显示规则的行号
-t nat:显示所有的关卡的信息
 
4.:详解匹配标准

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

策略需求:
域名系统(DNS)查询
文件传输协议(FTP)传输
网络时间协议(NTP)查询
安全Shell(SSH)会话
简单邮件传输协议(SMTP)会话
通过HTTP/HTTPS进行web会话
whois查询

外网扫描-------                (192.168.10.1(eth1))    (192.168.10.0/24)-------局域网客户机(10.50)
外网web--------因特网----------iptables防火墙----------局域网---------------内网扫描者(10.200)
外网dns--------                (主机名:iptables)                ----------------web服务器(20.3)
                            (71.157.X.X(eth0))                ----------------dns服务器(10.4)
脚本:
iptables.sh
IPTABLES=/sbin/iptables
MODPROBE=/sbin/modprobe
INT_NET=192.168.10.0/24
####flush existing rules and set chain policy setting to drop(重置现有规则和链策略设置)
echo "[+] Flushing existing iptables rules..."
$IPTABLES -F-----------------------------(清空规则链)
$IPTABLES -F -t nat----------------------(清空nat表)
$IPTABLES -X-----------------------------(删除用户的空链)
$IPTABLES -p INPUT DROP------------------(关闭input端口)
$IPTABLES -p OUTPUT DROP-----------------(关闭output端口)
$IPTABLES -p FORWARD DROP----------------(关闭forward端口)
###load connection-tracking modules------(负载连接模块)
$MODPROBE ip_conntrack-------------------(加载ip_conntrack模块)
$MODPROBE iptables_nat-------------------(加载iptables_nat模块)
$MODPROBE ip_conntrack_ftp---------------(加载ip_conntrack_ftp模块)
$MODPROBE ip_nat_ftp---------------------(加载ip_nat_ftp模块)

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

####INPUT chain ########
echo "[+] Setting up INPUT chain ..."
####state tracking rules####
$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
##anti-spoofing rules
$IPTABLES -A INPUT -i eth1 -s ! $INI_NET -j LOG --log-prefix "SPOOFED PKT"
$IPTABLES -A INPUT -i eth1 -s ! $INT_NET -j DROP

##ACCEPT rules
$IPTABLES -A INPUT -i eth1 -p tcp -s $INT_NET --dport 22 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

##default INPUT LOG rule
$IPTABLES -A INPUT -i ! lo -j LOG --log-prefix "DROP" --log-ip-options --log-tcp-options

建立OUTPUT链规则集的命令如下所示:
#####OUTPUT chain ####
echo "[+] setting up OUTPUT chain..."
###state tracking rules
$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

###ACCEPT RULES rules for allowing connections out-interface
$IPTABLES -A OUTPUT -p tcp --dport 21 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 25 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 43 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 443 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 4321 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 53 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

#### default OUTPUT LOG RULES
$IPTABLES -A OUTPUT -o ! lo -j LOG --log-prefix "DROP" --log-ip-options --log-tcp-options

FORWARD 链
filter表中的forward链提供了对通过防火墙接口转发数据包进行访问控制的能力:
###FORWARD chain####
echo "[+]Setting up FORWARD chain..."
###state tracking rules
$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

###anti-spoofing rules
$IPTABLES -A FORWARD -i eth1 -s ! $INT_NET -j LOG --log-prefix "SPOOFED PKT"
$IPTABLES -A FORWARD -i eth1 -s ! $INT_NET -j DROP

###ACCEPT rules
$IPTABLES -A FORWARD -p tcp -i eth1 -s $INT_NET --dport 21 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp -i eth1 -s $INT_NET --dport 22 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp -i eth1 -s $INT_NET --dport 25 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp -i eth1 -s $INT_NET --dport 43 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp --dport 443 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp -i eth1 -s $INT_NET --DPORT 4321 --syn -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp -p udp --dport 53 -m state --state NEW -j ACCEPT
$IPTABLES -A FORWARD -p tcp icmp --icmp-type echo-request -j ACCEPT
允许通过防火墙发起ftp、ssh、smtp和whois连接,但这类必须是从子网接口(eth1)上的内部子网发起的,允许来自任何源地址的http、https和dns通信通过防火墙
####default log rule
$IPTABLES -A FORWARD -i ! lo -j LOG --log-prefix "DROP" --log-ip-options --log-tcp-options

网络地址转换
iptables的nat表专用于定义所有的NAT规则,在这个表中有两个链:PREROUTING和POSTROUTING,利用PREROUTING链将nat表中的规则应用到还没有通过内核中路由算法确定应从哪个接口传输的数据包,在这个链中处理的数据包也尚未经过filter表中的INPUT或PREROUTING链的处理
POSTROUTING链负责处理经过内核中的路由算法确定传输的物理接口并即将从该接口出去的数据包,由这个链处理的数据包已通过filter表中的output或forward链的检查
### NAT rules
echo "[+]Setting up NAT rules..."
$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
$IPTABLES -t nat -A POSTROUTING -是¥INT_NET -o eth0 -j MASQUERAD
内网的web服务器和DNS服务器的ip地址分别为192.168.10.34,用于提供NAT功能的iptables命令,3个PREROUTING规则允许外网的web服务和DNS请求被发送给合适的内网服务器,在POSTROUTING规则允许来自内部不可路由网络并指向外部因特网的连接看起来就像他们来自IP地址71.157.X.X

构建iptable策略的最后一步实在linux内核中启用ip转发
###forwarding###
echo "[+] Enabling Ip forwarding..."
echo 1 > /proc/sys/net/ipv4/ip_forward

测试用到的命令
hping
nc

iptables防火墙规则的顺序十分重要,内核按顺序检查这些规则,如果发现有匹配的规则条目,则立刻执行相关动作,停止继续向下查找规则条目,如果所有的防火墙规则都未匹配成功,则按照默认的策略处理, -A添加防火墙规则追加到整个链的最后,-I默认会插入到链中作为第一条规则

iptables的用法:iptables [-t 表名] {-A|-D|-I|-F|-L|-R|-Z|-P} 链名 rule-specification

查看filter表的所有规则
iptables -nL
查看filter表防火墙规则并显示规则编号 iptables
-nL --line-number
查看net表的所有规则 iptables
-t nat -nL
清空filter表的所有规则 iptables
-F
在filter表中添加一条新的入站规则,丢弃192.
168.1.0主机发送给防火墙本机的所有数据包 iptables -A INPUT -s 192.168.0.1 -j DROP
在filter表中,拒绝192.
168.0.22ping防火墙本机 iptables -I INPUT -s 192.168.0.22 -p icmp -j REJECT
删除filter表中INPUT链的第一条规则 iptables
-D INPUT 1
替换filter表中第二条规则,拒绝192.168.1.254之外的任何主机连接到防火墙本机 iptables -R INPUT 2 ! -s 192.168.1.254 -j REJECT
修改filter表中INPUT的默认规则是接受数据包 iptables
-t filter -P INPUT ACCEPT
将192.
168.0.10主机发送给防火墙本机22端口的所有数据包信息记录到messages日志: iptables -I INPUT -s 192.168.0.10 -p tcp --dport 22 -j LOG
允许任何主机从eno16网络接口访问防火墙本机的80端口 iptables
-I INPUT -i eno16 --p tcp --dport 80 -j ACCEPT

IPTABLES防火墙应用实例

案例一:允许任意客户端访问服务器主机提供的日常服务(http,https,ssh),在Linux系统中/etc/services文件可以找到各种服务对应的端口号

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

 案例二:公司拥有一个共有ip,使用防火墙实现局域网中所有主机通过SNAT共享上网,使用centos7作为公司软路由,公司内部所有192.168.0.1/24网段内的主机连接到外网124.126.199.84时,防火墙自动将所有数据包的原地址修改为路由器上的公有IP,最后互联网将信息返回路由后,由路由转交给真正的后端主机。防火墙原地址转换(SNAT)规则需写入到NAT表中的POSTROUTING链。

在centos7软路由配置:

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 124.126.199.84

案例三:公司对外有一个公有IP,内部有http,mail两台核心的服务器,通过防火墙实现客户可以从互联网的任意位置访问位于公司内部的两台服务器资源,连接方向发生变化,案例二是SNAT,本例是DNAT.

该案例中0.100是http,0.101是postfix,124.126.199.84是作为软路由使用的。
vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d 124.126.199.84 -p tcp --dport 80 DNAT --to-destination 192.168.0.100 iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d 124.126.199.84 -p tcp --dport 25 DNAT --to-destination 192.168.0.101
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -d 124.126.199.84 -p tcp --dport 110 DNAT --to-destination 192.168.0.101

案例四:目前网络上攻击手法多,很多攻击采用发送大量无效的数据包给服务器,造成服务器无法正常响应正常的数据请求,iptables提供了一个limit扩展功能,可以限制单位时间内数据包的个数。下面是规则是当每秒数据包个数为500时接受入站连接,否则拒绝连接。

iptables -I INPUT -m limit --limit 500/sec -j ACCEPT
iptables -P INPUT DROP

案例五:企业环境中,服务器面临各种攻击,iptables本身属于三层过滤防火墙,也提供了string扩展功能,通过--string可以根据关键词限制网络连接。下面是记录基于Linux软路由服务器防火墙规则中,实现拒绝转发包含有关键词/etc/passwd 以及qq的数据包,防止将密码文件复制出局域网,防止内部员工访问QQ网站。

iptables -I FORWARD -m string --algo bm--string "/etc/passwd" -j REJECT
iptables -I FORWARD -m string --algo bm--string "qq" -j REJECT

案例六:根据数据连接状态设置防火墙规则,放行所有的出站数据包,拒绝入站的新连接请求与无效连接,放行入站的回应请求。

iptables -F
iptables -A INPUT -m state --state NEW -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT

案例七:公司基于Linux软路由设备,要求在路由设备上设置防火墙,记录192.168.0.1-192.168.0.11地址内所有主机发送给路由要求转发的数据包,并允许转发这些数据包

iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.11 -p tcp --dport 80 -j ACCEPT

防火墙的备份和还原,如果不保存,计算机重启后所有规则会丢失。

iptables-save > /etc/sysconfig/iptables
iptables-save > firewall.bak
iptables-restore < firewall.bak

猜你喜欢

转载自www.cnblogs.com/fengzhongzhuzu/p/9075935.html
今日推荐