linux下防火墙iptables

工作于网络或主机边缘,对进出本网络或本主机的网络报文安装事先设定好的匹配规则进行检查,对能够被规则所匹配的报文按照规则定义的处理机制进行处理的组件

通常情况下iptables/netfilter默认大策略为以下两种情况:

拒绝所有 放开合法
放行所有 拒绝违法

1、iptables规则具有4大规则功能表

filter:包过滤,用于防火墙规则,可以对应input,forward,output三个链
nat:地址转换,用于网关路由器,可以对应prerouting,postrouting,output三个链
         snat dnat pat(端口转换)
mangle:数据包修改(QOS),用于实现服务质量,input,forward,prerouting,postrouting,output五个链均可以用
raw:高级功能,如:网址过滤, prerouting,output两个链可以使用

2、iptables具有5大规则链

prerouting:用于目标地址转换(DNAT)

input:处理输入数据包,如果数据包的目的地址是本机,则系统将数据包送往Input链。如果通过规则检查,则该包被发给相应的本地进程处理;如果没有通过规则检查,系统就会将这个包丢掉。

forward:处理转发数据包,如果数据包的目的地址不是本机,也就是说,这个包将被转发,则系统将数据包送往Forward链。如果通过规则检查,则该包被发给相应的本地进程处理; 如果没有通过规则检查,系统就会将这个包丢掉。

output:处理输出数据包,如果数据包是由本地系统进程产生的,则系统将其送往Output链。如果通过规则检查,则该包被发给相应的本地进程处理;如果没有通过规则检查,系统就会将这包丢掉。

postrouting:用于源地址转换(SNAT)

3、iptables的规则属性

1、网络层协议属性 ip 协议
2、传输层协议属性 tcp udp icmp

4、常见命令参数

-L == --list
    -n:数字格式显示ip和port
    --line-numbers:显示链中规则的行号
    -x:显示精确值,不要做单位换算
     -t:(filter|nat|mangle|raw)

小写字母选项:用来定义匹配标准以及其他

管理链:
-F:清空链
     iptables -t filter -F INPUT

-P:设定默认策略
     iptables -t filter -P INPUT DROP (ACCEPT)

-N:新建一条自定义链
    iptables -N FILTER_WEB
-X:删除自定义的空链
-Z:计算器清零
    iptables -Z
-E:重新命名自定义链

管理规则:
-A:追加规则
-I (n):指定位置,插入规则为第n条
-D (n):删除第n条
-R( n):替换第n条

编写规则语法
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
目标动作:
         drop 丢弃
         reject 拒绝
         accept 接受
         return 
         redirect 端口重定向
         dnat 目标地址转换
         snat 源地址转换
         MASGUEGRADE IP伪装(NAT),用于ADSL
         log 日志记录
         mark
自定义链
匹配标准
通用匹配
              -s|--src|--source [!]IP
              -d|--dst|--destinaton [!] IP

eg:

iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -j ACCEPT

-i incoming_interface:指定数据报文流入接口与INPUT、 PREROUTING 、FORWARD链一起用

eg:

iptables -t filter -A INPUT -s 192.168.217.0/24 -d 192.168.217.134 -i eth0 -j ACCEPT

-o outing_interface:指定数据报文流出接口与OUTPUT 、PREROUTING、 FORWARD链一起用
-p {tcp|udp|icmp}
eg:增加规则,允许tcp协议通过网卡到达主机内部
iptables -t filter -A INPUT -s 192.168.217.0/24 -d 192.168.217.134 -p tcp -j ACCEPT
eg:修改第二条规则为放行tcp协议
iptables -t filter -R INPUT 2 -s 192.168.217.0/24 -d 192.168.217.134 -p tcp -j ACCEPT

iptables -I INPUT 1 -s 192.168.217.0/24 -p tcp -dport 22 -j ACCEPT

5、扩展匹配
隐含扩展
-p tcp
--sport
--dport
--tcp-flags
--tcp-flags SYN,ACK,RST FIN SYN
ALL
NONE
--tcp-flags ALL SYN,FIN
--syn == --tcp-flags SYN,ACK,RST FIN SYN
-p udp
--sport
--dport
例如:本机dns服务器,要为本地客户端做递归查询,iptables的INPUT.OUTPUT默认为DROP,本机地址为192.168.21.34
iptables -A INPUT -d 192.168.21.134 -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -s 192.168.21.134 -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -s 192.168.21.34 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -d 192.168.21.134 -p udp --sport 53 -j ACCEPT
-p icmp
--icmp-type
请求:8
响应:0
允许自己能ping通别人 以及允许别人能ping通自己需要四条规则

允许icmp包从192.168.21.134出去
iptables -A OUTPUT -s 192.168.217.0/24 -d 192.168.21.134 -p icmp --icmp-type 8 -j ACCEPT
允许icmp响应包进入192.168.21.134
iptables -A INPUT -s 192.168.21.134 -d 192.168.217.0/24 -p icmp --icmp-type 0 -j ACCEPT

允许别人icmp包进来
iptables -A INPUT -s 192.168.21.134 -d 192.168.217.0/24 -p icmp --icmp-type 8 -j ACCEPT
允许别人进来后出去
iptables -A OUTPUT -s 192.168.217.0/24 -d 192.168.21.134 -p icmp --icmp-type 0 -j ACCEPT

显式扩展
-m sate --state NEW ESTABLISHED RELATED INVALID
第一次发起的请求为NEW,之后都称为ESTABLISHE,RELATED不止一个协议的应用

SSH示例
iptables -I INPUT 1 -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I OUTPUT 1 -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

所有建立连接的报文允许从本地出去
iptables -I OUTPUT 1 -s 172.16.100.1 -m state --state ESTABLISHED -j ACCEPT

iptables放行ftp服务
需要装载:nf_conntrack_ftp模块,可以使用modprobe命令,也可编辑/etc/sysconfig/iptables-config文件
INPUT OUTPUT 默认为drop
iptables -A INPUT -d 172.16.100.1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.100.1 -m state --state RELATED,ESTABLISHED -j ACCEPT

多端口匹配,可以指定15个以内的离散端口
-m mulitport
--source-ports
--destination-ports
--ports
在input链上,插入规则为第二条规则,同时允许新链接tcp报文的21 22 80端口进入
iptables -I INPUT 2 -s 172.16.100.1 -p tcp -m state --state NEW -m multiport --destination-ports 21,22,80 -j ACCEPT

-m iprange:指定匹配的ip地址范围,如172.16.100.1-172.16.109.254
--src-range 172.16.100.1-172.16.109.254
--dst-range 172.16.100.1-172.16.109.254

-m limit
--limit 12/min 5s时间放行一个
--limit-burst 2 一次放行2个

eg:插入规则为第二条该规则允许每次放入2个新连接,之后每5秒放进一个新连接
iptables -I INPUT 2 -s 172.16.0.0/16 -d 172.16.100.1 -m sate --state NEW -m limit --limit 12/min --limit-burst 2 -j ACCEPT
eg:一分钟只允许指定ping包的个数进入本机

-m string
--string ""
--algo {bm|kmp}

-m time
--datestart
--datestop

--timestart
--timestop

--weekdays
--monthdays

-m connlimit
--connlimit-above [num] 连接数限制
默认规则为DROP时
来自172.16.0.0/16网络访问80端口的数量不超过5个
iptables -A INPUT -s 172.16.0.0/16 -p tcp --dport 80 -m connlimit ! --connlimit-above 5 -j ACCEPT

-m hashlimit,limit

recent模块抵御dos攻击,建立一个列表保存所有访问过的指定的服务的客户端IP
300秒内连续访问3次将拒绝访问,需要等待5分钟后才能打开新的连接
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptableS -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
备注
--name 后面的SSH是记录访问tcp 22端口的新连接 记录名称为SSH
--update 是指每次建立连接都更新列表
--seconds必须与--rcheck或者--update同时使用
--hitcount必须与--rcheck或者--update同时使用
iptables的记录连接信息位置为 /proc/net/xt_recent/SSH

iptables记录访问日志
iptables -A INPUT -p udp -j LOG --log-prefix "IPTABLES UDP-IN: "
iptables -A INPUT -p tcp -j LOG --log-prefix "IPTABLES TCP-IN: "
iptables -A INPUT -j LOG --log-prefix "IPTABLES PROTOCOL-X-IN: "

6、练习INPUT和OUTPUT
     1、限制本地主机的web服务器在周一不允许访问,且新增请求的速率不允许超过100个每秒,web字符包含admin字符的页面不允许访问,
web服务仅允许响应报文离开本机
iptables -I INPUT 1 -m state --state ESTABLISHED,RELATED, -j ACCEPT
iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m time --weekdays Tue,Wed,Thu,Fri,Sat,Sun -m --limit 100/sec -m string --algo kmp ! --string "admin" -m state --state NEW -j ACCEPT
iptables -I OUTPUT 1 -m state --state ESTABLISHED,RELATED, -j ACCEPT

     2、在工作时间,即周一到周五的8:30-17:30,开放本机的ftp服务给172.16.0.0的网络中主机访问数据下载请求次数每秒钟不超过5个
iptables -I INPUT 1 -m state --state ESTABLISHED, -j ACCEPT
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 21 -m time --weekdays Mon,Tue,Wed,Thu,Fri --timestart 08:30:00 --timestop 17:30:00 -j ACCEPT
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp -m state --state RELATED -m limit 5/min -j ACCEPT
iptables -I OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT

    3、开放本机的ssh服务给172.16.x.1-172.16.x.100网络中的主机,新请求速率每分钟不得超过2个,仅允许响应报文通过其服务端口离开本机
iptables -A INPUT -m iprange --src-range 172.16.100.1-172.16.100.100 -m limit --limit 2/min -p tcp --dport 22 -d 172.16.100.1 -i eth0 -m state --state NEW -j ACCEPT

    4、拒绝tcp状态标志位为1及全部为0的报文访问本机
iptables -N clean_in
iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
iptables -A clean_in -f 172.16.100.1 -j RETURN
iptables -I INPUT 1 -D 172.16.100.1 -j clean_in

    5、允许本地请求本地
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT 或 iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT 或 iptables -A OUTPUT -o lo -j ACCEPT

    6、允许本地主机ping别的主机,别的主机不允许ping本地主机
iptables -A INPUT -m state --state ESTABLISHED, -j ACCEPT
iptables -A OUTPUT -s 172.16.100.1 -p icmp --icmp-type 8 -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

7、nat表
大并发不适合nat模式

SNAT:代理内部客户端访问外部网络。在iptables上的POSTROUTING
-j SNAT --to-source IP
-j MASGUEGRADE
服务器地址为192.168.10.10(模拟内网地址)
nat服务器,两块网卡,一个网卡地址为192.168.10.11(模拟内网地址),一个网卡地址为172.16.100.1 (模拟外网地址)
web服务器的地址为172.16.100.17(模拟外网地址)
一、如何通过192.168.10.10(模拟内网地址)服务器访问172.16.100.17(模拟外网地址)
方法一
1、开启ip_forward为1
2、iptables -P FORWARD ACCEPT
3、iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1

方法二
分别在192.168.10.10上、172.16.100.17写路由

二、仅允许192.168.10.10服务器访问172.16.100.17的web服务
iptables -P FORWARD DROP
iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -d 192.168.10.0/24 -p tcp --sport 80 -j ACCEPT

DNAT:将内部服务器发布至外部网络(外部访问内部服务应用,此场景下ftp比较麻烦) 在iptable上的PREROUTING
-j DNAT --to-destination IP
外部通过访问192.168.10.254(模拟外网地址)的80取代 直接访问172.16.100.17(模拟内网地址)的80
即在192.168.10.254的80到172.16.100.17的80做映射关系
iptables -P FORWARD ACCEPT
iptables -t nat -A PREROUTING -d 192.168.10.254 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.17

iptables -P FORWARD DROP
iptables -t nat -A PREROUTING -d 192.168.10.254 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.17
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -d 172.16.100.17 -p tcp --dport 80 -m state --state NEW -j ACCEPT

8、规则保存生效

service iptables save
保存到/etc/sysconfig/iptables中
iptables-save > /path/to/iptables.rules

生效文件中的规则
iptables-restore < /path/to/iptables.rules

eg:ubuntu下操作

iptables-save > /etc/init.d/iptables.up.rules
echo "pre-up iptables-restore < /etc/init.d/iptables.up.rules" >>/etc/network/interfaces

Linux下iptables总结的更多相关文章

  1. linux下iptables配置模板

    linux下iptables配置模板 # Flush all policy iptables -F iptables -X iptables -Z iptables -t nat -F iptable ...

  2. 详解Linux下iptables中的DNAT与SNAT设置(转)

    详解Linux下iptables中的DNAT与SNAT设置 这篇文章主要介绍了Linux下iptables中的DNAT与SNAT设置,是Linux网络配置中的基础知识,需要的朋友可以参考下   原文连 ...

  3. linux下IPTABLES配置详解 (防火墙命令)

    linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT ...

  4. 基于Linux下Iptables限制BT下载的研究

    基于Linux下Iptables限制BT下载的研究   摘要:     当前BT下载技术和软件飞速发展,给人们网上冲浪获取资源带来了极大的便利, 但同时BT占用大量的网络带宽等资源也给网络和网络管理员 ...

  5. Linux下iptables学习笔记

    Linux下iptables学习笔记 在Centos7版本之后,防火墙应用已经由从前的iptables转变为firewall这款应用了.但是,当今绝大多数的Linux版本(特别是企业中)还是使用的6. ...

  6. RedHat Linux下iptables防火墙设置

    一般情况下iptables已经包含在Linux发行版中.运行 # iptables --version 来查看系统是否安装iptables 启动iptables:# service iptables ...

  7. linux下iptables防火墙设置

    各位linux的爱好者或者工作跟linux相关的程序员,我们在工作中经常遇到应用服务器端口已经启动, 在网络正常的情况下,访问不到应用程序,这个跟防火墙设置有关 操作步骤 1.检查有没有启动防火墙 s ...

  8. Linux下iptables 禁止端口和开放端口

    1.关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放.下面是命令实现: iptables -P INPUT DROP iptables -P FORWARD DROP iptab ...

  9. Linux下iptables安全配置

    Linux下配置IPTables,只开放特定端口,禁用其他网络. *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] ...

随机推荐

  1. 分享几个高效编写JS 的心得

    原则 不要做任何优化除非的确需要优化   任何的性能优化都必须以测量数据为基础,如果你怀疑代码存在性能问题,首先通过测试来验证你的想法.性能优化三问 我还能做哪些工作从而让代码变得更有效率? 流行的J ...

  2. Agc003_D AntiCube

    传送门 题目大意 给定$N$个数,求一个最大的子集,使得任意两两的乘积不是一个完全立方数. $n\leq 10^5 A_i\leq 10^{10}$ 题解 考虑两两乘积为$x^3$,由于$x^3\le ...

  3. noip2017列队(线段树)

    维护一个方阵,支持 1.删掉一个点,剩下的点先向左看齐再向前看齐 2.询问一个位置上是哪个点 $n,m,q \leq 3 \times 10^5$ sol: 我们每行前$m-1$列维护一个线段树,最后 ...

  4. BZOJ4545: DQS的trie

    BZOJ4545: DQS的trie https://lydsy.com/JudgeOnline/problem.php?id=4545 分析: 对trie用dfs建sam复杂度是\(O(n^2)\) ...

  5. bzoj 1069: [SCOI2007]最大土地面积 凸包+旋转卡壳

    题目大意: 二维平面有N个点,选择其中的任意四个点使这四个点围成的多边形面积最大 题解: 很容易发现这四个点一定在凸包上 所以我们枚举一条边再旋转卡壳确定另外的两个点即可 旋(xuan2)转(zhua ...

  6. gulp之压缩图片

    //先全局安装gulp:npm install -g gulp //然后在项目根目录中安装gulp依赖:npm install --save-dev gulp //http://www.gulpjs. ...

  7. BZOJ1216:[HNOI2003]操作系统

    我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...

  8. 用C语言实现中文到unicode码的转换

    转自:  http://blog.csdn.net/qq_21792169/article/details/50379275 源文件用不同的编码方式编写,会导致执行结果不一样 由于本人喜欢用Notep ...

  9. 机器学习前沿热点——Deep Learning

    深度学习是机器学习研究中的一个新的领域,其动机在于建立.模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像.声音和文本.深度学习是无监督学习的一种. 深度学习的概念源于人工神经网络的 ...

  10. 使用python ftplib包递归下载文件夹及文件

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2018-06-11 09:35:49 # @Author : Yaheng Wang ...