zoukankan      html  css  js  c++  java
  • 设置防火墙

    SUSE Enterprise Server 设置防火墙

    ~> sudo SuSEfirewall2 start  (启动防火墙)

    ~> sudo iptables -L  (查看防火墙配置规则)

    1.首先查看端口状态,可以使用命令
    -># netstat -ano | grep 22 (若查看某个端口,后面可接端口号)

    2.检查服务状态使用chkconfig,如检查SSH,
    -># chkconfig sshd

    如为off,则需要打开系统服务的端口,可用chkconfig on命令,如打开SSH,
    -># chkconfig ssh on service xinetd restart

    3.防火墙开放端口:

    i. 进入 /etc/sysconfig/ 目录,用 vi 命令编辑 SuSEfirewall2 文件,
    -># vi SuSEfirewall2
    在文件中找到FW_SERVICES_EXT_TCP,在其后面加上服务名或者是服务对应的端口,如SSH,
    FW_SERVICES_EXT_TCP=”ssh” 或 FW_SERVICES_EXT_TCP=”22″或FW_SERVICES_EXT_IP="可以访问的IP"
    保存之后退出。

    ii. 重启防火墙,以使配置生效,
    ~> sudo SuSEfirewall2 stop
    SuSEfirewall2: batch committing...
    SuSEfirewall2: Firewall rules unloaded.
    ~> sudo SuSEfirewall2 start
    SuSEfirewall2: Setting up rules from /etc/sysconfig/SuSEfirewall2 ...
    SuSEfirewall2: batch committing...
    SuSEfirewall2: Firewall rules successfully set~>

    SuSE Linux防火墙配置
    1. SuSE Linux防火墙配置文件路径:/etc/sysconfig/SuSEfirewall2;
    2. 启动、关闭、重启防火墙:
       rcSuSEfirewall2 start
       rcSuSEfirewall2 stop
       rcSuSEfirewall2 restart
       
    帮助说明:
    Usage: /sbin/rcSuSEfirewall2 {start|stop|status|restart|reload|force-reload}

    3. SuSEfirewall2配置文件中FW_SERVICES_EXT_TCP与FW_SERVICES_ACCEPT_EXT的区别:
    FW_SERVICES_EXT_TCP 不能做更详细的配置,只有允许和不允许两种配置,不能过滤IP,只能过滤端口;
    FW_SERVICES_ACCEPT_EXT 可以做更详细的配置和限制,对IP和端口同时作限制;
    但是,如果对同一端口既然配置了FW_SERVICES_EXT_TCP,也配置了FW_SERVICES_ACCEPT_EXT,则系统优先使用
    FW_SERVICES_EXT_TCP配置项。

    4. 如果有一种场景,既要让指定的IP能访问22端口,又要让所有IP能访问80端口,则这样配置:
    FW_SERVICES_EXT_TCP = “80”   #多个端口用空格分开

    FW_SERVICES_ACCEPT_EXT="192.168.1.100,tcp,22"

    如果要对同一个IP开放多个端口,应将相同的IP写两个,中间用空格隔开

    FW_SERVICES_ACCEPT_EXT="192.168.1.100 192.168.1.100,tcp,22 8080 80"

    5. /etc/sysconfig/SuSEfirewall2配置文件中也有相应的详细说明。

    6. 文档说明地址:https://en.opensuse.org/SuSEfirewall2。
    文章标签: suselinux防火墙
     

    RedHat Linux下iptables防火墙设置

     

    一般情况下iptables已经包含在Linux发行版中.
    运行

    # iptables --version
    来查看系统是否安装iptables
    启动iptables:
    # service iptables start
    查看iptables规则集
    # iptables --list
    下面是没有定义规划时iptables的样子:
    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
    查看防火墙状态:
    # /etc/init.d/iptables status
    如果得到一系列的信息,说明防火墙处于开启状态。
     
    MySQL默认端口3306,Linux防火墙默认是阻止的。
    查看3306端口是否开放:
    # lsof -i:3306
    如果有显示说明已经开放了.如果没有显示说明没有开放 【Linux公社 http://www.linuxidc.com 】
     
    要访问3306可以用两种方式,一个是关闭防火墙,另一个就是让防火墙开放3306端口。
    一、开放3306端口:
    方法一:
    # iptables -I INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT
    # iptables  -I OUTPUT -o eth0 -p tcp --sport 3306 -j ACCEPT
    对应阻止3306端口的命令为:
    # iptables -I INPUT -i eth0 -p tcp --dport 3306 -j DROP
    # iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j DROP
    然后保存
    # /etc/rc.d/init.d/iptables save
    方法二:
    1、修改/etc/sysconfig/iptables文件,增加如下一行:
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
    然后重启防火墙:
    # service iptables restart
    二、关闭防火墙:
    两种方式:
    1)重启后生效:
    # chkconfig iptables off        ( 对应的开启防火墙命令为: # chkconfig iptables on )
    2)即时生效,但重启后防火墙会再次启动:
    # service iptables stop        ( 对应的开启防火墙命令为: # service iptables start )

    CentOS 7 引入了 firewall-cmd 指令来管理 firewalld 防火墙。虽然其底层还是 iptables,但是主要的 table 都重建了。如果不习惯,可以将其退回到传统的 iptables 方式来管理。

    首先需要安装 iptables.service 服务,使 systemctl 可以控制 iptables 服务的自动启动。

    $ sudo yum install iptables-services

    注:如果已经配置了 firewalld 的防火墙规则,需要先备份,然后再设置 iptables

    备份当前的 firewalld 配置,

    $ sudo iptables -S | tee ~/firewalld_iptables_rules

    检查系统是否使用 system-config-firewall 来管理 iptables,

    $ sudo head -2 /etc/sysconfig/iptables

    如果输出类似于,

    # Firewall configuration written by system-config-firewall
    # Manual customization of this file is not recommended.

    则说明是由 system-config-firewall 来编辑的,此时最好使用 system-config-firewall-tui(文字图形界面)或者system-config-firewall(图形界面)来编辑。直接编辑 iptables/ip6tables 文件的话,修改结果可能会被 system-config-firewall 覆盖。

    而如果是类似于,

    # Generated by iptables-save v1.4.21 on Tue Dec  2 18:06:45 2014

    的输出,则可以直接编辑 /etc/sysconfig/iptables 和 /etc/sysconfig/ip6tables 文件(如下所述)。

    因为不使用 firewalld 了,所以将其从系统服务里移除,

    $ sudo systemctl stop firewalld
    $ sudo systemctl disable firewalld

    因为 iptables 服务在运行的时候最好不要启用 firewalld 服务,所以我们将其屏蔽起来,

    $ sudo systemctl mask firewalld

    然后启用 iptables 和 ip6tables 服务,

    $ sudo systemctl enable iptables$ sudo systemctl enable ip6tables

    1. Iptables 配置文件

    RHEL / CentOS / Fedora Linux 发行版中默认的配置文件是:

    • /etc/sysconfig/iptables – 系统执行脚本通过读取该文件来激活防火墙功能。
    • /etc/sysconfig/ip6tables -针对 IPv6

    ip6tables 与 iptables(IPv4)有很大不同,但是语法类似。下面主要以 iptables 为例介绍。

    2. 基本操作:显示默认规则

    在命令行窗口输入下面的指令:

    $ sudo iptables --line-numbers -n -L

    其中 –line-numbers 参数表示给每行规则前面加个编号; -n 表示以数字形式显示 IP 地址和端口等内容;-L 表示列出所有(chain)中的规则。可以通过 iptables --help 来查看所有可用参数的含义。

    可以得到类似下面的输出(其中 # 号开头的行为注释说明):

    # 下面是入站链(Chain INPUT)
    Chain INPUT (policy ACCEPT)
    num  target     prot opt source               destination
    # 下面的 RH-Firewall-1-INPUT 是该入站链 INPUT 的一条规则
    # 即,将所有入站的连接交由后面的 RH-Firewall-1-INPUT 链 来处理
    1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0
    # 转发链
    Chain FORWARD (policy ACCEPT)
    num  target     prot opt source               destination
    1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0
    # 出站链
    Chain OUTPUT (policy ACCEPT)
    num  target     prot opt source               destination
    # 下面 1~8 是入站链 RH-Firewall-1-INPUT 中的所有规则(rule)
    Chain RH-Firewall-1-INPUT (2 references)
    num  target     prot opt source               destination
    1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
    2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
    3    ACCEPT     udp  --  0.0.0.0/0            1.2.3.4             udp dpt:5353
    4    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53
    5    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
    7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:53
    8    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

    3. 基本操作:启用防火墙

    这里的指令都是从 Linux 控制终端(命令行)直接输入的。

    输入下面的两条指令来启用防火墙:

    $ sudo chkconfig iptables on
    $ sudo service iptables start

    CentOS 7 上则应该使用 systemctl

    $ sudo systemctl enable iptables 
    $ sudo systemctl start iptables

    其中上一条是将 iptables 加入到系统服务,随系统启动而启动;下一条是直接启动 iptables 服务。

    重起防火墙:

    $ sudo service iptables restart
    # # CentOS 7
    $ sudo systemctl restart iptables

    停止防火墙:

    $ sudo service iptables stop
    # # CentOS 7
    $ sudo systemctl stop iptable

    4. 基本操作:其它 iptables 操作指令

    其它常用的通过 Linux 命令行(控制终端)对 iptables 进行操作的指令,请参考 Linux iptables 添加规则的指令

    5. 理解防火墙

    上面列出的防火墙(iptables)中有 4 个链:

    1. INPUT – 这是默认用来处理进入系统的数据包的规则集合。可以用来开启或关闭传入端口(如 80、443、25 和 110 等)和 IP 地址/子网(如 1.2.3.4/29)。
    2. OUTPUT – 这是默认用来处理由系统产生(发出)的数据包的规则集合。可以用来开启或关闭传出端口和 IP 地址/子网。
    3. FORWARD – 这也是一个默认的链,当数据包需要通过别的接口发送的时候就使用它。例如,网卡 eth0 连接到 ADSL/Cable 猫,eth1 连接到本地 LAN 的时候,可以使用 FORWARD 链沟通 LAN 与互联网,实现发送与接收。
    4. RH-Firewall-1-INPUT – 这是一个用户自定义的链。它被 INPUT 、 OUTPUT 和 FORWARD 链调用。

    包匹配规则

    1. 每个包都从链的第一条规则开始匹配。
    2. 当它匹配到一条规则的时候才会被处理。
    3. 如果匹配到一条规则,会被跳转到特定的目标(如 REJECT, ACCEPT, DROP)。

    目标含义

    1. ACCEPT 表示接受该数据包。
    2. REJECT 表示丢弃该数据包,并且向远程主机发送一条错误信息。
    3. DROP 表示丢弃该数据包,并且不向远程主机或发送者提供错误信息。

    6. 配置 /etc/sysconfig/iptables 文件

    虽然可以通过 iptables 指令来编辑防火墙规则,可是对于大量的规则来说一条一条的输入总是很麻烦,实际上可以直接按照正确格式编辑 iptables 的配置文件,然后重新加载 iptables 即可使之生效。

    要编辑 /etc/sysconfig/iptables,输入:

    $ sudo vi /etc/sysconfig/iptables

    可以看到文件中存储的前述默认规则显示如下:

    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    :RH-Firewall-1-INPUT - [0:0]
    -A INPUT -j RH-Firewall-1-INPUT
    -A FORWARD -j RH-Firewall-1-INPUT
    -A RH-Firewall-1-INPUT -i lo -j ACCEPT
    -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 1.2.3.4 -j ACCEPT
    -A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
    -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
    COMMIT

    其中 -j 参数表示 jump 跳转到。

    可以看到其中的规则形式与我们通过命令行来输入的规则是一样的,因为启用 iptables 的时候就是将此文件中的指令一行一行的自动加载的,就像批处理一样。

    DROP 所有通信

    找到规则:

    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]

    上述规则表示默认接受(ACCEPT)所有三个链(INPUT、FORWARD、OUTPUT)上的通信。可以将前面两个改为默认丢弃(DROP)(因为本机发出的通信一般是默认接受的,不需要改动):

    :INPUT DROP [0:0]
    :FORWARD DROP [0:0]

    记录(LOG)并丢弃(DROP)发送欺骗信息的源地址

    在最后一行 COMMIT 之前添加如下规则:

    -A INPUT -i eth0 -s 10.0.0.0/8 -j LOG --log-prefix "IP DROP SPOOF "
    -A INPUT -i eth0 -s 172.16.0.0/12 -j LOG --log-prefix "IP DROP SPOOF "
    -A INPUT -i eth0 -s 192.168.0.0/16 -j LOG --log-prefix "IP DROP SPOOF "
    -A INPUT -i eth0 -s 224.0.0.0/4 -j LOG --log-prefix "IP DROP MULTICAST "
    -A INPUT -i eth0 -s 240.0.0.0/5 -j LOG --log-prefix "IP DROP SPOOF "
    -A INPUT -i eth0 -d 127.0.0.0/8 -j LOG --log-prefix "IP DROP LOOPBACK "
    -A INPUT -i eth0 -s 169.254.0.0/16  -j LOG --log-prefix "IP DROP MULTICAST "
    -A INPUT -i eth0 -s 0.0.0.0/8  -j LOG --log-prefix "IP DROP "
    -A INPUT -i eth0 -s  240.0.0.0/4  -j LOG --log-prefix "IP DROP "
    -A INPUT -i eth0 -s  255.255.255.255/32  -j LOG --log-prefix "IP DROP  "
    -A INPUT -i eth0 -s 168.254.0.0/16  -j LOG --log-prefix "IP DROP "
    -A INPUT -i eth0 -s 248.0.0.0/5  -j LOG --log-prefix "IP DROP "

    记录并丢弃所有通信包

    找到下面的行:

    -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
    COMMIT

    它表示默认将所有不符合之前规则的通信数据包 REJECT 掉。这是一种比较礼貌的做法。通常那些不符合前述规则的包也不是什么好东西,所以我们可以直接丢弃而不回复出错信息。将其编辑为:

    -A RH-Firewall-1-INPUT -j LOG
    -A RH-Firewall-1-INPUT -j DROP
    COMMIT

    上面第一行先记录,第二就直接将其丢弃。这实际上是针对所有通信的一种默认操作。

    开启端口

    要开启 80 端口(HTTP 服务器端口),在 COMMIT 一行之前(准确说应该是在默认操作之前,下同)添加如下规则:

    -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT

    -p tcp 表示仅针对 tcp 协议的通信。–dport 指定端口号。

    要开启 53 端口(DNS 服务器端口),在 COMMIT 一行之前添加如下规则:

    -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
    -A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT

    同时针对 tcp 和 udp 协议开启 53 端口。

    要开启 443 端口(HTTPS 加密连接服务器端口),在 COMMIT 一行之前添加如下规则:

    -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT

    要开启 25 端口(SMTP 邮件服务器端口),在 COMMIT 一行之前添加如下规则:

    -A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT

    另外还可以更加具体的进行规定,比如:

    仅允许来自 192.168.1.0/24 的 SSH 连接

    -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT

    为 192.168.1.0/24 开启打印服务通信

    -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT
    -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT

    允许合法的 NTP 客户端访问服务器

    -A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

    开启 FTP 端口 21 (ftp)

    -A RH-Firewall-1-INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT

    保存并关闭该文件(Ctrl+C, :wq)。编辑 /etc/sysconfig/iptables-config,输入:

    $ sudo vi /etc/sysconfig/iptables-config

    确保 ftp 模块已经加载:

    IPTABLES_MODULES="ip_conntrack_ftp"

    要重新启动防火墙,输入以下指令:

    $ sudo service iptables restart
    $ # # CentOS 7 # sudo systemctl restart iptables
    $ sudo iptables -vnL --line-numbers

    7. 编辑 /etc/sysctl.conf 以抵御 DoS 和 Syn 攻击

    编辑文件 /etc/sysctl.conf 以帮助抵御一些类型攻击是挺有效的,添加或者更改为如下参数设置:

     
    net.ipv4.conf.all.log_martians = 1
    net.ipv4.conf.default.accept_source_route = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv4.conf.default.secure_redirects = 0
    net.ipv4.icmp_echo_ignore_broadcasts = 1
    #net.ipv4.icmp_ignore_bogus_error_messages = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.conf.all.rp_filter = 1
    net.ipv4.conf.default.rp_filter = 1

    8. 变通的配置方式

    下面是另一种变通的方式来配置防火墙,这样就不需要编辑 /etc/sysconfig/iptables 等文件了,而是创建一个类似于下面代码的脚本:

    #!/bin/bash
    # 一个防火墙自动配置脚本样例
    IPT="/sbin/iptables"
    SPAMLIST="blockedip"
    SPAMDROPMSG="BLOCKED IP DROP"
    SYSCTL="/sbin/sysctl"
    BLOCKEDIPS="/root/scripts/blocked.ips.txt"
    
    # 防御一些攻击
    echo "Setting sysctl IPv4 settings..."
    $SYSCTL net.ipv4.ip_forward=0
  • 相关阅读:
    web.config配置数据库连接 【转】
    WEB API 返回类型设置为JSON 【转】
    ASP.NET WebAPI 路由规则与POST数据 【转】
    ASP.NET Web API路由规则(二) 【转】
    七天学会ASP.NET MVC(七)——创建单页应用 【转】
    jumpserver-v0.5.0 应用图解
    jumpserverv0.5.0 基于 CentOS7安装部署
    tar: Removing leading `/' from member names
    redis cli命令
    zabbix监控redis的key值
  • 原文地址:https://www.cnblogs.com/klb561/p/8964333.html
Copyright © 2011-2022 走看看