千家信息网

iptables入门及基本命令使用

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,规则的功能:四个表filternatmangleraw五个内置链:PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING规则的属性:1、网络层协议属性:ip2、传输层协议属性:
千家信息网最后更新 2024年11月27日iptables入门及基本命令使用

规则的功能:

四个表

filter

nat

mangle

raw

五个内置链:

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING

规则的属性:

1、网络层协议属性:

ip

2、传输层协议属性:

tcp

udp

icmp

iptables

大写字母选项:子命令

小写字母选项:用来匹配标准及其它;

-t {filter|nat|mangle|raw}

-L: list

-n: 数字格式显示IPPORT;

-v: 详细信息, -vv, -vvv其中后面的选项比前面的显示的更详细

--line-numbers: 显示链中规则的行号;

-x: 显示精确值,不要做单位换算;

规则和默认策略都有两个计数器:

packets:

bytes:

表和链的对应关系:

filter

INPUT, FORWARD, OUTPUT

nat

PREROUTING, POSTROUTING, OUTPUT

mangle

PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

raw

PREROUTING, OUTPUT

每个链都有其默认策略:policy ACCEPT

通常只需要修改filter表的默认策略

其它子命令:

管理链:

-F: 清空链

iptables -F 表示清空所有链

-P: 设定默认策略

iptables -t filter -P INPUT {DROP|ACCEPT}

-N: 新建一条自定义链;

iptables -N FILTER_WEB

-X: 删除自定义的空链;

-Z: 计算器清零;

iptables -Z

-E: 重命名自定义链

管理规则:

-A: append 在链的最后追加一条规则

-I [n]: 插入为第n条规则

-D [n]: 删除第n条规则

-R [n]: 替换第n条规则

编写规则语法:

iptables [-t ] 大写选项子命令 [规则号] 链名 匹配标准 -j 目标

目标:

DROP: 丢弃

REJECT拒绝

ACCEPT允许

RETURN返回跳转

REDIRECT: 端口重定向

DNAT目标地址转换

SNAT源地址转换

LOG记录日志

MARK打标记

自定义链

匹配标准:

通用匹配

-s|--src|--source [!] IP/NETWORK

-d|--dst|--destination [!] IP/NETWORK

#iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -j ACCEPT

-i incoming_interface: 指定数据报文流入接口; INPUT, PREROUTING, FORWARD

-o outing_interface: 指定数据报文流出接口;OUTPUT, POSTROUTING, FORWARD

-p {tcp|udp|icmp}

扩展匹配: 要使用"-m 扩展名称"来引用,而每个扩展模块一般都会有自己特有的专用选项; 这些选项中,有些是必备的;

隐含扩展

-p tcp

--sport 指定源端口

--dport 指定目标端口

--tcp-flags 要检查的标志 必须为1标记

--tcp-flags SYN,ACK,RST,FIN SYN 表示:tcp三次握手的第一次

ALL:所有标志位

NONE:没有标志位

--tcp-flags ALL SYN,FIN非法报文

--syn

练习:放行对web服务的访问:

#iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -j ACCEPT

#iptables -A OUTPUT -s 172.16.100.1 -p tcp --sport 80 -j ACCEPT

因为报文在接收和发送时都要经过防火墙,所以我们需要设定INPUTOUTPUT两个方面的访问控制

--sport

--dport

例如:本机DNS服务器,要为本地客户端做递归查询;iptablesINPUT, OUTPUT默认为DROP;本机地址:172.16.100.1

# iptables -A INPUT -d 172.16.100.1 -p udp --dport 53 -j ACCEPT

# iptables -A OUTPUT -s 172.16.100.1 -p udp --sport 53 -j ACCEPT

# iptables -A OUTPUT -s 172.16.100.1 -p udp --dport 53 -j ACCEPT

# iptables -A INPUT -d 172.16.100.1 -p udp --sport 53 -j ACCEPT

-p icmp

--icmp-type

请求:8

响应:0

例子:本机172.16.100.1,能ping 172.16.0.0/16中的所有主机;

显式扩展:

-m state --state

NEW, ESTABLISHED, RELATED, INVALID

ftp服务需要装载:nf_conntrack_ftp模块, 可以使用modprobe命令,也可编辑/etc/sysconfig/iptables-config文件实现。

-m mulitport: 可以指定15个以内的离散端口;比如,21-23,80

--source-ports 源端口

--destination-ports 目标端口

--ports

-m iprange: 指定匹配的IP地址范围,如172.16.100.1-172.16.109.254

-m iprange

--src-rangeip地址

--dst-range 目标ip地址

-m limit

--limit 20/min 限制每分钟最多允许请求的次数

--limit-burst 2 搜集多少个令牌桶

-m string

--string "" 引号里面填写需要匹配的字符串

--algo {bm|kmp}

-m time

--datestart

--datestop

--timestart

--timestop

--weekdays

--monthdays

保存规则:

#service iptables save

保存至/etc/sysconfig/iptables

#iptables-save > /path/to/iptables.rules

生效规则文件中的规则:

#iptables-restore < /path/to/ipables.rules

子命令:

链:-N, -X, -Z, -F, -P, -E

规则:-A, -I, -D, -R

练习:INPUTOUTPUT默认策略为DROP

1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;

# iptables -I INPUT 1 -m state --state ESTABLISHED -j ACCEPT

# iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m time --weekdays Tue,Wed,Thu,Fri,Sat,Sun

-m limit --limit 100/sec -m string --algo kmp ! --string "admim" -m state --state NEW -j ACCEPT

其中对于周一不允许访问还可以表达为 -m time --weekdays Mon

# iptables -I OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT

2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;

# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 21 -m time --weekdays Mon,Tue,Wed,Thu,Fri --timestart 08:30:00 --timestop 18:00:00 -j ACCEPT

# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp -m state --state RELATED -m limit --limit 5/min -j ACCEPT

3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;

# iptables -A INPUT -m iprange --src-range 172.16.100.1-172.16.100.100 -m limit --limit 2/min -p tcp --dport 22 -d 172.16.100.1 -i eth0 -m state --state NEW -j ACCEPT

4、拒绝TCP标志位全部为1及全部为0的报文访问本机;

# iptables -N clean_in

# iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP

# iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP

# iptables -A clean_in -d 172.16.100.1 -j RETURN

# iptables -I INPUT 1 -d 172.16.100.1 -j clean_in

5、允许本机ping别的主机;但不开放别的主机ping本机;

# iptables -A OUTPUT -s 172.16.100.1 -p icmp --icmp-type 8 -j ACCEPT

# iptables -A INPUT -i lo -j ACCEPT

# iptables -A OUTPUT -o lo -j ACCEPT


0