iptables命令术语中是ACCEPT(允许流量通过)、LOG(记录日志信息)、REJECT(拒绝流量通过)、DROP(拒绝流量通过)。
-
基本的命令参数
iptables是一款基于命令行的防火墙策略管理工具,由于该命令是基于终端执行且存在有大量参数的,学习起来难度还是较大的,好在对于日常控制防火墙策略来讲,您无需深入的了解诸如“四表五链”的理论概念,只需要掌握常用的参数并做到灵活搭配即可,以便于能够更顺畅的胜任工作所需。
参数 | 作用 |
---|---|
-P | 设置默认策略:iptables -P INPUT (DROP|ACCEPT) |
-F | 清空规则链 |
-L | 查看规则链 |
-A | 在规则链的末尾加入新规则 |
-I | num 在规则链的头部加入新规则 |
-D | num 删除某一条规则 |
-s | 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。 |
-d | 匹配目标地址 |
-i | 网卡名称 匹配从这块网卡流入的数据 |
-o | 网卡名称 匹配从这块网卡流出的数据 |
-p | 匹配协议,如tcp,udp,icmp |
--dport num | 匹配目标端口号 |
--sport num | 匹配来源端口号 |
-
例子
1. 使用iptables命令-L参数查看已有的防火墙策略:
[root@MyLinux ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
INPUT_direct all -- anywhere anywhere
INPUT_ZONES_SOURCE all -- anywhere anywhere
INPUT_ZONES all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
………………省略部分输出信息………………
2. 使用iptables命令-F参数清空已有的防火墙策略:
[root@MyLinux ~]# iptables -F
[root@MyLinux ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
………………省略部分输出信息………………
3. 把INPUT链的默认策略设置为拒绝:
[root@MyLinux ~]# iptables -P INPUT DROP
[root@MyLinux ~]# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
………………省略部分输出信息………………
4. 向INPUT链中添加允许icmp数据包流入的允许策略:
[root@MyLinux ~]# iptables -A INPUT -p icmp -j ACCEPT
[root@MyLinux ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
………………省略部分输出信息………………
5. 删除INPUT链中的那条策略,并把默认策略还原为允许:
[root@MyLinux ~]# iptables -D INPUT 1
[root@MyLinux ~]# iptables -P INPUT ACCEPT
[root@MyLinux ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
………………省略部分输出信息………………
6. 设置INPUT链只允许指定网段访问本机的22端口,拒绝其他所有主机的数据请求流量:
[root@MyLinux ~]# iptables -I INPUT -s 192.168.244.0/24 -p tcp --dport 22 -j ACCEPT
[root@MyLinux ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
[root@MyLinux ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.244.0/24 anywhere tcp dpt:ssh
DROP tcp -- anywhere anywhere tcp dpt:ssh
………………省略部分输出信息………………
7. 向INPUT链中添加拒绝所有人访问本机12345端口的防火墙策略:
[root@MyLinux ~]# iptables -I INPUT -p tcp --dport 1234 -j REJECT
[root@MyLinux ~]# iptables -I INPUT -p udp --dport 1234 -j REJECT
[root@MyLinux ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT udp -- anywhere anywhere tcp dpt:search-agent reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:search-agent reject-with icmp-port-unreachable
ACCEPT tcp -- 192.168.244.0/24 anywhere tcp dpt:ssh
DROP tcp -- anywhere anywhere tcp dpt:ssh
………………省略部分输出信息………………
8. 向INPUT链中添加拒绝来自于指定192.168.10.5主机访问本机80端口(web服务)的防火墙策略:
[root@MyLinux ~]# iptables -I INPUT -s 192.168.10.5 -p tcp --dport 80 -j REJECT
[root@MyLinux ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 192.168.10.5 anywhere tcp dpt:http reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:search-agent reject-with icmp-port-unreachable
ACCEPT tcp -- 192.168.244.0/24 anywhere tcp dpt:ssh
DROP tcp -- anywhere anywhere tcp dpt:ssh
………………省略部分输出信息………………
9. 向INPUT链中添加拒绝所有主机不能访问本机1000至1024端口的防火墙策略:
[root@MyLinux ~]# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
[root@MyLinux ~]# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
[root@MyLinux ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- 192.168.10.5 anywhere tcp dpt:http reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:search-agent reject-with icmp-port-unreachable
ACCEPT tcp -- 192.168.244.0/24 anywhere tcp dpt:ssh
DROP tcp -- anywhere anywhere tcp dpt:ssh
REJECT tcp -- anywhere anywhere tcp dpts:cadlock2:1024 reject-with icmp-port-unreachable
REJECT udp -- anywhere anywhere udp dpts:cadlock2:1024 reject-with icmp-port-unreachable
………………省略部分输出信息………………
10. 用iptables做本机端口转发
代码如下:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
估计适当增加其它的参数也可以做不同IP的端口转发。
如果需要本机也可以访问,则需要配置OUTPUT链(********特别注意:本机访问外网的端口会转发到本地,导致访不到外网,如访问yown.com,实际上是访问到本地,建议不做80端口的转发或者指定目的 -d localhost):
iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080
原因:
外网访问需要经过PREROUTING链,但是localhost不经过该链,因此需要用OUTPUT。