我正在使用 ubuntu 10.10。用iptables!我想在文件 /var/log/firewall 中而不是在任何其他日志文件中记录我的防火墙丢弃。
所以我在我的文件中添加了以下行:/etc/rsyslog.d/50-default.conf:
#iptables Log
kern.warning /var/log/firewall.log
Run Code Online (Sandbox Code Playgroud)
这样我的来自 iptables 的 drop 和日志就会登录到正确的文件中!
现在我不知道要添加什么来不记录其他文件中的滴..此时它会在 /var/log/messages /var/log/kern.log 和 /var/log/syslog 中写入每个滴
嘻嘻 :)
我发现了这个:将本地应用程序添加到从 /var/log/messages 中排除的 syslog但它不起作用..也许是因为它在 Ubuntu 10.10 中的 Rsyslogd?
谢谢!
我终于设法安装了我的 VM 主机,现在我正在使用 iptables 来创建、测试和学习。
我将以下规则放在规则的开头还是结尾有关系吗?
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
Run Code Online (Sandbox Code Playgroud)
我已经测试过,没有区别,但我想确认一下。
到目前为止我选择的答案: 尽早应用您的政策是个好主意。把它们放在开头。内部流量的 DROP 规则可能会导致问题。
具有以下规则将被视为防火墙故障?
$IPT -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
如果没有这个规则,我需要为我的 ssh 连接添加一个 OUTPUT 规则,例如:
$IPT -A OUTPUT -p tcp --sport 2013 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
答:
经过更多测试并与#iptables@freenode 上的人交谈后,我得出的结论是,使用-m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTINPUT 和 OUPUT 是一个很好的方法,可以帮助您处理很多事情,例如 FTP,这是一个很好的方法,因为除非您打开该给定端口并被接受,否则不会有恶意连接。
这是一个不使用上述内容的正常示例:
$IPT -A INPUT -p tcp --dport 20:21 -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 20:21 -j ACCEPT …Run Code Online (Sandbox Code Playgroud)使用 tun 设备的 openvpn 隧道,哪些 iptables 规则允许封装的流量通过,哪些规则控制封装后的数据包?基本上,我想知道操作顺序如何与 iptables 和 openvpn 一起工作,以及这与链有什么关系。
在许多具有不同内核版本的服务器上具有相同的效果。
Iptables DNAT 规则有多种:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 12345 -j DNAT --to-destination 10.20.30.40:5678
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 23456 -j DNAT --to-destination 10.11.12.13:5789
....
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 34567 -j LOG --log-prefix 'natudp: '
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 34567 -j DNAT --to-destination 10.55.66.77:34567
Run Code Online (Sandbox Code Playgroud)
问题:UDP 规则不适用于来自 eth0 的传入请求。
它们的数据包和字节计数器的值为零。
简化(删除 dport)没有效果。
结果,请求被传递到过滤器/输入链而不是转发。
来自虚拟接口(tap、veth)的数据包不存在这样的问题 - 它们被预路由规则捕获。
TCP 则没有这样的问题。
UDP …
我对 iptables 相当陌生,并且正在尝试弄清楚我是否正确配置了我的规则集。关于我的问题的-P INPUT ACCEPT部分,我试图确定这在我想要应用的规则的上下文中是否有效。请参阅下文了解更多详情。
我已将iptables-restore与包含以下规则的文件一起使用。本质上,我试图允许环回流量、已建立/相关的连接、SSH 和 HTTP。所有其他流量都应被拒绝。
*filter
:fail2ban-ssh - [0:0]
# Input chain rules
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j …Run Code Online (Sandbox Code Playgroud) cat /etc/bind/named.conf.options
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk.
Run Code Online (Sandbox Code Playgroud)
我没有找到任何有关名称服务器和我之间的防火墙应用的确切防火墙规则的信息。
我有带 Docker 的 Ubuntu 服务器来为 MySQL 和 SSH/SFTP 提供服务,我需要对除3306和22之外的所有端口进行防火墙设置,这是非常标准和微不足道的要求,对吧?
现在,我设法找到了一种解决方案,但在应用它之后,它对我来说并不完全有效,要么:
iptables: falseDocker 的daemon.json配置文件)我尝试了许多其他搜索结果,但它们大多非常复杂,以至于我不明白他们在做什么,或者他们编写了大量脚本,这让我成为一个 iptables 外行,从它那里获取一些东西是一项不可能完成的任务。
提议的解决方案看起来相当简单且易于理解,但整个 Docker 网络的复杂性使得调试变得更加困难。
有人可以分享他们针对 Docker 主机的工作 iptables 规则或至少指导我正确的方向吗?
我使用 docker-compose 来启动服务,这是我的 yaml:
version: '3.7'
services:
mysql:
container_name: 'mysql'
image: mysql:8.0.13
command: --default-authentication-plugin=mysql_native_password
user: 1000:1000
ports:
- "3306:3306"
volumes:
- ./data:/var/lib/mysql
- ./config/custom.cnf:/etc/mysql/conf.d/custom.cnf
networks:
- database
restart: always
networks:
database:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
编辑: 我发现允许 Docker 管理 iptables 规则是推荐的并且要求不高,至少从长远来看是可以的,即使我没有以我喜欢的方式打开所需的端口,它仍然可以有效的。此时我想要的是找出是否可以使用 iptables 来阻止 Docker 打开的端口以及如何(通过 mangle 预路由?)。有什么建议?万分感谢!
我最近使用本教程将全新安装的 CentOS 7 升级到 CentOS 8:
https://www.tecmint.com/upgrade-centos-7-to-centos-8/
我没有安装额外的软件,只有基本安装。升级后,我尝试做的第一件事就是只打开 SSH 和 HTTP 的大门,所以我启用并启动了 firewalld:
systemctl enable firewalld
systemctl start firewalld
systemctl status firewalld
? firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-12-24 11:05:50 -02; 10min ago
Docs: man:firewalld(1)
Main PID: 7620 (firewalld)
Tasks: 2 (limit: 17886)
Memory: 22.1M
CGroup: /system.slice/firewalld.service
??7620 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
dez 24 11:05:49 renie.cc systemd[1]: Stopped firewalld - dynamic firewall daemon.
dez 24 …Run Code Online (Sandbox Code Playgroud) 我的 Ubuntu 遇到问题,因为我无法使用 wget 或使用当前设置访问任何网站。
我有两个网卡,enp2s0 和 enp2s1。
enp2s0 连接到互联网,但连接到 NAT 路由器(IP 地址:192.168.1.2)
而对于 enp2s1,它连接到另一个没有互联网的路由器,因为它仅用于内部网络(IP 地址:10.0.0.5)
如果唯一连接的网卡是具有互联网的网卡 (enp2s0),则计算机可以访问任何网站。但是,一旦连接第二个网卡(enp2s0 和 enp2s1),计算机就不会加载任何网页、wget,甚至不会加载 apt-get update 或 apt-get install。
这与 iptables 或路由有关吗?帮助我,因为我是新手。
以下是该机器的一些当前详细信息:
$ ip route show
default via 192.168.1.1 dev enp2s0 proto dhcp metric 20100
default via 10.0.0.1 dev enp2s1 proto dhcp metric 20101
169.254.0.0/16 dev enp2s0 scope link metric 1000
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.2 metric 100
10.0.0.0/24 dev enp2s1 proto kernel scope link src 10.0.0.5 metric 101 …Run Code Online (Sandbox Code Playgroud) 我只想在远程 Ubuntu 服务器上的 csf 防火墙后面本地访问 docker 容器。我将DOCKER设置选项更改为/etc/csf/csf.conf允许1docker 更改 iptable 规则。
如果我使用 启动容器-p 8000:8000,则该端口8000将向全世界公开(我可以mydomain.com:8000按预期使用 访问网站,但不是我想要的)。如果我用 启动容器,则-p 127.0.0.1:8000:8000无法访问它mydomain.com:8000(这很好),但在这两种情况下,调用localhost:8000都会导致ERR_EMPTY_RESPONSEChrome 或curl: (52) Empty reply from server终端中出现错误。
尝试使用不同的容器和不同的端口。禁用csf后,它可以正常工作,不会出现空回复错误,因此它必须与csf相关。
如何配置csf仅在本地通过特定端口公开和访问docker容器?
旁注:我正在使用ssh admin@mydomain.com -L 8000:localhost:8000.