Home Archives Categories Tags

Linux iptables 规则

发布时间: 更新时间: 总字数:1990 阅读时间:4m 作者: 分享
专栏文章
  1. Linux Netfilter 介绍
  2. Linux iptables 规则(当前)
  3. Linux ipset 使用介绍

iptables 是在 用户空间 控制 Netfilter 的工具,NetfilterLinux内核 中的一个软件框架,用于管理网络数据包Netfilter/iptables 实现 Linux 平台下的包过滤防火墙功能。

理论

iptables 的核心是规则,它存储在内核空间的信息包过滤表,规则包括源地址、目的地址、传输协议(如:TCP/UDP/ICMP等)和应用层协议(如:HTTP/FTP/SMTP等)等。如果数据包符合规则,就执行对应的动作。动作有:放行(accept)、拒绝(reject)和丢下(drop)。iptables 的控制这些规则的工具,Netfilter负责实现响应功能。

iptables 链包括:

  • PREROUTING
  • FORWARD
  • POSTROUTING
  • INPUT
  • OUTPUT

通过上图,报文流向说明如下:

到本机某进程的报文:网卡 -> PREROUTING -> INPUT -> 某个进程 从本机的某进程发出/响应的报文:某个进程 -> OUTPUT -> POSTROUTING -> 网卡 本机转发的报文:网卡 -> PREROUTING -> FORWARD -> POSTROUTING -> 网卡

每个上都可以有一系列的规则,相同的规则的集合叫 。根据规则类型 iptables 定义为如下4类:

  • raw表:关闭nat表上启用的连接追踪机制,内核模块:iptable_raw
  • mangle表:拆解报文,做出修改,并重新封装 的功能,内核模块:iptable_mangle
  • nat表(network address translation):网络地址转换功能,内核模块:iptable_nat
  • filter表:负责过滤功能,防火墙,内核模块:iptables_filter

表优先级次序(由高而低):

raw -> mangle -> nat -> filter

表和链的关系

  • raw表支持的PREROUTINGOUTPUT
  • mangle表支持的PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
  • nat表支持的PREROUTINGOUTPUTPOSTROUTINGINPUT
  • filter表支持的INPUTFORWARDOUTPUT

匹配条件

  • Source IP 源地址
  • Destination IP 目标地址
  • Source Port 源端口
  • Destination Port 目标端口

动作

  • ACCEPT:允许数据包通过
  • DROP:直接丢弃数据包
  • REJECT:拒绝数据包通过
  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题
    • MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上
  • DNAT:目标地址转换
  • REDIRECT:本机做端口映射
  • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

使用

iptables是Linux上常用的防火墙软件,下面给大家说一下iptables的安装、清除iptables规则、iptables只开放指定端口、iptables屏蔽指定ip、ip段及解封、删除已添加的iptables规则等iptables的基本应用。

安装

  • CentOS执行:
yum install iptables -y
  • Debian/Ubuntu执行:
apt-get install iptables
  • 配置服务
# 相当于以前的chkconfig iptables on
systemctl enable iptables.service

# 开启服务
systemctl start iptables.service

# 查看状态
systemctl status iptables.service

查看规则

iptables -nvL
  • v:显示详细信息,包括每条规则的匹配包数量和匹配字节数
  • x:在 v 的基础上,禁止自动单位换算(K、M)
  • n:只显示IP地址和端口号,不将ip解析为域名

清除规则

# 1. 清空所有默认规则
iptables -F

# 2. 清空所有自定义规则
iptables -X

# 3. 所有计数器归0
iptables -Z
  • 删除指定规则

将所有iptables以序号标记显示,执行:

iptables -nL
iptables -nL --line-numbers

比如要删除INPUT里序号为8的规则,执行:

iptables -D INPUT 8

开放指定的端口

# 1. 允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

# 2. 允许已建立的或相关连的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 3. 允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT

# 4. 允许访问22端口,如果22端口未加入允许规则,SSH链接会直接断开。
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 5. 允许访问80/443端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 6. 允许FTP服务的21和20端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

# 7. 禁止其他未允许的规则访问
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

# 8. 屏蔽单个IP的命令
iptables -I INPUT -s 123.45.6.7 -j DROP

# 9. 封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP

# 10. 先允许所有,不然有可能会杯具
iptables -P INPUT ACCEPT

# 11. 允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

# 12. 允许接受本机请求之后的返回数据 RELATED,是为FTP设置的
iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT

# 13. 其他入站一律丢弃
iptables -P INPUT DROP

# 14. 所有出站一律绿灯
iptables -P OUTPUT ACCEPT

# 15. 所有转发一律丢弃
iptables -P FORWARD DROP

保存规则设定

保存上述规则

service iptables save

实战

解决vsftpd在iptables问题

vsftpd无法使用被动模式的问题解决方式:

  1. 首先在/etc/sysconfig/iptables-config中修改或者添加以下内容
#添加以下内容,注意顺序不能调换
IPTABLES_MODULES="ip_conntrack_ftp"
IPTABLES_MODULES="ip_nat_ftp"
  1. 重新设置iptables设置
iptables -A INPUT -m state --state  RELATED,ESTABLISHED -j ACCEPT

以下为完整设置脚本

#!/bin/sh
iptables -P INPUT ACCEPT
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
service iptables save
systemctl restart iptables.service

参考

  1. http://iptables.xiexianbin.cn/1.1.19/index.html
专栏文章
  1. Linux Netfilter 介绍
  2. Linux iptables 规则(当前)
  3. Linux ipset 使用介绍
最新评论
加载中...