iptables

  • 在进行路由选择前处理数据包(PREOUTING)
  • 处理流入的数据包(INPUT)
  • 处理流出的数据包(OUTPUT)
  • 处理转发的数据包(FORWARD)
  • 在进行路由选择后处理数据包(POSTEROUTING)

命令行防火墙策略管理工具

防火墙策略规则的匹配顺序是从上至下的,因此要把较为严格、优先级较高的策略规则放到前面,以免发生错误

参数 作用
-P 设置默认策略
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号表示除这个IP外
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如TCP、UDP、ICMP
--dport num 匹配目标端口号
--sport num 匹配来源端口号

把INPUT规则链的默认策略设置为拒绝

# iptables -P INPUT DROP
# iptables -L
Chain INPUT (policy DROP)
target prot opt sources destination
etc...

ICMP流量策略规则

向防火墙的INPUT规则链中添加一条允许ICMP流量进入的策略规则,允许ping命令的检测行为

# iptables -I INPUT -p icmp -j ACCEPT
# ping -c 4 xxx.xxx.xxx.xxx
etc ...

删除INPUT规则链中ICMP的策略

# iptables -D INPUT 1
# iptables -P INPUT ACCEPT
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt sources destination
etc...

端口控制

将INPUT 规则链设置为只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量

# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j REJECT
# iptables -L
Chain prot opt sources destination
ACCEPT tcp -- 192.168.10.0/24 anywhere tcp dpt:ssh
REJECT tcp -- anywhere tcp dpt:ssh reject-with icmp-port-unreachable
etc...

向INPUT 规则链中添加拒绝所有人访问本机12345端口的策略规则

# iptables -I INPUT -p tcp --dport 12345 -j REJECT
# iptables -I INPUT -p udp --dport 12345 -j REJECT
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT udp -- anywhere anywhere udp dpt:italk reject-with icmp-port-unreachable
REJECT tcp -- anywhere anywhere tcp dpt:italk reject-with icmp-port-unreachable
ACCEPT tcp -- 192.168.10.0/24 anywhere tcp dpt:ssh
REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
etc...

向INPUT 规则链添加拒绝192.168.10.5主机访问80端口的策略规则

# iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
# iptables -L
etc...
REJECT tcp -- 192.168.10.5 anywhere tcp dpt:http reject-with icmp-port-unreachable
etc...

向INPUT 规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则

# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
# iptables -L
etc...
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
etc...

保存

iptables命令配置的防火墙默认会在系统下一次重启时失效,如果要永久生效,还需要执行保存命令

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]

firewalld

与常规防火墙的区别是,firewalld可以实现防火墙策略之间的快速切换,不同的场景切换不同的策略即可

区域 默认策略规则
trusted 允许所有的数据包
home 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal 等同于home区域
work 拒绝流入的流量,除非与流出的流量树相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量
public 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client服务相关,则允许流量
external 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz 拒绝流入的流量,除非与流出的流量相关;二如果流量与ssh服务相关,则允许流量
block 拒绝流入的流量,除非与流出的流量相关
drop 拒绝流入的流量,除非与流出的流量相关

终端管理工具

参数 作用
-—get-default-zone 查询默认的区域名称
-—set-default-zone=<区域名称> 设置默认的区域,使其永久生效
--get-zones 显示可用的区域
--get-services 显示预先定义的服务
--get-active-zones 显示当前正在使用的区域与网卡名称
--add-source= 将源自此IP或子网的流量导向指定的区域
--remove-source= 不再将源自此IP或子网的流量导入某个指定区域
--add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称> 将某个网卡与区域进行关联
--list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
--list-all-zone 显示所有区域的网卡配置参数、资源、端口以及服务等信息
--add-service=<服务名> 设置默认区域允许该服务的流量
--add-port=<端口号/协议> 设置默认区域允许该端口的流量
--remove-service=<服务号> 设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
--reload 让永久生效的配置规则立即生效,并覆盖当前的配置规则
--panic-on 开启紧急状况模式
--panic-off 关闭紧急状况模式

查看当前所用区域

# firewall-cmd --get-default-zone
public

查询xxx网卡所在区域

# firewall-cmd --get-zone-of-interface=enoxxxx
public

指定网卡区域为external,并永久化

# firewall-cmd --permanent --zone=external --change-interface=enoxxx
sucess
# firewall-cmd --get-zone-of-interface=enoxxx
public
# firewall-cmd --permanent --get-zone-of-interface=enoxxx
external

当前默认区域设置为public

# firewall-cmd --set-default-zone=public
success
# firewall-cmd --get-default-zone
public

启动/关闭应急状况模式

# firewall-cmd --panic-on
success
# firewall-cmd --panic-off
success

查询public是否允许请求SSH和HTTPS协议流量

# firewall-cmd --zone=public --add-service=https
success
# firewall-cmd --permanent --zone=public --add-service=https
success
# firewall-cmd --reload
success

HTTP协议流量设置为永久拒绝

# firewall-cmd --permanent --zone=public --remove-service=http
success
# firewall-cmd --reload
success

8080和8081端口流量设置为允许

# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
# firewall-cmd --zone=public --list-ports 8080-8081/tcp

端口转发

# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.10.10
success
# firewall-cmd --reload
success

ssh访问192.168.10.10主机的888端口

# ssh -p 888 192.168.10.10
etc...

拒绝192.168.10.0/24网段访问本机ssh

# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
success
# firewall-cmd --reload
success

图形界面


What doesn’t kill you makes you stronger.