十年后工资能涨:iptables的常用命令和选项

来源:百度文库 编辑:中财网 时间:2024/04/29 12:04:28

iptables的常用命令和选项   

 

 iptables的常用命令和选项

iptables命令:

维护规则表的命令:

1.       (-N)创建一个新规则表

2.       (-X)删除一个空规则表

3.       (-P)改变内建规则表的默认策略

4.       (-L)列出规则表中的规则

5.       (-F)清空规则表中的规则

6.       (-Z)将规则表计数器清零

 

管理规则表中的规则:

1.       (-A)添加新规则到规则表

2.       (-I)插入新规则到规则表的某个位置

3.       (-R)替换规则表中的规则

4.       (-D)删除规则表中的某条规则

 

在调试iptables规则时,你也许需要反复修改你的脚本来实现某些特定的功能,这时建议在你的脚本里添加这样几行,以防止重复设置规则:

 

# 清除所有规则

iptables -F -t filter

iptables -X -t filter

iptables -Z -t filter

iptables -F -t nat

iptables -X -t nat

iptables -Z -t nat

 

# 设置内建规则表的默认策略

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -t nat -P PREROUTING ACCEPT

iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -P OUTPUT ACCEPT

 

“-t”选项是“--table”的简写,它指明了你要对哪类规则表进行操作,默认的是指filter。

 

下面举例说明iptables的部分选项的使用:

 

指定源地址和目标地址

 

指定规则操作的源地址  -s 或 --source 或 -src

指定规则操作的目标地址 -d 或 --destination 或 -dst

 

允许来自192.168.100.0/24的数据包通过

iptables -A INPUT -s 192.168.100.0/24 -d 0.0.0.0/0 -j ACCEPT

 

“-j”选项是“--jump”的简写,它指明了匹配该条规则的数据包的具体处理方法,可能是ACCEPT、DROP等。

 

取反:在参数前加“!”号

 

接受除了来自192.168.100.0/24外的所有的数据包

iptables -A INPUT -s ! 192.168.100.0/24 -d 0.0.0.0/0 -j ACCEPT

 

指定协议(TCP、UDP或ICMP)

 

-p 或 --protocol

 

禁止icmp协议

iptables -A INPUT -p icmp -j DROP

 

指定接口

 

指定数据包进入的接口 -i 或 --in-interface

指定数据包送出的接口 -o 或 --out-interface

INPUT规则表中只允许指定-i接口,OUTPUT规则表中只允许指定-o接口,FORWARD表可以指定这两种接口。

 

允许从eth1进入的数据包

iptables -A INPUT -i eth1 -j ACCEPT

 

允许从eth0接口送出的数据包

iptables -A OUTPUT -o eth0 -j ACCEPT

 

转发从eth1进入,eth0送出的数据包

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

 

TCP/UDP扩展

指定源端口 --sport 或 --source-port

指定目的端口 --dport 或 --destination-port

 

允许从eth0进入访问到目标端口为21的tcp数据包

iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT

 

允许从eth0进入访问到目标端口为21的udp数据包

iptables -A INPUT -i eth0 -p udp --dport 21 -j ACCEPT

 

状态匹配

--state state,state...

 

正如前面我们脚本中用到的,state是用逗号分隔的列表,表示要匹配的连接状态。有效的状态选项包括:INVAILD,表示数据包对应的连接是未知的;ESTABLISHED,表示数据包对应的连接已经进行了双向的数据包传输,也就是说连接已经建立;NEW,表示这个数据包请求发起一个连接;RELATED,表示数据包要发起一个新的连接,但是这个连接和一个现有的连接有关,例如:FTP的数据传输连接和控制连接之间就是RELATED关系。

 

禁止从eth0进来的NEW状态,也就是禁止来自eth0的新的访问请求

iptables -A INPUT -i eth0 -m state --state NEW -j DROP

 

“-m”是“--match”的简写。-m选项引出了iptables的state扩展模块,比如mac扩展模块,它实现根据主机网卡的MAC地址进行权限控制的规则:

 

iptables -A INPUT -p tcp -m mac --mac-source 01:02:03:04:05:06 -j ACCEPT

 

扩展模块是iptables体系中的特色,它使得iptables成为一个可扩展的安全体系结构。你可以从这里了解更多关于iptables扩展模块的知识:http://www.iptables.org/document ... tensions-HOWTO.html

 

 

§§ 对封包过滤设置的建议

 

封包过滤实现的是针对安全方面的策略,通常我们遵循“凡是没有明确允许的都是禁止的”这样的原则来设计安全策略:首先禁止所有的东西,然后根据需要再开启必要的部分。

 

启用路由验证(防止IP地址欺骗)。IP地址欺骗指使用伪装的IP地址作为IP包的源地址对受保护网络进行攻击,防火墙应该能够禁止来自外部网络而源地址是内部IP地址的数据包通过。比如来自你的外网接口eth0新建连接的数据包源地址是你的内部局域网的地址,正常情况下这种现象是不可能的,那么它应当被丢掉。

 

Linux内核支持防范IP地址欺骗的功能,对于一个接口比如eth0可以这样做:

echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter

 

对于所有接口:

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do

    echo 1 > $f

done

 

综合NAT和封包过滤这两部分内容,我们得到一个具有防火墙功能的脚本fw.sh,它已经初步实现了我们关于接入服务和防火墙两项功能的要求:

 

[root@rh73 ~]# cat fw.sh

#!/bin/sh

 

modprobe ip_nat_ftp

modprobe ip_conntrack_ftp

 

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

 

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do

    echo 1 > $f

done

 

# 删除所有规则

iptables -F -t filter

iptables -X -t filter

iptables -Z -t filter

iptables -F -t nat

iptables -X -t nat

iptables -Z -t nat

 

# 设置内建规则表的默认策略

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP

iptables -t nat -P PREROUTING ACCEPT

iptables -t nat -P POSTROUTING ACCEPT

iptables -t nat -P OUTPUT ACCEPT

 

#禁止来自Internet到eth0主动发起的访问请求

iptables -A FORWARD ! -i eth0 -m state --state NEW -j ACCEPT

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

 

iptables -A INPUT ! -i eth0 -m state --state NEW -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 

iptables -A POSTROUTING -t nat -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 61.156.35.114

 

 

§§ iptables-save和iptables-restore

 

iptables设置的规则可以用两个相关的工具iptables-save、iptables-restore来进行存储和恢复。

 

在控制台执行如下命令:

[root@rh73 ~]# iptables-save

# Generated by iptables-save v1.2.5 on Mon Aug  5 22:25:25 2002

*filter

:INPUT DROP [1:192]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [23:1015]

-A INPUT -i ! eth0 -m state --state NEW -j ACCEPT

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i ! eth0 -m state --state NEW -j ACCEPT

-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

COMMIT

# Completed on Mon Aug  5 22:25:25 2002

# Generated by iptables-save v1.2.5 on Mon Aug  5 22:25:25 2002

*nat

REROUTING ACCEPT [0:0]

OSTROUTING ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A POSTROUTING -s 192.168.100.0/255.255.255.0 -o eth0 -j SNAT --to-source 61.156.35.114

COMMIT

# Completed on Mon Aug  5 22:25:25 2002

 

也可以代-t参数,指明显示哪个规则表的内容:

 

[root@rh73 ~]# iptables-save -t filter

# Generated by iptables-save v1.2.5 on Mon Aug  5 22:26:20 2002

*filter

:INPUT DROP [49:14129]

:FORWARD DROP [0:0]

:OUTPUT ACCEPT [62:3729]

-A INPUT -i ! eth0 -m state --state NEW -j ACCEPT

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i ! eth0 -m state --state NEW -j ACCEPT

-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

COMMIT

# Completed on Mon Aug  5 22:26:20 2002

 

可以把显示结果存储到文件中:

 

[root@rh73 ~]# iptables-save > filename

 

恢复iptables规则使用iptables-restore命令:

 

[root@rh73 ~]# iptables-restore < filename

 

 

§§ 使用Red Hat Linux提供的启动控制脚本

 

除了自己编写脚本,我们还可以使用Red Hat Linux带的iptables的启动控制脚本来管理iptables规则。使用Red Hat自带的/etc/rc.d/init.d/iptables脚本控制iptables,我们需要关心下面几个文件:

 

/etc/rc.d/init.d/iptables

iptables的控制脚本,可以用来启动、停止iptables

 

/etc/rc.modules

预加载模块支持特定的服务

 

/etc/sysconfig/iptables

iptables规则设置

 

/etc/sysctl.conf

内核参数设置

 

看看如何设置这几个文件:

 

设置/etc/rc.modules

 

[root@rh73 ~]# vi /etc/rc.modules

modprobe ip_nat_irc

modprobe ip_conntrack_irc

modprobe ip_nat_ftp

modprobe ip_conntrack_ftp

 

存盘退出后,修改该文件的属性

 

[root@rh73 ~]# chmod +x /etc/rc.modules

 

设置/etc/sysconfig/iptables,其内容格式和iptables-save输出格式是完全一样的,可以直接用iptables-save获得刚才fw.sh脚本定义的策略。运行fw.sh脚本后,再运行:

 

[root@rh73 ~]# iptables-save > /etc/sysconfig/iptables

 

设置/etc/sysctl.conf来开启IP转发和防止地址欺骗特性:

 

[root@rh73 ~]# vi /etc/sysctl.conf

# Controls IP packet forwarding

net.ipv4.ip_forward = 1

 

# Controls source route verification

net.ipv4.conf.default.rp_filter = 1

 

全部设置完后,运行ntsysv,确认选择了iptables一项,在系统启动时可以自动加载iptables设置的规则,然后重新启动服务器:

 

[root@rh73 ~]# shutdown –r now

 

系统在重起后自动加载iptables规则。在控制台也可以手工来控制启动/停止iptables:

 

启动iptables

 

[root@rh73 ~]# /etc/rc.d/init.d/iptables start