iptables基础笔记

index.jpg

实现IP转发的功能

echo 1 > /proc/sys/net/ipv4/ip_forward

对iptables配置文件的理解:

/etc/sysconfig/iptables下记录的规则是从下到上读顺序读的。所以允许要在拒绝上面。
而在终端下执行的语句则:先拒绝 再允许。

如果是部署远程的防火墙设备,一定要在计划任务中设置,定时关闭防火墙(建议5分钟关闭一次),否则你会很痛苦;

*/5 * * * * /etc/init.d/iptables stop

屏蔽单个IP的命令

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

iptables-save 与service iptables save区别

iptables防火墙规则的保存与恢复

iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载

使用命令iptables-save来保存规则。一般用

iptables-save > /etc/sysconfig/iptables

生成保存规则的文件 /etc/sysconfig/iptables,
也可以用

service iptables save

它能把规则自动保存在/etc/sysconfig/iptables中。
当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。

-m state 指定包的状态

设置默认策略

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

iptables命令参数解释

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

“-i” 表示接口。不过,-i 和 -o 都表示接口,-i 表示输入时的接口,而 -o 特指输出用的接口。

-A和-I。其中-A是添加到规则的末尾;
-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部。


删除指定规则

先用iptables -L -n –line-numbers 找出规则的序号

[root@tomcat ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:23 
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
3    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
5    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
6    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpts:138:140 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp spt:22 

如:删除OUTPUT链的第一条规则

iptables -D OUTPUT 1

如果:OUTPUT 是默认策略为:DROP,要开放给10.0.2.0/24是网段访问,则要添加

iptables -A OUTPUT -d 10.0.2.0/24 -j ACCEPT

iptables 预设的两个主要的 table ,各个table里面的chains与各个chains所代表的意义

filter 为预设的 Table,里头预设的链有:

o INPUT:为来自外部,想要进入主机的封包;

o OUTPUT:为来自主机,想要离开主机的封包;

o FORWARD:为主机内部网域与外部网域的封包(不论进或者出),但该
封包不会进入主机。

还有 nat 这个 table:

o PREROUTING:进行路由之前的封包传送过程

o OUTPUT:离开主机的封包传送过程;

o POSTROUTING:已经经过路由了,然后才进行的过滤规则。

禁ping

iptables -I INPUT -p icmp --icmp-type 8 -j DROP

接受dns的请求

iptables -A INPUT -p tcp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT

对REJECT与DROP的理解

我们来举一个例子,让各位读者更直观地理解这两个拒绝动作的不同之处。比如有一天您正在家里看电视,突然听到有人敲门,您透过防盗门的猫眼一看是推销商品的,便会在不需要的情况下开门并拒绝他们(REJECT)。但如果您看到的是债主带了十几个小弟来讨债,此时不仅要拒绝开门,还要默不作声,伪装成自己不在家的样子(DROP)。

规则链的默认策略拒绝动作只能是DROP,而不能是REJECT。

-j LOG 在/var/log/messages将记录相应的日志

Oct 30 16:36:54 tomcat kernel: IN=eth1 OUT= MAC=08:00:27:b2:e4:b3:52:54:00:12:35:02:08:00 SRC=10.0.2.2 DST=10.0.2.15 LEN=136 TOS=0x00 PREC=0x00 TTL=64 ID=2074 PROTO=TCP SPT=57748 DPT=22 WINDOW=65535 RES=0x00 ACK PSH URGP=0 

配置文件各表格式:

# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*filter
:INPUT ACCEPT [404:19766]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [530:43376]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*mangle
:PREROUTING ACCEPT [451:22060]
:INPUT ACCEPT [451:22060]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [594:47151]
:POSTROUTING ACCEPT [594:47151]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002
# Generated by iptables-save v1.2.6a on Wed Apr 24 10:19:17 2002
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [3:450]
:OUTPUT ACCEPT [3:450]
COMMIT
# Completed on Wed Apr 24 10:19:17 2002

我们来解释一下这个输出格式。

#后面的是注释。

表都以*开始,例如*mangle。

每个表都包含链和规则,

链的详细说明是:
[:]。例如,链的名字是 PREROUTING,策略是ACCEPT,然后是包记数器和字节计数器,这两个计数器和iptables -L -v输出中用到的计数器一样。

每个表的描述都以关键字COMMIT结束,它说明在这一点,就要把规则装入内核了。

Table

Table () Explanation (注释)

表名:nat

注释:nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NAT。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行 的。属于一个流的包只会经过这个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自 动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被NAT,而是自动地完成。这就 是我们为什么不应该在这个表中做任何过滤的主要原因,对这一点,后面会有更加详细的讨论。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地 址。POSTROUTING链在包就要离开防火墙之前改变其源地址。

表名: mangle

注释:这个表主要用来mangle数据包。我们可以改变不同的包及包 头的内容,比如 TTL,TOS或MARK。 注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙 内的其他的规则或程序(如tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTING,POSTROUTING, OUTPUT,INPUT和

表名:FORWARD

注释:PREROUTING在包进入防火墙之后、路由判断之前改变 包,POSTROUTING是在所有路由判断之后。
OUTPUT在确定包的目的之前更改数据包。INPUT在包被路由到本地 之后,但在用户空间的程序看到它之前改变包。FORWARD在最初的路由判 断之后、最后一次更改包的目的之前mangle包。注意,mangle表不能做任何NAT,它只是改变数据包的 TTL,TOS或MARK,而不是其源目地 址。NAT是在nat表中操作的。

表名:filter

注释:filter表是专门过滤包 的,内建三个链,可以毫无问题地对包进行DROP、LOG、ACCEPT和REJECT等操作。FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤所有本地生成的包的。
上面介绍了三个不同的表的最基本的内容。你应该知道它们的使用目的完全不同

–sport –dport
使用服务名或端口号,但名字必须是在/etc/services 中定义的,因为iptables从这个文件里查找相应的端口号。(建议使用端口)

用一条规则写多个端口

-A INPUT -p udp -m multiport --dports 53,80,443 -j ACCEPT 

用一条规则写IP范围

-A INPUT  -m iprange --src-range  126.244.57.130-126.244.57.140  -j ACCEPT

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:iptables基础笔记

本文作者:wangzhirui

发布时间:2019-08-21, 11:21:11

最后更新:2025-02-27, 02:04:04

原始链接:https://wangzhirui.com/2019/08/21/iptables基础笔记/

转载请保留原文链接及作者。

目录