linux iptables命令防火墙设置功能

作者: admin 分类: linux常用命令大全 发布时间: 2018-06-24 14:45

  iptables防火墙IPv4数据包过滤和NAT管理工具

功能描述:

使用iptables命令可以设置、维护和检查在Linux内核中的IPv4数据包过滤规则表。几个不同的表可以被定义。每个表含有一些内置的链,也可以含有用户自定义链。每条链是规则可匹配一组的包的列表。每个规则指定如何处理数据包匹配。这就是所谓的“目标”,其可以在同一表中跳转到一个用户定义的链。

命令语法:

iptables[-t 表]{-A|-D}[链][规则详述]

iptables[-t表]-I[链][规则号][规则详述]

iptables[-t表]-R[链][规则号][规则详述]

iptables[-t表]-D[链][规则号]

iptables[-t表]-S[链[规则号]]

iptables[-t表]{-F|-L|-Z}[链[规则号]][选项]

iptables[-t表]-N[链]

iptables[-t表]-X[链]

iptables[-t表]-P[链][目标]

iptables[-t表]-E[旧链名][新链名]

操作命令

 

 操作命令

 描述

 -A  在指定链的链尾添加规则
 -D  从指定链中删除匹配的规则
 -R  在指定链中替换匹配的规则
 -I  以指定规则号在所选链中插入规则
 -L  列出指定链或所有链的规则
 -S  显示指定链或所有链的规则
 -F  在指定链或所有链中删除所有规则
 -N  指定名称创建新的用户自定义链
 -X  删除指定的用户自定义链
 -P  在内置链上设置默认规则策略,用户自定义链不起作用
 -Z  将指定链或所有链中所有规则的包字节计数器清零
 -E  更改用户自定义链的名称
 -v  输出详细信息
 -n  数字输出,IP地址和端口号将以数字格式显示
 -x  扩大数字,显示包和字节计数器的精确值

 

基本规则匹配器用于匹配数据包中的协议、IP地址、端口号、接口和ICMP类型等,列出了基本规则匹配器。

基本规则匹配器

 

 基本规则匹配器

 描述

 -p protocol  匹配协议,比如tcp、udp、icmp或all,all会匹配所有协议,前缀“!”为逻辑非,表示除该协议外的所有协议
 -s address[/mask]  匹配源地址。地址可以是一个网络名、主机名、网络IP地址(带有/掩码),或者一个普通的IP地址
 -d address[/mask]  匹配目的地址
 --sport port[:port]  匹配源端口
 --dport port[:port]  匹配目的地址
 -o name  匹配将被发送数据包的接口名称(只适用于从FORWARD、OUTPUT和POSTROUTING链输出的数据包)。如果接口名称结尾有一个“+”,表示匹配所有此类接口
 -i name  匹配数据包被接收的接口的名称(只适用于数据包进入INPUT、FORWARD和POSTROUTING链输出的数据包)。如果接口名称结尾有一个“+”,表示匹配所有此类接口
 -f  指定数据包的第二个和以后的IP碎片
 -c packets bytes  使得管理员可以初始化规则的数据包和字节计数器(INSERT、APPEND和REPLACE操作)
 --icmp-type{type[/code]\typename}  匹配ICMP类型(使用iptables -p icmp -h命令查看有效的ICMP类型名)
 --tcp-flags mask comp  匹配TCP标记。有两个参数,第一个参数提供检查范围,第二个参数提供被设置的条件(就是哪些位置1)。这个匹配操作可以识别以下标记:SYN、ACK、FIN、RST、URG、PSH。另外还有ALL和NONE。ALL是指选定所有的标记,NONE是指未选定任何标记。

 

规则链

INPUT:处理入站数据包

OUTPUT:处理出站数据包

FORWARD:处理转发数据包

POSTROUTING:在进行路由选择后处理数据包

PREROUTING:在进行路由选择前处理数据包

iptables规则表

raw表:确定是否对该数据包进行状态跟踪

mangle表:为数据包设置标记(质量管理QoS、分流口出、限流限制出入)

nat表:修改数据包中的源、目标IP地址或端口

filter表;确定是否被放行该数据包(过滤)
 


 

  例如:列出所有链的规则(默认为filter表)。

  [root@localhost ~]# iptables -L

  将IP地址和端口号以数字格式显示列出所有链的规则。

  [root@localhost ~]# iptables -nL

  详细列出所有链的规则。

  [root@localhost ~]# iptables -vL

  注意:不能使用iptables -Lv命令,使用该命令会出现以下错误信息。

  iptables No chain/target/match by that name.

  正确的命令应该是iptables -vL

  列出INPUT链的规则。

  [root@localhost ~]# iptables -L INPUT

  列出INPUT链的1号规则。

  [root@localhost ~]# iptables -L INPUT 1

  显示所有链的规则。

  [root@localhost ~]# iptables -S

  注意:不能使用iptables -Sv命令,使用该命令会出现以下错误信息。

  iptables No chain/match by that name

  正确的命令应该是iptables -vS.

  显示INPUT链的规则

  [root@localhost ~]# iptables -S INPUT

  -P INPUT ACCEPT

  显示INPUT链的1号规则。

  [root@localhost ~]# iptables -S INPUT 1

  清除所有链的规则(默认为filter表)。

  [root@localhost ~]# iptables -F

  清除INPUT链的所有规则。

  [root@localhost ~]# iptables -F INPUT

  将所有链中的规则的包字节计数器清零。

  [root@localhost ~]# iptables -Z

  将INPUT链中的规则的包字节计数器清零

  [root@localhost ~]# iptables -Z INPUT

  将INPUT链中的1号规则的包字节计数器清零

  [root@localhost ~]# iptables -Z INPUT 1

  在INPUT、OUTPUT和FORWARD链上设置默认规则策略为DROP(拒绝所有数据包)

  [root@localhost ~]# iptables -P INPUT DROP

  [root@localhost ~]# iptables -P OUTPUT DROP

  [root@localhost ~]# iptables -P FORWARD DROP

  在INPUT、OUTPUT和FORWARD链上设置默认规则策略为DROP(允许所有数据包)

  [root@localhost ~]# iptables -P INPUT ACCEPT

  [root@localhost ~]# iptables -P OUTPUT ACCEPT

  [root@localhost ~]# iptables -P FORWARD ACCEPT

  在INPUT链上添加规则,协议为tcp,目标端口号是21。

  [root@localhost ~]# iptables -A INPUT -p tcp --dport 21

  在INPUT链上插入规则,协议为tcp,目标端口号是23,规则号是1。

  [root@localhost ~]# iptables -I INPUT 1 -p tcp --dport 23

  在INPUT链上替换规则号1的iptables规则,将目标端口号更改为24。

  [root@localhost ~]# iptables -R INPUT 1 -p tcp --dport 24

  在INPUT链上删除规则号是1的iptables规则。

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

  创建用户自定义链WWW。

  [root@localhost ~]# iptables -N WWW

  [root@localhost ~]# iptables -L WWW

  Chain WWW (0 references)

  target prot opt source destination

  //列出用户自定义链WWW的规则

  更改用户自定义链WWW名称为OOO

  [root@localhost ~]# iptables -E WWW OOO

  删除用户自定义链OOO

  [root@localhost ~]# iptables -X OOO

  删除所有的用户自定义链

  [root@localhost ~]# iptables -X

  指定协议配置iptables

  [root@localhost ~]# iptables -A INPUT -p tcp -j ACCEPT

  [root@localhost ~]# iptables -A INPUT -p udp -j ACCEPT

  指定ICMP类型配置iptables

  [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

  [root@localhost ~]# iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

  [root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

  指定IP地址配置iptables

  [root@localhost ~]# iptables -A INPUT -s 192.168.0.5 -j ACCEPT

  [root@localhost ~]# iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

  指定接口配置iptables

  [root@localhost ~]# iptables -A INPUT -i ech0 -j ACCEPT

  [root@localhost ~]# iptables -A FORWARD -o ech0 -j ACCEPT

  [root@localhost ~]# iptables -A FORWARD -o PPP+ -j ACCEPT

  指定端口号配置iptables

  [root@localhost ~]# iptables -A INPUT -p tcp --sport www -j ACCEPT

  [root@localhost ~]# iptables -A INPUT -p tcp --sport 80 -j ACCEPT

  [root@localhost ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT

  [root@localhost ~]# iptables -A INPUT -p tcp --sport 22:80 -j ACCEPT

  指定IP碎片配置iptables

  [root@localhost ~]# iptables -A FORWARD -p tcp -s 192.168.0..0/24 -d 192.168.1.200 --dport 80 -j ACCEPT

  [root@localhost ~]# iptables -A FORWARD -f -s 192.168.0..0/24 -d 192.168.1.200 -j ACCEPT

  指定TCP标记配置iptables

  [root@localhost ~]# iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j ACCEPT

  [root@localhost ~]# iptables -A FORWARD -p tcp --tcp-flags ALL SYN,ACK -j ACCEPT

  [root@localhost ~]# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j ACCEPT
 

防止远程攻击者访问局域网是网络安全的重要方面之一。通过使用严格的防火墙规则,应该保护局域网的完整性,使其免受恶意远程用户的攻击。

  启动iptables服务

  ~]# service iptables restart

  iptables若要默认情况下启动系统

  ~]# chkconfig --level 345 iptables on

  例如,允许访问端口80在防火墙上,附加下列规则:

  ~]# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

  这允许用户浏览使用标准端口80进行通信的网站。为了允许访问安全的网站(例如https://idc.wanyunshuju.com/),您还需要提供对端口443的访问,如下所示:

  ~]# iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

  允许192.168.100.13中的数据包的规则必须在丢弃子网其余部分的规则之前。

  若要在现有链中的特定位置插入规则,请使用-I选择。例如:

  ~]# iptables -I INPUT 1 -i lo -p all -j ACCEPT

  然而,对于拥有宽带连接的远程用户,可以做出特殊情况。您可以配置iptables接受来自远程SSH客户端的连接。例如,以下规则允许远程SSH访问:

  ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

  ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

  大FORWARDChain允许管理员控制数据包可以在局域网中路由的位置。例如,为了允许整个LAN的转发(假设防火墙/网关在eth1上分配了内部IP地址),请使用以下规则:

  ~]# iptables -A FORWARD -i eth1 -j ACCEPT

  ~]# iptables -A FORWARD -o eth1 -j ACCEPT

  默认情况下,RedHatEnterpriseLinux内核中的IPv 4策略禁用对IP转发的支持。这防止了运行RedHatEnterpriseLinux的机器作为专用边缘路由器的功能。若要启用IP转发,请使用以下命令作为根用户:

  ~]# sysctl -w net.ipv4.ip_forward=1

  net.ipv4.ip_forward = 1

  若要永久设置ip转发,请编辑/etc/sysctl.conf档案如下:

  查找以下行:

  net.ipv4.ip_forward = 0

  编辑如下:

  net.ipv4.ip_forward = 1

  作为根用户,运行以下命令以启用对sysctl.conf档案:

  ~]# sysctl -p /etc/sysctl.conf

  net.ipv4.ip_forward = 1

  net.ipv4.conf.default.rp_filter = 1

  net.ipv4.conf.default.accept_source_route = 0

  [output truncated]

  后处理与IP伪装

  若要允许具有专用IP地址的LAN节点与外部公共网络通信,请将防火墙配置为IP伪装,它用防火墙外部设备的IP地址(在本例中为eth0)掩码来自局域网节点的请求:

  ~]# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

  恶意软件和伪造IP地址

  例如,一些特洛伊木马从31337到31340之间扫描端口上的服务(称为精英开裂术语中的港口)。

  以下规则删除试图使用端口31337的所有tcp通信量:

  ~]# iptables -A OUTPUT -o eth0 -p tcp --dport 31337 --sport 31337 -j DROP

  ~]# iptables -A FORWARD -o eth0 -p tcp --dport 31337 --sport 31337 -j DROP

  例如,如果您的LAN使用192.168.1.0/24范围,则可以设计一条规则,指示面向Internet的网络设备(例如eth0)将任何数据包丢弃到该设备,该设备具有您的LAN IP范围内的地址。

  由于建议将转发的数据包作为默认策略拒绝,因此将自动拒绝任何其他欺骗到外部设备(Eth0)的IP地址。

  ~]# iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -j DROP

  IPTABLES和连接跟踪

  iptables任何网络协议的连接跟踪,即使协议本身是无状态的(例如UDP)。下面的示例显示了使用连接跟踪仅转发与已建立连接关联的数据包的规则:

  ~]# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

  大ip6tables命令语法与iptables除了它支持128位地址以外,在每个方面。例如,使用以下命令在支持IPv 6的网络服务器上启用SSH连接:

  ~]# ip6tables -A INPUT -i eth0 -p tcp -s 3ffe:ffff:100::1/128 --dport 22 -j ACCEPT

Linux 命令大全

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!