iptables 配置

一、检查iptables服务状态

$ service iptables status

iptables: Firewall is not running.

说明iptables服务是有安装的,但是没有启动服务

如果没有安装的话可以直接yum安装

$ yum install -y iptables

#启动iptables

$ service iptables start

iptables: No config file.                                  [WARNING]

解决:

扫描二维码关注公众号,回复: 214857 查看本文章

$ iptables -P OUTPUT ACCEPT

$ service iptables save

#当前iptables的配置情况

$ iptables -L -n

二、清除默认的防火墙规则

#首先在清除前要将policy INPUT改成ACCEPT,表示接受一切请求

$ iptables -P INPUT ACCEPT

#清空默认所有规则

$ iptables -F

#清空自定义的所有规则

$ iptables -X

#清空计数

$ iptables -Z

三、配置规则

#允许来自于lo接口的数据包

#如果没有此规则,你将不能通过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

$ 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表示接受这样的请求

#FTP端口21

$ iptables -A INPUT -p tcp --dport 21 -j ACCEPT

#web服务端口80

$ iptables -A INPUT -p tcp --dport 80 -j ACCEP

#tomcat

$ iptables -A INPUT -p tcp --dport xxxx -j ACCEP

#mysql

$ iptables -A INPUT -p tcp --dport xxxx -j ACCEP

#允许icmp包通过,也就是允许ping

$ iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

#已经建立的连接得让它进来

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

#添加内网ip信任(接受其所有TCP请求)

$ iptables -A INPUT -p tcp -s 45.96.174.68 -j ACCEPT

#过滤所有非以上规则的请求

$ iptables -P INPUT DROP

四、保存

首先 iptables -L -n 看一下配置是否正确,没问题后,先不要急着保存,因为没保存只是当前有效,重启后就不生效,这样万一有什么问题,可以后台强制重启服务器恢复设置

#保存

$ service iptables save

#添加到自启动chkconfig

$ chkconfig iptables on

配置白名单

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优化

当服务器收到一条请求时,它会把iptables从上往下,一条条匹配定制的规则,那么假如机器收到一个正常的web请求,要走80端口,它需要先去检验前面5条规则,发现都不符合,直到第六条满足条件,那么这样的话防火墙的工作效率就低了很多

优化的思路:请求最频繁的放在最上面,请求频率较小的放在最后面

通过修改以下配置文件调整顺序

$ vi /etc/sysconfig/iptables

iptables格式

通用匹配

    -s 指定源地址

    -d 指定目标地址

    -p 指定协议

    -i 指定数据报文流入接口

    -o 指定数据报文流出接口

扩展匹配

  指定-m选项,表示用什么模块来匹配,如:

    -m state --state

            NEW,ESTABLISHED,RELATED  表示用state模块来匹配当前连接状态为这三种状态的连接

    -m iprange

        --src-range 用iprange模块匹配来源的ip地址范围

        --dst-range 用iprange模块匹配目的的ip地址范围

    -m multiport

        --source-ports  用multiport模块来匹配来源的端口范围

        --destination-ports 用multiport模块来匹配目的的端口范围

例:

-A INPUT -p tcp -m iprange --src-range 121.21.30.36-121.21.30.100 -m multiport --destination-ports 3326,3327,3328 -m state --state NEW -j ACCEPT

这表示来自121.21.30.36-121.21.30.100这个地址范围的,请求端口为3326,3327,3328并且是新建的连接,都给予放行。

处理动作

    ACCEPT:允许数据包通过

    DROP:直接丢弃数据包,不给任何回应信息,过了超时时间才会有反应

    REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息

    SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题

    MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上

    DNAT:目标地址转换

    REDIRECT:在本机做端口映射

    LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配

猜你喜欢

转载自tzhennan.iteye.com/blog/2419263