iptables防火墙常见用法和修改默认配置

iptables是大多数Linux的默认防火墙服务。最近折腾的时候发现服务器默认的配置有点不合理,花了点时间学习调整了一下。这里也做一下整理。

基本用法

使用以下命令可以看到现有的规则:

iptables -L

默认有三个分组(Chain,也可以叫规则链):

  • INPUT:入站规则(外部连入服务器本机)
  • OUTPUT:出战规则(服务器本机连接外部)
  • FORWARD:转发(流经本机的数据)

INPUT组的默认策略是ACCEPT,即外部进入服务器的连接默认都是放行(黑名单模式)。但是这样可能不太安全,改为进入连接默认为拒绝,然后手动放行部分允许的连接(白名单模式)比较好。

iptables 命令的常见用法是:

# 在尾部追加新规则
iptables -A 规则链名 [-i/o 网卡名] -p 协议名 [-s 源IP/源子网] [--sport 源端口] [-d 目标IP/目标子网] [--dport 目标端口] -j 动作
# 在指定位置插入一条新规则
iptables -I 规则链名 [链中的行号] [-i/o 网卡名] -p 协议名 [-s 源IP/源子网] [--sport 源端口] [-d 目标IP/目标子网] [--dport 目标端口] -j 动作
# 删除一条规则
iptables -D 规则链名 链中的行号
# 显示所有规则和行号
iptables -nL --line-number

方括号中的参数都表示可选,最后的“动作”有两个常用值:ACCEPT 表示允许(放行),DROP 表示丢弃(拒绝)。

以下是一些示例:

# 在INPUT链中第2条规则前加入,放行外部连接目标端口为3306的TCP协议连接 
iptables -I 2 INPUT -p tcp --dport 3306 -j ACCEPT
# 在INPUT链中追加一条记录,允许外部来源为192.168.3.10的连接访问本机端口10500到10509端口(端口用冒号表示一段范围)
iptables -A INPUT -s 192.168.3.10 --dport 10500:10509 -j ACCEPT
# 阻止外部来源端口号为 12345、12346 的访问(只是示例的规则,应该没有实用性)
iptables -A INPUT --sport 12345,12346 -j DROP

iptables规则的生效顺序是从上往下的,插入时请留意规则的顺序。

修改默认入站策略

了解了基本用法后就可以动手调整了。首先要添加几条放行规则:

# 添加端口(SSH端口和HTTP服务的两个端口)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许本地回环接口(即允许本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允许已建立和相关的连接继续访问(不加上curl等程序不能正常访问外网)
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 放开DNS服务 否则ping等很多命令用不了
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

到此正常的必要服务端口就添加好了。

不过此时外部ping服务器是不通的,还要继续添加两条

# 允许ping(icmp协议)
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT

上条两条命令还有等效的写法:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

最后修改INPUT组的默认规则为 DROP(不匹配规则的默认阻止)即可

iptables -P INPUT DROP

至于出站OUTPUT规则组默认的用ACCEPT规则即可,如有需要也可以自行调整。

保存规则

规则修改完后需要手动保存一下,否则iptables服务重启后修改的规则配置会丢失。

大多数配置了iptables服务的服务器已经设置好了规则保存路径,可以直接用以下命令保存:

service iptables save

如果iptables规则的保存和恢复是手动配置的,就需要用下列的命令导出和恢复了

# 导出保存规则到文件
iptables-save > 文件路径
# 从文件导入规则
iptables-restore < 文件路径

其他常见规则

这里也顺带整理了一下其他常用的规则,以供参考。

# 阻止非本地的访问(!表示"非"的意思,例如下述表示禁止外网访问 3456 端口)
iptables -A INPUT ! -s 127.0.0.1 -p tcp -m tcp --sport 3456 -j DROP
# 阻止外部ping服务器本机
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# 禁止服务器访问外网邮件协议默认端口
iptables -A OUTPUT -p tcp -m tcp --dport 25 -j DROP
iptables -A OUTPUT -p udp -m udp --dport 25 -j DROP

另外还看到一个总结得不错的文章,有兴趣可以看看:iptables用法

除特别注明外,本站内容皆为 咸鱼先锋 原创,可自由引用,但请注明来源和链接。
https://xyuxf.com/archives/2153
欢迎关注 咸鱼先锋 (微信号公众号:xyuxf),获取干货推送
THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录