查看当前selinux的状态
[root@apenglinux-001 ~]# getenforce
临时关闭selinux
[root@apenglinux-001 ~]# setenforce 0
永久关闭selinux
[root@apenglinux-001 ~]# vim /etc/selinux/config 将SELINUX=enforcing 改成 SELINUX=disabled 重启系统
关闭firewalld,开启iptables
#systemctl stop firewalld.service #systemctl disable firewalld.service #yum install -y iptables-services #systemctl enable iptables.service #systemctl start iptables.service
iptables规则
-A 在指定链的末尾添加(--append)一条新的规则 -D 删除(--delete)指定链中的某一条规则,按规则序号或内容确定要删除的规则 -I 在指定链中插入(--insert)一条新的规则,若未指定插入位置,则默认在链的开关插入 -R 修改,替换(--replace)一条新的规则,按规则序号或内容确定要替换的规则 -L 列出(--list)指定链中所有的规则进行查看,若未指定链名,则列出表中所有链的内容 -F 清空(--flush)指定链中的规则,若未指定链名,则清空表中所有链的内容 -N 新建(--new-chain)一条用户自己定义的规则链 -X 删除指定表中用户自定义的规则链(--delete-chain) -P 设置指定链的默认策略(--policy) -n 使用数字形式(--numeric)显示输出结果,如显示主机的ip地址而不是主机名 -v 查看规则列表时显示详细(--verbose)信息 -V 查看iptables命令工具的版本(--version)信息 -h 查看命令帮助信息(--help) --line-numbers 查看规则列表时,同时显示规则在链中的顺序号 -Z 表示把包以及流量计数器置零
规则表
filter表,包含三个规则链:INPUT,FORWARD,OUTPUT。 filter表主要用于对数据包进行过滤,根据具体的规决定是否放行该数据包 nat表,包含三个规则链:PREROUTING,POSTROUTING,OUTPUT. nat表主要用于修改数据包的ip地址、端口号等信息 mangle表,包含五个规则链:PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD. mangle表主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)值以及数据包设置Mark标记,实现Qos(Quality of Service,质量服务)调整以及策略路由等应用 raw表,包含两条规则链:OUTPUT,PREROUTING. raw表主要用于决定数据包是否被状态跟踪机制处理。 security表
netfilter的五个链
PREROUTING: 数据包进入路由表之前 INPUT: 通过路由表目的地为本机 FORWARD: 通过路由表后,目的地不为本机 OUTPUT: 由本机产生,向外转发 POSTROUTING: 发送到网卡接口之前
查看filter表中各链的规则
[root@apenglinux-001 ~]# iptables -t filter -nvL // [-t filter]可省略 Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 369 27373 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 1 40 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 1145 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 294 packets, 48378 bytes) pkts bytes target prot opt in out source destination
清空filter表中的各链中的规则,然后将清除后的规则保存
#iptables -t filter -F;service iptables save
防火墙规则保存在/etc/sysconfig/iptables
添加及插入规则
在filter表的INPUT链的末尾添加一条防火墙规则
[root@apenglinux-001 ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
在filter表的INPUT链中插入一条防火墙规则
[root@apenglinux-001 ~]# iptables -I INPUT -p udp -j ACCEPT
在filter表的INPUT链中插入一条防火墙规则作为链中的第二条规则
[root@apenglinux-001 ~]# iptables -t filter -I INPUT 2 -p icmp -j ACCEPT
查看规则列表
查看filter表INPUT链中的所有规则,同时显示各规则的顺序号
[root@apenglinux-001 ~]# iptables -t filter -nvL INPUT [#一个数字,表示链中的第几条规则] --line-number
删除、清空规则
删除filter表INPUT链中的第2条规则
[root@apenglinux-001 ~]# iptables -D INPUT 2
清空filter表、nat表、mangle各链中的所有规则
[root@apenglinux-001 ~]# iptables -F;iptables -t nat -F;iptables -t mangle -F
设置规则链的默认策略
将filter表中FORWARD规则链的默认策略设为DROP
[root@apenglinux-001 ~]# iptables -t filter -P FORWARD DROP
将filter表中OUTPUT规则链的默认策略设为ACCEPT
[root@apenglinux-001 ~]# iptables -t filter -P OUTPUT ACCEPT
新增、删除自定义规则链
在raw表中新增一条自定义的规则链,链名为TCP_PACKETS
[root@apenglinux-001 ~]# iptables -t raw -N TCP_PACKETS
清空raw表中用户自定义的所有规则链
[root@apenglinux-001 ~]# iptables -t raw -X
通用条件匹配
协议匹配
[root@apenglinux-001 ~]# iptables -I INPUT -p icmp -j REJECT //拒绝进入防火墙的所有icmp协议数据包 [root@apenglinux-001 ~]# iptables -I FORWARD ! -p icmp -j ACCEPT //允许防火墙转发除icmp协议以外的所有数据包
地址匹配
拒绝转发来自192.168.1.11主机的数据,允许转发来自192.168.0.0/24网段的数据
[root@apenglinux-001 ~]# iptables -A FORWARD -s 192.168.1.11 -j DROP [root@apenglinux-001 ~]# iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
网络接口匹配
丢弃从外网接口ens33进入防火墙本机的源地址为私网地址的数据包
[root@apenglinux-001 ~]# iptables -A INPUT -i ens33 -s 192.168.0.0/16 -j DROP [root@apenglinux-001 ~]# iptables -A INPUT -i ens33 -s 172.16.0.0/12 -j DROP [root@apenglinux-001 ~]# iptables -A INPUT -i ens33 -s 10.0.0.0/8 -j DROP
管理员在网关服务器上检测到来自某个ip网段(192.168.2.0/24)的频繁扫描,希望设置iptables规则封堵ip地址段,两小时后解封
[root@apenglinux-001 ~]# iptables -I INPUT -s 192.168.2.0/24 -j DROP [root@apenglinux-001 ~]# iptables -I FORWARD -s 192.168.2.0/24 -j DROP [root@apenglinux-001 ~]# at now +2 hours at> iptables -D INPUT 1 at> iptables -D FORWARD 1 at>job 4 at Thu Feb 22 16:43:00 2018 [root@apenglinux-001 ~]# atq 4 Thu Feb 22 16:43:00 2018 a root
隐含条件匹配
端口匹配
仅允许系统管理员从192.168.221.0/24网段使用ssh方式远程登录防火墙主机
[root@apenglinux-001 ~]# iptables -A INPUT -p tcp --dport 22 -s 192.168.221.0/24 -j ACCEPT [root@apenglinux-001 ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
允许本机开放从tcp端口20-1024提供的应用服务
[root@apenglinux-001 ~]# iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT [root@apenglinux-001 ~]# iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT
作为网关使用时,允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包
[root@apenglinux-001 ~]# iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT [root@apenglinux-001 ~]# iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT
TCP标记匹配
拒绝从外网接口直接访问防火墙本机的数据包
[root@apenglinux-001 ~]# iptables -P INPUT DROP [root@apenglinux-001 ~]# iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT
ICMP类型匹配
禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机(允许接收ICMP回应数据)
[root@apenglinux-001 ~]# iptables -A INPUT -p icmp --icmp-type Echo-Request -j DROP [root@apenglinux-001 ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT [root@apenglinux-001 ~]# iptables -A INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT
显示条件匹配
MAC地址匹配
禁止转发来自MAC地址为00-50-56-c0-00-08的主机的数据包
[root@apenglinux-001 ~]# iptables -A FORWARD -m mac --mac-source 00:50:56:c0:00:08 -j DROP
多端口匹配
允许防火墙本机对外开放tcp端口20、21、25、110以及被动模式ftp端口1250-1280
[root@apenglinux-001 ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
多ip地址匹配
禁止转发源ip地址为192.168.1.20-192.168.1.99的tcp数据包
[root@apenglinux-001 ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
状态匹配
禁止转发与正常TCP连接无关的非--syn请求数据包(如网络中可能存在的一些非法***数据包)
[root@apenglinux-001 ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP
拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包
[root@apenglinux-001 ~]# iptables -A INPUT -p tcp -m state --state NEW -j DROP [root@apenglinux-001 ~]# iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
在服务器中设置防火墙策略,只开放本机的web服务80端口、ftp服务(21、20、20450-20480),放行外部主机发往服务器其他端口的应答数据包,将其他入站数据包均予以丢弃处理
[root@apenglinux-001 ~]# iptables -I INPUT -p tcp -m multiport --dport 20,21,80,20450:20480 -j ACCEPT [root@apenglinux-001 ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT [root@apenglinux-001 ~]# iptables -P INPUT DROP
需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后对192.168.221.0/24开通22端口,对所有网段开放80端口和21端口(写一个脚本)
[root@apenglinux-001 sbin]# cat iptables.sh #!/bin/bash # ipt="/usr/sbin/iptables" $ipt -F $ipt -P INPUT DROP $ipt -P OUTPUT ACCEPT $ipt -P FORWARD ACCEPT $ipt -A INPUT -s 192.168.221.0/24 -p tcp --dport 22 -j ACCEPT $ipt -A INPUT -p tcp -m multiport --dport 80,21 -j ACCEPT [root@apenglinux-001 sbin]# sh /usr/local/sbin/iptables.sh
开机启动就初始化防火墙规则
#echo '/bin/sh /usr/local/sbin/iptables.sh' >> /etc/rc.d/rc.local #chmod +x /etc/rc.d/rc.local #init 6
需求:A机器有两块网卡ens33,ens37。ens33可以上网,ip地址为192.168.221.10,ens37的ip为192.168.2.100/24。B机器只有一块网卡ens37,ip为192.168.2.200/24,可以ping通A机器的ens37,实现让B机器也能上网?
A机器 #iptables -F #echo 1 > /proc/sys/net/ipv4/ip_forward #iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens33 -j MASQUERADE
B机器 #iptables -F #route add defaults gw 192.168.2.100
这要就B机器就可以实现上网的功能。
需求:A机器两块网卡ens33,ens37,ens33可以上网,ip为192.168.221.10,ens37的ip为192.168.2.100/24.B机器只有一块网卡,ip为192.168.2.200/24,不能上网,实现B机器能上网且通过A机器可以直接连通B机器的22端口。
A机器 #echo 1 > /proc/sys/net/ipv4/ip_forward #iptables -t nat -A PREROUTING -d 192.168.221.10 -p tcp --dport 100 -j DNAT --to 192.168.2.200:22 #iptables -t nat -A POSTROUTING -s 192.168.2.200 -j SNAT --to 192.168.221.10 B机器 #route add default gw 192.168.2.100
导出、导入防火墙规则
iptables软件包提供了两个命令iptables-save、iptables-restore,分别用于保存和恢复防火墙规则,使用这两个命令可以很方便地导出和导入规则
设定的防火墙规则只保存在内存中,并没有保存到某个文件中。也就是说,当系统重启后以前设定的规则就没有了,所以设定好规则后要先保存一下,默认保存到/etc/sysconfig/iptables中,可以将防火墙规则保存到自定义的文件中
[root@localhost sbin]# service iptables save //导出防火墙规则到系统默认的文件/etc/sysconfig/iptables iptables: Saving firewall rules to /etc/sysconfig/iptables:[ 确定 ] [root@localhost sbin]# cat /etc/sysconfig/iptables # Generated by iptables-save v1.4.21 on Fri Feb 23 09:09:31 2018 *filter :INPUT DROP [22:1825] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [64:6336] -A INPUT -s 192.168.221.0/24 -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m multiport --dports 21,80 -j ACCEPT COMMIT # Completed on Fri Feb 23 09:09:31 2018 [root@localhost ~]# iptables-save > /root/iptables.rule //导出防火墙规则到自定义的/root/iptables.rule文件中
先清空防火墙规则
[root@localhost sbin]# iptables -F;
导入防火墙规则
[root@localhost ~]# iptables-restore < /root/iptables.rule
查看防火墙规则
#iptables-save //默认输出到屏幕