一、 iptables环境准备
1.安装iptables管理命令
[root@test ~]# yum install iptables-services -y
2.加载防火墙的内核模块
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state
3.查看已加载的模块
[root@test ~]# lsmod |egrep 'filter|nat|ipt'
ipt_REJECT 12541 0
nf_nat_ftp 12770 0
nf_conntrack_ftp 18638 1 nf_nat_ftp
iptable_filter 12810 0
xt_nat 12681 3
iptable_nat 12875 1
nf_nat_ipv4 14115 1 iptable_nat
nf_nat 26146 3 nf_nat_ftp,nf_nat_ipv4,xt_nat
nf_conntrack 105745 7 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,xt_conntrack,nf_conntrack_ftp,nf_conntrack_ipv4
ip_tables 27240 2 iptable_filter,iptable_nat
4.启动防火墙
首先停止firewalld
systemctl stop firewalld
systemctl disable firewalld
开启iptables
systemctl start iptables.service
systemctl enable iptables.service
二、 iptables基本操作命令
1.查看防火墙规则
[root@test ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
2.清除防火墙规则
iptables -F <-清除所有规则,不会处理默认的规则
iptables -X <-删除用户自定义的链
iptables -Z <-链的计数器清零(数据包计数器与数据包字节计数器)
3.添加防火墙规则
iptables -t <-指定表d(efault: `filter')
iptables -A <-把规则添加到指定的链上,默认添加到最后一行。
iptables -I <-插入规则,默认插入到第一行(封IP)。
iptables -D <-删除链上的规则
4.网络连接状态
NEW:已经或将启动新的连接
ESTABLISHED:已建立的连接
RELATED:正在启动的新连接
INVALID:非法或无法识别的
5.删除某个规则
iptables -nL --line-numbers查看规则号码
iptables -D INPUT 1删除指定链上的指定序号
iptables A INPUT -p tcp -m state --dport 22 -j DROP
iptables -nL
iptables -nL --line-numbers
iptables -D INPUT 1
三、iptables实战
1.禁止某个端口访问
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
规则解释:
-p #<==指定过滤的协议-p(tcp,udp,icmp,all)
--dport #<==指定目标端口(用户请求的端口)。
-j #<==对规则的具体处理方法(ACCEPT,DROP,REJECT,SNAT/DNAT)
--sport #<==指定源端口。
2.规则解释:
-s #<==指定源地址或网段(192.168.1.0/24)。 ! 取反。
-d #<==指定目的地址(nat表prerouting)。
-i #<==进入的网络接口(eth0,eth1)。
-o #<==出去的网络接口(eth0,eth1)。
3.禁止除跳板机以外的IP访问
iptables -I INPUT -p tcp ! -s 10.0.0.1 -j DROP
4.匹配端口范围
iptables -I INPUT -p tcp -m multiport --dport 21,22,23,24 -j DROP
iptables -I INPUT -p tcp --dport 3306:8809 -j ACCEPT
iptables -I INPUT -p tcp --dport 18:80 -j DROP #<==最佳
5. 匹配ICMP类型
iptables -A INPUT -p icmp --icmp-type 8
例:iptables-A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT
6.一些操作
1、封掉10.0.0.7
iptables -I INPUT -s 10.0.0.7 -j DROP
2、让10.0.0.7和SSH客户端(10.0.0.1)服务器可以Ping,其它的不能Ping
iptables -I INPUT -p icmp --icmp-type 8 -s 10.0.0.7 -j ACCEPT
iptables -I INPUT 2 -p icmp ! -s 10.0.0.1 --icmp-type 8 -j DROP
3、封掉3306端口
iptables -I INPUT -p tcp --dport 3306 -j DROP
四、 关于操作命令的解释
1.从上往下依次匹配
2.一但匹配上,就不在往下匹配了
3.默认规则,默认的情况,默认规则是放行所有
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT :把这条规则添加到INPUT链的最后一行
-p tcp :指定协议为tcp
-m state --state NEW :匹配TCP的连接状态
-m tcp --dport 22 :匹配TCP协议的目标端口
-j ACCEPT :执行动作 放行
iptables A INPUT -p tcp -m state --dport 22 -j DROP
禁止一个数据包:
tcp协议
访问的端口是22
iptables -A INPUT -p tcp --dport 22 -j DROP
iptables -nLiptables -nL --line-numbersiptables -D INPUT 1
禁止源地址是10.0.0.7的主机访问22端口
iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22 -j DROP
禁止源地址是10.0.0.7的主机访问任何端口
iptables -A INPUT -p tcp -s 10.0.0.7 -j DROP
禁止源地址是10.0.0.8的主机访问80端口
iptables -A INPUT -p tcp -s 10.0.0.8 --dport 80 -j DROP
禁止除了10.0.0.7以外的地址访问80端口
iptables -A INPUT -p tcp ! -s 10.0.0.7 --dport 80 -j DROP
2条规则冲突,会以谁先谁为准
iptables -I INPUT -p tcp -s 10.0.0.7 --dport 22 -j ACCEPT
iptables -I INPUT -p tcp -s 10.0.0.7 --dport 22 -j DROP
禁止10.0.0.7访问22和80端口
iptables -I INPUT -p tcp -s 10.0.0.7 -m multiport --dport 22,80 -j DROP
禁止10.0.0.7访问22到100之间的所有端口
iptables -A INPUT -p tcp -s 10.0.0.7 --dport 22:100 -j DROP
禁止所有主机ping
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
放行10.0.0.7可以ping
iptables -I INPUT 2 -p icmp --icmp-type 8 -s 10.0.0.7 -j ACCEPT
只允许10.0.0.7可以ping
ACCEPT icmp -- 10.0.0.7 0.0.0.0/0 icmptype 8
DROP icmp -- 0.0.0.0/0 0.0.0.0/0 icmptype 8
等同于上一条,优化版,只要不是10.0.0.7就不允许ping
iptables -I INPUT -p icmp --icmp-type 8 ! -s 10.0.0.7 -j DROP
优先级:
匹配频次最高的条件放前面