Linux iptables命令讲解 – Linux之iptables超详细教程

iptables工作流程

iptables是采用数据包过滤机制工作的,所以它会对请求的数据包的包头进行分析,并根据我们预先设定的规则进行匹配来决定是否可以进入主机。

  • 防火墙是一层一层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的;
  • 如果匹配上规则,即明确表明阻止还是通过,此时数据包就不再向下匹配新规则了;
  • 如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,则按照默认策略进行处理;
  • 防火墙的默认规则是对应的链的所有的规则执行完成后才会执行的;

Linux iptables命令讲解 - Linux之iptables超详细教程

iptables四表五链

规则链名(也被称为五个钩子函数(hook functions)):

  • INPUT链 :处理输入数据包。
  • OUTPUT链 :处理输出数据包。
  • FORWARD链 :处理转发数据包。
  • PREROUTING链 :用于目标地址转换(DNAT)。
  • POSTOUTING链 :用于源地址转换(SNAT)。

Linux iptables命令讲解 - Linux之iptables超详细教程

主要记住上图所示的两张表即可:filter表和nat表

查看iptables规则

iptables -L # 查看iptables规则
iptables -L -vn # 查看iptables规则(详细信息)

清空iptables规则

iptables -F # 清除所有规则,不会处理默认的规则
iptables -X # 删除用户自定义的链
iptables -Z # 链的计数器清零(数据包计数器与数据包字节计数器)

添加iptables规则

iptables -t # 指定表(default: `filter')
iptables -A # 把规则添加到指定的链上,默认添加到最后一行
iptables -I # 插入规则,默认插入到第一行(封IP)
iptables -D # 删除链上的规则

删除某条iptables规则

iptables -nL --line-numbers # 查看规则号码
iptables -D INPUT 1 # 删除指定链上的指定序号

配置允许ssh端口连接

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

22为你的ssh端口,-s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求

允许本地回环地址可以正常使用

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许

设置默认规则

iptables -P INPUT DROP # 配置默认的不让进
iptables -P FORWARD DROP # 默认的不允许转发
iptables -P OUTPUT ACCEPT # 默认的可以出去

配置白名单

iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT # 允许机房内网机器可以访问 
iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT # 允许机房内网机器可以访问 
iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允许183.121.3.7访问本机的3380端口

 开启相应的服务端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启80端口,因为web对外都是这个端口
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许被ping
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 已经建立的连接得让它进来

禁止某个IP访问

iptables -I INPUT -p tcp -s 192.168.1.253 -i ens33 -j DROP
iptables -A INPUT -p tcp ! -s 192.168.1.1 -i ens33 -j DROP
iptables -A INPUT -p tcp ! -s 192.168.1.0/24 -i ens33 -j DROP

匹配端口范围

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 $ iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT  #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT  #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口
iptables -A INPUT -j reject #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问

相关文章