iptables的使用

2015年07月01日 静中细思

如果没有安装iptables可以直接用yum安装

yum install -t iptables 检查iptables服务的状态,

service iptables status 如果出现“iptables: Firewall is not running”,说明没有启动或没有规则 启动iptables服务

service iptables start 第一次配置前消除默认的规则

复制代码 #这个一定要先做,不然清空后可能会悲剧 iptables -P INPUT ACCEPT

#清空默认所有规则 iptables -F

#清空自定义的所有规则 iptables -X

#计数器置0 iptables -Z 配置规则

#如果没有此规则,你将不能通过127.0.0.1访问本地服务,例如ping 127.0.0.1 iptables -A INPUT -i lo -j ACCEPT

#开启ssh端口22 iptables -A INPUT -p tcp –dport 22 -j ACCEPT

#开启FTP端口21 iptables -A INPUT -p tcp –dport 21 -j ACCEPT

#开启web服务端口80 iptables -A INPUT -p tcp –dport 80 -j ACCEPT

#tomcat iptables -A INPUT -p tcp –dport 8080 -j ACCEPT

#mysql iptables -A INPUT -p tcp –dport xxxx -j ACCEPT

#允许icmp包通过,也就是允许ping iptables -A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT

#允许所有对外请求的返回包 #本机对外请求相当于OUTPUT,对于返回数据包必须接收啊,这相当于INPUT了 iptables -A INPUT -m state –state ESTABLISHED -j ACCEPT

#如果要添加内网ip信任(接受其所有TCP请求) iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT

#每秒中最多允许5个新连接 iptables -A FORWARD -p tcp –syn -m limit –limit 1/s –limit-burst 5 -j ACCEPT

#每秒中最多允许5个新连接 iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT

#Ping洪水攻击 iptables -A FORWARD -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT

#封单个IP的命令是: iptables -I INPUT -s 222.34.135.106 -j DROP

#封IP段的命令是: iptables -I INPUT -s 211.1.0.0/16 -j DROP iptables -I INPUT -s 211.2.0.0/16 -j DROP iptables -I INPUT -s 211.3.0.0/16 -j DROP

#封整个段的命令是: iptables -I INPUT -s 211.0.0.0/8 -j DROP

#封几个段的命令是: iptables -I INPUT -s 61.37.80.0/24 -j DROP iptables -I INPUT -s 61.37.81.0/24 -j DROP

#过滤所有非以上规则的请求 iptables -P INPUT DROP 保存重启

service iptables save service iptables restart 删除规则用-D参数

删除之前添加的规则(iptables -A INPUT -p tcp -m tcp –dport 8080 -j ACCEPT)

iptables -D INPUT -p tcp -m tcp –dport 8080 -j ACCEPT

CentOS7默认的防火墙不是iptables,而是firewalle.

安装iptable iptable-service

复制代码 #先检查是否安装了iptables service iptables status #安装iptables yum install -y iptables #升级iptables yum update iptables #安装iptables-services yum install iptables-services 禁用/停止自带的firewalld服务

#停止firewalld服务 systemctl stop firewalld #禁用firewalld服务 systemctl mask firewalld 设置现有规则

#查看iptables现有规则 iptables -L -n #先允许所有,不然有可能会杯具 iptables -P INPUT ACCEPT #清空所有默认规则 iptables -F #清空所有自定义规则 iptables -X #所有计数器归0 iptables -Z #允许来自于lo接口的数据包(本地访问) iptables -A INPUT -i lo -j ACCEPT #开放22端口 iptables -A INPUT -p tcp –dport 22 -j ACCEPT #开放21端口(FTP) iptables -A INPUT -p tcp –dport 21 -j ACCEPT #开放80端口(HTTP) iptables -A INPUT -p tcp –dport 80 -j ACCEPT #开放443端口(HTTPS) iptables -A INPUT -p tcp –dport 443 -j ACCEPT #允许ping iptables -A INPUT -p icmp –icmp-type 8 -j ACCEPT #允许接受本机请求之后的返回数据 RELATED,是为FTP设置的 iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT #其他入站一律丢弃 iptables -P INPUT DROP #所有出站一律绿灯 iptables -P OUTPUT ACCEPT #所有转发一律丢弃 iptables -P FORWARD DROP 其他规则设定

#如果要添加内网ip信任(接受其所有TCP请求) iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT #过滤所有非以上规则的请求 iptables -P INPUT DROP #要封停一个IP,使用下面这条命令: iptables -I INPUT -s ... -j DROP #要解封一个IP,使用下面这条命令: iptables -D INPUT -s ... -j DROP 复制代码 保存规则设定

#保存上述规则 service iptables save 开启iptables服务

复制代码 #注册iptables服务 #相当于以前的chkconfig iptables on systemctl enable iptables.service #开启服务 systemctl start iptables.service #查看状态 systemctl status iptables.service 复制代码

解决vsftpd在iptables开启后,无法使用被动模式的问题

1.首先在/etc/sysconfig/iptables-config中修改或者添加以下内容

#添加以下内容,注意顺序不能调换 IPTABLES_MODULES=”ip_conntrack_ftp” IPTABLES_MODULES=”ip_nat_ftp” 2.重新设置iptables设置

iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT

以下为完整设置脚本

复制代码 #!/bin/sh iptables -P INPUT ACCEPT iptables -F iptables -X iptables -Z iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp –dport 22 -j ACCEPT iptables -A INPUT -p tcp –dport 21 -j ACCEPT iptables -A INPUT -p tcp –dport 80 -j ACCEPT iptables -A INPUT -p tcp –dport 443 -j ACCEPT iptables -A INPUT -p icmp –icmp-type 8 -j ACCEPT iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP service iptables save systemctl restart iptables.service

##centos7关闭防火墙 直接命令:service firewalld stop

  1. Disable Firewalld Service.

[root@rhel-centos7 ~]# systemctl mask firewalld

  1. Stop Firewalld Service.

[root@rhel-centos7 ~]# systemctl stop firewalld

  1. Install iptables service related packages.

[root@rhel-centos7 ~]# yum -y install iptables-services

  1. Make sure service starts at boot:

[root@rhel-centos7 ~]# systemctl enable iptables

If you do not want ip6tables, You can skip following command.

[root@rhel-centos7 ~]# systemctl enable ip6tables

  1. Now, Finally Let’s start the iptables services.

[root@rhel-centos7-tejas-barot-linux ~]# systemctl start iptables

If you do not want ip6tables, You can skip following command.

[root@rhel-centos7 ~]# systemctl start ip6tables Firewalld Service is now disabled and stop, You can use iptables.