首页 » iptables - Linux防火墙

iptables常用命令

iptables的命令格式

iptables [-t table] command [match] [target]

-t 指定表名。iptables默认使用filter表来执行所有的命令。

command 这条要执行的命令。如插入或删除一条规则。

match 用什么规则去匹配报文。如指定报文的源IP、端口等。

target 符合match的报文由target处理。

例如我们最需要的一个基本命令:封禁一个IP:

$ sudo iptables -I INPUT -s 106.186.114.25 -j DROP

解析这个命令:

-I加入一条新规则
INPUT到INPUT规则链中
-s 106.186.114.25目标IP是106.186.114.25
-j要是匹配的话就...
DROP丢弃它

iptables常用命令列表:

命令参数说明
-A/--append附加规则。新添加的规则将成为最后一条规则。
-D/--delete删除规则。
-R/--replace替代现有的规则。
-I/--insert插入规则。
-L/--list列出所有规则。
-F/--flush删除所有规则。
-Z/--zero计算器清零。
-N/--new-chain定义新的规则链。
-X/--delete-chain删除规则链。
-P/--policy默认的过滤规则(不符合其他过滤条件的报文的默认处理方式)。
-E/--rename-chian修改规则链名字。
-j/--jump执行操作。如-j DROP表示丢弃报文。
-p/--protocol指定协议。
-s/--src/--source指定源IP。
-d/--dst/--destination指定目标IP。
--sport/--source-port指定源端口。
-dport/--destination-port指定目标端口。
-i/--in-interface收包的网卡。
-o/--out-interface发包的网卡。
--tcp-flagsTCP Flag过滤(SYN/ACK/FIN/RST/URG/PSH)。
--icmp-typeICMP类型。用iptables -p icmp --help查看合法的ICMP类型。
-m module_name使用扩展模块。

iptables基本概念

iptables里的规则分为几个组织层次: tables -> chains -> rules 即 表 -> 规则链 -> 规则。

iptables内置了4个表(filter、NAT、Mangle、Raw)。默认的表是filter。

$ sudo iptables -nL     # 等同 $ sudo iptables -t filter -nL
$ sudo iptables -t nat -nL
$ sudo iptables -t mangle -nL
$ sudo iptables -t raw -nL

filter表中有3个默认的规则链,分别是:INPUT、OUTPUT、FORWARD。规则链的表示一串规则,而规则的含义就是对报文进行匹配,如果匹配上了就执行一个操作;否则就去匹配(同一个规则链中的)下一条规则:

操作(-j/--jump target)说明
ACCEPT接收
DROP丢弃
QUEUE排队。把报文放到用户空间中。
RETURN停止执行之后的规则。

iptables参数详解

-L/--list

通过-L/--list命令查看当前的iptables:

$ sudo iptables -L
$ sudo iptables -nL     # 不做域名解析
$ sudo iptables -vnL    # 更详细的信息

在删除规则前用-L --line-number查看规则编号:

$ sudo iptables -nL INPUT --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       all  --  106.186.114.25       0.0.0.0/0           
2    DROP       all  --  106.186.21.68        0.0.0.0/0           
3    DROP       all  --  192.168.1.19         0.0.0.0/0           
$ sudo iptables -D INPUT 3 
$ sudo iptables -nL INPUT --line-number

-R/--replace

用-R/--replace修改一条已有规则:

$ sudo iptables -nL INPUT --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       all  --  106.186.114.25       0.0.0.0/0           
2    DROP       all  --  106.186.21.68        0.0.0.0/0           

修改第2条规则(修改了源IP地址):

$ sudo iptables -R INPUT 2 -s 68.21.186.106 -j DROP

检查:

$ sudo iptables -nL INPUT --line-number            
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       all  --  106.186.114.25       0.0.0.0/0           
2    DROP       all  --  68.21.186.106        0.0.0.0/0           

-m module_name

-m module_name用来加载扩展模块。以下列出一些常见扩展模块。

-m state

状态。

-m state --state STATE

STATE的取值:

STATE说明
INVALID无效报文。如报文破损。
ESTABLISHED已成功建立连接。
RELATED与我们主机发出去的报文有关,如响应报文等。

如下,已建立连接或关联报文都接收:

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

检查:

$ sudo iptables -nL
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 

分享

0