(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