(1). 前言
Centos7把防火墙升级成了:firewall,但是,还是有很多人喜欢合使用:iptables.特学习下iptables
(2). Centos7停用firewall
# 停用firewalld
> systemctl stop firewalld
# 禁用firewalld
> systemctl mask firewalld
(3). 安装iptables
# 安装(升级)iptables
> yum install -y iptables
> yum update iptables
(4). 启动iptables
# 添加规则,先允许所有的连接,否则,呆会连接不上去
> iptables -P INPUT ACCEPT
# 保存iptables规则信息
> service iptables save
# 启用iptables开机启动
> systemctl enable iptables.service
# 启动iptables
> systemctl start iptables.service
# 查看iptables状态
> systemctl status iptables.service
(5). 查看iptables现有规则
> iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.122.0/24 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:68
(6). iptables语法介绍
# filter表是iptables默认使用的表,负责对流入、流出本机的数据包进行过滤,该表中定义了3个链,分别是:INPUT、OUTPUT、FORWARD
# iptables语法如下:
# iptables -t 表名 <-A/C/I/D/R/L> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
# 常用参数
# -A : 追加规则到最后一条
# -C : 检查规则
# -D : 删除规则
# -I : 添加到规则的第一条
# -R : 替换规则
# -L : 列出所有的规则
# -p : 规定通信协议,常见的协议有:tcp、udp、icmp、all
# -j : 指定要跳转的目标,常见的目标有:ACCEPT(接收数据包)、DROP(丢弃数据包)、REJECT(重定向)三种.
# 表名包括:
# raw : 高级功能,如:网址过滤.
# mangle : 数据包修改(QOS),用于实现服务质量.
# net : 地址转换,用于网关路由器.
# filter : 包过滤,用于防火墙规则.
# 规则链名包括:
# NPUT链 : 处理输入数据包.
# OUTPUT链 : 处理输出数据包.
# FORWARD链 : 处理转发数据包.
# PREROUTING链 : 于目标地址转换(DNAT),路由前.
# POSTOUTING链 : 用于源地址转换(SNAT),路由后.
# 动作包括:
# ACCEPT : 接收数据包.
# DROP : 丢弃数据包.
# REDIRECT : 重定向、映射、透明代理.
# SNAT : 源地址转换
# DNAT : 目标地址转换.
# MASQUERADE : IP伪装(NAT),用于ADSL.
# LOG : 日志记录
# dport : 目标端口
# sport : 来源端口
# input时 : dport指本地,sport指外部.
# output时 : dport只外部,sport指本地.
(7). 案例
# 清空所有的规则
> iptables -F
# 允许回环访问
> iptables -A INPUT -i lo -j ACCEPT
# 允许以下端口通行
> iptables -A INPUT -p tcp --dport 22 -j ACCEPT
> iptables -A INPUT -p tcp --dport 53 -j ACCEPT
> iptables -A INPUT -p udp --dport 53 -j ACCEPT
> iptables -A INPUT -p tcp --dport 67 -j ACCEPT
> iptables -A INPUT -p udp --dport 67 -j ACCEPT
# 允许icmp(ping)
> iptables -I INPUT -p icmp –s 10.37.129.4 -j ACCEPT
# 其它入站消息一律丢掉
> iptables -P INPUT DROP
# 查看规则列表
> iptables -L -n --line-numbers
# 注意:policy为DROP
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
3 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:53
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
5 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
# 允许访问80端口
> iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 保存规则
> service iptables save
# 不允许访问80端口
> iptables -A INPUT -p tcp --dport 80 -j DROP
# 封某个网段
> iptables -I INPUT -s 10.211.55.255/8 -j DROP
# 删除第一条规则
> iptables -D INPUT 1