Linux-----iptables基础篇

本文介绍了Linux中iptables的基础知识,包括规则、链和表的概念,重点讲解了filter、nat和mangle表的用途。此外,详细阐述了iptables命令格式,参数如-A、-I、-D和-R,以及各种动作选项,如ACCEPT、DROP和SNAT。最后,通过实例展示了iptables在禁止用户访问特定端口、删除规则、禁止特定IP访问等方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前一阵子,服务器搞网络安全,这对于小白来说真的是恶心坏了,没办法只能恶补iptables知识,坚决不做睁眼瞎,整理之后发现真的是博大精深,python也不能停,暂时整理出基础篇!深入篇会持续整理。。。

1 iptables基础篇

1.1 iptables基础

  1. 规则(rules):网络管理员预定义的条件。
  2. 链(chains): 是数据包传播的路径。
  3. 表(tables):内置3个表filter表,nat表,mangle表分别用于实现包过滤网络地址转换和包重构的功能。
  4. filter表是系统默认的,INPUT表(内核流入用户空间的数据包),FORWORD(从发用户空间流出的数据包,转发管卡),OUTPUT(进入/离开本机的外网接口),filter表只能对包进行授受和丢弃的操作。
  5. nat表(网络地址转换),PREROUTING(修改即将到来的数据包),OUTPUT(修改在路由之前本地生成的数据包),POSTROUTING(修改即将出去的数据包)。
  6. mangle表,修改报文原数据,PREROUTING,OUTPUT,FORWORD,POSTROUTING,INPUT。

1.2 顺序读取规则

iptables是按照顺序读取规则,所以后续优化会涉及到。

1.3 命令格式

iptables [-t 表名] <-A|I|D|R> 链名 [规则编号] [-i|o 网卡名称] [-p 协议类型] [-s 源ip|源子网] [–sport 源端口号] [-d 目的IP|目标子网] [–dport 目标端口号] [-j 动作]

若不指定表名,默认使用filter表

所有的链名必须大写,表名必须小写,动作必须大写,中间的条件匹配必须小写

1.3.1 参数:

-A 增加 -I 插入 -D 删除 -R 替换

1.3.2 动作选项

ACCEPT 接收数据包
DROP 丢弃数据包
REDIRECT 将数据包重新转向到本机或另一台主机的某一个端口,通常功能实现透明代理或对外开放内网的某些服务
SNAT 源地址转换
DNAT 目的地址转换
MASQUERADE IP伪装
LOG 日志功能

1.4 帮助及环境准备

[root@FRONTDB ~]# iptables –h 
[root@FRONTDB ~]# man iptables
iptables -L -n  查看当前规则
iptables -F  #清空所有的防火墙规则
iptables -X  #删除用户自定义的空链
iptables -Z #清空计数

2 简单应用

[root@FRONTDB ~]# netstat -lntup| grep ssh
tcp    0      0 :::22          :::*          LISTEN      2737/ssh
[root@FRONTDB ~]# lsof -i :22
COMMAND   PID   USER   FD   TYPE DEVICE SIZE NODE NAME
sshd     2737   root    3u  IPv6   9183       TCP *:ssh (LISTEN)
sshd    17199   root    3u  IPv6 521111       TCP FRONTDB:ssh->192.168.0.201:n2nremote (ESTABLISHED)
sshd    17201 oracle    3u  IPv6 521111       TCP FRONTDB:ssh->192.168.0.201:n2nremote (ESTABLISHED)
[root@FRONTDB ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j DROP

2.1 尝试禁止用户访问1521端口

[root@FRONTDB ~]# lsof -i :1521
COMMAND  PID   USER   FD   TYPE DEVICE SIZE NODE NAME
tnslsnr 2660 oracle    8u  IPv4   8998       TCP FRONTDB:ncube-lm (LISTEN)

2.2 删除规则

[root@FRONTDB ~]# iptables -t filter -A INPUT -p tcp --dport 80 -j DROP
[root@FRONTDB ~]# iptables -L -n --line-numbers                        
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
[root@FRONTDB ~]# iptables -t filter -D INPUT 1 
[root@FRONTDB ~]# iptables -L –n

2.3 -A和-I的区别

-I insert会把规则添加到第一行 ,一般用于禁止IP,匹配到禁止IP后后面的规则不再匹配
-A append会把规则添加到最后一行

[root@FRONTDB ~]# iptables -t filter -A INPUT -p tcp --dport 81 -j DROP 
[root@FRONTDB ~]# iptables -t filter -A INPUT -p tcp --dport 82 -j DROP 
[root@FRONTDB ~]# iptables -t filter -A INPUT -p tcp --dport 83 -j DROP 
[root@FRONTDB ~]# iptables -t filter -I INPUT -p tcp --dport 84 -j DROP   
[root@FRONTDB ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:84 
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:81 
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:82 
DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:83 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         


[root@FRONTDB ~]# iptables -t filter -I INPUT 2 -p tcp --dport 85 -j DROP 
[root@FRONTDB ~]# iptables -L -n --line-numbers                          
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:84 
2    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:85 
3    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:81 
4    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:82 
5    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:83 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

2.4 禁止192.168.0.20访问

[root@FRONTDB ~]# iptables -t filter -A INPUT  -i eth0  -s 192.168.0.20/32 -j DROP

也可以禁止网段访问

2.5 禁止非自己的访问

[root@FRONTDB ~]# iptables -t filter -A INPUT  -i eth0 ! -s 192.168.0.21/32 -j DROP
此时CRT掉了,20也ping不同,只能去本机上iptables –F了。。。

2.6 禁端口范围

[root@FRONTDB ~]# iptables -I INPUT -p tcp --dport 20:23 -j DROP
此时CRT又连不上。。。
[root@FRONTDB ~]# iptables -I INPUT -p tcp -m multiport --dport 121,22,123,204 -j DROP
此时-m multiport必须写,否则报错

2.7 匹配icmp类型

[root@FRONTDB ~]# iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 -s 192.168.0.20/32 -j DROP  (也是禁ping)
等价于:
[root@FRONTDB ~]# iptables -t filter -I INPUT -p icmp -m icmp --icmp-type any -j DROP

2.8 匹配网络状态

NEW;已经或者将启动新的连接
ESTABLISHED:已经建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别

FTP服务是特殊的,需要匹配连接状态
允许关联的状态包通过(web服务不要使用ftp服务)

[root@FRONTDB ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@FRONTDB ~]# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-m limit
本机21,允许20网络ping本机,但限制每分钟请求不能超过20,每次并发不能超过3个

[root@FRONTDB ~]# iptables -A INPUT -s 192.168.0.20/32 -d 192.168.0.21/32 -p icmp --icmp-type 8 -m limit --limit 20/min --limit-burst 3 -j ACCEPT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值