Linux 之 Iptables

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。

你可能感兴趣的:(Linux 之 Iptables)