iptables安装
停止并禁止开机自启firewalld服务
systemctl stop firewalld && systemctl disable firewalld
检查是否安装了iptables
rpm -q iptables
没有安装,可以安装iptables
yum install -y iptables
升级iptables
yum update iptables
iptables的语法规则
iptables 至少有三个预设的 table (filter, nat, mangle),较常用的是本机的 filter 表, 这也是默认的表。
查看规则
iptables [-t tables] [-L] [-nv](也可以使用iptables-save)
-t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用预设的 filter
-L :列出目前的 table 的规则
-n :不进行 IP 与 HOSTNAME 的反查,显示结果的速度会快很多!
-v :列出更多的信息,包括通过该规则的数据包总位元数、相关的网路接口等
例如查看nat表的规则
iptables -t nat -nL
[root@ll ~]# iptables -t nat -nL
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:90 to:80.0.0.0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:90 to:80.0.0.0
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
- Chain 就是链
- policy 就是默认的规则
- target:代表进行的动作, ACCEPT 是放行,而 REJECT 则是拒绝,此外,还有 DROP (丢弃) 的项目!
- prot:代表使用的数据包协议,主要有 tcp, udp 及 icmp 三种数据包格式;
- opt:额外的选项说明
- source :代表此规则是针对哪个『来源 IP』进行限制
- destination :代表此规则是针对哪个『目标 IP』进行限制
清除规则
iptables [-t tables] [-FXZ]
选项与参数:
-F :清除所有的已设置的规则;
-X :杀掉所有用户 “自定义” 的 chain;
-Z :将所有的 chain 的计数与流量统计都归零
此命令不会清除默认的规则(默认规则就是处理没有符合到任何一个规则的数据包的策略。)
设置规则
以下规则是生产环境下使用的默认规则
就是将进入本机的数据包默认是拒绝的,出去的数据包和需要转发的数据包都是放行的。
iptables -P INPUT REJECT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
设置默认规则的语法
iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]
-P :定义默认规则( Policy )。注意,这个 P 为大写
ACCEPT :该数据包可接受
DROP :该数据包直接丢弃,不会让 client 端知道为何被丢弃。
一般规则
例如
允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
关于 LOG
LOG 这个动作仅仅用于记录,并且不会影响这个数据包的其他规则的比对
就是把符合规则的数据包记录到 /var/log/messages 日志中
iptables -A INPUT -s 192.168.1.100 -j LOG
关于 TCP 和 UDP 的规则
语法
iptables [-AI 链] [-io 网络接口] [-p tcp,udp]
[-s 来源 IP/网段] [–sport 端口范围]
[-d 目标 IP/网段] [–dport 端口范围]
-j [ACCEPT;DROP;REJECT]
例如
只允许 192.168.1.0/24 网段的 1024到65534 端口访问本机的 22 端口
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 \
--sport 1024:65534 --dport ssh -j ACCEPT
关于状态的规则
语法
iptables -A INPUT [-m state] [–state 状态]
-m :一些 iptables 的外挂模块,主要常见的有:
state :TCP 状态模块
mac :网卡的 mac 地址 (hardware address)
–state :一些数据包的状态,主要有:
INVALID :无效的数据包,例如资料破损的数据包状态
ESTABLISHED:已经连线成功的连线状态;
NEW :想要新建立连线的数据包状态;
RELATED :这个最常用!表示这个数据包是与我们主机发送出去的数据包有关
例如
只要已建立或相关数据包就予以通过,只要是不合法数据包就丢弃
iptables -A INPUT -m state \
--state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
保存规则
想要保存策略,需要安装iptable的服务
yum install -y iptables-services
启动服务
systemctl start iptables.service
之后使用 iptables-save > /etc/sysconfig/iptables 命令讲当前的规则保存网络地址转换开启防火墙主机的路由功能
echo "1" > /proc/sys/net/ipv4/ip_forward
sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_use_pmtu = 0
DNET目标地址转换(或者端口转发)
将访问本机1000端口的数据包转发到192.168.100.10服务器的22端口
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport1000 -j DNAT --to-destination 192.168.100.10:22