在Ubuntu 16.04上轻松进行IPTables配置和示例

介绍

iptables是用于配置Linux内核的集成防火墙的强大工具。它预装在大多数Ubuntu发行版中,但是,如果您使用自定义的Ubuntu版本或在容器中运行,则很可能必须手动安装它。

sudo apt-get install iptables iptables-persistent

安装后,如果询问您是否保存当前规则,则此刻无关紧要,因为稍后将要删除或创建新规则。

提示

您可以使用netcat命令(在服务器不同的计算机上)测试打开或关闭了哪些端口。

nc -z -w5 -v SERVER_IP PORT
  • nc 是netcat命令。
  • -z 只是发送没有有效载荷的数据包。
  • -w5 等待最多5秒钟以得到响应。
  • -v 详细模式。
  • 替换SERVER_IP为您的服务器地址。
  • 替换PORT为要测试的端口是否打开的端口(例如22)。

在您的服务器上,您可以使用netstat命令查看当前正在侦听连接的端口。

sudo netstat -tulpn

注意:尽管netstat可以轻松找到要使用的端口,但是您应该了解服务器上当前已安装的应用程序以及正在侦听哪些端口,但不必允许在netstat输出中找到每个端口

句法

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUT添加规则的INPUT链条,链条是一组规则,我们用最本指南上的那些会INPUTOUTPUTPREROUTING
  • -p tcptcp,因为这条规则将适用于,你也可以使用其他协议,如协议udpicmpall
  • -m tcp使用tcp模块。iptables通过模块支持其他功能,其中一些功能已预先安装,iptables而其他功能(例如geoip模块)。
  • --dport 22以开头的命令--表示先前使用的模块的其他选项,在这种情况下,我们将告诉该tcp模块仅适用于port 22
  • -m geoip使用geoip模块。它将限制国家/地区的数据包(第5步中的更多信息)。
  • --src-cc PE告诉geoip模块将传入的数据包限制为来自秘鲁的数据包。有关更多国家/地区代码,请ISO 3166 country codes在互联网上搜索。
  • -j ACCEPT-j参数iptables指示如果数据包与先前参数中指定的约束匹配,该怎么办。在这种情况下,将ACCEPT这些数据包,其他选项REJECTDROP等等。您可以通过在iptables jump targets互联网上搜索找到更多选项。

1.基础

列出所有规则。

sudo iptables -L

列出用于创建当前使用的规则的所有命令,这些命令对于编辑或删除规则很有用。

sudo iptables -S

要删除特定规则,请从中选择一个规则sudo iptables -S并替换-A-D

# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT

列出INPUT链中所有编号的规则。

sudo iptables -L INPUT --line-numbers

删除编号规则。

sudo iptables -D INPUT 2

清除所有规则。

sudo iptables -F

警告:如果通过SSH连接,则可能会失去连接

仅清除OUTPUT链中的规则。

sudo iptables -F OUTPUT

2.创建初始规则

SSHeth0界面上允许

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 将规则应用于特定接口,以允许从任何接口删除此命令。

将传入数据包限制为特定IP(即10.0.3.1/32)。

sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
  • -s 10.0.3.1/32 指定允许连接的IP /子网。

设置默认链规则。

警告:如果在远程服务器上工作,请确保在应用正确的SSH规则之前,请执行此操作

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP 拒绝所有传入的数据包(即没有人能够连接到您正在运行的服务器,例如Apache,SQL等)。
  • -P FORWARD DROP 拒绝所有转发的数据包(即,当您将系统用作路由器时)。
  • -P OUTPUT ACCEPT允许所有传出数据包(即执行HTTP请求时)。

允许回送接口上的所有流量(推荐)。

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

3.使规则持久化

保存当前iptables规则。

sudo netfilter-persistent save
sudo netfilter-persistent reload

如果您在容器内运行,该netfilter-persistent命令很可能将不起作用,因此您需要重新配置iptables-persistent软件包。

sudo dpkg-reconfigure iptables-persistent

4.允许传出连接

允许DNS查询。

sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

使用state模块允许RELATEDESTABLISHED传出数据包。

sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

允许所需的端口;在这种情况下,HTTP端口。

sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

您可能想使用更多端口。

  • FTP:TCP 21端口
  • HTTPS:TCP在端口443
  • DHCP:UDP 67端口
  • NTP:UDP端口123

注意:如果要允许apt-get,可能需要允许FTPHTTPS

只允许返回RELATEDESTABLISHED建立连接的流量(建议这样做,因为有时需要双向通信)。

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
其他有用的规则

允许来自外部的ping请求。

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

eth0端口2200上的流量转发至10.0.3.21:22(如果要公开在容器内运行的SSH服务器,则很有用)。

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22

如果您使用SSH成功​​登录到服务器,将创建一个持久连接(即,即使您连接超过1小时也不会建立新连接)。如果失败,然后尝试再次登录,将创建一个新的连接。通过限制每小时的新连接,这将阻止连续的SSH登录尝试。

sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP

将端口443上的所有请求重定向到端口4430(如果要绑定到443不带端口的端口,则很有用root)。

sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
  • ens3 网络接口。
  • -m geoip 国家/地区阻止模块(请参阅步骤5)。

警告:请勿使用lo,操作系统将丢弃重定向到回送接口的所有数据包

5.允许或封锁整个国家

5.1安装 xtables-addons

您可以xtables-addons使用多种方法安装模块,请随意使用最适合您的安装方法。

  • 使用安装apt-get

    sudo apt-get install xtables-addons-common
    
  • 使用安装module-assistant

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • 从源安装。

    sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
    git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
    cd xtables-addons
    ./autogen.sh
    ./configure
    make
    sudo make install
    

建立一个“国家”数据库。

sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv

重新启动系统。

sudo reboot

xtables-addons已成功安装,第一次重新启动后,运行depmod否则国家封锁将无法正常工作(这个只需要在第一次)。

sudo depmod 

在创建脚本以每月/etc/cron.monthly/geoip-updater更新geoip数据库。

#!/usr/bin/env bash
# this script is intended to run with sudo privileges

echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip

echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl

echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater

使/etc/cron.monthly/geoip-updater可执行。

sudo chmod +x /etc/cron.monthly/geoip-updater

5.2示例规则

_注意:如果您iptables: No chain/target/match by that name在尝试应用geoip规则时收到错误消息,则可能是xtables-addons未正确安装。请尝试其他安装方法。

阻止来自中国,香港,俄罗斯和韩国的所有传入数据包。

sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP

允许80除以上国家/地区之外的所有其他端口进入的数据包。

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

仅允许来自秘鲁的ens3端口接口上的传入数据包22(可以自由选择要接受来自例如US美国的数据包的国家/地区代码)。

sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT

仅允许443来自秘鲁的端口上的传入数据包。

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT


Leave a Comment

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。